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:
- Toma una cuerda vacía. Llamaremos a esta cadena B.
- Elija un carácter ASCII imprimible uniformemente aleatorio (caracteres en el rango
0x20
de0x7E
) y agregue ese carácter a B. - 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 código de golf , gana el envío con la menor cantidad de bytes.
B
directamente anteponiendo un número no negativon
de caracteres aleatorios aA
. El único problema real es saber la distribución den
(apuesto a una distribución geométrica).W!}zH+ZOrd\k
, se parecen mucho a lo que ha escrito un mono.Respuestas:
C, 192 bytes
Pruébalo en línea!
Es un desastre ahora, pero al menos funciona incluso para los casos de esquina ...
C,636261 bytes¡Gracias a @Jonathan Frech por guardar un byte!
Pruébalo en línea!fuente
i
crece lo suficiente comos[i]
para referirse al terminador nulo de la cadena (carácter 0).ababc
y el mono generará ¿se!!abababc
detendrá su programa?Python , 79 bytes
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
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.
fuente
s+'randint(32,126)'
randint(32,126)
produciría una cadena del número, no el mapeo ascii CharOhm v2 , 10 bytes
Pruébalo en línea!
Explicación:
fuente
GNU sed + coreutils, 75 + 1 (r flag) = 76 bytes
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:
Punto de referencia: aproximado, solo para fines de escala
fuente
Funky , 64 bytes
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 lastring
biblioteca.Sin golf
Pruébalo en línea!
fuente
Haskell , 100 bytes
Pruébalo en línea!
La idea básica es generar una lista infinita de caracteres con
randomRs
y detenerla una vez que encontremos la cadena.fuente
isPrefixOf
no está en el Preludio estándar ...C # (.NET Core) , 86 bytes
Realmente no me gusta cuánto
Random
toma crear la instancia, pero no creo que haya una forma de evitarlo.Pruébalo en línea!
fuente
Random.Next(Int32,Int32)
es exclusivo y, por lo tanto, no es uno de los números generados. Esto se puede solucionar reemplazando126
por127
.Random
, ¡puedes eliminar la declaración de variable! 79 bytesPerl 5, 31 +2 (-pa) bytes
Pruébalo en línea
fuente
\E$
es extrañoJapt , 26 bytes
Pruébalo en línea!
fuente
R ,
797675 bytes-3 bytes gracias a MickyT por cambiar la muestra aleatoria
-1 byte gracias a Robin Ryder por ajustar nuevamente la muestra aleatoria
Pruébalo en línea!
fuente
intToUtf8(runif(1,32,127))
32+95*runif(1)
su muestra aleatoria.Carbón,
151412 bytesPrué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:
fuente
Rubí , 42 bytes
Pruébalo en línea!
fuente
Pyth - 14 bytes
Pruébelo en línea aquí .
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 maneraMathematica, 65 bytes
Pruébalo en línea!
-3 bytes de Jonathan Frech
fuente
FromCharacterCode[RandomInteger@94+32]
es equivalente a la más cortaRandomChoice@CharacterRange[32,126]
.Lua ,
99102 bytesPruébalo en línea!
fuente
MATL ,
1716 bytesPruébalo en línea!
-1 byte gracias a Giuseppe
fuente
Octava , 62 bytes
Pruébalo en línea!
Explicación:
¡Muchas gracias a Luis Mendo por las ediciones!
fuente
isvector
pornnz
? Ystrfind
porregexp
. Además, puede usarrandi(95)+31
, o tal vez reemplazar toda lasprintf
declaración poro=[o,randi(95)+31];
(conversión implícita a char)Japt ,
161411 bytesIntentalo
fuente
Alice , 21 bytes
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:
Veamos esto:
fuente
Perl 6 , 39 bytes
Pruébalo en línea!
(...)[*-1]
devuelve el último elemento de la secuencia definida por...
, de la cual:""
es el primer elemento;* ~ (" " .. "~").pick
genera 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.fuente
*~~
-3 tio.run/##K0gtyjH7n1upoJamYPu/…Java 8,
817978 bytes-1 byte gracias a @ OlivierGrégoire por señalarme un error (grande>. <) Que he cometido.
Explicación:
Pruébalo aquí
fuente
32+Math.random()*95
. Hay ... error corregido y un byte guardado! ;-)05AB1E ,
109 bytes (-1 @ Emigna)Pruébalo en línea!
Haz el mono conmigo.
fuente
Ω
lugar de.R
.QBIC , 33 bytes
Explicación
Ejecución de muestra:
fuente
PHP, 55 + 1 bytes
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
:fuente
Javascript 74 bytes
llama así:
fuente
~b.search
lugar deb.includes
.Julia 0.6 , 53 bytes
Pruébalo en línea!
fuente
agresivo ,
2018 bytesPrué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:
fuente
Brachylog , 17 bytes
Pruébalo en línea!
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
ᵗ
.fuente
Pyth, 13 bytes
donde el carácter no imprimible es 0x7F.
Prueba
fuente
Bash 94 bytes
Pruébalo en línea
fuente