সংক্ষিপ্ততম অনন্য সাবস্ট্রিং


29

ইনপুট

একটি বর্ণানুক্রমিক স্ট্রিং s

আউটপুট

সবচেয়ে কম স্ট্রিংটি ঠিক হিসাবে একটি (সংলগ্ন) একবার ঘটে মধ্যে সাবস্ট্রিং s। ওভারল্যাপিংয়ের ঘটনাগুলি পৃথক হিসাবে গণনা করা হয়। যদি একই দৈর্ঘ্যের বেশ কয়েকটি পরীক্ষার্থী থাকে তবে আপনাকে অবশ্যই তাদের সকলকে উপস্থিতির ক্রম অনুসারে আউটপুট করতে হবে। এই চ্যালেঞ্জে, খালি স্ট্রিং n + 1দৈর্ঘ্যের স্ট্রিংয়ের মধ্যে কয়েকবার ঘটে n

উদাহরণ

স্ট্রিং বিবেচনা করুন

"asdfasdfd"

খালি স্ট্রিংটি এতে 10 বার ঘটে, তাই এটি অনন্য সংঘর্ষের প্রার্থী নয়। অক্ষর প্রত্যেকটি "a", "s", "d", এবং "f"অন্তত দুইবার ঘটে, তাই তারা প্রার্থীদের পারেন না। সাবস্ট্রিংগুলি "fa"এবং "fd"কেবল একবার এবং এই ক্রমে সংঘটিত হয়, যখন 2 দৈর্ঘ্যের অন্যান্য সমস্ত সাবস্ট্রিংগুলি দু'বার ঘটে। সুতরাং সঠিক আউটপুট হয়

["fa","fd"]

বিধি

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

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

"" -> [""]
"abcaa" -> ["b","c"]
"rererere" -> ["ererer"]
"asdfasdfd" -> ["fa","fd"]
"ffffhhhhfffffhhhhhfffhhh" -> ["hffff","fffff","hhhhh","hfffh"]
"asdfdfasddfdfaddsasadsasadsddsddfdsasdf" -> ["fas","fad","add","fds"]

লিডারবোর্ড

আমি যে প্রতিশ্রুতি দিয়েছিলাম তা বাই-ল্যাঙ্গুয়েজ লিডারবোর্ড এখানে।

আপনার উত্তরটি প্রদর্শিত হয়েছে তা নিশ্চিত করার জন্য, দয়া করে নীচের মার্কডাউন টেমপ্লেটটি ব্যবহার করে আপনার উত্তরটি শিরোনাম দিয়ে শুরু করুন:

# Language Name, N bytes

Nআপনার জমা দেওয়ার আকারটি কোথায় ? আপনি যদি নিজের স্কোরটি উন্নত করেন তবে আপনি পুরানো স্কোরগুলি শিরোনামে রেখে দিতে পারেন । এই ক্ষেত্রে:

# Ruby, <s>104</s> <s>101</s> 96 bytes

<script src='https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js'></script><script>site = 'meta.codegolf',postID = 5314,isAnswer = true,QUESTION_ID = 45056;jQuery(function(){var u='https://api.stackexchange.com/2.2/';if(isAnswer)u+='answers/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJeRCD';else u+='questions/'+postID+'?order=asc&sort=creation&site='+site+'&filter=!GeEyUcJFJO6t)';jQuery.get(u,function(b){function d(s){return jQuery('<textarea>').html(s).text()};function r(l){return new RegExp('<pre class="snippet-code-'+l+'\\b[^>]*><code>([\\s\\S]*?)<\\/code><\/pre>')};b=b.items[0].body;var j=r('js').exec(b),c=r('css').exec(b),h=r('html').exec(b);if(c!==null)jQuery('head').append(jQuery('<style>').text(d(c[1])));if (h!==null)jQuery('body').append(d(h[1]));if(j!==null)jQuery('body').append(jQuery('<script>').text(d(j[1])))})})</script>


সম্মিলিত অন্তর্নির্মিত কার্যগুলিতে কোনও সীমাবদ্ধতা?
মার্টিন এেন্ডার

3
@ মার্টিনব্যাটনার এই চ্যালেঞ্জের মধ্যে, সমস্ত কিছুই যায়। যদি এটির যথেষ্ট উত্তর পাওয়া যায়, তবে আমি একটি বাই-ভাষা লিডারবোর্ড স্থাপন করব, যাতে আরও অসুস্থ-সজ্জিত ভাষাগুলিতেও অর্থবহ প্রতিযোগিতা থাকতে পারে।
Zgarb

আপনি কি আমার কোড গল্ফ লিডারবোর্ড স্নিপেট ব্যবহার করতে চান ? তারপরে লিডারবোর্ডটি আপ টু ডেট রাখার জন্য আপনাকে সমস্ত সম্পাদনা পর্যবেক্ষণ করতে হবে না। যদি আপনি তা করেন তবে আমি এটি আপনার জন্য যুক্ত করতে পারি এবং আমি উত্তরগুলি দিয়েছিলাম যাতে সেগুলি শিরোনামের ফর্ম্যাটটির সাথে মেলে।
মার্টিন ইন্ডার

