Inspirado por esta pregunta de CR (por favor no me mates por navegar por CR)
Especificaciones
Las probabilidades de escribir mal una palabra son:
- 1/3 del tiempo no cambia la salida
- 1/3 de las veces elimina un personaje aleatorio
- 1/3 del tiempo duplica un carácter aleatorio
La posibilidad de eliminar / duplicar un carácter dado en la entrada debe ser la misma para todos los caracteres.
Si dos caracteres consecutivos son iguales (distingue entre mayúsculas y minúsculas), la probabilidad de que uno de ellos se modifique debería ser la misma que si fueran un solo carácter. Es decir, las salidas para AA
(que son AA
o A
o AAA
) todo debe tener la misma probabilidad.
La entrada solo contendrá letras para simplificar.
Ejemplos
La primera línea es de entrada, las siguientes líneas son todos los errores ortográficos posibles. Cada línea debe tener la misma probabilidad de salida, la entrada se excluye en los ejemplos pero aún debe tener una probabilidad de salida de 1/3.
foo
fo
oo
ffoo
fooo
PPCG
PPC
PPG
PCG
PPPCG
PPCCG
PPCGG
foo
: si elimina un carácter, podría convertirse en (-f) oo, f (-o) o y fo (-o). Entoncesfo
debería ser el doble de probableoo
, pero usted dice que cada línea tiene la misma probabilidad.If two consecutive characters are the same (case-sensitive), the probability of one of them being modified should be the same as if they are one character. I.e. the outputs for AA (which are AA or A or AAA) should all have the same probability.
Respuestas:
Pip ,
3827 bytesEsto fue divertido: pude usar las capacidades de expresión regular y cadena mutable de Pip, que no había sacado en mucho tiempo. Toma entrada a través de la línea de comando argumento.
Explicación:
Pruébalo en línea!
fuente
Ruby,
6455 + 1 (p
bandera) = 56 bytesLa entrada es una línea de STDIN canalizada sin una nueva línea final.
fuente
CJam (21 bytes)
Demostración en línea
Disección
fuente
JavaScript (ES6), 107
Menos golf
Prueba
fuente
Java 7,
189180178 bytesSin golf y casos de prueba:
Pruébalo aquí
Salida posible:
fuente
Python 2, 134 bytes
Los espacios en blanco en for loop son pestañas.
Pruébalo en Ideone
fuente
Pyth - 17 bytes
Este realmente maneja los casos especiales con caracteres consecutivos correctamente.
Test Suite .
fuente
APL, 21
Esto comienza creando un vector de ceros con un 1 en posición aleatoria. Luego, multiplíquelo por un número aleatorio entre 1 y 3. +1 y mod 3 obtiene un vector con todos los 1 y uno aleatorio colocado 0,1 o 2.
Finalmente, ⍵ / ⍨ dice que cada letra debe escribirse n veces, donde n son los números en el vector.
Pruébalo en tryapl.org
fuente
Python 2, 123 bytes
fuente
JavaScript (ES6), 103
fuente
APL, 27 bytes
Explicación:
Prueba:
fuente