Çok fazla maymun var


35

Sonsuz maymun teoremi yani sonsuz zamanı göz önüne alındığında, rasgele karakterler sonsuz akışı gönderen bir makine herzaman belirli metni yazın edecektir belirtiyor.

Bana bir meydan okuma için harika bir fikir gibi geliyor.

süreç

Bir dizgiyi maymunla işaretlemek için, aşağıdaki adımlar izlenmelidir:

  1. Boş bir dize al. Bu dizgeye B diyeceğiz.
  2. (Aralığında karakterleri üniform bir şekilde rasgele bir ASCII karakter almak 0x20için 0x7E) ve B bu karakter eklemek
  3. A, B'nin alt dizesiyse, B bizim maymun dizemizdir. Aksi takdirde, A, B'nin bir alt zinciri olana kadar 2. adımı tekrarlayın.

Bu işlem yalnızca bir örnektir, dilinize bağlı olarak daha kolay yöntemler olabilir. Aynı çıktı dağılımına ulaşıldığı sürece bu yöntemi tam olarak uygulamanız gerekmez.

Meydan okuma

Boş olmayan bir dizgiye herhangi bir makul formatta verildiğinde , bu dizginin maymun biçiminde bir sürümünü döndüren bir program veya işlev yazın .

Programınız sadece pratik uzunluk 3 veya daha az olan girişler için çalışmalıdır. Daha uzun girdiler için, herhangi bir şeyi çıkarmadan veya vermeden erken sonlandırmaya izin verilir.

Örnek

Ne yazık ki, rastgele doğası ve büyük çıktıları nedeniyle bu soruya örnek oluşturmak biraz zor.

Ancak, Hastebin'deki girdi için tek bir örnekhi verebilirim.

puanlama

Bu , en az bayt olan gönderim kazanır.



11
Çıktıyı üretmek için açıklanan prosedürü takip etmemize gerek var mı? Eğer evet ise, bu gözlemlenemez bir gerekliliktir ve bu problemlidir. BOlmazsa, negatif olmayan nrasgele karakter sayısı hazırlayarak doğrudan üretebiliriz A. Öyleyse gerçek sorun şu ki n(geometrik bir dağılıma bahse girerim) dağılımını bilmek
Luis Mendo

1
@ seshoumara Sen olmayabilir.
LyricLy

7
@LuisMendo Bu çizgiler boyunca düşündüm ve doğrudan öneki oluşturmak kolay değil. Eklenen dizeyle karşılaştığı sınırı geçme dahil, hedef dizgiyi içeremez. Ve önek uzunluklarının dağılımı sadece hedef dizginin uzunluğuna değil aynı zamanda yapısına da bağlıdır.
xnor

10
Aşağıdaki çözüm bilgisayar programlarından bazıları, örneğin .W!}zH+ZOrd\kbir maymunun yazdığı gibi.
Jeppe Stig Nielsen

Yanıtlar:


12

C, 192 bayt

i;g(s,b,i,n,j)char*s,*b;{for(b[i+1]=0;b[n+j];++n)s[n]-b[n+j]&&(n=-1,++j);return n;}f(char*s){char*b=calloc(strlen(s),1);for(i=0;s[i];)i=(b[i]=putchar(rand()%95+32))-s[i]?i?g(s,b,i,0,0):0:i+1;}

Çevrimiçi deneyin!

Artık bir karmaşa, ama en azından köşe davalarında bile işe yarıyor ...


C,  63   62  61 bayt

Bir bayt tasarrufu için @Jonathan Frech için teşekkürler!

i;f(char*s){for(i=0;s[i=putchar(rand()%95+32)-s[i]?0:i+1];);}

Çevrimiçi deneyin!


Bunun neden
sustuğu

1
@ATaco Dizginin boş sonlandırıcısını ifade eden iyeterince büyük olduğunda durur s[i](karakter 0).
Steadybox

Oh, yani s yanlışlıkla oluşana kadar rasgele karakterler atmak yerine, s elde edinceye kadar rasgele karakterler atıyor. Akıllı.
ATaco

Bu cevabı sevdiğim kadarıyla, rand maymunları "aab" yazdığında bunun "ab" gibi bir girdiyi kırdığına inanıyorum.
zennehoy

Bu yaklaşımın geçerli olması için KMP gibi bir şeye ihtiyacınız olduğunu düşünüyorum. Girdi dizgisinin olduğunu farzedin ababcve maymunun ürettiği !!abababcprogramın durması mı?
user202729

