Eso son muchos monos

35

El teorema del mono infinito establece que, dado el tiempo infinito, una máquina que envía un flujo interminable de caracteres aleatorios siempre escribirá cualquier texto.

Eso me parece una gran idea para un desafío.

Proceso

Para hacer una cadena de caracteres A mono, se deben seguir los siguientes pasos:

  1. Toma una cuerda vacía. Llamaremos a esta cadena B.
  2. Elija un carácter ASCII imprimible uniformemente aleatorio (caracteres en el rango 0x20de 0x7E) y agregue ese carácter a B.
  3. Si A es una subcadena de B, B es nuestra cadena de tamaño mono. De lo contrario, repita el paso 2 hasta que A sea una subcadena de B.

Este proceso es solo un ejemplo, pueden existir métodos más fáciles dependiendo de su idioma. No es necesario que siga este método exactamente, siempre que se logre la misma distribución de resultados.

El reto

Escriba un programa o función que, dada una cadena no vacía en cualquier formato razonable , devuelva una versión de esa cadena.

Su programa solo tiene que trabajar prácticamente para entradas de longitud 3 o menos. Para entradas más largas, se permite terminar antes con o sin generar nada.

Ejemplo

Desafortunadamente, es un poco difícil crear ejemplos para esta pregunta debido a su naturaleza aleatoria y los grandes resultados.

Sin embargo, puedo proporcionar un solo ejemplo para la entrada hi, en Hastebin.

Tanteo

Como se trata de , gana el envío con la menor cantidad de bytes.

LyricLy
fuente
Sandbox
LyricLy
11
¿Necesitamos seguir el procedimiento descrito para producir la salida? En caso afirmativo, ese es un requisito no observable , que es problemático. Si no, podemos generar Bdirectamente anteponiendo un número no negativo nde caracteres aleatorios a A. El único problema real es saber la distribución de n(apuesto a una distribución geométrica)
Luis Mendo
1
@seshoumara No puedes.
Letra de
77
@LuisMendo Pensé en este sentido, y en realidad no es fácil generar el prefijo directamente. No puede contener la cadena de destino, incluido el cruce del límite donde se encuentra con la cadena adjunta. Y la distribución de las longitudes de los prefijos depende no solo de la longitud de la cadena de destino, sino también de su estructura.
xnor
10
Algunos de los programas informáticos de solución a continuación, como .W!}zH+ZOrd\k, se parecen mucho a lo que ha escrito un mono.
Jeppe Stig Nielsen

Respuestas:

12

C, 192 bytes

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

Pruébalo en línea!

Es un desastre ahora, pero al menos funciona incluso para los casos de esquina ...


C,  63   62  61 bytes

¡Gracias a @Jonathan Frech por guardar un byte!

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

Pruébalo en línea!

Steadybox
fuente
No tengo ni idea de por qué esto se detiene cuando golpea s, +1
ATaco
1
@ATaco Se detiene cuando icrece lo suficiente como s[i]para referirse al terminador nulo de la cadena (carácter 0).
Steadybox
Ah, entonces, en lugar de arrojarle caracteres aleatorios hasta que s se cree accidentalmente, le arroja caracteres aleatorios hasta que alcanza s. Inteligente.
ATaco
Por mucho que me guste esta respuesta, creo que se rompe para una entrada como "ab" cuando los monos rand escriben "aab".
zennehoy
Supongo que necesitas algo como KMP para que este enfoque pueda ser válido. Suponga que la cadena de entrada es ababcy el mono generará ¿se !!abababcdetendrá su programa?
user202729
9

Python , 79 bytes

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

Pruébalo en línea!

Esto es teóricamente sólido, pero se bloqueará temprano debido a los límites de recursión de Python (puede configurarlos más para obtener resultados más largos)

Python, 84 bytes

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

Pruébalo en línea!

Este debería funcionar para cadenas relativamente más largas, ya que no depende de la recursión, a un costo de 5 bytes.

Uriel
fuente
Puede guardar tres bytes mediante el uso de acentos abiertos para hacer la conversión de cadenas (que se muestra aquí como comillas simples a la reducción del precio de la derecha)s+'randint(32,126)'
wnnmaw
1
@wnnmaw backticked randint(32,126)produciría una cadena del número, no el mapeo ascii Char
Uriel
8

Ohm v2 , 10 bytes

Ý£D³ε‽α@§↔

Pruébalo en línea!

Explicación:

Ý£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
fuente
8

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

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

