এটি কি একটি উপসর্গ কোড?


33

তথ্য তত্ত্বে, একটি "উপসর্গ কোড" এমন একটি অভিধান যা কোনও কীগুলি অন্যটির উপসর্গ নয়। অন্য কথায়, এর অর্থ এই যে কোনওটি স্ট্রিং অন্যটির সাথে শুরু হয় না।

উদাহরণস্বরূপ, {"9", "55"}একটি উপসর্গ কোড, তবে {"5", "9", "55"}তা নয়।

এর সবচেয়ে বড় সুবিধাটি হ'ল এনকোডযুক্ত পাঠ্যটি তাদের মধ্যে কোনও বিভাজক না করেই লেখা যেতে পারে এবং এটি এখনও অনন্যরূপে অনির্বচনীয়। এটি হ্যাফম্যান কোডিংয়ের মতো সংকোচিত আলগোরিদিমগুলিতে প্রদর্শিত হয় যা সর্বদা অনুকূল উপসর্গ কোড উত্পন্ন করে।

আপনার কাজটি সহজ: স্ট্রিংগুলির একটি তালিকা দেওয়া, এটি একটি বৈধ উপসর্গ কোড কিনা তা নির্ধারণ করুন।

আপনার ইনপুট:

  • যে কোনও যুক্তিসঙ্গত বিন্যাসে স্ট্রিংয়ের তালিকা হবে

  • কেবল প্রিন্টযোগ্য এএসসিআইআই স্ট্রিং থাকবে।

  • কোনও খালি স্ট্রিং থাকবে না।

আপনার আউটপুটটি সত্যবাদী / মিথ্যা মান হবে: সত্য যদি এটি একটি বৈধ উপসর্গ কোড হয়, এবং যদি তা না হয় তবে মিথ্যা।

এখানে কিছু সত্য পরীক্ষার কেস রয়েছে:

["Hello", "World"]                      
["Code", "Golf", "Is", "Cool"]
["1", "2", "3", "4", "5"]
["This", "test", "case", "is", "true"]          

["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011", 
 "0110", "11001", "00110", "10011", "11000", "00111", "10010"]

এখানে কয়েকটি ভুয়া পরীক্ষার মামলা রয়েছে:

["4", "42"]                             
["1", "2", "3", "34"]                   
["This", "test", "case", "is", "false", "t"]
["He", "said", "Hello"]
["0", "00", "00001"]
["Duplicate", "Duplicate", "Keys", "Keys"]

এটি কোড-গল্ফ, সুতরাং স্ট্যান্ডার্ড লুফোলগুলি প্রয়োগ হয় এবং বাইট জেতে সংক্ষিপ্ত উত্তর।


আপনি কি একটি ধারাবাহিক সত্যবাদী মান চান বা এটি হতে পারে উদাহরণস্বরূপ "কিছু ইতিবাচক পূর্ণসংখ্যা" (যা বিভিন্ন ইনপুটগুলির মধ্যে পরিবর্তিত হতে পারে)।
মার্টিন ইন্ডার


@ ডিগ্রিগ্রিনইগস্যান্ডহ্যামডিজে আমি মনে করি না যে উত্তরটি আউটপুটগুলির সামঞ্জস্যতা মোকাবেলা করার জন্য, তাই প্রশ্ন। ;)
মার্টিন ইন্ডার

মাত্র কৌতূহলের বাইরে: চ্যালেঞ্জটি বলে: "এর সবচেয়ে বড় সুবিধা হ'ল এনকোডযুক্ত পাঠ্যটি তাদের মধ্যে কোনও বিভাজক না করেই লেখা যেতে পারে এবং এটি এখনও অনন্যরূপে অবর্ণনীয় be" কীভাবে কিছু 001অনন্যরূপে অবর্ণনীয় হতে পারে? এটি হয় 00, 1বা হতে পারে 0, 11
জোবা 13

2
@ জোবা এটি আপনার কীগুলি নির্ভর করে। যদি আপনার 0, 00, 1, 11সমস্ত কী হিসাবে থাকে তবে এটি উপস-কোড নয় কারণ 0 টি 0 এর একটি উপসর্গ এবং 1 টি 11-এর একটি উপসর্গ A একটি উপসর্গ কোডটি যেখানে কোনও কী থেকে অন্য কী দিয়ে শুরু হয় না। সুতরাং উদাহরণস্বরূপ, যদি আপনার কীগুলি হয় 0, 10, 11তবে এটি একটি উপসর্গ কোড এবং অনন্যরূপে অনির্বচনীয়। 001কোনও বৈধ বার্তা নয়, তবে 0011বা 0010অনন্যরূপে অনির্বচনীয়।
ডিজেএমসিএমহেম

উত্তর:


11

পাইথ, 8 বাইট

.AxM.PQ2

পরীক্ষা স্যুট