9

Python , 79 bayt

f=lambda x,s='':x in s and s or f(x,s+chr(randint(32,126)))
from random import*

Çevrimiçi deneyin!

Bu teorik olarak sağlamdır, ancak python'un yineleme limitleri nedeniyle erken çökecektir (daha uzun sonuçlar elde etmek için onları daha fazla ayarlayabilirsiniz)

Python, 84 bayt

from random import*
x,s=input(),''
while x not in s:s+=chr(randint(32,126))
print(s)

Çevrimiçi deneyin!

Bu, 5 bayt pahasına, özyinelemeye bağlı olmadığından, nispeten daha uzun dizeler için çalışması gerekir.


Dize dönüşümünü yapmak için geri s+'randint(32,126)'
tepme tuşlarını

1
@wnnmaw backticked randint(32,126), ascii char eşlemesine değil sayının bir dizgisine neden olur
Uriel

8

Ohm v2 , 10 bayt

Ý£D³ε‽α@§↔

Çevrimiçi deneyin!

Açıklama:

Ý£D³ε‽α@§↔  Main wire, arguments: a (string)

Ý           Push empty string to top of stack
 £          Start infinite loop
  D³ε‽        If a is a substring of the ToS, break out of the loop
      α@§     If not, select a random printable ASCII character...
         ↔    ...and concatenate it with the ToS

8

GNU sed + coreutils, 75 + 1 (r bayrağı) = 76 bayt

h
:
s:.*:shuf -i32-126|dc -e?P:e
H;g
s:\n::2g
/^(.+)\n(.*)\1/{s::\2\1:;q}
b

Çevrimiçi deneyin! (2 uzunluğundaki bir giriş için bir cevap almak çok fazla zaman alır, çünkü çoğu zaman izin verilen TIO hesaplama zamanını alamazsınız.)

Açıklama:

h                                # copy input string 'A' to hold space
:                                # start loop
    s:.*:shuf -i32-126|dc -e?P:e # run shell script: shuf outputs a rnd permutation
                                 #of the set of numbers from 32 to 126, and '?P' in
                                 #dc converts the 1st read decimal to an ASCII char
    H;g                          # append char to hold space ('A\n.'), then copy
                                 #result back to pattern space
    s:\n::2g                     # remove all '\n's from pattern space, but first
    /^(.+)\n(.*)\1/{             # if pattern is 'A\n.*A' (A substring of B), then
        s::\2\1:;q               # search previous regex used and leave only '.*A',
                                 #then quit (implicit printing before exit)
    }
b                                # repeat loop

Benchmark: yaklaşık, sadece ölçeklendirme amaçlı

  • giriş uzunluğu: 1, 10 rasgele giriş (çalışır), ortalama süre: <1 s
  • giriş uzunluğu: 2, 10 rasgele giriş (çalışır), ortalama süre: 90 s
  • giriş uzunluğu: 3, 10 rasgele giriş (çalışır), ortalama süre: saatlerce!

7

Funky , 64 bayt

