Sono molte scimmie


35

Il teorema della scimmia infinita afferma che, dato il tempo infinito, una macchina che invia un flusso infinito di caratteri casuali scriverà sempre qualsiasi testo dato.

Mi sembra un'ottima idea per una sfida.

Processi

Per creare una stringa A come scimmia, è necessario eseguire le seguenti operazioni:

  1. Prendi una stringa vuota. Chiameremo questa stringa B.
  2. Scegli un carattere ASCII stampabile uniformemente casuale (caratteri nell'intervallo 0x20da 0x7E) e aggiungi quel carattere a B.
  3. Se A è una sottostringa di B, B è la nostra stringa di scimmia. Altrimenti, ripetere il passaggio 2 fino a quando A è una sottostringa di B.

Questo processo è solo un esempio, possono esistere metodi più semplici a seconda della lingua. Non è necessario seguire esattamente questo metodo, purché si ottenga la stessa distribuzione di output.

La sfida

Scrivere un programma o una funzione che, data una stringa non vuota in qualsiasi formato ragionevole , restituisce una versione di questa stringa in formato scimmia.

Il tuo programma deve funzionare praticamente solo per input di lunghezza 3 o inferiore. Per input più lunghi, è consentito terminare in anticipo con o senza emettere nulla.

Esempio

Sfortunatamente, è difficile creare esempi per questa domanda a causa della sua natura casuale e dei grandi risultati.

Tuttavia, posso fornire un singolo esempio per l'input hi, su Hastebin.

punteggio

Poiché si tratta di , vince l'invio con il minor numero di byte.



11
Dobbiamo seguire la procedura descritta per produrre l'output? Se sì, questo è un requisito inosservabile , il che è problematico. In caso contrario, possiamo generare Bdirettamente anteponendo un numero non negativo ndi caratteri casuali a A. L'unico vero problema è quindi conoscere la distribuzione di n(scommetto su una distribuzione geometrica)
Luis Mendo,

1
@seshoumara Non puoi.
Lirico, il

7
@LuisMendo Ho pensato in questo senso, e in realtà non è facile generare direttamente il prefisso. Non può contenere la stringa di destinazione, compreso l'attraversamento del limite nel punto in cui incontra la stringa aggiunta. E la distribuzione delle lunghezze dei prefissi dipende non solo dalla lunghezza della stringa di destinazione, ma anche dalla sua struttura.
xnor

10
Alcuni dei programmi per computer della soluzione di seguito, come .W!}zH+ZOrd\k, assomigliano molto a ciò che una scimmia ha digitato.
Jeppe Stig Nielsen

Risposte:


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

Provalo online!

Adesso è un casino, ma almeno funziona anche per i casi angolari ...


C,  63   62  61 byte

Grazie a @Jonathan Frech per aver salvato un byte!

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

Provalo online!


Non ho assolutamente idea del perché questo si interrompe quando colpisce s, +1
ATaco,

1
@ATaco Si interrompe quando icresce abbastanza grande da s[i]riferirsi al terminatore null della stringa (carattere 0).
Steadybox,

Oh, quindi invece di lanciare personaggi casuali su di esso fino a quando s viene creato accidentalmente, gli lancia personaggi casuali fino a raggiungere s. Inteligente.
ATaco,

Per quanto mi piaccia questa risposta, credo che si interrompa per un input come "ab" quando le scimmie rand digitano "aab".
zennehoy,

Immagino tu abbia bisogno di qualcosa come KMP in modo che questo approccio possa essere valido. Supponiamo che la stringa di input sia ababce che la scimmia generi il !!abababctuo programma si fermerà?
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*

Provalo online!

Questo è teoricamente corretto, ma si bloccherà presto a causa dei limiti di ricorsione di Python (puoi impostarli ulteriormente per ottenere risultati più lunghi)

Python, 84 byte

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

Provalo online!

Questo dovrebbe funzionare per stringhe relativamente più lunghe, poiché non si basa sulla ricorsione, al costo di 5 byte.


