সমস্ত স্ট্রিং আউটপুট


34

অক্ষরের একটি সেট দেওয়া, সেই অক্ষরগুলির তৈরি সমস্ত স্ট্রিং আউটপুট। (এটি সেটের ক্লিন তারকা )) উদাহরণস্বরূপ, {'a','b'}স্ট্রিংগুলি হ'ল :

'', 'a', 'b', 'aa', 'ab', 'ba', 'bb', 'aaa', 'aab', ...

ইনপুট: স্বতন্ত্র অক্ষরের একটি খালি খালি সংগ্রহ a..z। এগুলি অক্ষর বা একক-চরিত্রের স্ট্রিং হতে পারে।

আউটপুট: সেই অক্ষরগুলির সমস্ত স্ট্রিং, কোনও ক্রমে, পুনরাবৃত্তি ছাড়াই। আপনি অক্ষরের তালিকা হিসাবে অক্ষরের তালিকা ব্যবহার করতে পারেন।

এটি একটি অসীম তালিকা, সুতরাং আপনি এটি দ্বারা আউটপুট করতে পারেন:

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

নিশ্চিত হয়ে নিন যে আপনার পদ্ধতি অবশেষে আউটপুটে প্রতিটি স্ট্রিং তৈরি করে, যেহেতু কখনও কখনও কিছু স্ট্রিং না পেয়ে সেট থেকে অসীম বহু স্ট্রিং তৈরি করা সম্ভব।

আপনি may না আউটপুট এটি দ্বারা

  • nপ্রদত্ত th স্ট্রিং উত্পাদনn
  • একটি সদস্যপদ ওরাকল সরবরাহ করা যা প্রদত্ত স্ট্রিংটি সেটের সাথে সম্পর্কিত কিনা তা স্থির করে

বিল্ট-ইনগুলি অনুমোদিত, তবে আমি ভোটারদের এমন উত্তরগুলির দিকে মনোযোগ দিতে বলি যা বেশিরভাগ একটি বিল্ট-ইন-এ নির্ভর করে এমনগুলির উপর তাদের পরিচালনা পরিচালনা করে।


@ কিয়েস নিশ্চিত নয় আপনি কী বোঝাতে চাইছেন। আমি স্পষ্ট করেছিলাম যে স্ট্রিংগুলি অবশ্যই আলাদা করতে হবে, তাই আপনি কোনও কিছুই থেকে খালি স্ট্রিংটি বলতে পারবেন।
xnor

"Nth স্ট্রিং প্রদত্ত এন" কেন অনুমোদিত নয় তা দয়া করে ব্যাখ্যা করুন।
ক্যালকুলেটরফলাইন

4
@ ক্যাটসআরএলফ্লি এটি একটি রায় রায় ছিল। আমি মনে করি বিকল্পগুলির তুলনায় নবম স্ট্রিং উত্পাদন করা খুব সহজ হবে এবং চ্যালেঞ্জটিকে কম আকর্ষণীয় করে তুলবে, বিশেষত কারণ কিছু ভাষাগুলি স্বেচ্ছাসেবী-বেস রূপান্তর করেছে। এছাড়াও, আমি ভাবি নি যে এটি অনুসন্ধানের চেয়ে অনন্ত সেট তৈরি করার ধারণাটি ধারণ করেছে।
xnor

আপনি "একটি অসীম বস্তু উত্পাদন" ব্যাখ্যা করতে পারেন? এর অর্থ কি আমরা উদাহরণস্বরূপ প্রতিটি স্ট্রিংকে স্ট্যাকের উপরে ধাক্কা দিতে পারি (স্ট্যাক ভাষার জন্য) এবং এটিকে "চিরতরে" চালাতে দিন, এমনকি যদি কোনও আউটপুট উত্পাদিত হবে না কারণ প্রোগ্রামটি শেষ হবে না?
লুইস মেন্ডো

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

উত্তর:


26

পাইথন 2, 53 56

-3 বুঝতে পেরে যা yield xঅভিব্যক্তি হিসাবে ব্যবহার করা যেতে পারে।

def f(s):yield'';[(yield w+c)for w in f(s)for c in s]

এক বাইট খাটো কিন্তু এ শুরু 'aa'বদলে এ '': S=lambda s:(c+w for f in[str,S]for w in f(s)for c in s)। খালি ইনপুটটির জন্যও কাজ করে না।
orlp

20

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

f s=[]:[b:a|a<-f s,b<-s]

অসীম তালিকা তৈরি করে।