@ মার্টিনবাটনার ধন্যবাদ, আমি এটির প্রশংসা করব!
Zgarb

সব শেষ! যদি কিছু কাজ না করে তবে আমাকে জানান। (ভবিষ্যতে আপনার চ্যালেঞ্জগুলির জন্য এটি পুনরায় ব্যবহার করতে দ্বিধা বোধ করবেন))
মার্টিন এণ্ডার

উত্তর:


3

পাইথ, 27 26 বাইট

&zhfTmf!/>zhxzYYm<>zkdUzUz

এখানে চেষ্টা করুন।

নোট করুন যে অনলাইন সংকলকটিতে ত্রুটির কারণে, খালি স্ট্রিং কেসটি কেবলমাত্র কমান্ড লাইন সংস্করণে সঠিকভাবে কাজ করে, যা এখানে পাওয়া যাবে।

অনলাইন সংকলকটির ইনপুট হিসাবে একটি নতুন লাইন দিয়ে আপনি বাগটিও নিরাময় করতে পারেন।

ব্যাখ্যা:

                                   z = input(), implicit.
&z                                 Prints empty string if input is empty.
  hfT                              Take the first non-empty list from
     m                  Uz         A list of list of substrings of z, divided by length
                m<>zkdUz           with some shorter strings repeated later, to no effect.
      f                            Where the substrings are filtered on
       !/      Y                   There being 0 occurrences of the substring in
         >z                        The slice of z
           hxzY                    from the character after the first character
                                   of the first occurrence of the substring in z
                                   to the end of z.

খালি স্ট্রিং ইনপুট ব্যর্থ।
অপ্টিমাইজার

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

ইওএফ দেয় না?
অপ্টিমাইজার

@ অপ্টিমাইজার পাইথ নতুন লাইন সমাপ্ত ইনপুট আশা করে, যা ভুল হতে পারে।
isaacg

তাহলে খালি স্ট্রিং পার করা কি সম্ভব নয়?
অপ্টিমাইজার

13

পাইথন 3, 124 123 111 96 বাইট

f=lambda s,n=1:[x for x in[s[i:i+n]for i in range(len(s)+1)]if s.find(x)==s.rfind(x)]or f(s,n+1)

স্ট্রিংগুলির সন্ধান করুন যে বাম দিক থেকে প্রথম ঘটনাটি ডান থেকে প্রথম সংঘটন হিসাবে একই। +1মধ্যে rangeখালি স্ট্রিং ক্ষেত্রে জন্য মিটমাট হয়।

এখন যদি কেবল পাইথনের .count()একটিই ওভারল্যাপিং ম্যাচগুলি গণনা করে থাকে তবে এটি মোটামুটি খাটো হত।


6

গণিত, 95 94 79 বাইট

Cases[Tally@StringCases[#,___,Overlaps->All],{s_,1}:>s]~MinimalBy~StringLength&

StringCasesআমাকে সমস্ত সম্ভাব্য সাবস্ট্রিংগুলি দেয় Tallyএবং Casesএকাধিকবার প্রদর্শিত হওয়াগুলি ফিল্টার করে এবং MinimalByসংক্ষিপ্ততমগুলি খুঁজে পায়।


&কোড শেষে একটি অতিরিক্ত আছে ?
ডেভিড জি স্টার্ক

ছেলে, আপনি দ্রুত!
ডেভিড জি স্টার্ক

4

গল্ফস্ক্রিপ্ট, 44 বাইট

:S;-1:x{;S,x):x-),{S>x<}%:^1/{^\/,2=},.!}do`

স্টিডিনের স্ট্রিং হিসাবে ইনপুট নেয় এবং ডাবল-অ্যারে সিনট্যাক্সে আউটপুট দেয়: যেমন [["b"] ["c"]]অনলাইন ডেমো

ব্যবচ্ছেদ

:S;          # Store input in S and pop it
-1:x         # Store -1 in x
{            # do-while loop
  ;          #   Pop x the first time and [] every subsequent time
  S,x):x-),  #   Increment x and build an array [0 1 ... len(S)-x]
  {S>x<}%    #   Map that array to [substr(S,0,x) substr(S,1,x) ...]
  :^         #   Store in ^ (to avoid the token coalescing with the next char)
  1/         #   Split by length 1 to iterate over 1-elt arrays rather than strings
  {^\/,2=},  #   Filter to arrays which occur exactly once as a subarray of ^
  .!         #   Duplicate and test emptiness
}do          # end do-while loop: loop if the filtered array is empty
`            # Stringify for output

এটি এমনভাবে সাজানো হয়েছে যে খালি স্ট্রিংয়ের জন্য কোনও বিশেষ কেসের প্রয়োজন নেই (যা আমি উপরে উল্লিখিত অনলাইন ডেমোতে একটি পরীক্ষার কেস হিসাবে অন্তর্ভুক্ত করেছি)।


