Itu banyak monyet

35

The monyet Teorema tak terbatas menyatakan bahwa, mengingat waktu yang tak terbatas, mesin mengirimkan seolah tak ada habisnya karakter acak akan selalu ketik teks yang diberikan.

Bagi saya itu terdengar seperti ide yang bagus untuk sebuah tantangan.

Proses

Untuk memonetisasi string A, langkah-langkah berikut harus diambil:

  1. Ambil string kosong. Kami akan memanggil string ini B.
  2. Memilih karakter ASCII yang dapat dicetak seragam acak (karakter dalam kisaran 0x20untuk 0x7E) dan menambahkan karakter yang ke B.
  3. Jika A adalah substring dari B, B adalah string monyet-ized kami. Jika tidak, ulangi langkah 2 hingga A adalah substring dari B.

Proses ini hanya merupakan contoh, metode yang lebih mudah mungkin ada tergantung pada bahasa Anda. Anda tidak perlu mengikuti metode ini dengan tepat, selama distribusi output yang sama tercapai.

Tantangan

Tulis program atau fungsi yang, mengingat string yang tidak kosong dalam format apa pun yang masuk akal , mengembalikan versi string yang di-monyet-kan.

Program Anda hanya perlu bekerja untuk input dengan panjang 3 atau kurang. Untuk input yang lebih lama, itu diperbolehkan untuk mengakhiri lebih awal dengan atau tanpa menghasilkan apa pun.

Contoh

Sayangnya, agak sulit untuk membuat contoh untuk pertanyaan ini karena sifatnya yang acak dan output yang besar.

Namun, saya dapat memberikan satu contoh untuk input hi, di Hastebin.

Mencetak gol

Karena ini adalah , pengiriman dengan byte paling sedikit akan menang.

Lirik
sumber
Sandbox
LyricLy
11
Apakah kita perlu mengikuti prosedur yang dijelaskan untuk menghasilkan output? Jika ya, itu persyaratan yang tidak dapat diobservasi , yang bermasalah. Jika tidak, kita dapat menghasilkan Bsecara langsung dengan menambahkan sejumlah nkarakter acak non-negatif ke A. Satu-satunya masalah sebenarnya adalah untuk mengetahui distribusi n(saya bertaruh pada distribusi geometris)
Luis Mendo
1
@seshoumara Anda mungkin tidak.
LyricLy
7
@LuisMendo Saya berpikir seperti ini, dan sebenarnya tidak mudah untuk menghasilkan awalan secara langsung. Itu tidak dapat berisi string target, termasuk melintasi batas di mana ia bertemu string yang ditambahkan. Dan distribusi panjang awalan tidak hanya bergantung pada panjang string target, tetapi juga strukturnya.
xnor
10
Beberapa solusi program komputer di bawah ini, seperti .W!}zH+ZOrd\k, sangat mirip dengan apa yang diketik monyet.
Jeppe Stig Nielsen

Jawaban:

12

C, 192 byte

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;}

Cobalah online!

Ini berantakan sekarang, tapi setidaknya itu berfungsi bahkan untuk kasus-kasus sudut ...


C,  63   62  61 byte

Terima kasih kepada @Jonathan Frech karena telah menghemat satu byte!

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

Cobalah online!

Steadybox
sumber
Saya sama sekali tidak tahu mengapa ini berhenti ketika mencapai s, +1
ATaco
1
@ATaco Ini berhenti ketika itumbuh cukup besar yang s[i]mengacu pada terminator nol dari string (karakter 0).
Steadybox
Oh, jadi alih-alih melemparkan karakter acak ke sana sampai s secara tidak sengaja dibuat, ia melemparkan karakter acak hingga mencapai s. Pintar.
ATaco
Sama seperti saya suka jawaban ini, saya percaya itu rusak untuk input seperti "ab" ketika monyet rand mengetik "aab".
zennehoy
Saya kira Anda membutuhkan sesuatu seperti KMP sehingga pendekatan ini dapat valid. Asumsikan string input adalah ababcdan monyet menghasilkan !!abababcprogram Anda akan berhenti?
user202729
9