*Main> f "abc"
["","a","b","c","aa","ba","ca","ab","bb","cb","ac","bc","cc","aaa","baa","caa","aba","bba","cba",…

খুব খারাপ (:)<$>s<*>f sভুল অর্ডার দিতে হবে। আছে f s="":(flip(:)<$>f s<*>s)কিন্তু এটি দীর্ঘ।
xnor

হ্যাঁ। আমি পাওয়া যায় 23-বাইট f s=[]:(f s<**>map(:)s)যে ব্যতীত <**>নয় Prelude
অ্যান্ডারস ক্যাসরগ

11

জাভাস্ক্রিপ্ট (ES6), 61 বাইট

function*g(s){yield'';for(let r of g(s))for(c of s)yield c+r}

@ ফেয়ারসামের পাইথন জেনারেটরের পোর্ট। letপ্রয়োজনীয়। অ্যারে উপলব্ধি ব্যবহার করে 2 বাইট সংরক্ষণ করুন (ইএস 7 প্রস্তাব ব্যর্থ হয়েছে, তবে ফায়ারফক্স 30-57 এ কাজ করে):

function*g(s){yield'';[for(r of g(s))for(c of s)yield c+r]}

73৩ বাইটের জন্য বিকল্প সংস্করণ nযা উপরের জেনারেটরের দ্বারা উত্পাদিত প্রথম উপাদানগুলি প্রদান করে:

(s,n)=>Array(n).fill('').map(g=(r,i)=>i--?g(r+s[i%l],i/l|0):r,l=s.length)

জেনারেটর আছে জেএস? : 0000000
বিড়াল

10

গণিত, 32 31 বাইট

Do[Echo/@#~Tuples~n,{n,0,∞}]&

সম্পাদনা:

বিড়ালস আয়ারফ্লুফি এক বাইট বন্ধ করে দেয়।


8

পার্ল, 39 37 35 বাইট

(প্রথমে একটি পুরানো সংস্করণ বর্ণনা করে new নতুন সংক্ষিপ্ত প্রোগ্রামের শেষে)

জন্য +3 অন্তর্ভুক্ত -alp

STDIN- তে অক্ষরের সেট দিয়ে চালান perl -alp kleene.pl <<< "a b c"

kleene.pl (এই সংস্করণটি 34 + 3 বাইট):

$#a=$"=","}for(@a){push@a,<{@F}$_>

এর জন্য +2 যুক্ত করুন -F( -aইনপুট অক্ষরের মধ্যে ফাঁক না থাকলে অন্তর্হিত ড্রপ করুন, বা -6 (কেবলমাত্র @a=""আগে }) যদি আমরা ইতিমধ্যে STDIN- তে অক্ষরের মধ্যে কমা রেখেছি

ব্যাখ্যা:

-alpঅপশন কোড কার্যকরভাবে করুন:

BEGIN { $/ = "\n"; $\ = "\n"; }
LINE: while (defined($_ = <ARGV>)) {
    chomp $_;
    our @F = split(' ', $_, 0);
    $#a = $" = ',';
}
foreach $_ (@a) {
    use File::Glob ();
    push @a, glob('{' . join($", @F) . '}' . $_);
}

যেমন আপনি <>পার্ল দেখতে পাচ্ছেন তা কেবল পঠনের জন্যই ব্যবহৃত হয় না, তবে শেল শৈলীর গ্লোববিংও করতে পারে (বাস্তবে প্রাচীন পার্সগুলিতে এটি শেল ডাকার মাধ্যমে প্রয়োগ করা হয়েছিল)।

উদাহরণস্বরূপ <{a,b}{1,2}>প্রসারিত হবে"a1","a2","b1","b2"

সুতরাং আমাদের যদি উপাদানগুলি থাকে @Fতবে কেবল অন্তর্নির্মিত কমা যোগ করতে হবে। ইন্টারপোলেশন জন্য ডিফল্ট অন্তর্নিহিত চরিত্রটি স্থান, যা বিশেষ ভেরিয়েবলে সংরক্ষণ করা হয় $"। সেটিং তাই $"করতে ,চালু হবে "{@F}"মধ্যে {a,b}যদি @F=qw(a b)(globs স্ট্রিং যেমন প্রসারিত)

আসলে আমি এই জাতীয় কিছু দিয়ে লুপ করতে পছন্দ করতাম glob"{@F}"x$n++তবে আমি প্রথম দিকে খালি লাইনটি তৈরি না হয়ে এবং এই সমস্যাটি খুঁজে পেয়েছি যে কোডটি খুব দীর্ঘ করে দিয়েছে তাতে আমি চালিয়ে যেতে থাকি।

সুতরাং এই কোডের আর একটি প্রয়োজনীয় অংশ হ'ল আপনি যদি forএকটি অ্যারের উপরে লুপটি ব্যবহার করেন তবে লুপ চলাকালীন সময়ে এটিতে অতিরিক্ত উপাদানগুলি চাপ দিতে পারেন এবং লুপটিও এই নতুন উপাদানগুলিকে বেছে নিতে পারে। সুতরাং যদি লুপটিতে আমরা যেমন উপাদান হিসাবে থাকি "ab"তবে তালিকার প্রেক্ষাপটে যা হয়ে যায় <{@F}$_>তা প্রসারিত হবে । সুতরাং আমি যদি এগুলিকে চাপ দিই তবে স্ট্রিংগুলি বাম দিকে প্রসারিত হয়ে যায় available<{a,b}ab>("aab", "bab")@a

আমাকে এখনও খালি স্ট্রিং সহ লুপটি প্রাইম করা দরকার। এটি $#a = 0( ,সংখ্যার প্রেক্ষাপটে হয়ে ওঠে 0) ব্যবহার করে সম্পন্ন হয়েছে যার ফলে প্রথম এবং একমাত্র উপাদানটি অপরিবর্তিত @aহয়ে যায় যা ""আমি যখন এটি ব্যবহার করি তখন এর মতো আচরণ করবে

উন্নতি

প্রকৃতপক্ষে এই ব্যাখ্যার জন্য পরীক্ষা করে আমি একটি বর্ধমান গ্লোব ব্যবহার করার জন্য একটি ছোট উপায় খুঁজে পেয়েছি যা প্রথম খালি প্রবেশকে সঠিকভাবে পরিচালনা করে। হিসাবে চালান perl -ap kleene0.pl <<< "a b"(সুতরাং 2 বাইট যোগ করুন -ap)

kleene0.pl (এই সংস্করণটি 33 + 2 বাইট):

$"=",";print<$z,>;$z.="{@F}";redo

এই সমস্ত সমাধান মেমোরিতে আউটপুটটির আরও বেশি করে রাখবে এবং এর ফলে প্রোগ্রামটি কিছু সময়ের পরে ব্যর্থ হয়। আপনি অলস প্রজন্মের জন্য স্কেলার প্রসঙ্গে তাদের ব্যবহার করে পার্ল গ্লোবগুলিও ব্যবহার করতে পারেন, তবে এটি প্রোগ্রামগুলিকে দীর্ঘায়িত করে ....


ব্যাখ্যা কি কাছাকাছি চলছে খুশি করতে পারে না: <{@F}$_>? ধন্যবাদ!
andlrc

6

পাইথ, 7

<s^LzQQ

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

এটি প্রতিটি সংখ্যার সাথে ইনপুটটির কার্টেসিয়ান পণ্যটি গণনা করে 0..n-1, তাদের সাথে যোগ দেয় এবং তারপরে কেবল প্রথমটি রাখে n। এটি 3-4 বা তার চেয়ে অনেক বড় স্ট্রিংগুলির জন্য অনলাইনে সময় নির্ধারণ করবে।

বিকল্পভাবে, অসীম আউটপুট পেতে জাকুবের উত্তরটি দেখুন


5

জেলি, 8 6 বাইট

⁷³p$Ȯ¿

এটি একটি মোনাডিক লিঙ্ক যা একটি বর্ণমালা গ্রহণ করে এবং স্ট্রিংগুলির একটি অসীম তালিকা মুদ্রণ করে। এটি অনলাইন চেষ্টা করুন!

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

⁷³p$Ȯ¿    Monadic link. Argument: A (alphabet)

⁷         Set the return value to '\n'.
     ¿    While loop.
            Condition:
    Ȯ         Print the current return value and return it (always truthy).
            Body:
   $          Combine the two links to the left into a single, monadic link.
 ³              Yield A.
  p             Perform the Cartesian product of A and the current return value,
                updating the return value in the process.

বিকল্প সংস্করণ, 6 বাইট (প্রতিযোগী নয়)

R’ḃL}ị

এটি একটি ডায়াডিক লিঙ্ক যা যথাক্রমে বাম এবং ডান যুক্তি হিসাবে একটি বর্ণমালা এবং পছন্দসই সংখ্যক স্ট্রিং গ্রহণ করে।

আমি এই সংস্করণটিকে অ-প্রতিদ্বন্দ্বিতাপূর্ণ বিবেচনা করছি, যেহেতু এটি দ্বিঘাতিক বেস রূপান্তর ব্যবহার করে, যা এই চ্যালেঞ্জটি স্যান্ডবক্সড হওয়ার পরে প্রয়োগ করা হয়েছিল। এটি অনলাইন চেষ্টা করুন!

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

R’ḃL}ị    Dyadic link. Arguments: n (integer), A (alphabet)

R         Range; yield [1, ..., n].
 ’        Decrement; yield [0, ..., n-1].
   L}     Yield l, the length of A.
  ḃ       Convert every i in [0, ..., n-1] to bijective base l.
     ị    For each array of digits, retrieve the corresponding characters of A.


4

সিজেম, 16 10 বাইট

6 বাইট সংরক্ষণের জন্য জিমি 23013 ধন্যবাদ Thanks

N{eam*_o}h

ইনপুট হ'ল অক্ষর প্রতি এক কমান্ড-লাইন আর্গুমেন্ট। আউটপুট প্রতিটি লাইনের একটি স্ট্রিং।

এটি অনলাইন চেষ্টা করুন! (তবে তাৎক্ষণিকভাবে হত্যা করুন ...)

ব্যাখ্যা

N      e# Push [\n]. At each step this array will contain all strings of length N,
       e# each followed by a linefeed.
{      e# Infinite loop...
  ea   e#   Read command-line arguments.
  m*   e#   Cartesian product: pairs each letter with each string in the list.
  _o   e#   Output all the strings of the current length.
}h

3

পাইথ, 7 বাইট

.V0j^zb

@ ফ্রাইয়ের বিকল্প। এই প্রোগ্রামটি একটি স্ট্রিং পড়ে এবং অনন্ততা অবধি স্ট্রিং প্রিন্ট করতে থাকে।

ব্যাখ্যা:

.V0      for b in (0 to infinity):
    ^zb     compute all strings of length b consisting of the input alphabet
   j        print each one on a separate line

বিকল্পভাবে নিম্নলিখিতগুলিও কাজ করবে। যদিও একটু বেশি হ্যাকি।

u
M^zH7

3

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

k u=do s<-[0..];mapM(\_->u)[1..s]

উদাহরণ হিসাবে, k "xyz"অসীম তালিকা["","x","y","z","xx","xy","xz","yx","yy","yz","zx","zy","zz","xxx",...]


3

এমএটিএল , 10 বাইট

0cD`G@Z^DT

এটি অনলাইন চেষ্টা করুন! সার্ভারে বৃহত পরিমাণে গণ্য লোড এড়ানোর জন্য এটি দীর্ঘকাল ধরে চলতে দেবেন না।

প্রোগ্রামটি স্ট্রিংগুলি গতিশীলভাবে প্রদর্শন করে, প্রতিটি স্ট্রিং আলাদা লাইনে on

0cD             % force display of a newline to represent the empty string
   `      T     % infinite do-while loop
    G           % push input, or nothing if no input has been taken yet
     @          % push iteration. Gives 1, 2,... in each iteration
      Z^        % Cartesian power. In the first iteration takes input implicitly 
       D        % display

2

পাইথন 3, 95

from itertools import*
def f(x,l=0):
 while 1:print(*combinations_with_replacement(x*l,l));l+=1

ইটারটোল ফাংশনগুলির কেন এমন দীর্ঘ নাম থাকতে হবে।


3
combinations_with_replacementএটি মূল্যবান হয় না। আমি নিশ্চিত যে লুপগুলি ব্যবহার করা আরও কম orter সর্বদা.
mbomb007

2

রুবি, 65 60 বাইট

->a{n=-1;loop{puts a.repeated_permutation(n+=1).map &:join}}

এত দীর্ঘ অন্তর্নির্মিত নাম ...


1
আফাইক আপনার আগে জায়গার দরকার নেই এবং আপনি পুটের পরিবর্তে পি ব্যবহার করতে পারেন।
ফান্ড মনিকার লসুইট

@ কিপেসট্যাক্সেস স্থানটি নামানো যাবে না, এবং তার যুক্তিগুলিতে pকল inspectদেয় যা আউটপুট তৈরি করতে পারে[] ["a","b"] ["aa", "ab", ...
ডোরকনব

আমি আপনার উত্তর ভুল বুঝেছি। আমি ভেবেছিলাম এটি একটি অসীম অ্যারে তৈরি করে এবং এটি মুদ্রণ করছে। যাইহোক, আমি মোটামুটি নিশ্চিত যে অ্যারেতে, to_s পরিদর্শন করার জন্য aliised হয়, সুতরাং রাখে এবং পি একই আউটপুট আছে। ruby-doc.org/core-2.2.0/Array.html#method-i-to_s স্থানটি WRT: আপনি পরীক্ষা করেছেন? অবশ্যই আমি নিশ্চিত নই, তবে আমি এটি সম্পর্কে মোটামুটি নিশ্চিত।
ফান্ড মনিকার লসুইট

1

পাইকে (কমিট 31), 10 9 বাইট

=blR.fbtp

ব্যাখ্যা:

=b         -    set characters for base conversion to eval_or_not(input())
  l        -   len(^)
   R      -  [^, eval_or_not(input()]
    .f    - first_n(^)
      b   -    conv_base(^)
       t  -   ^[-1]
        p -  print(^)

1

স্কালা, 69

def f[A](s:Set[A]):Stream[List[A]]=Nil#::f(s).flatMap(x=>s.map(_::x))

অলস স্ট্রিমগুলি এই ধরণের জিনিসটির জন্য বেশ দুর্দান্ত।


1

জাপট, 50 40 34 28 বাইট

V²o ®s1+Ul)£UgXnH)¯X¦0}Ãâ ¯V