3

সিজেম, 52 43 40 বাইট

]]q:Q,,{)Q,1$-),f{Q><}:R{R\a/,2=},}%{}=p

ইনপুটটি উদ্ধৃতিবিহীন স্ট্রিং

ব্যাখ্যা :

]]                                       "For empty string input case";
  q:Q                                    "Read the input and store in Q";
     ,,                                  "Take length of input and 0 to length array";
       {                          }%     "Map the above array on this code block";
        )Q                               "Increment the number in the current iteration, L";
         Q,1$                            "Take input's length and copy the above number";
             -)                          "Get upper limit of next loop to get substrings";
               ,f{   }                   "Get 0 to above number array and for each";
                  Q><                    "Get the L length substring at Ith index where";
                                         "I loops from 0 to Q, - L + 1";
                      :R                 "Store this list of substring of length L in R";
                        {R\a/,2=},       "Filter to get unique substrings";
                                    {}=  "Get the first non empty substring array";
                                         "This leaves nothing on stack if all are empty";
                                       p "Print the top stack element. At this point, its";
                                         "Either the first non empty substring array or";
                                         "the ]] i.e. [""] which we added initially";

উদাহরণ:

asdfdfasddfdfaddsasadsasadsddsddfdsasdf

আউটপুট

["fas" "fad" "add" "fds"]

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


3

স্কেলা, 120 বাইট

readLine.inits.flatMap(_.tails).toList.groupBy(l=>l).filter(x=>x._2.length<2).map(_._1).groupBy(_.length).minBy(_._1)._2

আমি 140 দিয়ে শুরু করেছি যা কমপক্ষে ইতিমধ্যে একটি টুইটের সাথে ফিট করে।

(                                        // added for comments
 readLine                                // input
.inits.flatMap(_.tails).toList           // get all substrings of that string
.groupBy(l=>l).filter(x=>x._2.length<2)  // remove substrings that occur more than once
.map(_._1).groupBy(_.length)             // take the substring and group by length
.minBy(_._1)._2                          // take the list of shortest substrings
)

আমি অবাক? শুধু (_)পরিচয়ের পরিবর্তে কেন কাজ করবেন না l=>l?
গর্বিত হাসেলেলার

আমিও অবাক হই। একরকম list.groupBy(_)যেমন হয় x => list.groupBy(x)। তারা এটিকে কেন এটি বাস্তবায়িত করেছিল আমার কোনও ধারণা নেই।
ডোমিনিক মোলার

3

জাভাস্ক্রিপ্ট (ES6), 109 110

ইনপুট স্ট্রিংটি আলফানিউমেরিক হওয়ায় সূচিপত্রের পরিবর্তে অনুসন্ধান সম্পাদনা করুন । ধন্যবাদ @ ইসমাইল মিগুয়েল

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

F=(s,n=1,r)=>
s?[...s].map((a,i)=>~s.indexOf(a=s.substr(i,n),s.search(a)+1)?r:r=[...r||[],a])&&r||F(s,n+1):[s]

অবহেলিত এবং ব্যাখ্যা

 F = function(s, n=1) { // start with length 1
   var i, a, p, r;
   if (s == "") // special case for empty input string
     return [s];
   for (i = 0; i < s.length; i++) 
   // for each possibile substring of length n
   // (should stop at s.length-n+1 but going beyond is harmless)
   // Golfed: "[...s].map((a,i)" ... using i, a is overwrittem
   {
     a = s.substr(i, n); // substring at position i
     p = s.search(a); // p is the first position of substring found, can be i or less
     p = s.indexOf(a, p + 1) // p is now the position of a second instance of substring, or -1 if not found
     if (~p) // ~p is 0 if p is -1
     {
       ; // found more than once, do nothing
     }
     else
     {
       r = r || []; // if r is undefined, then it becomes an empty array
       r.push(a); // save substring 
       // Golfed: "r=[...r||[],a]"
     }
   }
   if (r) // if found some substring, saved in r
   {
     return r;
   }
   return F(s, n+1) // recursive retry for a bigger length
 }

টেস্ট ফায়ারফক্স / ফায়ারবাগ কনসোলটি

;["", "abcaa", "rererere", "asdfasdfd", "ffffhhhhfffffhhhhhfffhhh", 
 "asdfdfasddfdfaddsasadsasadsddsddfdsasdf"]
.forEach(x=>console.log(x,F(x)))

আউটপুট

 [""]
abcaa ["b", "c"]
rererere ["ererer"]
asdfasdfd ["fa", "fd"]
ffffhhhhfffffhhhhhfffhhh ["hffff", "fffff", "hhhhh", "hfffh"]
asdfdfasddfdfaddsasadsasadsddsddfdsasdf ["fas", "fad", "add", "fds"]

.searchপরিবর্তে ব্যবহার করুন .indexOfএবং আপনি 2 বাইট সংরক্ষণ করুন।
ইসমাইল মিগুয়েল