Python , 79 byte

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

Cobalah online!

Secara teori ini masuk akal, tetapi akan macet lebih awal karena batas rekursi python (Anda dapat mengaturnya lebih jauh untuk mendapatkan hasil yang lebih lama)

Python, 84 byte

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

Cobalah online!

Ini harus bekerja untuk string yang relatif lebih lama, karena tidak bergantung pada rekursi, dengan biaya 5 byte.

Uriel
sumber
Anda dapat menyimpan tiga byte dengan menggunakan backticks untuk melakukan konversi string (ditampilkan di sini sebagai tanda kutip tunggal di sebelah kanan markdown)s+'randint(32,126)'
wnnmaw
1
@wnnmaw backticked randint(32,126)akan menghasilkan string nomor tersebut, bukan pemetaan ascii char
Uriel
8

Ohm v2 , 10 byte

Ý£D³ε‽α@§↔

Cobalah online!

Penjelasan:

Ý£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
Nick Clifford
sumber
8

GNU sed + coreutils, 75 +1 (r flag) = 76 byte

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

Cobalah online! (Diperlukan banyak upaya untuk mendapatkan jawaban untuk input panjang 2, karena sebagian besar waktu Anda kehabisan waktu perhitungan TIO yang diizinkan.)

Penjelasan:

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: perkiraan, hanya untuk tujuan penskalaan

  • panjang input: 1, 10 input acak (berjalan), waktu rata-rata: <1 dtk
  • panjang input: 2, 10 input acak (berjalan), waktu rata-rata: 90 s
  • panjang input: 3, 10 input acak (berjalan), waktu rata-rata: banyak jam!
seshoumara
sumber
7

Funky , 64 byte

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

Ini menggunakan beberapa trik yang saya ingin gunakan di Funky, seperti nama variabel setelah kata kunci seperti dalam whileS, dan menggunakan fakta bahwa string secara implisit menjadi induk ke stringpustaka.

Tidak disatukan

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

Cobalah online!

ATaco
sumber
6
Jadi apakah itu ... Monyet yang funky?
Sebastian Lenartowicz
7

Haskell , 100 byte

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

Cobalah online!

Ide dasarnya adalah membuat daftar karakter tanpa batas dengan randomRsdan menghentikannya setelah kami menemukan string.

pengguna1472751
sumber
Sayang sekali isPrefixOftidak ada dalam Prelude standar ...
Bergi
7

C # (.NET Core) , 86 byte

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

Saya tidak begitu suka berapa banyak membuat Randominstance dibutuhkan, tetapi saya tidak berpikir ada jalan keluarnya.

Cobalah online!

Wakawakamush
sumber
3
Selamat datang di PPCG! Saat ini solusi Anda tidak menghasilkan karakter acak dengan benar karena menurut dokumen , batas atas yang diteruskan Random.Next(Int32,Int32)adalah eksklusif dan karenanya bukan salah satu dari angka yang dihasilkan. Ini dapat diperbaiki dengan mengganti 126dengan 127.
0 '
@ 0 'Aduh, aku memikirkannya saat menulis, tapi aku lupa memeriksanya sebelum memposting. Terima kasih!
Wakawakamush
Sebenarnya ada jalan keluar selama itu Random, Anda dapat menghapus deklarasi variabel! 79 byte
FlipTack
@FlipTack Menarik, saya mencobanya di C # Interactive dan tidak berhasil karena terus menghasilkan nomor yang sama. Aneh melihat bahwa itu berfungsi di TIO.
Wakawakamush
6

Perl 5, 31 +2 (-pa) byte

}{$_.=chr 32+rand 95until/\Q@F/

Cobalah online

Nahuel Fouilleul
sumber
Anda dapat menyimpan 3 byte karena \E$tidak tersedia
Zaid
memang, terima kasih telah memperhatikan
Nahuel Fouilleul
disimpan 2 byte lebih
Nahuel Fouilleul
Itu licik. Sangat bagus memang :)
Zaid
dan bahkan lebih, -3bytes
Nahuel Fouilleul
6

