Su desafío es escribir un programa para traducir (inglés) leetspeak / lolspeak / txtspk al inglés normal. Su programa debe leer desde la entrada y salida estándar hasta la salida estándar, a menos que su idioma no lo admita.
Puede usar un archivo que contenga una lista de palabras en inglés, separadas por nuevas líneas. Debe llamarse W
y se ubicará en el mismo directorio que su programa. (En los sistemas GNU / Linux y posiblemente en otros, puede hacer W
un enlace /usr/share/dict/words
) La lista no tiene que estar en minúsculas, puede usarla para determinar si las palabras deben tener mayúsculas.
Esto se basa en una pregunta ahora eliminada publicada por Nikos M. que se puede encontrar aquí . Esto no es un duplicado ya que esta pregunta original se cerró y no recibió ninguna respuesta, porque no había un criterio ganador y el usuario no estaba dispuesto a poner una.
Tanteo
¡La puntuación es un poco complicada!
tu puntaje es
(leet items + bonuses) * 10 / (code length)
La puntuación más alta gana.
Su programa no tiene que ser y probablemente no pueda ser perfecto, pero cuanto más preciso sea, ¡más bonificaciones obtendrá!
Como $
puede significar ambos s
y S
, obtienes una bonificación de 5 puntos por elemento leet para decidir si debe tener una letra mayúscula (es decir, letras mayúsculas al comienzo de las oraciones).
Obtiene una bonificación adicional de 5 puntos por elemento leet para implementar nombres propios (palabras que siempre tienen mayúsculas): la forma en que esto funciona es que miraría a través de la lista de palabras, haría que la salida en mayúscula si solo una versión en mayúscula está presente en el lista, y si ambas versiones están ahí, solo adivina.
Si un personaje tiene dos significados (por ejemplo, 1
puede significar L
o I
), obtienes 20 puntos por elemento leet por solo elegir aquellas traducciones del elemento que hacen palabras reales en inglés; usa la lista de palabras para esto. Si más de una traducción de un elemento leet hace una palabra real en inglés, puede elegir arbitrariamente una de las traducciones válidas y aún así obtener la bonificación.
Lista de Leet
Estos son los elementos de leet que puede implementar. No tiene que implementarlos todos, pero cuanto más agregue, más puntos obtendrá.
Nunca puedes ganar puntos traduciendo un elemento o personaje a sí mismo. Esta regla anula cualquier error que pueda haber cometido en la lista.
Es tentador hacer un simple tr
o s/.../.../g
. El verdadero desafío es determinar cuál de los múltiples significados podría o no ser correcto, utilizando la lista de palabras.
Elementos de Leet (cada uno de estos agrega 1 a leet items
en la fórmula)
$ -> s, S (-> c, C 5 -> s, S @ -> a, A 4 -> a, A 3 -> e, E 7 -> t, T + -> t, T # -> h, H teh -> el 'd -> ed pwnd -> pwned pwnt -> pwned k, K -> OK kk -> OK 0 [cero] -> o, O y, Y -> por qué 4 -> para txt -> texto dafuq -> que carajo / \, ^ -> a, A \ / -> v, V d00d -> amigo n00b -> novato \ / \ / -> w, W 8 -> b, B | _ | -> u, U | - | -> h, H Я -> r, R j00 -> usted joo -> tu vv, VV -> w, W tomoz -> mañana | <-> k, K [), |) -> d, D <3 -> amor > <-> x, X 10100111001 -> leet (representación binaria de 1337) 2 -> a, también ur, UR -> tu, eres (no es necesario distinguir correctamente entre los dos) u, U -> usted 8 -> -ate-, 8 x, X -> -ks -, - cks- z, Z -> s, S 1 -> i, I, l, L ! -> i, yo ,! c, C -> ver, C, mar b, B -> ser, B, abeja [letra acentuada] -> [forma no acentuada] (puntaje 1 por letra acentuada admitida) &, 7 -> y, anned, hormiga (puede usarse en el medio de una palabra)
"Leet" más difícil: consigue 30 puntos por leet items
cada
!!! 1 !! 1-> !!!!!!! (traduzca 1 en una secuencia de! 's en!' s) !!! uno! -> !!!!! ! once-> !!!
Ejemplos
Estos son ejemplos de lo que podría hacer un programa que implementa todos los caracteres anteriores y algunos de los bonos:
Oración de ejemplo: |-|3 15 $|_|(# @ n00b
=He is such a newbie
Censura basada en Leet: $#!+
=s**t
Leet extremo: \/\/ 1 |< 1 P 3 [) 1 A
=Wikipedia
-xor sufijo: H4X0R
=hacker
Leet más extremo: @1\/\/4Y5 p0$+ ur n3VV qu35710nz 1n teh $&80x
=Always post your new questions in the sandbox
Ejemplo de puntuación
Bash, 10 personajes, 3 artículos, sin bonificaciones:
tr 137 let
Esto puntúa ( 1 * 3 ) * 10 / 10 = 3
.
fuente
tr
os/.../.../g
. Simplemente traducir cosas así supondría un desafío aburrido, por lo que debemos recompensar mejores traducciones que utilicen la lista de palabrassed
guión.)sed
script, me refiero a algo más que simples/.../.../g
, sino un archivo que se analiza y ejecuta porsed
sí mismo. Tan breve como es el idioma, podría ser un lenguaje jugable decente ...sed
los scripts también están bien y podrían ser muy interesantes, podrían funcionar muy bien en esto debido a la breve sintaxis de sustitución, es posible que pueda leer de la lista de palabras, ya sea con extensiones GNU osed
como parte de un programa Bash más grandeRespuestas:
Javascript (49 + 5635) * 10/2174 = 26.14
Demostración en línea:
La opción "Diccionario real" no funciona en el cuadro desplegable, pero funcionará si se ejecuta en un servidor web real. Probado en el servidor de desarrollo visual studio y google chrome.
https://dl.dropboxusercontent.com/u/141246873/leettranslator/index.html
Puntuación:
49 artículos leet = 49
Bonificación de capitalización = 5 * 49 = 245
bono de búsqueda de diccionario = 20 * 49 = 980
bono de exclamación * 3 = 90 * 49 = 4410
(artículos leet + bonos) * 10 / (longitud del código)
(49 + 5635) * 10/2174 = 26,14
Código:
Sin golf:
Resultados de la prueba:
Notas:
El diccionario es un archivo javascript separado con un objeto llamado W que contiene todas las palabras. Esto solo contiene las palabras que necesitaba para ejecutar las pruebas relevantes.
fuente
W.js
si se elimina)Haskell - Puntaje 1.421421421: (37 artículos + (21 bonos (capitalización) * 5)) * 10 / (999 bytes)
Esta es mi respuesta final.
Pruebas
Cuando el programa se compila en un archivo llamado
min-lt
, puede escribir el siguiente script de shellque imprimirá esto
fuente
-ks-
que me referíaks
en el medio de una palabra.haskell-platform
paquete. ¿Tienes un ejemplo paraks
?<insertnamehere> rocX
oroX
BrainFuck extendido : 0.6757
Entonces esto hace 15 traducciones "$ (5 @ 437 + # 0821! &", Sin bonificaciones y tiene 222 bytes (no se incluyen avances de línea innecesarios). 15 * 10/222 = 0.6757
Uso:
EBF en realidad no está hecho para jugar al golf, pero su función rle, macros y función de cadena de impresión hace que sea algo más fácil de comprimir que BrainFuck. El binario final compilado BrainFuck se ve así:
fuente
~"OTLHEAND"
Podría hacer todos los caracteres una vez para el código de objeto de 107 bytes en lugar de hacerlos desde 0 cada vez usando 354, pero mi respuesta está optimizada para el tamaño del código EBF :)Java: 1.236
Entonces hace las siguientes transformaciones
El cálculo del puntaje es complicado
((39 + (21 * 5)) * 10) / 1165 = 1.236
Código sin golf:
fuente
C # puntaje 45 * 10/2556 = 0.176
El programa puede generar casi todas las letras mayúsculas y minúsculas. Como no estoy usando una lista de palabras en inglés, se usa la primera clave encontrada en el Diccionario. Por ejemplo, \ / \ / se convierte en vav. Si char es la primera letra de una palabra, se aplica ToUpper.
Aquí está mi salida de prueba:
fuente