Puoi salvare tre byte usando i backtick per eseguire la conversione di stringhe (mostrate qui come virgolette singole a destra del s+'randint(32,126)'
markdown

1
@wnnmaw backticked randint(32,126)produrrebbe una stringa del numero, non la mappatura dei caratteri ASCII
Uriel

8

Ohm v2 , 10 byte

Ý£D³ε‽α@§↔

Provalo online!

Spiegazione:

Ý£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 (flag r) = 76 byte

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

Provalo online! (Sono necessarie molte esecuzioni per ottenere una risposta per un input di lunghezza 2, perché la maggior parte delle volte si esaurisce il tempo di calcolo TIO consentito.)

Spiegazione:

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

Indice di riferimento: approssimativo, solo a scopo di ridimensionamento

  • lunghezza input: 1, 10 input casuali (corse), tempo medio: <1 s
  • lunghezza input: 2, 10 input casuali (corse), tempo medio: 90 s
  • lunghezza input: 3, 10 input casuali (corse), tempo medio: molte ore!

7

Funky , 64 byte

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

Questo usa alcuni trucchi che volevo usare in Funky, come un nome di variabile dopo una parola chiave come in whileS, e usando il fatto che le stringhe implicitamente sono padre della stringlibreria.

Ungolfed

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

Provalo online!


6
Quindi sarebbe ... scimmie 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

Provalo online!

L'idea di base è quella di generare un elenco infinito di caratteri randomRse fermarlo quando troviamo la stringa.


Un peccato isPrefixOfnon è nel Preludio standard ...
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;}

Non mi piace molto la creazione Randomdell'istanza, ma non credo che ci sia un modo per aggirarla.

Provalo online!


3
Benvenuti in PPCG! Attualmente la tua soluzione non genera correttamente un carattere casuale poiché, in base ai documenti , il limite superiore passato Random.Next(Int32,Int32)è esclusivo e quindi non uno dei numeri generati. Questo può essere risolto sostituendo 126con 127.
0 '

@ 0 'Whoops, ci ho pensato mentre scrivevo, ma ho dimenticato di controllarlo prima di pubblicare. Grazie!
Wakawakamush,

In realtà c'è un modo per aggirare così a lungo Random, è possibile rimuovere la dichiarazione delle variabili! 79 byte
FlipTack

@FlipTack Interessante, l'ho provato in C # Interactive e non ha funzionato perché ha continuato a generare lo stesso numero. Strano vedere che funziona in TIO.
Wakawakamush,



6

R , 79 76 75 byte

-3 byte grazie a MickyT per cambiare il campionatore casuale

-1 byte grazie a Robin Ryder per aver modificato nuovamente il campionatore casuale

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

Provalo online!


ciao, il tuo campione potrebbe essere sostituito conintToUtf8(runif(1,32,127))
MickyT

@MickyT eccellente, grazie!
Giuseppe,

È possibile salvare 1 byte con 32+95*runif(1)come campionatore casuale.
Robin Ryder,

6

Carbone di legna, 15 14 12 byte

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

Provalo online! Il collegamento è alla versione dettagliata del codice. Modifica: salvato 2 byte a causa di una successiva correzione di bug in Carbone. Spiegazione:

    θ           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

Pyth - 14 byte

.W!}zH+ZOrd\k

Provalo online qui .


W!}Qk=+kpOrd\ è anche di 14 byte, SE è incasinato con la formattazione a causa di non stampabile, ma l'intervallo è generato allo stesso modo
Dave,

4

Mathematica, 65 byte

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

Provalo online!

-3 byte da Jonathan Frech


Penso che FromCharacterCode[RandomInteger@94+32]sia equivalente al più corto RandomChoice@CharacterRange[32,126].
Jonathan Frech,

@JonathanFrech sì, lo è!
J42161217,



4

Ottava , 62 byte

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

Provalo online!

Spiegazione:

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