@ ইসমাইল মিগুয়েল নং কারণ 1) অনুসন্ধানে কোনও অফসেট প্যারামিটার নেই 2) অনুসন্ধানটি একটি রেজিপ্স্প আশা করে, এবং বিশেষ অক্ষরের সাথে ব্যর্থ হবে * * [] এবং আরও
এডক 65

1
তবে প্রথমে আপনি নিরাপদে এটি (আপনার s.indexOf(a)+1) প্রতিস্থাপন করতে পারেন । যদিও এটি মানা এই অক্ষরগুলির সাথে কাজ করবে না, আপনাকে চিন্তা করার দরকার নেই! ওপিকে উদ্ধৃত করে: " Input: An alphanumeric string s."
ইসমাইল মিগুয়েল

@ ইসমাইলমিগুয়েল ঠিক আছে, ধন্যবাদ 'আলফানিউমারিক' সীমাবদ্ধতা মিস করেছেন
edc65

1
@ ইসমাইল মিগুয়েল আমি কোনও উপায় খুঁজে পেলাম না ... আমার সত্যবাদী বা মিথ্যা দরকার, এবং কোনও অ্যারে (এমনকি খালি []) জাভাস্ক্রিপ্টে একটি সত্য মূল্য
edc65

3

জাভা, 168 176 233

এখানে একটি সুন্দর বেসিক নেস্ট লুপ উদাহরণ।

void n(String s){for(int l=0,i=0,t=s.length(),q=0;l++<t&q<1;i=0)for(String b;i<=t-l;)if(s.indexOf(b=s.substring(i,i+++l),s.indexOf(b)+1)<0){System.out.println(b);q++;}}

বা কিছুটা বেশি পঠনযোগ্য:

void t(String s){
    for(int l=0,i=0,t=s.length(),q=0;l++<t&q<1;i=0)
        for(String b;i<=t-l;)
            if(s.indexOf(b=s.substring(i,i++ +l),s.indexOf(b)+1)<0){
                System.out.println(b);
                q++;
            }
}

আপনি যদি পঠনযোগ্যতা চান, +++এটি ভাগ হয়ে যায় কিনা তা দেখায় + ++বা ++ +এটি সাহায্য করবে ... এবং আপনি যদি আরও কয়েকটি বাইট সংরক্ষণ করতে চান তবে আরম্ভ করে q=1, প্রতিস্থাপন q++করে q=tএবং এর l++<t&q<1মতো কিছু দিয়ে প্রতিস্থাপনের মাধ্যমে এটি করার একটি উপায় থাকতে পারে t>l+=q। সম্ভবত এটির কাজটি পেতে একটি বা দুটি অন্যান্য অফসেট টুইট করা দরকার।
পিটার টেলর

@ পিটার ওয়েল, পঠনযোগ্য দ্বারা আমি বেশিরভাগটির অর্থ "আমাকে অনুভূমিকভাবে স্ক্রোল করতে হবে না", তবে আমি স্পষ্ট করেছিলাম +++। আমি এটি টুইট করার চেষ্টা করেছি (বিশেষত q, যা কিছুটা অপব্যয় বোধ করে), তবে এখনও শক্ত কিছু পাই নি।
জিওবিটস

@ পিটারটেলর জাভা ল্যাক্সিং বিধিগুলির কারণে +++সর্বদা সমাধান করে ++ +
FUZxxl

@FUZxxl, আমি সন্দেহ করি যে বেশিরভাগ জাভা ব্যবহারকারীরা এটি জানেন এবং এই সাইটে প্রচুর লোক আছেন যারা জাভা জানেন না।
পিটার টেলর

1
লাস্ট ইন্ডেক্সের পরিবর্তে অফসেটের সাথে ইনডেক্সফ ব্যবহার করাতে 1 বাইট কাটা উচিত (আমার জাভাস্ক্রিপ্টের উত্তর দেখুন)
edc65

3

হাস্কেল, 169 162 155 153 151 138 120 115

import Data.List
l=length
q k=filter$(==)k.l
p y=q(minimum.map l$y)$y
f x=p$concat$q 1$group$sort$(tails x>>=inits)

এটি ব্যবহার করতে:

f "asdfdfasddfdfaddsasadsasadsddsddfdsasdf"

যা দেয়:

["add","fad","fas","fds"]

BTW। আমি আমার কোডের শেষ লাইনটি ঘৃণা করি (পুনরাবৃত্তি h y)। ইঙ্গিত কেউ এ থেকে মুক্তি পেতে?


1
আপনি কীভাবে সংজ্ঞা দেবেন g y=q(minimum.(map l)$y)$y(চারপাশে প্রথম বন্ধনী map lকী দরকার?) এবং তারপরে f=g.concat.q 1.group.sort.concatMap inits.tails?
FUZxxl

1
এর >>=পরিবর্তে ব্যবহার করা concatMap, অর্থাৎ f x=p$concat$q 1$group$sort$(tails x>>=inits)2 বাইট সংরক্ষণ করুন। কেন Data.Ordআমদানি?
নিমি