ইনপুট হয় "string", number of items। আউটপুট দৈর্ঘ্য অনুসারে বাছাই করা হয়, তারপরে বর্ণমালুর ক্রমের বিপরীতে। এটি অনলাইন পরীক্ষা!

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

V²  o ®   s1+Ul)£  UgXnH)¯  X¦ 0}Ã â ¯  V
Vp2 o mZ{Zs1+Ul)mX{UgXnH)s0,X!=0}} â s0,V

Vp2 o      // Create the range [0..V²).
mZ{     }  // Map each item Z in this range to:
Zs1+Ul)    //  Take the base-(1+U.length) representation of Z.
mX{     }  //  Map each char X in this to:
XnH        //   Parse X as a base-32 number.
Ug   )     //   Take the char at index -^ in U.
s0,X!=0    //   If X is 0, slice it to an empty string.
â          // Uniquify the result.
s0,V       // Slice to the first V items.

আপনি যদি 100 টিরও বেশি আইটেম করতে চান তবে এই সংস্করণটি কিছুটা সময় নেয়। আপনি যদি একটি দ্রুত সংস্করণ চান তবে এই 32-বাইটটি ব্যবহার করে দেখুন :

V*2 o ms1+Ul)f@!Xf'0î£UgXnH}ïV

1

দারুচিনি গাম, 6 বাইট