Pruébalo en línea! (Se necesitan muchas ejecuciones para obtener una respuesta para una entrada de longitud 2, porque la mayoría de las veces se queda sin tiempo de cálculo TIO permitido).

Explicación:

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

Punto de referencia: aproximado, solo para fines de escala

  • longitud de entrada: 1, 10 entradas aleatorias (ejecuciones), tiempo promedio: <1 s
  • longitud de entrada: 2, 10 entradas aleatorias (carreras), tiempo promedio: 90 s
  • longitud de entrada: 3, 10 entradas aleatorias (ejecuciones), tiempo promedio: ¡muchas horas!
seshoumara
fuente
7

Funky , 64 bytes

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

Esto usa algunos trucos que he querido usar en Funky, como el nombre de una variable después de una palabra clave como en whileS, y el hecho de que las cadenas implícitamente son padre de la stringbiblioteca.

Sin golf

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

Pruébalo en línea!

Un taco
fuente
66
Entonces, ¿eso sería ... monos cobardes?
Sebastian Lenartowicz
7

Haskell , 100 bytes

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

Pruébalo en línea!

La idea básica es generar una lista infinita de caracteres con randomRsy detenerla una vez que encontremos la cadena.

usuario1472751
fuente
Una vergüenza isPrefixOfno está en el Preludio estándar ...
Bergi
7

C # (.NET Core) , 86 bytes

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

Realmente no me gusta cuánto Randomtoma crear la instancia, pero no creo que haya una forma de evitarlo.

Pruébalo en línea!

Wakawakamush
fuente
3
Bienvenido a PPCG! Actualmente, su solución no genera correctamente un carácter aleatorio ya que según los documentos , el límite superior pasado Random.Next(Int32,Int32)es exclusivo y, por lo tanto, no es uno de los números generados. Esto se puede solucionar reemplazando 126por 127.
0 '
@ 0 'Vaya, lo pensé mientras escribía, pero olvidé verificarlo antes de publicar. ¡Gracias!
Wakawakamush
De hecho, hay una forma de evitarlo Random, ¡puedes eliminar la declaración de variable! 79 bytes
FlipTack
@FlipTack Interesante, lo intenté en C # Interactive y no funcionó porque seguía generando el mismo número. Es extraño ver que funciona en TIO.
Wakawakamush
6

Perl 5, 31 +2 (-pa) bytes

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

Pruébalo en línea

Nahuel Fouilleul
fuente
Puede guardar 3 bytes ya que \E$es extraño
Zaid
de hecho, gracias por haberlo notado
Nahuel Fouilleul
ahorró 2 bytes más
Nahuel Fouilleul
Eso es astuto. Un lugar muy especial :)
Zaid
y aún más, -3bytes
Nahuel Fouilleul
6

R , 79 76 75 bytes

-3 bytes gracias a MickyT por cambiar la muestra aleatoria

-1 byte gracias a Robin Ryder por ajustar nuevamente la muestra aleatoria

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

Pruébalo en línea!

Giuseppe
fuente
hola, tu muestra podría ser reemplazada porintToUtf8(runif(1,32,127))
MickyT
@MickyT excelente, gracias!
Giuseppe
Puede guardar 1 byte con 32+95*runif(1)su muestra aleatoria.
Robin Ryder
6

Carbón, 15 14 12 bytes

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

Pruébalo en línea! El enlace es a la versión detallada del código. Editar: se guardaron 2 bytes debido a una subsiguiente corrección de errores en Charcoal. Explicación:

    θ           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
fuente
4

Pyth - 14 bytes

.W!}zH+ZOrd\k

Pruébelo en línea aquí .

Maltysen
fuente
W!}Qk=+kpOrd\ también tiene 14 bytes, SE está jugando con el formateo debido a que no se puede imprimir, pero el rango se genera de la misma manera
Dave
4

Mathematica, 65 bytes

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

Pruébalo en línea!

-3 bytes de Jonathan Frech

J42161217
fuente
Creo que FromCharacterCode[RandomInteger@94+32]es equivalente a la más corta RandomChoice@CharacterRange[32,126].
Jonathan Frech
@ JonathanFrech sí, lo es!
J42161217
4

Lua , 99 102 bytes

  • Se guardó un error gracias a ATaco , que agregó tres bytes.
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

Pruébalo en línea!

Jonathan Frech
fuente
4

Octava , 62 bytes

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

Pruébalo en línea!

Explicación:

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

¡Muchas gracias a Luis Mendo por las ediciones!

