Escribí un texto, pero parece demasiado profesional. Quiero que parezca que estaba realmente cansado cuando lo escribí. Necesito que insertes algunos errores tipográficos.
Su desafío es tomar una única línea de texto arbitraria y agregar errores tipográficos. Esto significa que para cada personaje, habrá un 10% de posibilidades de que se tipifique.
La definición de "tipificado" es que debe elegir (al azar) uno de los siguientes:
- Duplicar el personaje.
- Eliminar el personaje.
Desplaza el carácter un espacio del teclado. El "teclado" se define como:
qwertyuiop asdfghjkl zxcvbnm
Para el cambio de personaje, debes ir un espacio arriba, abajo, izquierda o derecha. Esto debe ser elegido al azar. La opción de desplazamiento solo se aplica a los caracteres alfabéticos. El caso debe ser preservado. ¡Tenga cuidado con los casos de borde, como
m
!
La definición de "aleatorio" es que el resultado no debe ser predecible (al observar los resultados anteriores). Por ejemplo, no puedes tipificar cada décimo personaje. Además, la aleatoriedad debe tener una distribución uniforme. Por ejemplo, no puede hacer 30% de duplicado, 30% de eliminación y 40% de desplazamiento; tiene que tener una probabilidad de 1/3 para cada uno (1/2 para cada uno si es un personaje no alfabético).
Entrada de ejemplo:
This is some correct text. It is too correct. Please un-correctify it.
Salida de ejemplo:
This iissome xorreect tex.. It is too coteect. Please jn-corretify it.
Este es el código de golf , por lo que ganará el código más corto en bytes.
Respuestas:
GolfScript, 120 caracteres
El código se puede probar aquí .
fuente
C, 358 bytes
(Solo hay tres líneas de código, pero he dividido la línea 3 por legibilidad)
El conjunto de cadenas al principio enumera las posibles teclas adyacentes para cada letra del alfabeto. Tuve que duplicar la "O" (adyacente a "P") para evitar el cálculo
random()%1
al seleccionar un personaje desplazado.Prueba de funcionamiento:
Actualizar:
Aquí hay una versión ampliada y comentada del mismo código fuente:
fuente
char*s[26]
. El compilador debería poder resolverlo por sí mismo.continue
s conelse
s. (Deje el lugar;
donde estaba el primero).Rubí, 168
Toma ligeramente más corta usando una estrategia de indexación de matriz:
Versión original de expresión regular (184):
fuente
Kernel#putc
para imprimir la salida ya que eso no requería parens, ahorrándome un carácter. Por supuesto,putc
solo imprime el primer carácter, y la cadena de salida a veces puede tener dos caracteres de longitud. Estúpido error. ¡Prueba esta versión!Python, 251
Técnica de búsqueda muy simple, por un momento pensé que podría ser más barato codificar el teclado como un gráfico no dirigido, pero la sobrecarga para crear ese tipo en Python resultó prohibitiva. Como las funciones aleatorias de Python tienen nombres demasiado descriptivos, uso
choice()
exclusivamente, renombrándolo aw
. El 10% de posibilidades de error se maneja en el lugarw([z]*9+[...])
donde las nueve copias de un carácter sin escribir están en una lista con un error tipográfico.-16 caracteres - gracias grc, +2 caracteres (y corrección, valen más de 2 caracteres) - gracias Dhara
fuente
d="SQ VNH XVF...".split()
, elimine el espacio despuésprint
y reemplace elif
/else
con([...]+[...])*z.isalpha()
. Además, no necesita una variabled
ya que solo la usa una vez.w=__import__('random').choice
(al menos en Python 3 afaik).input()
yprint()
para guardar 2 caracteres.C #, 320 bytes (360 bytes con ajuste de programa)
Incluye soporte para letras mayúsculas "desplazadas".
Como una función (320 bytes):
Como un programa que lee una línea de texto (360 bytes):
Muestra de entrada y salida:
fuente
Func<int,int> n=x=>r.Next(x);
una buena idea. Si solo el compilador pudiera inferir el tipo para los delegados ...JS,
303,288,275,273, 274 (corrección de errores)Algoritmo para el deslizamiento de tecla:
Versión sin golf por solicitud:
fuente
;
. Esa es la única forma de decir que en realidad tiene 274 bytes. Además, solo funciona en las versiones más recientes de Javascript y JScript.Perl,
278239197169162156151149Ejecutar con
-p
, luego 148 + 1 = 149 bytes. P.ej:Sin golf, más o menos:
Al principio pensé que elegir un elemento aleatoriamente en una matriz (de 26 de ellos de diferentes longitudes) es estadísticamente más "limpio" (es decir, aleatorio), pero tal vez estuvo mal. (Ver versión anterior.) Este último intento es, siguiendo a los líderes :-), avanzar a lo largo de una cadena por -1,1, -11,11 (al azar) y repetir hasta el paso válido.
Editar: Gracias a la ayuda de tobyink y otras optimizaciones, logramos reducir considerablemente el tamaño del código.
El último enfoque utiliza algunos trucos con la búsqueda de expresiones regulares para encontrar un paso válido a lo largo de la cadena de sustitución, eliminando las verificaciones manuales.
Otra edición: 5 bytes de descuento porque no necesitamos enteros para los índices de matriz + pequeño truco con índice de matriz ilegal. Intenté el mismo truco con
[-4+rand@-]
(es decir, índices negativos) y eliminé un elemento de la lista,'',
pero no guardó nada.Editar: Volver a la simplicidad - reemplazando la condición
~~rand 10
conrand>.1
guardar 2 bytes ...fuente
sub i
. No está utilizando estricto, por lo que'QWERTYUIOP0ASDFGHJKL000ZXCVBNM'
se puede dar como una palabra simple (guarda dos caracteres de comillas). De manera similar, también puede hacerlo'Z'
(aunque esto significa que necesita agregar un espacio entre ellos ygt
, por lo tanto, solo guarda un carácter). Ahorro total: 4 caracteres.($n=i$&=~/\pL/?3:2)?--$n?do{...}:$&x2:''
se puede reescribir como($&x2,'',do{...})[i$&=~/\pL/?3:2]
. Significa que la evaluación no es perezosa (calcula las tres formas en que el personaje podría ser sustituido antes de decidirse por una técnica de sustitución), pero funciona, y mis otros cálculos guardan otros siete caracteres.gt'Z'
, eso se puede eliminar. Con todos estos cambios, debería poder reducirlo a 184 caracteres.$s
a$,
(esta variable incorporada es el separador de campo paraprint
, pero no está imprimiendo múltiples campos en ningún lado, por lo que su uso incorporado es irrelevante, lo que hace que la variable esté lista para su reutilización), entonces puede eliminar el espacio en blanco en$s x3
hacerlo justo$,x3
.PHP, función con 368 bytes
Aquí está mi intento.
Es un poco de "frankencode", pero es un poco funciona.
Un código más "legible":
La única diferencia entre los 2 códigos es que uno tiene toneladas de pestañas y líneas nuevas.
No produce el mismo tipo exacto de "incorrección", pero elimina o reemplaza un carácter utilizando las condiciones mencionadas.
Puedes probarlo en http://writecodeonline.com/php/ .
Copia y pega este codigo:
Después de la prueba, por favor, dígame si es una respuesta válida.
fuente
C #, 581 bytes
y en un formato más legible:
fuente
PHP,
326320318315 caracteresY una versión más legible y comentada:
Todavía podría mejorarse, supongo.
-2, -3 gracias a Ismael Miguel
fuente
(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)?2:1))
cambio(!($g=rand(0,($e=($c>-1&&$c<26)or$c>31&&$c<58)+1))?
y ahorrará 2 bytes.($e?0:32)
, reemplazando con32*!!$e
(observe la falta de paréntesis) guarde 2 bytes. Si$e
SIEMPRE es booleano, puede hacerlo32*!$e
y guardar 3 bytes. Esto funcionará porque php tiene precedencia aritmética. Esto significa que las multiplicaciones y divisiones se hacen antes de cualquier suma y resta.Java (475 bytes)
Este es mi intento en el lenguaje detallado que es Java. Obtener números aleatorios es bastante largo en Java, y el mapeo no es realmente eficiente. Probablemente se pueda mejorar.
Uso:
Sin comprimir, elogios añadidos:
fuente
AutoHotkey 441 bytes
La entrada se debe dar como un parámetro de línea de comando, la salida se da como un mensaje de error.
Versión de golf
Versión sin golf y anotada (la diferencia es que esta versión tiene más espacio en blanco y las asignaciones variables están en líneas separadas para facilitar la lectura).
fuente