ইনপুটটির সমস্ত 2 এলিমেন্ট ক্রুটিভেশন নিন, প্রতিটি স্ট্রিংয়ের সূচকে অন্যটিতে স্ট্রিংয়ের মানচিত্র করুন (0 একটি উপসর্গের জন্য) এবং ফলাফলগুলি সত্য (শূন্য নয়) কিনা তা ফেরত দিন।


12

হাস্কেল, 37 বাইট

f l=[x|x<-l,y<-l,zip x x==zip x y]==l

প্রতিটি উপাদান xএর lপ্রতিটি উপাদান যে এটি একটি উপসর্গ, যা একটি উপসর্গ মুক্ত তালিকার জন্য ঠিক একবার হয়, মূল তালিকা দিয়ে দিলো জন্য একবার পুনরাবৃত্তি করা হয়। উপসর্গ সম্পত্তিটি উভয় তালিকার সাথে জিপ করে চেক করা হয় x, যা উপাদানগুলির দৈর্ঘ্যের বাইরে কেটে দেয় x


এটি একটি মার্জিত সমাধান (+1)
মাইকেল ক্লেইন

9

জাভা, 128 127 126 125 124 121 বাইট

(ধন্যবাদ @ কেনি লাউ, @ মালটিসেন, @ পেট্রিক রবার্টস, @ জোবা)

Object a(String[]a){for(int i=0,j,l=a.length;i<l;i++)for(j=0;j<l;)if(i!=j&a[j++].startsWith(a[i]))return 1<0;return 1>0;}

Ungolfed

Object a(String[] a) {
    for (int i = 0, j, l = a.length; i < l; i++) 
        for (j = 0; j < l;) 
            if (i != j & a[j++].startsWith(a[i])) return 1<0;
    return 1>0;
}

আউটপুট

[Hello, World]
true

[Code, Golf, Is, Cool]
true

[1, 2, 3, 4, 5]
true

[This, test, case, is, true]
true

[111, 010, 000, 1101, 1010, 1000, 0111, 0010, 1011, 0110, 11001, 00110, 10011, 11000, 00111, 10010]
true

[4, 42]
false

[1, 2, 3, 34]
false

[This, test, case, is, false, t]
false

[He, said, Hello]
false

[0, 00, 00001]
false

[Duplicate, Duplicate, Keys, Keys]
false

1
আইডি কে আউট জাভা, কিন্তু &পরিবর্তে কাজ করবে &&?
মালটিসেন 2'16

1
ডান, অন্য একটি বাইট সংরক্ষণ করে। জাভাতে, বুলিয়ান অপারেটরগুলির সাথে বিটওয়াইস অপারেটরগুলি ব্যবহার করা সাধারণ লজিকাল অপারেটরগুলির মতোই আচরণ করে, তারা শর্ট সার্কিট না করে যা এই ক্ষেত্রে প্রয়োজন হয় না।
মার্ভ

আপনি কি কেবল ফাংশনের রিটার্নের ধরণটি পরিবর্তন করতে পারবেন না intএবং ফিরে যাবেন 0এবং 1? এটি বেশ কয়েকটি বাইট সংরক্ষণ করতে পারে। এই যদি জাভা বৈধ এছাড়াও আমি ভুলে কিন্তু আপনি ডিক্লেয়ার যদি i, jএবং lবাইরের ভিতরে forলুপ যে এক কম সেমিকোলন থেকে এক বাইট সংরক্ষণ করবে।
প্যাট্রিক রবার্টস

@ পেট্রিকরোবার্টস মাল্টেসেন এর আগে পরামর্শ দিয়েছিলেন, তবে সত্যবাদী / অসত্যের সর্বাধিক উত্সাহিত সংজ্ঞা অনুসারে এটি বৈধ নয় । ঘোষণাগুলি লুপে রাখার বিষয়টি এখন পুরোপুরি বৈধ এবং বেশ স্পষ্ট যে এখন আমি এটি সম্পর্কে চিন্তা করি। আপনি সকাল 4 টায় গল্ফিংয়ের জন্য যা পান তা পান: ^)
মার্ভ

3
@ জোবা প্রেটি নিশ্চিত হন যে সূচি -১ ফেরত দেওয়ার পরে বৈধ নয় - যখন স্ট্রিংটি পাওয়া যায় না; indexOf(a[i])==0কোনও ক্ষেত্রে সঞ্চয় নেই এমন ক্ষেত্রে এটি হওয়া দরকার ।
পোকেচু 22

6

পাইথন 2, 48 51 বাইট

lambda l:all(1/map(a.find,l).count(0)for a in l)