Alan
fuente
1
Bienvenido al sitio! :)
DJMcMayhem
¿No puedes reemplazar isvectorpor nnz? Y strfindpor regexp. Además, puede usar randi(95)+31, o tal vez reemplazar toda la sprintfdeclaración por o=[o,randi(95)+31];(conversión implícita a char)
Luis Mendo
Además, por lo general se necesita una función o un programa que toma su entrada (en contraposición a la definición de una variable que contiene la entrada) - algo como esto
Luis Mendo
Intenté hacer eso, pero no pude pensar en una forma concisa, así que me lo salté. Buenas revisiones!
Alan
1
Siéntase libre de incorporar esas sugerencias en su respuesta. Eso es estándar en este sitio
Luis Mendo
3

Alice , 21 bytes

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

Pruébalo en línea!

Explicación

/...@
\.../

Este es el marco para programas mayormente lineales que operan completamente en modo Ordinal (procesamiento de cadenas). La IP rebota diagonalmente hacia arriba y hacia abajo a través del programa dos veces, lo que significa que el código real está un poco extraño entrelazado. Los comandos en el orden en que se ejecutan realmente son:

i!w" ~"rUd?z$Kdo

Veamos esto:

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
fuente
3

Perl 6 , 39 bytes

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

Pruébalo en línea!

(...)[*-1]devuelve el último elemento de la secuencia definida por ..., de la cual:

  • "" es el primer elemento;

  • * ~ (" " .. "~").pickgenera el siguiente elemento agregando un carácter aleatorio en el rango apropiado al elemento anterior; y

  • * ~~ /$_/es la condición final, que es que el elemento actual coincide con el argumento de entrada de la función principal $_como una subcadena literal.

Sean
fuente
Puede perder el *~~-3 tio.run/##K0gtyjH7n1upoJamYPu/…
Phil H
3

Java 8, 81 79 78 bytes

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

-1 byte gracias a @ OlivierGrégoire por señalarme un error (grande>. <) Que he cometido.

Explicación:

Pruébalo aquí

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
fuente
1
Debería ser 32+Math.random()*95. Hay ... error corregido y un byte guardado! ;-)
Olivier Grégoire
@ OlivierGrégoire Woops .. Observé el código hexadecimal para el espacio, pero el decimal regular para tilde ..>.> Gracias por notarlo. No estoy seguro de cómo me he perdido eso, ya que la salida claramente tenía símbolos 'no imprimibles' ...
Kevin Cruijssen
3

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

[žQΩJD¹å#

Pruébalo en línea!


Haz el mono conmigo.


[              | 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.
Urna de pulpo mágico
fuente
1
Puedes hacer en Ωlugar de .R.
Emigna
2
Lol, usando un Ohm, para vencer a Ohm v2. Que agradable.
Urna de pulpo mágico
2

QBIC , 33 bytes

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

Explicación

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

Ejecución de muestra:

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
fuente
2

PHP, 55 + 1 bytes

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

Corre como tubería con -nR . No es adecuado para TIO debido a un probable tiempo de espera.

Inserte un espacio entre las comillas para PHP anterior a 7.1.

Esta versión de 51 + 1 bytes fallará si la entrada es 0:

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

Javascript 74 bytes

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

llama así:

s('hi')
RuteNL
fuente
@Giuseppe thx, lo agregué en el conteo de bytes
RuteNL
1
Creo que tienes que cambiar 94 a 95 para que el código sea válido
Hawkings
1
@ Hawkings Sí, tienes razón, fromCharCode ignora los decimales que parece. ¡Gracias por mencionarlo!
RuteNL
Guardar un byte con en ~b.searchlugar de b.includes.
Shaggy
@Shaggy Nice! No sabía acerca de la búsqueda
RuteNL
2

agresivo , 20 18 bytes

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

Pruébalo en línea!

El programa mantiene una pila. len(input) caracteres largos, elimina constantemente el primero y agrega un nuevo carácter aleatorio, hasta que se alcanza la cadena de entrada inicial. Cada personaje se imprime a medida que se agrega, creando el efecto deseado.

Explicación:

                      \ == 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
fuente
2

Brachylog , 17 bytes

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

Pruébalo en línea!

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.

Puede apilar al azar el desbordamiento. Esto hace uso de dos características recientemente agregadas en Brachylog: variables globales y el metapredicado de aplicación a cola .

Cadena no relacionada
fuente
1

Pyth, 13 bytes

W!}z=akpOrd\

donde el carácter no imprimible es 0x7F.

Prueba

Steven H.
fuente
1

Bash 94 bytes

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

Pruébalo en línea

Nahuel Fouilleul
fuente