Mille grazie a Luis Mendo per le modifiche!


1
Benvenuti nel sito! :)
DJMcMayhem

Non puoi sostituirlo isvectorcon nnz? E strfinddi regexp. Inoltre, puoi utilizzare randi(95)+31o sostituire l'intera sprintfdichiarazione con o=[o,randi(95)+31];(conversione implicita in carattere)
Luis Mendo,

Inoltre, di solito richiede una funzione o un programma che riceve l'input (al contrario di definire una variabile contenente all'ingresso) - qualcosa come questo
Luis Mendo

Ho tentato di farlo, ma non riuscivo a pensare a un modo conciso, quindi l'ho saltato. Belle revisioni!
Alan,

1
Sentiti libero di incorporare questi suggerimenti nella tua risposta. È standard su questo sito
Luis Mendo il


3

Alice , 21 byte

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

Provalo online!

Spiegazione

/...@
\.../

Questo è un framework per programmi prevalentemente lineari che funzionano interamente in modalità Ordinale (elaborazione di stringhe). L'IP rimbalza in diagonale su e giù attraverso il programma due volte, il che significa che il codice effettivo è un po 'stranamente intercalato. I comandi nell'ordine in cui sono effettivamente eseguiti sono:

i!w" ~"rUd?z$Kdo

Andiamo attraverso questo:

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 byte

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

Provalo online!

(...)[*-1]restituisce l'ultimo elemento della sequenza definita da ..., di cui:

  • "" è il primo elemento;

  • * ~ (" " .. "~").pickgenera l'elemento successivo aggiungendo un carattere casuale nell'intervallo appropriato all'elemento precedente; e

  • * ~~ /$_/è la condizione finale, ovvero che l'elemento corrente corrisponde all'argomento di input della funzione principale $_come sottostringa letterale.



3

Java 8, 81 79 78 byte

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

-1 byte grazie a @ OlivierGrégoire per avermi segnalato un errore (grande>. <) Che ho fatto ..

Spiegazione:

Provalo qui.

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
Dovrebbe essere 32+Math.random()*95. Lì ... bug risolto e un byte salvato! ;-)
Olivier Grégoire il

@ OlivierGrégoire Woops .. Ho guardato il codice esadecimale per lo spazio, ma il decimale regolare per tilde ..>.> Grazie per averlo notato. Non sono sicuro di come mi sia perso, dato che l'output aveva chiaramente simboli "non stampabili".
Kevin Cruijssen,


2

QBIC , 33 byte

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

Spiegazione

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

Esecuzione di esempio:

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 byte

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

Esegui come pipe con -nR. Non adatto a causa TIO di probabile timeout.

Inserisci uno spazio tra le virgolette per PHP più vecchio di 7.1.

Questa versione di 51 + 1 byte fallirà se l'input è 0:

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

2

Javascript 74 byte

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

chiama così:

s('hi')

@Giouseppe grazie, l'ho aggiunto nel conteggio dei byte
RuteNL

1
Penso che devi cambiare da 94 a 95 affinché il codice sia valido
Hawkings,

1
@Hawkings Sì, hai ragione, daCharCode sembra ignorare i decimali. Grazie per segnalarlo!
RuteNL

Salvare un byte con ~b.searchinvece di b.includes.
Shaggy,

@Shaggy Nice! Non sapevo di ricerca
RuteNL


2

Pushy , 20 18 byte

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

Provalo online!

Il programma mantiene len(input)lunghi i caratteri di uno stack , rimuove costantemente il primo e aggiunge un nuovo carattere casuale, fino a quando non viene raggiunta la stringa di input iniziale. Ogni personaggio viene stampato man mano che viene aggiunto, creando l'effetto desiderato.

Spiegazione:

                      \ == 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 byte

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

Provalo 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.

Può impilare casualmente l'overflow. Questo utilizza due funzionalità aggiunte di recente in Brachylog: variabili globali e metapredicate da applicare a coda .



Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.