প্রতিটি উপাদানের aজন্য l, ফাংশনটি অনুপস্থিতির জন্য দিয়ে ইনপুট স্ট্রিংয়ের a.findপ্রথম উপস্থিতির সূচকটি সন্ধান করে । সুতরাং, একটি উপসর্গ নির্দেশ করে। একটি উপসর্গ-মুক্ত তালিকায়, এই ফাংশনটি ম্যাপিংয়ের জন্য কেবল একটি একক প্রদান করে। ফাংশনটি যাচাই করে যে এটি প্রত্যেকের ক্ষেত্রে ।a-100aa


51 বাইট:

lambda l:[a for a in l for b in l if b<=a<b+'~']==l

~এএসসিআইআই কোড 128 বা তার চেয়ে বেশি সংখ্যার সাথে একটি অক্ষর দিয়ে প্রতিস্থাপন করুন ।

প্রতিটি উপাদানগুলির aজন্য l, একটি অনুলিপি প্রতিটি উপাদানগুলির জন্য এটির উপসর্গের জন্য অন্তর্ভুক্ত রয়েছে। উপসর্গ-মুক্ত তালিকার জন্য, কেবলমাত্র এই জাতীয় উপাদানটিই aতাই এটি মূল তালিকা দেয়।


4

সিজেম, 14 বাইট

q~$W%2ew::#0&!

পরীক্ষা স্যুট.

ব্যাখ্যা

q~   e# Read and evaluate input.
$    e# Sort strings. If a prefix exists it will end up directly in front 
     e# of a string which contains it.
W%   e# Reverse list.
2ew  e# Get all consecutive pairs of strings.
::#  e# For each pair, find the first occurrence of the second string in the first.
     e# If a prefix exists that will result in a 0, otherwise in something non-zero.
0&   e# Set intersection with 0, yielding [0] for falsy cases and [] for truthy ones.
!    e# Logical NOT.

4

জাভাস্ক্রিপ্ট ES6, 65 43 40 বাইট

a=>!/(.*)\1/.test(''+a.sort().join``)
      ^            ^               ^ embedded NUL characters

আমার পূর্ববর্তী সমাধান, যা সমস্ত ইউটিএফ -8 অক্ষরের স্ট্রিং অ্যারে পরিচালনা করেছিল:

a=>!/[^\\]("([^"]*\\")*[^\\])",\1/.test(JSON.stringify(a.sort()))

আমি এড়াতে সক্ষম হয়েছি JSON.stringifyযেহেতু চ্যালেঞ্জটি কেবল ছাপাযোগ্য ASCII অক্ষর নির্দিষ্ট করে।

পরীক্ষা

f=a=>!/(\0.*)\1/.test('\0'+a.sort().join`\0`) // since stackexchange removes embedded NUL characters

O.textContent += 'OK: '+
[["Hello", "World"]                      
,["Code", "Golf", "Is", "Cool"]
,["1", "2", "3", "4", "5"]
,["This", "test", "case", "is", "true"]          
,["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011", 
 "0110", "11001", "00110", "10011", "11000", "00111", "10010"]
].map(a=>f(a)) 

O.textContent += '\nKO: '+
[["4", "42"]                             
,["1", "2", "3", "34"]                   
,["This", "test", "case", "is", "false", "t"]
,["He", "said", "Hello"]
,["0", "00", "00001"]
,["Duplicate", "Duplicate", "Keys", "Keys"]
].map(a=>f(a))
<pre id=O></pre>


3

হাস্কেল, 49 বাইট

g x=[1|z<-map((and.).zipWith(==))x<*>x,z]==(1<$x)

এর কয়েকটি অংশ রয়েছে:

-- Are two lists (or strings) equal for their first min(length_of_1,length_of_2) elements, i.e. is one the prefix of the other?
(and.).zipWith(==)

-- Check whether one element is the prefix of the other, for all pairs of elements (including equal pairs)
map((and.).zipWith(==))x<*>x

-- This is a list of 1's of length (number of elements that are the prefix of the other)
[1|z<-map((and.).zipWith(==))x<*>x,z]

-- This is the input list, with all the elements replaced with 1's
(1<$x)

যদি দুটি তালিকাগুলি সমান হয়, তবে একটি উপাদান কেবল নিজের উপসর্গ এবং এটি বৈধ।


3

রেটিনা , 19 বাইট

বাইট গণনাটি আইএসও 8859-1 এনকোডিং ধরেছে।

O`.+
Mm1`^(.+)¶\1
0

ইনপুটটি লাইনফিড-পৃথক করা উচিত। আউটপুট 0মিথ্যা এবং 1সত্যের জন্য।

এটি অনলাইন চেষ্টা করুন! (পরিবর্তে একাধিক স্পেস-বিচ্ছিন্ন পরীক্ষার ক্ষেত্রে সমর্থন করার জন্য সামান্য সংশোধন করা হয়েছে))

ব্যাখ্যা