Japt , 26 byte

@(PbU >-1}a@P+=(Mq95 +32 d

Cobalah online!

Hawkings
sumber
3
Golf yang sangat cepat saat istirahat merokok: 22 byte . Selamat datang di Japt :)
Shaggy
6

R , 79 76 75 byte

-3 byte terima kasih kepada MickyT untuk mengubah sampler acak

Terima kasih -1 byte kepada Robin Ryder karena telah men-tweak sampler acak lagi

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

Cobalah online!

Giuseppe
sumber
hai, sampel Anda dapat diganti denganintToUtf8(runif(1,32,127))
MickyT
@MickyT luar biasa, terima kasih!
Giuseppe
Anda dapat menyimpan 1 byte 32+95*runif(1)sebagai sampler acak Anda.
Robin Ryder
6

Arang, 15 14 12 byte

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

Cobalah online! Tautan adalah untuk mengucapkan versi kode. Sunting: Disimpan 2 byte karena perbaikan bug selanjutnya di Charcoal. Penjelasan:

    θ           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
Neil
sumber
5

Ruby , 42 byte

->w,s=""{s+=[*" "..?~].sample;s[w]?s:redo}

Cobalah online!

Pasang kembali Monica iamnotmaynard
sumber
4

Pyth - 14 byte

.W!}zH+ZOrd\k

Cobalah online di sini .

Maltysen
sumber
W!}Qk=+kpOrd\ adalah 14 byte juga, SE mengacaukan pemformatan karena jangkauan yang tidak dapat dicetak tetapi dihasilkan dengan cara yang sama
Dave
4

Mathematica, 65 byte

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

Cobalah online!

-3 byte dari Jonathan Frech

J42161217
sumber
Saya pikir FromCharacterCode[RandomInteger@94+32]setara dengan yang lebih pendek RandomChoice@CharacterRange[32,126].
Jonathan Frech
@ JonathanFrech ya, benar!
J42161217
4

Lua , 99 102 byte

  • Menyimpan bug berkat ATaco , yang menambahkan tiga byte.
function f(B)s=string S=""while not(s.find(S,B,1,1))do S=S..s.char(math.random(32,126))end print(S)end

Cobalah online!

Jonathan Frech
sumber
4

Oktaf , 62 byte

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

Cobalah online!

Penjelasan:

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

Terima kasih banyak kepada Luis Mendo untuk suntingannya!

Alan
sumber
1
Selamat datang di situs ini! :)
DJMcMayhem
Tidak bisa Anda mengganti isvectordengan nnz? Dan strfindoleh regexp. Juga, Anda dapat menggunakan randi(95)+31, atau mungkin mengganti seluruh sprintfpernyataan dengan o=[o,randi(95)+31];(konversi implisit ke char)
Luis Mendo
Juga, kita biasanya memerlukan fungsi atau program yang mengambil inputnya (sebagai lawan mendefinisikan variabel yang berisi input) - sesuatu seperti ini
Luis Mendo
Saya berusaha melakukan itu, tetapi saya tidak bisa memikirkan cara yang ringkas jadi saya melewatkannya. Revisi yang bagus!
Alan
1
Silakan memasukkan saran-saran itu ke dalam jawaban Anda. Itu standar di situs ini
Luis Mendo
4

Japt , 16 14 11 byte

;_øU}a@P±Eö

Cobalah

Shaggy
sumber
3

Alice , 21 byte

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

Cobalah online!

Penjelasan

/...@
\.../

Ini adalah kerangka kerja untuk sebagian besar program linier yang beroperasi sepenuhnya dalam mode Ordinal (pemrosesan string). IP memantul secara diagonal ke atas dan ke bawah melalui program dua kali, yang berarti bahwa kode sebenarnya agak aneh disisipkan. Perintah dalam urutan sebenarnya dieksekusi adalah:

i!w" ~"rUd?z$Kdo

Mari kita lalui ini:

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.
Martin Ender
sumber
3