0000000: 6801 301c e74b                           h.0..K

প্রতিযোগিতামূলক নয় কারণ দারুচিনি গাম এই চ্যালেঞ্জের পরে তৈরি হয়েছিল।

এটি অনলাইনে চেষ্টা করুন (টিআইও আউটপুট সীমাবদ্ধ করে)।

ব্যাখ্যা

hমধ্যে দারুচিনি গাম রাখে বিন্যাস এবং মোড উৎপন্ন । স্ট্রিংয়ের বাকী অংশগুলি decompress হয় [%s]*%sতারপর ইনপুট দিয়ে প্রতিস্থাপিত হয়, এবং একটি জেনারেটরের আউটপুট Regex মিলে সব সম্ভব স্ট্রিং তৈরি করা হয়।



0

পাইথন, 55 বাইট

s=input();l=['']
for x in l:print x;l+=[x+c for c in s]

এটি ফেয়ারসামের 53-বাইট সমাধানের চেয়ে দীর্ঘ , তবে এটি মুদ্রিত আউটপুট সহ একটি পৃথক পদ্ধতি চিত্রিত করে। ক্রমতালিকাl পুনরাবৃত্ত হওয়ার সাথে সাথে প্রতিটি স্ট্রিংয়ের প্রতিটি এক-অক্ষর প্রত্যয় যুক্ত করে আপডেট করা হয় read

এটি ব্যবহারের জন্য এটি সমান দীর্ঘ map:

s=input();l=['']
for x in l:print x;l+=map(x.__add__,s) 

পাইথন 3 এ একই দৈর্ঘ্যটি করা যেতে পারে, এর জন্য একটি চার্জ হারাতে print()এবং ইনপ্যাক প্যাকিংয়ের মাধ্যমে একটি সাশ্রয় করা।

s,*l=input(),''
for x in l:print(x);l+=[x+c for c in s]

0

Zsh , 31 বাইট

f(){<<<${(F)a};a=($^a$^@);f $@}

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

অ্যারেটি মুদ্রণ করুন, তারপরে পুনরাবৃত্তি করার আগে আর্গুমেন্টগুলিতে জিপ করুন। ফাংশনটির নাম অন্তর্ভুক্ত করা সত্ত্বেও, এটি পুনরাবৃত্ত সংস্করণের চেয়ে এক বাইট ছোট:

for ((;;))<<<${(F)a}&&a=($^a$^@)
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.