O`.+

ইনপুটটিতে লাইনগুলি বাছাই করুন। যদি উপসর্গ বিদ্যমান থাকে তবে এটি সরাসরি স্ট্রিংয়ের সামনে শেষ হবে যার মধ্যে এটি রয়েছে।

Mm1`^(.+)¶\1

( M) একটি সম্পূর্ণ লাইন মিলানোর চেষ্টা করুন যা পরবর্তী লাইনের শুরুতেও পাওয়া যায়। mএকাধিক লাইন মোডে যেমন যে সক্রিয় ^ম্যাচ লাইন সূত্রপাত এবং 1নিশ্চিত করে যে, আমরা কেবল সর্বাধিক এক ম্যাচ গণনা যেমন যে আউটপুট 0বা 1

0

অদলবদল করতে 0এবং 1ফলস্বরূপ, আমরা 0s এর সংখ্যা গণনা করি ।


3

জাভা, 97 বাইট

Object a(String[]a){for(String t:a)for(String e:a)if(t!=e&t.startsWith(e))return 1<0;return 1>0;}

@ মারভের উত্তরে পাওয়া বেশিরভাগ কৌশলগুলি ব্যবহার করে, তবে ফোরচ লুপ এবং স্ট্রিং রেফারেন্স সমতা ব্যবহার করে।

Unminified:

Object a(String[]a){
    for (String t : a)
        for (String e : a)
            if (t != e & t.startsWith(e))
                return 1<0;
    return 1>0;
}

মনে রাখবেন যে, আমি যেমন বলেছি, এতে স্ট্রিং রেফারেন্স সমতা ব্যবহার করা হয়েছে। তার মানে এই যে স্ট্রিং ইন্টার্নিংয়ের কারণে কোডটি অদ্ভুত আচরণ করতে পারে । কমান্ড লাইন থেকে পাস হওয়া আর্গুমেন্টগুলি ব্যবহার করার সময় এবং কমান্ড লাইন থেকে কিছু পড়ার সময়ও কোডটি কাজ করে। মানগুলি পরীক্ষা করার জন্য যদি আপনি হার্ডকোড করতে চান তবে, আপনাকে ইন্টার্নিংটি ঘটতে বাধ্য করতে ম্যানুয়ালি স্ট্রিং কনস্ট্রাক্টরকে কল করতে হবে:

System.out.println(a(new String[] {new String("Hello"), new String("World")}));
System.out.println(a(new String[] {new String("Code"), new String("Golf"), new String("Is"), new String("Cool")}));
System.out.println(a(new String[] {new String("1"), new String("2"), new String("3"), new String("4"), new String("5")}));
System.out.println(a(new String[] {new String("This"), new String("test"), new String("case"), new String("is"), new String("true")}));
System.out.println(a(new String[] {new String("111"), new String("010"), new String("000"), new String("1101"), new String("1010"), new String("1000"), new String("0111"), new String("0010"), new String("1011"), new String("0110"), new String("11001"), new String("00110"), new String("10011"), new String("11000"), new String("00111"), new String("10010")}));
System.out.println(a(new String[] {new String("4"), new String("42")}));
System.out.println(a(new String[] {new String("1"), new String("2"), new String("3"), new String("34")}));
System.out.println(a(new String[] {new String("This"), new String("test"), new String("case"), new String("is"), new String("false"), new String("t")}));
System.out.println(a(new String[] {new String("He"), new String("said"), new String("Hello")}));
System.out.println(a(new String[] {new String("0"), new String("00"), new String("00001")}));
System.out.println(a(new String[] {new String("Duplicate"), new String("Duplicate"), new String("Keys"), new String("Keys")}));

@ জো কিং আমার উত্তরটির দ্বিতীয়ার্ধটি দেখুন; এটি কিছুটা জটিল এবং কীভাবে ইনপুট নির্দিষ্ট করা হয় তার উপর নির্ভর করে। আমি আসলে এটি লেখার কথা মনে নেই, যদিও
পোকেচু 22

3

পোস্টগ্র্যাসকিউএল, 186 , 173 বাইট

WITH y AS(SELECT * FROM t,LATERAL unnest(c)WITH ORDINALITY s(z,r))
SELECT y.c,EVERY(u.z IS NULL)
FROM y LEFT JOIN y u ON y.i=u.i AND y.r<>u.r AND y.z LIKE u.z||'%' GROUP BY y.c

আউটপুট:

এখানে চিত্র বর্ণনা লিখুন

এবার কোনও লাইভ ডেমো নেই। http://sqlfiddle.com কেবল 9.3 সমর্থন করে এবং এই ডেমোটি চালানোর জন্য 9.4 প্রয়োজনীয়।