Perl 6 , 39 byte

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

Cobalah online!

(...)[*-1]mengembalikan elemen terakhir dari urutan yang ditentukan oleh ..., di antaranya:

  • "" adalah elemen pertama;

  • * ~ (" " .. "~").pickmenghasilkan elemen berikutnya dengan menambahkan karakter acak dalam rentang yang sesuai dengan elemen sebelumnya; dan

  • * ~~ /$_/adalah kondisi akhir, yaitu elemen saat ini cocok dengan argumen input fungsi utama $_sebagai substring literal.

Sean
sumber
Anda bisa kehilangan *~~for -3 tio.run/##K0gtyjH7n1upoJamYPu/…
Phil H
3

Java 8, 81 79 78 byte

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

-1 byte terima kasih kepada @ OlivierGrégoire karena menunjukkan saya pada kesalahan (besar>. <) Yang saya buat ..

Penjelasan:

Coba di sini.

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
Kevin Cruijssen
sumber
1
Seharusnya begitu 32+Math.random()*95. Di sana ... bug diperbaiki dan satu byte disimpan! ;-)
Olivier Grégoire
@ OlivierGrégoire Woops .. Melihat kode heksadesimal untuk spasi, tetapi desimal reguler untuk tilde ..>.> Terima kasih telah memperhatikan. Tidak yakin bagaimana saya melewatkannya, karena outputnya jelas memiliki simbol 'tidak dapat
dicetak
3

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

[žQΩJD¹å#

Cobalah online!


Lakukan monyet dengan saya.


[              | 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.
Guci Gurita Ajaib
sumber
1
Anda dapat melakukan Ωbukan .R.
Emigna
2
Lol, menggunakan Ohm, untuk mengalahkan Ohm v2. Bagusnya.
Magic Octopus Urn
2

QBIC , 33 byte

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

Penjelasan

≈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)

Contoh dijalankan:

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/[email protected]"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!)=}[email protected]//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
steenbergh
sumber
2

PHP, 55 +1 byte

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

Jalankan sebagai pipa dengan -nR . Tidak cocok untuk TIO karena kemungkinan batas waktu habis.

Masukkan spasi antara tanda kutip untuk PHP yang lebih tua dari 7.1.

Versi 51 + 1 byte ini akan gagal jika inputnya adalah 0:

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

Javascript 74 byte

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

sebut seperti ini:

s('hi')
RuteNL
sumber
@ Giuseppe thx, saya sudah menambahkannya dalam hitungan byte
RuteNL
1
Saya pikir Anda harus mengubah 94 ke 95 agar kode menjadi valid
Hawkings
1
@ Hawkings Ya, Anda benar, fromCharCode tampaknya mengabaikan desimal. Terima kasih telah menunjukkannya!
RuteNL
Simpan byte dengan ~b.searchsebagai gantinya b.includes.
Shaggy
@ Shaggy, Bagus! Tidak tahu tentang pencarian
RuteNL
2

Pushy , 20 18 byte

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

Cobalah online!

Program menyimpan setumpuk len(input) karakter yang panjang, dan secara konstan menghapus karakter pertama dan menambahkan karakter acak baru, hingga string input awal tercapai. Setiap karakter dicetak saat ditambahkan, menciptakan efek yang diinginkan.

Penjelasan:

                      \ == 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
FlipTack
sumber
2

Brachylog , 17 byte

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

Cobalah online!

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.

Dapat menumpuk overflow secara acak. Ini memanfaatkan dua fitur yang baru ditambahkan di Brachylog: variabel global, dan metapredicate apply-to-tail .

String yang tidak terkait
sumber
1

Pyth, 13 byte

W!}z=akpOrd\

di mana karakter yang tidak patut dicetak adalah 0x7F.

Uji

Steven H.
sumber
1

Bash 94 byte

p=printf\ -v;until [[ $s = *"$1" ]];do $p x %x $[32+RANDOM%95];$p c \\x$x;s+=$c;done;echo "$s"

Cobalah online

Nahuel Fouilleul
sumber