s=>{S=""whileS::sub((#S)-#s)!=s S+=S.char(math.random(32,126))S}

Bu, Funky'de kullanmak istediğim birkaç püf noktası kullanır, tıpkı bir anahtar kelimenin ardından gelen değişken adı gibi whileSve dolaylı olarak stringkütüphane için ana öğenin dizeleri olduğu gerçeğini kullanarak .

Ungolfed

function monkey(target){
    monkeyCode = ""
    while (monkeyCode::sub((#monkeyCode)-#target)!=target){
        monkeyCode += string.char(math.random(32,126))
    }
    monkeyCode
}

Çevrimiçi deneyin!


6
Öyleyse bu ... Funky maymunları mı?
Sebastian Lenartowicz

7

Haskell , 100 bayt

import System.Random
s#(a:b)|and$zipWith(==)s$a:b=s|1>0=a:s#b
m a=(a#).randomRs(' ','~')<$>newStdGen

Çevrimiçi deneyin!

Temel fikir, karakterleri içeren sonsuz bir karakter listesi oluşturmak randomRsve dizgiyi bulduktan sonra durdurmaktır.


Utanç isPrefixOfstandart Prelude'de değil…
Bergi

7

C # (.NET Core) , 86 bayt

a=>{var b="";for(var r=new Random();!b.Contains(a);b+=(char)r.Next(32,127));return b;}

Örneği oluşturmanın ne kadar Randomsürdüğünü gerçekten sevmiyorum , ancak bunun bir yolu olduğunu sanmıyorum.

Çevrimiçi deneyin!


3
PPCG'ye Hoşgeldiniz! Şu anda, çözümünüz düzgün bir şekilde rasgele bir karakter üretmiyor çünkü dokümanlara göre üst sınır geçildi Random.Next(Int32,Int32)ve bu yüzden üretilen sayılardan biri değildi. Bu urun, sabitlenebilir 126ile 127.
0 '

@ 0 'Yazıyor, yazarken düşündüm ama yazmadan önce kontrol etmeyi unuttum. Teşekkürler!
Wakawakamush

Aslında o kadar uzun bir yol var Random, değişken bildirimini kaldırabilirsiniz! 79 bayt
FlipTack

@FlipTack İlginç, ben C # Interactive denedim ve işe yaramadı çünkü aynı sayıyı üretmeye devam etti. TIO'da çalıştığını görmek garip.
Wakawakamush



6

R , 79 76 75 bayt

Rasgele örnekleyiciyi değiştiren MickyT sayesinde -3 bayt

Rastgele örnekleyiciyi tekrar ayarlamak için Robin Ryder'a -1 bayt teşekkürler

function(S){G=""
while(!grepl(S,G))G=paste0(G,intToUtf8(32+95*runif(1)))
G}

Çevrimiçi deneyin!


merhaba, örnek ile değiştirilebilirintToUtf8(runif(1,32,127))
MickyT

@MickyT mükemmel, teşekkür ederim!
Giuseppe

32+95*runif(1)Rastgele örnekleyiciniz olarak 1 byte tasarruf edebilirsiniz .
Robin Ryder

6

Kömür, 15 14 12 bayt

W¬№ωθ≔⁺ω‽γωω

Çevrimiçi deneyin! Bağlantı, kodun ayrıntılı bir versiyonudur. Düzenleme: Kömür içinde bir sonraki hata düzeltmesi nedeniyle 2 bayt kaydedildi. Açıklama:

    θ           Input string
   ω            Predefined variable `w`
  №             Count number of occurrences
 ¬              Logical not
W               Loop while true
       ω        Predefined variable `w`
      ⁺         Concatenated with
         γ      Predefined printable characters
        ‽       Random element
     ≔    ω     Assign to predefined variable `w`
           ω    Predefined variable `w`
                Implicitly print



4

Mathematica, 65 bayt

""//.x_/;x~StringFreeQ~#:>x<>RandomChoice@CharacterRange[32,126]&

Çevrimiçi deneyin!

Jonathan Frech'ten -3 bayt


Bence FromCharacterCode[RandomInteger@94+32]daha kısa bir eşdeğerdir RandomChoice@CharacterRange[32,126].
Jonathan Frech

@JonathanFrech evet, öyle!
J42161217



4

Oktav , 62 bayt

t=input(o="");while(~nnz(regexp(o,t)))o=[o,randi(95)+31];end;o

Çevrimiçi deneyin!

Açıklama:

t=input(o="");               % get stdin and define output
while(~nnz(regexp(o,t)))     % while no matches
    o=[o,randi(95)+31];      % concatenate string with ascii char
end;                            
o                            % output result

Düzenlemeler için Luis Mendo'ya çok teşekkürler!


1
Siteye Hoşgeldiniz! :)
DJMcMayhem

Eğer yerini alamaz isvectortarafından nnz? Ve strfindtarafından regexp. Ayrıca, randi(95)+31tüm sprintfifadeyi kullanabilirsiniz ( belki de char'a o=[o,randi(95)+31];örtük dönüşüm)
Luis Mendo

Ayrıca, genellikle girişini alan bir fonksiyon veya programa ihtiyaç duyarız (girişi içeren bir değişkeni tanımlamak yerine) - bunun
Luis Mendo

I️ bunu yapmaya teşebbüs etti, ama I️ özlü bir yol düşünemedi, bu yüzden onu atladı. Güzel revizyonlar!
Alan

1
Bu önerileri cevabınıza dahil etmekten çekinmeyin. Bu sitede standart
Luis Mendo


3

Alice , 21 bayt

/U!?"$~dr@
\idwz K"o/

Çevrimiçi deneyin!

açıklama

/...@
\.../

Bu, tamamen Ordinal (string-processing) modunda çalışan çoğunlukla doğrusal programlar için çerçevedir. IP, program boyunca iki kez çapraz olarak yukarı ve aşağı sekerek hareket eder; bu, gerçek kodun biraz tuhaf bir şekilde eklenmiş olduğu anlamına gelir. Gerçekten uygulandıkları sıradaki komutlar:

i!w" ~"rUd?z$Kdo

Şunun içinden geçelim:

i       Read all input.
!       Store the input on the tape for later.
w       Push the current IP address onto the return address stack.
        This marks the beginning of the main loop.

  " ~"    Push this string.
  r       Range expansion. Turns the string into " !...}~", i.e. a string
          with all printable ASCII characters.
  U       Random choice. Picks a uniformly random character from this
          string. This will remain on the stack throughout the rest of
          the program and will form part of the resulting string.
  d       Join stack. This takes all strings on the stack and joins them
          into a single string and pushes that (it does this without actually
          removing any elements from the stack).
  ?       Retrieve the input from the tape.
  z       Drop. If the joined string contains the input, everything up to
          and including the input will be discarded. Otherwise, nothing
          happens to the joined string. This means that the result will be
          an empty string iff the joined string ends with the input.
$K      If the top of the stack is not empty, jump back to the w to continue
        with another iteration of the main loop.
d       Join the stack into a single string once more.
o       Print it.

3

Perl 6 , 39 bayt

{("",*~(" ".."~").pick...*~~/$_/)[*-1]}

Çevrimiçi deneyin!

(...)[*-1]tarafından tanımlanan dizinin son öğesini döndürür ...:

  • "" ilk elemandır;

  • * ~ (" " .. "~").pickönceki öğeye uygun aralıkta rastgele bir karakter ekleyerek bir sonraki öğeyi oluşturur; ve

  • * ~~ /$_/Bu, geçerli öğenin ana işlevin girdi argümanını $_değişmez bir alt dize olarak eşleştirdiği bitiş koşuludur .


*~~-3 tio.run
Phil H

3

Java 8, 81 79 78 bayt

a->{String b="";for(;!b.contains(a);b+=(char)(32+Math.random()*95));return b;}

Beni OlivierGrégoire'a yaptığım (büyük>. <) Bir hataya işaret ettiği için -1 bayt .

Açıklama:

Burada dene.

a->{                    // Method with String as both parameter and return-type
  String b="";          //  Result-String, starting empty
  for(;!b.contains(a);  //  Loop as long as the result does not contain the input
    b+=(char)(32+Math.random()*95)
                        //   Append a random character to `b`
  );                    //  End of loop
  return b;             //  Return the result-String
}                       // End of method

1
Olmalı 32+Math.random()*95. Orada ... hata düzeltildi ve bir bayt kaydedildi! ;-)
Olivier Grégoire

@ OlivierGrégoire Woops .. Alan için onaltılık kodlara baktım, ancak tilde için düzenli ondalık sayılar ..>.> Fark ettiğiniz için teşekkürler. Ne kadar özlediğimden emin değilim, çünkü çıktı açıkça 'yazdırılamayan' sembollere sahipti ..
Kevin Cruijssen

3

05AB1E , 10 9 bayt (-1 @ Emigna)

[žQΩJD¹å#

Çevrimiçi deneyin!


Maymunu benimle yap.


[              | Loop forever.
 žQ            | Push 0x20-0x7E as a single string.
   .R          | Pick from it randomly.
     J         | Join stack (B) with new char.
      D        | Duplicate (B).
       ¹å      | Push input (A) and check if input (A) is in (B).
         #     | If the previous statement is true, break loop.

1
Sen yapabilirsin Ωyerine .R.
Emigna

2
Lol, bir Ohm kullanarak, Ohm v2'yi yenmek için. Ne kadar güzel.
Magic Octopus Urn

2

QBIC , 33 bayt

≈instr(Z,;)<1|Z=Z+chr$(_r32,126|)

açıklama

≈instr( , )<1|   WHILE InStr() can't find
         ;        the input (cmd line string argument) as part of
       Z          the output (Z$, which is printed automatically on exit)
Z=Z+             add to the output
chr$(         )  an ASCII character
     _r32,126|   with a random codepoint between 32 and 126 (incl)

Örnek çalışma:

Command line: hi

`;7L3f$qy )H99tZ@>(-Z1efL|Q-5'BE=P8BdX?Lem/fp|G#~WY[ Q4s9r~Af*T})P4`4d$#ud3AiuTwQPFS@8c7_59C$ GlJ%iJ[FA(rNt<y>Hl=r,wSbBB%q!8&#*CixWbnwE."wrZ:R53iKJkN*@hpQt aMj6Mw<KfT@hkik>_k'_>$~3)jl|J!S`n\Yw|lXi:WAKWp?K"F.cAGI/:~uR8*[;Die{]B*]@;Vhjv,$9]Ys:AIdy!j{aXlr:0=txCP-n{/3lgq,;jXaP\]u}.Zl/7eKF+N54[J9^r:>%/.e~*9aK%de>^TW%p%(_uJPvuV%d<&]zu`t;vkEPC>7pofok0Kj}j?9G{TUxSccth)[)J>@'E)NMzA(i!UV7%;$.Z#j3q@#9Q%}<" &VsbL*<SrG-$NC MAQ\`iIT+.P|5}nv )FZl5_.Kc*AUV9u&fvk.USt3Y!s7^UEL{|D$k#k8.9Fgqn#3dgr(0G.gw1#j$HfU3a|)3-O(d<)<A|`%pJ^/\{[w[H4N/>8J@z/YNsU,zY4o*X+h\Dy!~)Xr8.3"%.39v0d5_-8QBYR".Z]MZ}N>9e?f@hj#hor1IhJ[krrHOamRPxQC>^'dOh,cF_e2;8R@K**Jsx_~t9r~4J$Y;kPsb)8w~:o-`@MwP]OA{8yD%gL(=&M>$nTKw] R[}rS|~}&*gD 'g|gRSDLld+`,,}(1=]ao3Z%2*?wlqU$7=$8q$Fig:7n&+XKQ LV/Aq?BYl_*Ak-PqI$U_>`/`-yD5.3|Zg>,mC"RC`IV^szu:I;0ntn(l'/ZnK}T&i)9!zkd?7Ec/X+IN=-5wwsSV@^<?:K=9m%*@C;zDjc%:d>/E@f7@0NVt4Vz/E;8*0A25F1:JUQ/G#2)un9hQI>2^}&+cY+JP*-#$p+cFs}R|>E;w#q>pN"Jkv<>E_ZtCvV05Lh;0 9bCBXgA7aIe+9B1<G)YCH\Yqn.0%g$_4Q4 xIR)gt]W*a|gGX}hP4b)6#M:Dh!kmuX;nW]'n]Mm5y=ET|O9p\,j>Bc|7J5I%UCZla-2g(Mm9cE"}c1Q0@yTF|A\FJbR7_(F_G#@mE/~ [9T~|Ty9~0=g {a^IM{]C9%2FBJ:b&i5A{rqu/xw6q|_[$Sj&W\TnI}/>.EJ1dSbSOtr_Qtuf!IF .WU}&M51+VAnJ)W}^c5qwQ<G05}/aZ99l6iqyD|Zr8SV9L}8FbUz7_H<]A|.vFQXSu2@67%83HP4]Gw0PuPNQ6SOM_[BcdK-s}Z(~~i:^N$GZn_sMcp*i,w-2VfK*LA$Btmg6QEohqym3[RRqUAM"9pE>N)(.TNMQ"U~ e2($wz(Kdh;0ol8>SXHEnLvrs.Xtl^L?SL1$*ssD _={{}(`qKCy{]W:AZT}Zro5qN:;mNp#EPfg?_],,cFP?EhGs/OAt}fgVSR<JW^HkWf'@^Vd9\_Y?P*>C'YP jqvXu)ZFwzY)/MLHcRL/P?jBi9"d\  E$ngpq-i*;EW6R)J|[0FfZSTozuSq,sAJT<<4al<zM\F(|gTD0/Vt6JL.p_x_oC)V'zWZ`8eA9@*WgZ>',-}Q^5#e552&"\i1HI]{)]WcI.cY0n9J<jaT.!l{r4Dz~nt`AEP-6,FHhf6(PSywIedr }=9V>Q7!+~L^O3'Crdv"hfv#xrs@](EO;&#)0]oC][z*Eh`k!$V!r6~#-Vfk1p#w&Za6Ij\@V<TNf4njdynOch7l?XwU  `SON\iizU3%S^X2XKY.w%:zAVY^KlIhZ8]d39No3P89v`1FxKTLQa+7"rd9bm2)a^Pu=~.9VDh?v"%$9evl9+l7n$I?qA[b:kH2?5Tg&(!H(*}hZ3z@bg+Zj!# JnO2FV_glCMweT;b|>g4!h{4@ p w`lH \Y8(uPf7nbJY]r>('-$O?5Xd:h&:y!i%2dRC_8=3! |b="H|jxx)k!\D|]Lsdz1.v[a<l/Y3?0/&H%2.qvPp'ZNpO;rhvtnl0*Bs4Qlh0}_dv6g0`pJh'==]9LuzG+qUGz5.j[$I{4.b_o;S`QFucC9>`z7M.wHx!wy-JeOf)^9#Z.xl7e"9q)OE-SSD"VbLFm-u'-<4~(_h\KqNk7}vKh0E&!LaxAma|FOIY,\C$;!v^#4,eqwpE]Jqp,]IkTz,,L`kx|\i^#{PV0/8K?N,W!L=vbh\OJ7?:k=~{zLw8*/W<-qFDKAhx1F;\NL@{=rlo0''YB;B5<:0e5J)w"0l@FE?J:FW(I|)3BZ'hL7[}Ez=jc(rLkY9d{Zzgq7Cj)bej/X!@TP7x.r"Arz7IU;1|.3by~\h{V57}A^w7v5gMC]@B~1i5*uY 7?(IN6hQ/b/4bMpDmT_"n|;bBx|74(ReQ.^])bHC+:!s bk_S]R}<Ow:7CCu_P!$:mz{[aiGg*AD#}m~D_rhVr6!x]PY5n'qiMMlpqoU>C`,W}y9Yi4hHf<lcwvga`h(<=jURq\d+2SRGA1GP**D]i+Tp@*hpe([-JE^M@5jHgK~>hY>Bo&% \e/\&]"K])CV%oNJ}[_Q1}w(p3uJ+\/;{0TB8#{=&l8s;]L7Gr;a_[cN:#%$)?*:HLZ;&n|2_8/@=B [>|R3@xk<c+bIyb>h`]:c]RLt(M!69PNE?}>@CHT>jNevl81PCgHu0ap0~Pcq?Z@>+yTFw\E=10&fpS+=/l|.ioPn$B.M\4{2?q-^,)f&S4X44(Rycome[Ot[t(8CAphj[h}E/A~BR[6Y&Hm1_tsxs4BB0cwo\",r_c~s/vT}kKu3U(Emb|%"`OAmV7$,\<O7)c&F==mc~dM:qX^[K-9<3u8hfgTUP19aXk,7g(4>jLt,*N!EXGE#XzN}>7@EH4n}k!&a[j,Ynd#!M<suhnBP /J9}h>vRyXuADk"+v}?hOm6*U^x\G'!Y(TDC?EE|r}5yx4PB 1;9q.%/kg7p2ImS62+/|K,xSDf3b6JRY+8~mxikSU^&3A3|/j9}fIESN45kdi*h64!XE'_0?Pw{MeK$DeXP]5M{7sLD!dj5HrAc\N I`~o/%MqyIIsFee]A?j7ZZ}f'dN#"V''g-G0@zNajp=v<"r2s;>@.UM9L\Mq16e/961d.3a6h.hMrUREa^wR^s*\Tc6Yn]DT.Nc77p|h s2@hC\Rxy|XhXi.OL2$\pwPSJET;u7V`U!<]M(tibt>.gD'JKe{7r8?Z[]ExGHxyd\,/wjfBI'NKCpaU19-?f;;QVrWnFF,zvJY|d\DrcysAO'; 33CSNy_GlLr\v)Ir\qQfwT'I#t:N-{,x#zGR.)gJqq%!zF.oJ;]*TI+4z>JQAGQM3w&zgani8JwZW6S!r-ig\3jD}]2*.Aen8O)L?X.UTZ6)mOtUIm_=3fA'_::vV_#+c+=evf#{8lk+`)M\_c+I<|*LRZOU]:eQ*/KER#f,vEC?4yXE*8wlzk?b)&[gF'(0|$@+4CT4#lfEKxP~;oo%1+=yw#J*s}D7p1fU~^gD1Ib{H|PWer^q"q=?Pxf<)tvu7{HDvl\kqb"b/|s>|h.qQu[$F/:~*dy9cl16}dKXY~N7aptCSv+da/S5-,qnwBhRi+lh8=Qy{er:#Oos|e?(US>"767KVe^nz<$]gM)~J>{I7n~!k[U\1{8Z8u6T(ft?kgdQO,LvY/TDAe\wS~Y U>\.aQYhQ;h1nuW$R/wpz_EiB-%gf87qgQei(P-ft:TSW,HtsPez"5<8?yR`wm7pjMn^|8Y.4[RVWq#aW$0EB9"O:%@q[&F[_'2yt2k]S5~HCN1+^bS>N2C/7ChHCHNrJ8,kBbNsu}37LH^n.B+tyE*s7l(Tc<;4.tvBw3LP=nK4G'6M(z086;"??9XE.(X>nvmm()P2m\"LeqbcOC~Vw;u/Q^T)52/pM3+<GkFWJ?30{/n2FQq QjO#pt8oN$kK/a+|Hbw@5m8M[EFWq>%cV2[X@q}gJ"9kt9'~]4p+2~LT9|4Ss^qoXw%P#M!!]TBQbp;PYg{WCj,RF<#bNJTS,CUH{][hY"q;[?#apc%Cl&QWVi]ffYG}bzx .;*/rqRhb[XatPu.Piws<mo=]!e>p%yu\;fCzJ0Xz]6]9S:WRlYS,mC&7Zjb)+DjJUkSF3TJG;8fQ4|>t%qgW1$_V:p;|Q":Z!UngSL{*Ky+/zh [I{_3?]h^x37"`^'/U>EPqal'&Txf,I>gr2HO_y!QM-ch~%m-(AE6U~[A"D@j1hu?6p2"Wc'3nyqfs!.UQy}I%0(z5dPmORFBK1,<PfYersnLe<fLhB=^g pwXnWDOQNuIPEpnm8.Q6jN|a7tcuSH$9T;! d~VQn{'(-4{caLa;t?~|>q:on:Bgs'FQ'2-<%W<3Px=4Uf;@;R3yZECK?f(5K?`^lQY\ok},`Q9*Q}3].Y!BkRt"3@]Lz&ec'NB?n[%0kQ9/55BOZ)o!P>fpXZI:#?Ly#\o.`+HX Kb0@P^1qS%bGip1`)qH@-k\oOGs%;}_Nq{uPq |!K)01w(?X=>bSR[(]ZQ<Z1]bD9M.F<<.8EB6JlEUOk6r;SrVZNT2 m>zp3]a_sK eq8]rK^.U&!d62HBt`v?t6uc#3s<{[CmYE24+ujEx`$##R2g\b!PvK<8+lUhyT|p"SUco/aUh.fXBV(!!)8PfQIr6R,r8c-F-mjua;:z4!Q1pA!H0E%)"K2oUv|DV+lg,h8W?<JnIkiV/us::*l&I<OI6NO)Tnq0-uDRG5*LX#wU{8WpMlw3Z'7zGi*loo2{=hWSY*0/o9BwtJ$Hw}l94nA^9>48(3gDnt8CS|R3? OH[N/9j1r%vUcox\68{yFemlmmtp*q5kfrlIo`3yQB??6jW:TW+)':K#]^=ilF_/N!)=}y@k.y//nhChX!3b`=t,1_KhR,n]/_.-P>B80W#'E%J[g?ti)*;Yl]}r0>qh/X[{=)Gr '[+pz|DI=mA8zj~yAT*^7w%tV0l=V^/#2W>)f)X%f^L&+Un}VlQt3.%gEKbE!7`adTb#`}i!F$-Gug]@*G,hKe;/p,`Mb@wBJ4<V&jJd&_H4VR{Hc"{2<l<QapiLw(JK-2-[1_.WR.@CG$?\1<&( QX5c9 :z^jDW09(=iH V/vkcJ8D<uLAr$dbc$Hl'2KTUlbrd8kD{B0Eeu<&oL2s.S4@Jo$zVq~BqeLsb;k-NG/'iU|)W_:X-.XUc<v\elx57ZZ"R!y_yzve*Wlt>.fE,#Eh:(#gn1kSQ+/3NYjD']I;"+@pnW[1EA.AyqM4,0,dJt.?r2oab.j\k@)BsZ|s39FdL87xyuJ0nXX=yz^~W,}acDZp8ukCpv^<^{CkRS<=GsS$}#fbP5%A$GHdg)+WZLLN9[ue073Q!F"J;X^49*$R'W%C.r~Fj&B`)tq[01a4En%H,kvyZG|,)%$44rJg[tq<wG9FjN<m@larki#;Bns%D}v_efPRH(OeRq0{=>Uc[~xcTcV_9|k54Q2*N.3]LlmFasY3"p =$$onbg$M+ReRsnH|9gV~#2?c1-V$35."DZH-O$~,c.gs]%,]p4\OFIW%l:,E,YT8FCeU8hy#lNq1lCpS 0I&q_*q>|=,(-dHuzi~6$GW22*A\w*&R< W`$HPRr,2A}3w\"Y?d%{2^xP:GqI\26A|.e'H2Z[M4=P.H87O~{)9|B*tHAC\j^S,StW!*snsz82R!:eD@uB4x+x&zSIN(3V|.^N_$=i=p}iK4h'v"$:I<t e:Y/XrSOF83=lkVNa0^k@jB@{ARE@r=Bja`(Bw>@?+`Wo,= u5HhXPeRMXS4@H#$-Jwg2"2-]%7p.o2Ar9J6Y1Ra?"3<oee&bpO^O{nw9=%\0brVNXrelWGoJyb/5W%MB0UBaPsc*29K<N~``NriWM$"eY0@xh^<$b:E/J~S%{#ry~6d?4Vv@^&9'=iBA#2U]bj9>UoJ#wQDN~6cB&/_Pu-XF?_hu3><(M7RW\%Ly@rTC9^b`?kVL~w%[{!&{#aS7<mc@J>ZaN7s}Y.c0:Y.\d&_[L{m|>|>%J^@!i9y0_lwejChi

2

PHP, 55 + 1 bayt

while(!strpos(_.$argn,_.$s.=chr(rand(32,126))));echo$s;

İle boru olarak çalıştırın -nR. Muhtemel zaman aşımının TIO nedeni için uygun değildir.

PHP'nin tırnak işaretleri arasına 7.1'den daha eski bir boşluk yerleştirin.

Girdi : Bu 51 + 1 bayt sürümü başarısız olur 0:

while(!strstr($argn,$s.=chr(rand(32,126))));echo$s;

2

Javascript 74 bayt

s=(a,b='')=>~b.search(a)?b:s(a,b+String.fromCharCode(32+Math.random()*95))

şunun gibi ara:

s('hi')

@Giuseppe thx, bayt sayısında
ekledim

1
Kodun geçerli olması için 94 ile 95 arasında bir değişiklik yapmanız gerektiğini düşünüyorum
Hawkings

1
@Hawkings Yea, haklısın, CharCode'dan gelen gibi görünen ondalık sayıları yok sayar. Gösterdiğin için teşekkürler!
RuteNL

~b.searchBunun yerine bir bayt kaydedin b.includes.
Shaggy

@Shaggy Güzel! Arama hakkında bir şey bilmiyordum
RuteNL


2

Pushy , 20 18 bayt

LFZ^tCN[,` ~`U'x?i

Çevrimiçi deneyin!

Program yığın len(input)karakterlerini uzun tutar ve ilkini sürekli siler ve ilk giriş dizgisine ulaşana kadar yeni bir rasgele karakter ekler. Her karakter, istenen efekti yaratarak eklendikçe yazdırılır.

Açıklama:

                      \ == SETUP ==
 F                    \ Put input on second stack
L Z^tC                \ On the main stack, make length(input) copies of 0
      N               \ Remove printing delimiter (newline by default)

                      \ == MAIN LOOP ==

       [              \ Infinitely:
        ,             \    Pop the first item on stack
         ` ~`U        \    Add a new random character (between 32 and 126)
              '       \    Print this new character
               x?     \    If the stacks are now equal:
                 i    \        Exit program

2

Brachylog , 17 bayt

I⁰∧Ẹ{sI⁰&|;Ṭṛᵗc↰}

Çevrimiçi deneyin!

I⁰                   The global variable I⁰
                     is the input,
  ∧                  and
   Ẹ                 starting with the empty string
    {          ↰}    call this sub-predicate again
            ṛ        with a random
           Ṭ         printable ASCII character
          ;  ᵗc      appended to the string we're building
         |           unless
      I⁰             I⁰ (which is the input)
     s               is a substring of the string we've been building
        &            in which case the string is output.

Taşma rasgele yığabilir. Bu, Brachylog'da yakın zamanda eklenen iki özelliğin kullanılmasını sağlar: global değişkenler ve to-tail metapredicate .



Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.