কিভাবে এটা কাজ করে:

  1. সংখ্যার সাথে স্ট্রিং অ্যারে বিভক্ত করুন এবং নাম দিন y
  2. সব পেতে
  3. LEFT OUTER JOINএকই i(আইডি) এর উপর ভিত্তি করে একই উত্সযুক্ত টেবিলটিতে , তবে oridinalউপসর্গ দিয়ে শুরু হওয়া ভিন্ন withy.z LIKE u.z||'%'
  4. গোষ্ঠীর ফলাফল c(প্রাথমিক অ্যারে) এর উপর ভিত্তি করে EVERYগ্রুপিং ফাংশন ব্যবহার করুন । যদি দ্বিতীয় সারণী থেকে প্রতিটি সারি থাকে IS NULLতবে এর অর্থ কোনও উপসর্গ নেই।

কেউ আগ্রহী যদি ইনপুট:

CREATE TABLE t(i SERIAL,c text[]);

INSERT INTO t(c)
SELECT '{"Hello", "World"}'::text[]
UNION ALL SELECT  '{"Code", "Golf", "Is", "Cool"}'
UNION ALL SELECT  '{"1", "2", "3", "4", "5"}'
UNION ALL SELECT  '{"This", "test", "case", "is", "true"}'         
UNION ALL SELECT  '{"111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011","0110", "11001", "00110", "10011", "11000", "00111", "10010"}'
UNION ALL SELECT  '{"4", "42"}'
UNION ALL SELECT  '{"1", "2", "3", "34"}'                   
UNION ALL SELECT  '{"This", "test", "case", "is", "false", "t"}'
UNION ALL SELECT  '{"He", "said", "Hello"}'
UNION ALL SELECT  '{"0", "00", "00001"}'
UNION ALL SELECT  '{"Duplicate", "Duplicate", "Keys", "Keys"}';

সম্পাদনা করুন:

SQL Server 2016+ বাস্তবায়ন:

WITH y AS (SELECT *,z=value,r=ROW_NUMBER()OVER(ORDER BY 1/0) FROM #t CROSS APPLY STRING_SPLIT(c,','))
SELECT y.c, IIF(COUNT(u.z)>0,'F','T')
FROM y LEFT JOIN y u ON y.i=u.i AND y.r<>u.r AND y.z LIKE u.z+'%' 
GROUP BY y.c;

LiveDemo

দ্রষ্টব্য: এটি কমা দ্বারা পৃথক করা তালিকা, আসল অ্যারে নয়। তবে মূল ধারণাটি একই হিসাবে PostgreSQL


সম্পাদনা 2:

আসলে WITH ORDINALITYপ্রতিস্থাপন করা যেতে পারে:

WITH y AS(SELECT *,ROW_NUMBER()OVER()r FROM t,LATERAL unnest(c)z)
SELECT y.c,EVERY(u.z IS NULL)
FROM y LEFT JOIN y u ON y.i=u.i AND y.r<>u.r AND y.z LIKE u.z||'%' GROUP BY y.c

SqlFiddleDemo


3

ব্র্যাচল্যাগ , 8 বাইট

¬(⊇pa₀ᵈ)

এটি অনলাইন চেষ্টা করুন!

ভবিষ্যদ্বাণীপূর্ণ সাফল্য / ব্যর্থতার মাধ্যমে ফলাফলগুলি। গত truthy পরীক্ষা মামলা 60 টিরও বেশি সেকেন্ড সময় লাগে ["111","010","000","1101","1010","1000","0111","0010","1011","0110","11001","00110","10011","11000","00111","10010"] কিন্তু এটি দ্রুত পাসের একটি যোগ বাইট সঙ্গে যা অন্যথায় (নেই প্রোগ্রাম আগের সম্ভাবনার সংখ্যক ঘটিয়েছে Ċবদলে একাধিক বিন্যাসন পরীক্ষণ সামনে থেকে sublist দৈর্ঘ্য সীমিত করতে পরীক্ষণ একাধিক বিন্যাসন পর দুই)।

¬(     )    It cannot be shown that
   p        a permutation of
  ⊇         a sublist of the input
      ᵈ     is a pair of values [A,B] such that
    a₀      A is a prefix of B.

কম তুচ্ছ 9-বাইট রূপগুলো চেয়ে ¬(⊇Ċpa₀ᵈ)আছে যুক্তিসঙ্গত সময়ের মধ্যে যা রান ¬(⊇o₁a₀ᵈ), ¬(⊇o↔a₀ᵈ)এবং ¬(⊇oa₀ᵈ¹)


যদি এই চ্যালেঞ্জটি "সত্যবাদী / মিথ্যা" এর পরিবর্তে "দুটি স্বতন্ত্র এবং ধারাবাহিক মান" ব্যবহার করে, তবে এটি কেবল 5 বাইট লাগবে।
সম্পর্কিত নয় স্ট্রিং

2

পার্ল 6 , 24 বাইট

{.all.starts-with(.one)}

এটি অনলাইন চেষ্টা করুন!

বাহ, দীর্ঘ বিল্ট-ইন ব্যবহার করার সময় আশ্চর্যজনকভাবে সংক্ষিপ্ত।

ব্যাখ্যা

{                      }  # Anonymous code block taking a list
 .all                     # Do all of the strings
     .starts-with(    )   # Start with
                  .one    # Only one other string (i.e. itself)

আমি একটি 50 বাইট উত্তর লিখেছি কিন্তু আপনার কেবল আমার জল থেকে বের করে দিয়েছে।
বিবি 49

1
@ বিবি ৯৪ হ্যাঁ, আমি একই উত্তর দিয়ে শুরু করেছি তবে ডুপ্লিকেট করা কীগুলির সত্যতা নিয়ে ফিরে আসা সেটগুলির সাথে আপনার মত একই সমস্যার মধ্যে পড়েছিলাম। এই উত্তরটি লেখা অবিশ্বাস্যভাবে সন্তোষজনক ছিল
জো কিং

1

র‌্যাকেট, 70 বাইট

(λ(l)(andmap(λ(e)(not(ormap(curryr string-prefix? e)(remv e l))))l))

1

পাইথন, 58 55 বাইট

lambda l:sum(0==a.find(b)for a in l for b in l)==len(l)

a.index(b)==0কিছুটা খাটো বিকল্পভাবে, আপনি করতে পারেন 0**sum(a.index(b)for a in l for b in l)
মেগো

@ মেগো এটি কাজ করে না কারণ indexযখন bখুঁজে পাওয়া যায় না তখন একটি ব্যতিক্রম ছুঁড়ে দেয় । এবং কারণ এটি হওয়া উচিত ==, না >=। তবে, findকাজ করে। (এবং এটি খুব খাটো!)
ডিজেএমসিমেহেম

ওহো, আমি টাইপ বোঝানো find। নিদ্রাহীন মস্তিষ্ক ঘুমিয়ে পড়ে। দ্বিতীয় সংস্করণটিও সাথে কাজ করা উচিত find
মেগো

@ মেগো আমি নিশ্চিত না যে আমি দ্বিতীয় সংস্করণটি পেয়েছি কিনা। যে সবসময় 0 ফিরে না?
ডিজেএমসিহেম

@ মেগো এটি কেবল তখনই কাজ করে যদি প্রতিটি স্ট্রিং একই হয়। আমরা এর সাথে তুলনা করার কারণটি len(l)হ'ল যেহেতু আমরা bপ্রতিটিটির মাধ্যমে সমস্ত মাধ্যমে পুনরাবৃত্তি করছি a, সর্বদা প্রতি সর্বনিম্ন একটি ম্যাচ থাকবে a। সুতরাং আমরা ম্যাচের সংখ্যা উপাদানগুলির সংখ্যার সমান কিনা তা পরীক্ষা করি।
ডিজেএমসিএমহেম

1

জাভাস্ক্রিপ্ট (ES6), 52 54

2 বাইট সম্পাদনা করুন thx @ নীল

a=>!a.some((w,i)=>a.some((v,j)=>i-j&&!w.indexOf(v)))

পরীক্ষা

f=a=>!a.some((w,i)=>a.some((v,j)=>i-j&&!w.indexOf(v)))

O.textContent += 'OK: '+
[["Hello", "World"]                      
,["Code", "Golf", "Is", "Cool"]
,["1", "2", "3", "4", "5"]
,["This", "test", "case", "is", "true"]          
,["111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011", 
 "0110", "11001", "00110", "10011", "11000", "00111", "10010"]
].map(a=>f(a)) 

O.textContent += '\nKO: '+
[["4", "42"]                             
,["1", "2", "3", "34"]                   
,["This", "test", "case", "is", "false", "t"]
,["He", "said", "Hello"]
,["0", "00", "00001"]
,["Duplicate", "Duplicate", "Keys", "Keys"]
].map(a=>f(a))
<pre id=O></pre>


!w.indexOf(v)?
নিল

@ নীল ঠিক আছে, ধন্যবাদ
এডসি 65

1

ম্যাথামেটিকাল 75 75 68 বাইট

যথারীতি উদাসীন। তবে মার্টিন বি কোডটি 7 বাইট কমিয়ে আনতে সক্ষম হয়েছিল।

পদ্ধতি 1: একটি মধ্যে আউটপুট সংরক্ষণ Array

(68 বাইট)

f@a_:=!Or@@(Join@@Array[a~Drop~{#}~StringStartsQ~a[[#]]&,Length@a])

f@{"111", "010", "000", "1101", "1010", "1000", "0111", "0010", "1011", "0110", "11001", "00110", "10011", "11000", "00111", "10010"}

সত্য


f@{"He", "said", "Hello"}

মিথ্যা


পদ্ধতি 2: একটিতে আউটপুট সংরক্ষণ করা List

(By৯ বাইট)

f@a_:=!Or@@Flatten[a~Drop~{#}~StringStartsQ~a[[#]]&/@Range@Length@a]

অগ্রাধিকার নিয়মগুলি a~Drop~{#}~StringStartsQ~a[[#]]কাজ করা উচিত । এছাড়াও Arrayসংরক্ষণ করা উচিত কিছু বেশি বাইট Length, বিশেষ করে, কারণ এটি আপনি ব্যবহার করতে অনুমতি দেবে Join@@পরিবর্তে Flatten@(আপনি ব্যবহার করছেন প্রদান Flattenএকটি একক স্তরের জন্য শুধুমাত্র)।
মার্টিন এন্ডার

পরামর্শের জন্য ধন্যবাদ. আমি Arrayপরে দেখা হবে।
ডেভিডসি


1

এপিএল (ডায়ালগ ইউনিকোড) , 13 বাইট এসবিসিএস

-২ বাইট:

≢=∘≢∘⍸∘.(⊃⍷)⍨

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা:

≢=∘≢∘⍸∘.(⊃⍷)⍨   Monadic function train
               "Find": Convert the right argument into a boolean vector,
                where ones correspond to instances of the left argument
              Take the first item of the above vector (i.e., only prefixes)
     ∘.(  )⍨   Commutative outer product: take the above function and apply
               it for each possible pair of elements in the input
               If the input is a prefix code, the above should have a number of ones
               equal to the length of the input (i.e., each item is a prefix of only itself)
               To test this...
              Find the location of all ones in the above
   ≢∘          Take the length of the above
≢=∘            Compare to the length of the input

~2∊+\⊃¨∘.⍷⍨⎕­
এনজিএন

1

জে , 17 বাইট

#=1#.1#.{.@E.&>/~

এটি অনলাইন চেষ্টা করুন!

দ্রষ্টব্য: আমি এপিএলের উত্তরটি দেখার আগে এটি পক্ষপাতদুষ্ট ছাড়াই এটি লিখেছিলাম। দৃষ্টিভঙ্গিগুলি প্রায় অভিন্ন, যা আকর্ষণীয় Turn আমার ধারণা এটি প্রাকৃতিক "অ্যারে থিঙ্কনিগ" সমাধান

বাক্সযুক্ত ইনপুট নিন কারণ স্ট্রিংগুলি অসম দৈর্ঘ্যের।

/~প্রতিটি উপাদানের সাথে জুড়ে দেওয়া প্রতিটি উপাদানের একটি স্ব-ফাংশন সারণী তৈরি করুন এবং দেখুন কোনও শুরুর সাথে কোনও মিল আছে কিনা{.@E. । এটি 1-0 ফলাফলের একটি ম্যাট্রিক্স উত্পাদন করবে।

1#.1#."ম্যাট্রিক্সের সমস্তগুলিকে" উপস্থাপন করে একটি একক সংখ্যা পেতে দু'বার যোগ করুন এবং দেখুন যে সংখ্যাটি ইনপুটটির দৈর্ঘ্যের সমান কিনা?#= । যদি এটি হয় তবে একমাত্র উপসর্গের ম্যাচগুলি হ'ল স্ব-মিলগুলি, অর্থাত্, আমাদের একটি উপসর্গ কোড রয়েছে।

সমাধান বাছাই, 18 বাইট

0=1#.2{.@E.&>/\/:~

বিভিন্ন পদ্ধতির চেষ্টা করুন। এই সমাধানটি বাছাই করে সংলগ্ন জোড়ায় দেখে।

এটি অনলাইন চেষ্টা করুন!


1

আর , 48 বাইট

function(s)sum(outer(s,s,startsWith))==length(s)

এটি অনলাইন চেষ্টা করুন!

ব্যাখ্যা: outer(s,s,startsWith)logicals কিনা তা পরীক্ষা করে এর একটি ম্যাট্রিক্স আউটপুট s[i]একটি প্রিফিক্স s[j]। যদি sএকটি উপসর্গ কোড হয়, তবে length(s)ফলাফলটিতে ঠিক সত্য উপাদান রয়েছে যা তির্যক উপাদানগুলির সাথে মিল রয়েছে ( s[i]এটি নিজের একটি উপসর্গ)।


1
আমি অন্যান্য 48 বাইট বিকল্পগুলির একটি গুচ্ছ খুঁজে পেয়েছি, যেমন function(s)all(colSums(outer(s,s,startsWith))<2)তবে এটি এখনও এমন startsWithএকটি ফাংশন যা আমি জানতাম না! ভাল লাগছে।
জিউসেপ

1
@ জিউসেপ্পে আমি ম্যাট্রিক্স একটি পরিচয় ম্যাট্রিক্স কিনা তা যাচাই করার বিভিন্ন উপায় চেষ্টা করেছিলাম, তবে এটি 48 বাইটের অধীনেও পাইনি। আমি ভেবেছিলাম এই উপায়টি বোঝা সবচেয়ে সহজ, তবে আমি নিশ্চিত কেউ এটি গল্ফ করে দেবে!
রবিন রাইডার

47 বাইট ইনভার্ট করে TRUEএবং FALSE...
জিউস্পে

@ জিউসপ্পে কি এটি অনুমোদিত? যখন ইনপুটটি কোনও বৈধ উপসর্গ কোড হয়, তখন বিধিগুলি স্পষ্টভাবে সত্যতার জন্য জিজ্ঞাসা করে। (এছাড়াও আপনার লিঙ্কটি 48 বাইট সংস্করণে রয়েছে, তবে আমি অনুমান করছি যে আপনার পরামর্শটি প্রতিস্থাপন == করা উচিত: >:-))
রবিন রাইডার


0

রুবি, 48 বাইট

ইনপুট হিসাবে আর্গুমেন্ট এবং আউটপুট হিসাবে stdout ব্যবহার করে।

p !$*.map{a,*b=$*.rotate!
a.start_with? *b}.any?


0

র‌্যাকেট 130 বাইট

(define g #t)(for((n(length l)))(for((i(length l))#:unless(= i n))(when(string-prefix?(list-ref l i)(list-ref l n))(set! g #f))))g

Ungolfed:

(define(f l)
  (define g #t)
  (for ((n (length l)))
    (for ((i (length l)) #:unless (= i n))
      (when (string-prefix? (list-ref l i) (list-ref l n))
        (set! g #f))))g)

পরীক্ষামূলক:

(f [list "Hello" "World"])             
(f [list "Code" "Golf" "Is" "Cool"])
(f [list "1" "2" "3" "4" "5"])
(f [list "This" "test" "case" "is" "true"])          
(f [list "111" "010" "000" "1101" "1010" "1000" "0111" "0010" "1011" 
         "0110" "11001" "00110" "10011" "11000" "00111" "10010"])

(f [list "4" "42"])                             
(f [list "1" "2" "3" "34"])                   
(f [list "This" "test" "case" "is" "false" "t"])
(f [list "He" "said" "Hello"])
(f [list "0" "00" "00001"])
(f [list "Duplicate" "Duplicate" "Keys" "Keys"])

আউটপুট:

#t
#t
#t
#t
#t
#f
#f
#f
#f
#f
#f

0

সি (জিসিসি) , 93 বাইট

p(r,e,f,i,x)char**r;{for(f=i=0;i<e;++i)for(x=0;x<e;++x)f|=x!=i&&strstr(r[i],r[x])==r[i];r=f;}

এটি অনলাইন চেষ্টা করুন!

strstr(a,b)==aউপসর্গগুলি পরীক্ষা করার জন্য লুপের জন্য সাধারণ ডাবল । প্রধানত যুক্ত হয়েছে যেহেতু এখনও কোনও সি উত্তর বলে মনে হচ্ছে না।



0

05 এ বি 1 ই , 13 বাইট

2.ÆDí«ε`Å?}O_

খুব দীর্ঘ .. প্রাথমিকভাবে আমার কাছে 9-বাইট সমাধান ছিল, তবে এটি সদৃশ কী পরীক্ষার ক্ষেত্রে ব্যর্থ হয়েছিল।

এটি অনলাইনে চেষ্টা করুন বা সমস্ত পরীক্ষার কেস যাচাই করুন

ব্যাখ্যা:

2.Æ             # Get all combinations of two elements from the (implicit) input-list
   Dí           # Duplicate and reverse each pair
     «          # Merge the lists of pairs together
      ε         # Map each pair to:
       `        #  Push both strings to the stack
        Å?      #  And check if the first starts with the second
          }O    # After the map: sum to count all truthy values
            _   # And convert it to truthy if it's 0 or falsey if it's any other integer
                # (which is output implicitly as result)



0

স্ট্যাক্স , 6 বাইট

å·↑↑¶Ω

এটি চালান এবং এটি ডিবাগ করুন

এটি সত্যের জন্য অ-শূন্য উত্পাদন করে।

সাধারণ ধারণাটি ইনপুটটিতে প্রতিটি জোড় স্ট্রিং বিবেচনা করে। যদি অন্যের মধ্যে একটির স্ট্রেরিং সূচকটি কখনও শূন্য হয়, তবে এটি কোনও বৈধ উপসর্গ কোড নয়। স্ট্যাক্সে, অ-বিদ্যমান সাবস্ট্রিং ফলনের সূচক-1 । এইভাবে, সমস্ত জোড়-ভিত্তিক স্ট্রেরিং সূচকগুলি একসাথে গুণ করা যায়।

এটি ইসাকের পাইথ সলিউশনের মতো একই অ্যালগরিদম, তবে আমি এটি স্বাধীনভাবে বিকাশ করেছি।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.