1
মধ্যে প্রথম বন্ধনী qঅপ্রয়োজনীয় হয়, যেহেতু আপনি লিখতে পারেন filter$(==)k.l, যেমন গত হয় $আগে স্পেস yমধ্যে গুলি p। আপনি আমদানি করার পরেও সেমিকোলনগুলি সরিয়ে ফেলতে পারেন ( Data.Ordপ্রকৃতপক্ষে অপ্রয়োজনীয় বলে মনে হয়)।
Zgarb

লেকসাহ সংকলকটি কোনও স্থান ছাড়াই মেনে নেয় না $। এটি কিছু বাইট শেভ করবে, তবে এটি কি ভাষা অনুচ্ছেদে?
রবউউ

1
জিএইচসি এটি গ্রহণ করবে।
জাগারব

3

জে, 61 58 44 42 40 38 37 বাইট

[:>@{.@(#~#@>)#\<@(~.#~1=#/.~)@(]\)]

সমাধানের পৃথক উপাদানগুলিতে এখানে একটি সংস্করণ ভাগ করা আছে:

unqs =. ~. #~ 1 = #/.~               NB. uniques; items that appear exactly once
allsbsq =. #\ <@unqs@(]\) ]        NB. all unique subsequences
shrtsbsq =. [: >@{.@(#~ #@>) allsbsq NB. shortest unique subsequence
  • x #/. yxপ্রায়শই প্রায়শই ঘটে তার প্রতিটি স্বতন্ত্র উপাদানের জন্য গণনা y। যদি আমরা এটি হিসাবে ব্যবহার করি তবে আমরা তার গণনায় y #/. yপ্রতিটি স্বতন্ত্র উপাদানের জন্য পাই y। উদাহরণস্বরূপ, ফলনের a #/. aজন্য ।a =. 1 2 2 3 4 41 2 1 2
  • 1 = yকোন আইটেমের yসমান তা পরীক্ষা করে 1। উদাহরণস্বরূপ, 1 = a #/. aফলন1 0 1 0
  • u~হয় আত্মবাচক একটি পরমাণুসদৃশ্য ক্রিয়াপদের u। এটি, u~ yহিসাবে একই y u y। সুতরাং, #/.~ yহিসাবে একই #/.~ y। যখন একটি ডায়াডিক ক্রিয়া প্রয়োগ করা u~হয় তখন এর প্যাসিভ হয় u। যে, x u~ yহিসাবে একই y u x। এগুলি বেশ কয়েকটি অন্যান্য জায়গায় ব্যবহার করা হয় যা আমি স্পষ্টভাবে উল্লেখ করি না।
  • ~. yহয় সারকথা এর yসরানো সদৃশ সঙ্গে একটি ভেক্টর। উদাহরণস্বরূপ, ~. aফলন 1 2 3 4
  • x # y( অনুলিপি ) yসূচকগুলিতে আইটেমগুলি থেকে নির্বাচন করে যেখানে x1
  • সুতরাং, (1 = y #/. y) # (~. y)সেই উপাদানগুলির একটি ভেক্টর তৈরি করে yযার উপাদানগুলি একবারে প্রদর্শিত হয়। সূক্ষ্ম স্বরলিপিতে, এই ক্রিয়াটি হিসাবে লেখা হয় ~. #~ 1 = #/.~; আসুন unqsবাকী ব্যাখ্যার জন্য এই বাক্যাংশটি কল করুন ।
  • x ]\ yএকটি সৃষ্টি xদ্বারা 1 + y - xসব অ্যারে infixes ভেক্টরের yদৈর্ঘ্যের x। উদাহরণস্বরূপ, 3 ]\ 'asdfasdfdফলন

    asd
    sdf
    dfa
    fas
    asd
    sdf
    dfd
    
  • # yহয় ট্যালি এর y, যে উপাদানের সংখ্যা y

  • u\ yএর uপ্রতিটি উপসর্গের জন্য প্রযোজ্য y। ঘটনাচক্রে, #\ yথেকে থেকে পূর্ণসংখ্যার ভেক্টর তৈরি 1করে #y
  • < y রাখে yএকটি বাক্সে । এটি দরকার কারণ অ্যারেগুলি র‌্যাগ করা যায় না এবং আমরা বিভিন্ন দৈর্ঘ্যের প্রত্যয়ের একটি অ্যারে গণনা করি; একটি বক্সযুক্ত অ্যারে একটি স্কেলার হিসাবে গণনা করা হয়।
  • সুতরাং, দৈর্ঘ্যের কে (সমস্ত 0 ≤ কে < সমস্ত জন্য ) y এর ইনফিক্সগুলি যা ঠিক একবারে ঘটবে (i. # y) <@:unqs@(]\) yএর #yবাক্সযুক্ত অ্যারেগুলির একটি ভেক্টর তৈরি করে । এই ক্রিয়াটির স্বতন্ত্র রূপটি বা আমরা যদি নামটি ব্যবহার না করি । এই ব্যাখ্যা বাকী জন্য এই বাক্যাংশ কল করুন । উদাহরণস্বরূপ, ফলন:#yi.@# <@unqs@(]\) ]i.@# <@(~. #~ 1 = #/.~)@(]\) ]unqsallsbsqallsbsq 'asdfasdfd'

    ┌┬─┬──┬───┬────┬─────┬──────┬───────┬────────┐
    ││ │fa│dfa│sdfa│asdfa│asdfas│asdfasd│asdfasdf│
    ││ │fd│fas│dfas│sdfas│sdfasd│sdfasdf│sdfasdfd│
    ││ │  │dfd│fasd│dfasd│dfasdf│dfasdfd│        │
    ││ │  │   │sdfd│fasdf│fasdfd│       │        │
    ││ │  │   │    │asdfd│      │       │        │
    └┴─┴──┴───┴────┴─────┴──────┴───────┴────────┘
    
  • (#@> y) # yবাক্সযুক্ত অ্যারেগুলির ভেক্টর থেকে নেওয়া yযা খালি নয়।

  • {. yভেক্টরের প্রথম উপাদান নেয় y
  • > yবক্সটি সরিয়ে দেয় y
  • সুতরাং, > {. (#@> y) # yবাক্সযুক্ত অ্যারেগুলির ভেক্টর থেকে আনবক্সড প্রথম অ-খালি অ্যারের ফলন y। এই বাক্যাংশটি >@{.@(#~ #@>)স্বরলিখনে রচিত ।
  • শেষ অবধি, আমাদের যে সমস্যা রয়েছে তার সমাধান তৈরি করতে [: >@{.@(#~ #@>) allsbsqপূর্ববর্তী বাক্যাংশটি একত্রিত করে allsbsq। স্পেস সহ পুরো বাক্যাংশটি এখানে:

    [: >@{.@(#~ #@>) i.@# <@(~. #~ 1 = #/.~)@(]\) ]
    

2

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

import Data.List
f ""=[""]
f g=map(snd)$head$groupBy(\a b->fst a==fst b)$sort[(length y,y)|[y]<-group$sort[x|x@(_:_)<-tails g>>=inits]]

2

পিএইচপি, 171 152 134 125

function f($s){while(!$a&&++$i<strlen($s))for($j=0;$b=substr($s,$j++,$i);)strpos($s,$b)==strrpos($s,$b)&&($a[]=$b);return$a;}

http://3v4l.org/RaWTN


আপনার স্পষ্টভাবে সংজ্ঞা দেওয়ার দরকার নেই $j=0। এগিয়ে, আপনার আছে substr($s,$j++,$i)। সংজ্ঞায়িত না করে $j, আপনি এটিকে আবার লিখতে পারেন substr($s,0+$j++,$i)এবং আপনি 2 বাইট সংরক্ষণ করেন। কেন এমন? ঠিক আছে, প্রথমবার, $jহবে null। আর তুমি কার্যকরভাবে ক্ষণস্থায়ী হতে হবে nullকরার substr, যা আমি মনে করি না ভাল কাজ করবে না। ব্যবহার 0+$j++রূপান্তর করবে nullকরার 0। যদি আপনি দেখতে পান যে এটির প্রয়োজন নেই, এটি ছাড়া এগিয়ে যান এবং কেবল $j=0অংশটি সরিয়ে দিন ।
ইসমাইল মিগুয়েল

চেষ্টা করেছেন যে; এটি কাজ করে না কারণ পিএইচপি-র শক্তিশালী স্কোপিং নেই, সুতরাং লুপের $jপ্রতিটি পুনরাবৃত্তির জন্য ক্লিয়ার করে পুনরায় পুনরায় তৈরি করা হয় না while()। সুতরাং এটি শূন্য হওয়ার সময় (এবং তাই এটি 0একটি $j++কল দ্বারা রূপান্তরিত হবে ) প্রথম বারের দিকে, ভবিষ্যতের বাহ্যিক লুপের পুনরাবৃত্তির উপর এটি আগে যে মূল্য ছিল তা রেখে গেছে। এটি পুনরায় সেট করার মতো আরম্ভ নয়। পরামর্শ দেওয়ার জন্য ধন্যবাদ যদিও :-)
স্টিফেন

এখানে আমি আপনাকে একটি 141 বাইট দীর্ঘ সমাধান প্রস্তাব করছি: function f($s){$l=strlen($s);while(!$a&&++$i<$l)for($j=0;$j<$l;)($b=substr($s,$j++,$i))&(strpos($s,$b)==strrpos($s,$b)&&($a[]=$b));return$a;}পরিবর্তনগুলি: আপনার সমস্ত সরানো হয়েছে, এক জায়গায় পরিবর্তে ||1বিটওয়াইস &( AND) ব্যবহার করেছেন &&, $j<$l&&[...]অংশটি for(2 বাইট সংরক্ষণের) বাইরে সরানো হয়েছে এবং কিছু অপ্রয়োজনীয় প্রথম বন্ধনী সরানো হয়েছে।
ইসমাইল মিগুয়েল

1
এক 134 তোমার জন্য দীর্ঘ উপহার বাইট: function f($s){$l=strlen($s);while(!$a&&++$i<$l)for($j=0;$j<$l;)strpos($s,$b=substr($s,$j++,$i))==strrpos($s,$b)&&($a[]=$b);return$a;}পরিবর্তনসমূহ পূর্ববর্তী কোডে করেছেন: সরানো $b=substr($s,$j++,$i)মধ্যে strpos($s,$b)এটি তৈরীর strpos($s,$b=substr($s,$j++,$i)), আরো unecessary parenthesys মুছে ফেলেছি এবং অপ্রয়োজনীয় মুছে &
ইসমাইল মিগুয়েল

1
Managed একটু বেশি চপ :-) substr($s,$j++,$i)আয় ""যখন $jপৌছানোর স্ট্রিং এর দৈর্ঘ্য, এবং falseতারপরে, যাতে নিয়োগ এছাড়া লুপ শর্তসাপেক্ষ বিরতি হিসেবে পরিবেশন করতে পারেন। তারপরে $lবাকি মাত্র একটি ব্যবহার রয়েছে , যাতে এটিও একীভূত করা যায়।
স্টিফেন

2

গ্রোভি (ওরাকল বাস্তবায়নে জাভা রেজিেক্স), 124

c={m=it=~/(?=(.*?)(?=(.*))(?<=^(?!.*\1(?!\2$)).*))/;o=m.collect({it[1]});o.findAll({it.size()==o.min({it.size()}).size()});}

গ্রোভির 2.4 + ওরাকল জেআরই 1.7 এ পরীক্ষিত। রেগেক্সটি জাভা 6 থেকে জাভা 8-র জন্য কাজ করা উচিত, যেহেতু উপরের কোডটি কাজ করতে দেয় এমন বাগটি ঠিক করা হয়নি। পূর্ববর্তী সংস্করণটির জন্য নিশ্চিত নয়, যেহেতু জাভা 5 এ লুক-ব্যাক বাগ রয়েছে যা জাভা 6 এ স্থির করা হয়েছিল।

রেজেক্স সংক্ষিপ্ততম স্ট্রিংটি আবিষ্কার করে যার ইনপুট স্ট্রিংয়ের প্রতিটি অবস্থানে ডুপ্লিকেট সাবস্ট্রিং অন্য কোথাও নেই। বাইরের কোডটি ফিল্টারিংয়ের যত্ন নেয়।

(?=(.*?)(?=(.*))(?<=^(?!.*\1(?!\2$)).*))
  • যেহেতু স্ট্রিংগুলি ওভারল্যাপ করতে পারে, তাই আমি পুরো জিনিসটি সামনে এগিয়ে নিয়ে যাচ্ছি (?=...)
  • (.*?) সংক্ষিপ্ততম স্ট্রস্ট্রিং থেকে অনুসন্ধান করে
  • (?=(.*)) বর্তমান অবস্থান চিহ্নিত করতে বাকী স্ট্রিং ক্যাপচার করে।
  • (?<=^(?!.*\1(?!\2$)).*)পরিবর্তনশীল দৈর্ঘ্যের চেহারা পিছনে একটি অনুকরণ, যা বাস্তবায়ন বাগের সাহায্য নেয় যা (?<=.*)দৈর্ঘ্যের চেকটি পাস করতে দেয় ।
  • (?!.*\1(?!\2$))কেবলমাত্র অন্য যে কোনও জায়গায় একই স্ট্রারিং খুঁজে পাওয়া যায় না তা পরীক্ষা করে। (?!\2$)মূল অবস্থান যেখানে সাবস্ট্রিং মিল দেখা যায় প্রত্যাখ্যান করে।

    বাইরের চেহারা-আশেপাশের নির্মাণের সীমা নেস্টেড লুক-পার্শ্ববর্তী কনস্ট্রাক্টের জন্য প্রযোজ্য নয়। সুতরাং, নেস্টেড নেগেটিভ লুক-ফরোয়ার্ড (?!.*\1(?!\2$))কেবল চেহারা-পিছনের ডান সীমানা অবধি নয়, পুরো স্ট্রিংয়ের জন্য যাচাই করে।


2

রেবোল, 136 বাইট

f: func[s][repeat n length? b: copy s[unless empty? x: collect[forall s[unless find next find b t: copy/part s n t[keep t]]][return x]]]

Ungolfed:

f: func [s] [
    repeat n length? b: copy s [
        unless empty? x: collect [
            forall s [
                unless find next find b t: copy/part s n t [keep t]
            ]
        ][return x]
    ]
]

ব্যবহারের উদাহরণ:

>> f ""       
== none

>> f "abcaa"
== ["b" "c"]

>> f "rererere"
== ["ererer"]

>> f "asdfasdfd"
== ["fa" "fd"]

>> f "ffffhhhhfffffhhhhhfffhhh"
== ["hffff" "fffff" "hhhhh" "hfffh"]

>> f "asdfdfasddfdfaddsasadsasadsddsddfdsasdf"
== ["fas" "fad" "add" "fds"]


বিশেষ দ্রষ্টব্য। আমি মনে করি কোডটির হৃদয় হল findঅংশটি কীভাবে কাজ করছে। আশা করি এটি ব্যাখ্যা করতে সহায়তা করবে ...

>> find "asdfasdfd" "df"
== "dfasdfd"

>> next find "asdfasdfd" "df"
== "fasdfd"

>> find next find "asdfasdfd" "df" "df"
== "dfd"

>> ;; so above shows that "df" is present more than once - so not unique
>> ;; whereas below returns NONE because "fa" found only once - ie. bingo!

>> find next find "asdfasdfd" "fa" "fa"
== none

1

হাস্কেল, ১১৯

f s=[r|n<-[1..length s],l<-[map(take n)$take(length s-n+1)$iterate(drop 1)s],r<-[[j|j<-l,[j]==[r|r<-l,r==j]]],r/=[]]!!0

আপনি q = lengthকোথাও রাখতে পারেন এবং ব্যবহার করতে পারেন q, কিছু বাইট বন্ধ করে দেন
রবআউ

1

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

sᶠ≡ᵍ~gˢlᵍt

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

sᶠ            The list of every substring of the input
  ≡ᵍ          grouped by identity,
    ~gˢ       with length-1 groups converted to their elements and other groups discarded,
       lᵍ     and grouped by their length,
         t    has the output as its last group.

যদিও এটি প্রাকৃতিকভাবে এটির মান অনুসারে ভাগ করে না, পরিবর্তে প্রতিটি মানের প্রথম উপস্থিতি দ্বারা গোষ্ঠীগুলিকে অর্ডার করে, প্রতিটি দৈর্ঘ্যের প্রথম সংঘটন ক্রমহ্রাসমান হয়। আমি 100% নিশ্চিত নই যে স্বতন্ত্রতা ফিল্টারিং এটিকে জবাবদিহি করতে পারে না তবে আমি এখনও পরীক্ষার কেসটি নিয়ে আসিনি যা এই ব্যর্থ হয়।


1

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

Œʒ¢}é.γg}н

খালি স্ট্রিংয়ের জন্য কিছুই আউটপুট দেয় না।

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

ব্যাখ্যা:

Œ           # Get all substrings of the (implicit) input-String
 ʒ          # Filter it by:
  ¢         #  Count how many times the current substring occurs in the (implicit) input-String
            #  (only 1 is truthy in 05AB1E, so the filter will leave unique substrings)
          # After the filter: sort the remaining substrings by length
     g}   # Then group them by length as well
         н  # And only leave the first group containing the shortest substrings
            # (which is output implicitly as result)

এটি 05AB1E এর কেবলমাত্র 1সত্যবাদী মান হিসাবে রয়েছে এবং সমস্ত কিছু মিথ্যা হিসাবে গ্রহণ করে। সংক্ষিপ্ততম অনন্য স্ট্রাস্টিং সর্বদা সমস্ত সম্ভাব্য ইনপুট-স্ট্রিংয়ের জন্য ঠিক একবারে আসার গ্যারান্টিযুক্ত। (কেবল একই অক্ষর (যেমন aaaaa) সমেত একটি ইনপুট-স্ট্রিংয়ের জন্য , ইনপুট-স্ট্রিংগুলি নিজেই সাবস্ট্রিং হিসাবে মাত্র একবারে আসে, ফলস্বরূপ ["aaaaa"]rep পুনরাবৃত্তি প্যাটার্ন সহ একটি ইনপুট- স্ট্রিংয়ের জন্য (যেমন "abcabc"), এখনও কেবল অনন্য সাবস্ট্রিং রয়েছে যা কেবলমাত্র একবার ( ["abca","abcab","abcabc","bca","bcab","bcabc","ca","cab","cabc"]) দেখা দেয়, সুতরাং এর ফলাফল হবে ["ca"])


0

পাইথন 2, 150

import re
a=input()
r=range
l=len(a)
d=0
for i in r(l):
 if d:break
 for j in r(l-i):
  k=a[j:i+j+1]
  if len(re.findall("(?="+k+")",a))<2:d=1;print k

ধূসর অঞ্চল, এটি মুদ্রণ করা উচিত "", তবে আপনি কিছুই মুদ্রণ করবেন না।
জাকুবে

1
@ জাকুব "আউটপুটটির সঠিক বিন্যাসটি নমনীয়"
কেএসএফটি ২

তবে আপনার কোনও আউটপুট নেই।
জাকুবে

2
@ জাকুব আউটপুটটি খালি স্ট্রিং, এটি যেমন অনুমান করা উচিত like আমার কাছে এর চারপাশে উদ্ধৃতি নেই।
কেএসএফটি

1
@ জাকুব আমি এটির অনুমতি দেব, যেহেতু খালি স্ট্রিংটি একটি বিশেষ ক্ষেত্রে।
Zgarb

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