En esta tarea, escribirá un programa / función que toma un programa Malbolge normalizado y genera el programa Malbolge resultante . (¡Esta es una herramienta secreta que utilizan todos los programadores de Malbolge!)
Entrada
Una estructura de datos que (de alguna manera) representa un programa Malbolge normalizado.
Salida
Una estructura de datos que representa el programa Malbolge resultante.
Ejemplos
jpoo*pjoooop*ojoopoo*ojoooooppjoivvvo/i<ivivi<vvvvvvvvvvvvvoji
(=BA#9"=<;:3y7x54-21q/p-,+*)"!h%B0/.~P<<:(8&66#"!~}|{zyxwvugJ%
jjjj*<jjjj*<v
('&%#^"!~}{XE
jjjjjjjjjjjjjjjjjjjjjjj*<jjjjjjjjjjjjjjjjjjjjjjjj*<v
('&%$#"!~}|{zyxwvutsrqpnKmlkjihgfedcba`_^]\[ZYXWVT1|
Como convertir
Iterar sobre el programa Malbolge normalizado, realizando los siguientes pasos para cada personaje:
Reemplace los caracteres en la cadena
*jpovi</
con el carácter correspondiente en'(>DQbcu
. (Es decir, mapa*
a'
,j
a(
, etc.)Luego reste la posición actual del contador del programa (es decir, el número de caracteres antes del actual) del código ASCII del personaje.
Si el código ASCII resultante es menor que 33, increméntelo en 94 y repita hasta que sea al menos 33.
Agregue el carácter resultante a la salida.
Reglas
- Este es un concurso de código de golf ; la respuesta más corta gana.
- No hay lagunas estándar por favor.
- Los métodos de E / S predeterminados están permitidos.
- La entrada solo contendrá los caracteres
*jpovi</
.
*jpovi</
"?a: if ascii_code(temporary Malbolge representation) < 33: char := char + 94; goto a;
Respuestas:
Jalea ,
2922 bytesPruébalo en línea!
Un enlace monádico que toma una cadena Jelly como argumento y devuelve una cadena Jelly.
¡Gracias a @JonathanAllan por guardar 2 bytes!
Explicación
fuente
..._J‘ịØṖḊ¤
ahorra un byte.Oị“%þV DCµ2® ‘_JịØṖḊ¤
Python 3 , 82 bytes
Pruébalo en línea!
Gracias a @Joel por reemplazar los caracteres feos no imprimibles en la cadena de bytes con caracteres imprimibles.
Estoy buscando una cadena de modulación para reemplazar
"*jpovi<".find(c)
, pero no creo que haya una más corta, y una búsqueda de fuerza bruta no exhaustiva no ha encontrado nada hasta ahora.82 bytes
Pruébalo en línea!
fuente
b"de{#0ABT"["*jpovi<".find(c)]
si tiene un programa para eso.x%84%15%7
para la mitad derecha de la asignación, pero creo que puedo reciclar algo de código que escribí para otro reto para buscar incluyendo*
y/
términos.%
y*
(//
en Python 3 probablemente no valga la pena). De hecho, nada ha coincidido con los primeros 6 de 7 valores. Esperaba que esto funcionara porque una estimación aproximada de la entropía dice que probablemente haya suficientes expresiones que terminen en% 7`, pero está cerca. Y tal vez estas cadenas dan salidas que están lejos de estar distribuidas de manera uniforme, especialmente porque una vez que dos entradas colapsan al mismo valor, no pueden separarse más operaciones. Lo que estoy intentando todavía es demasiado tonto para buscar la expresión más amplia, pero si tienes alguna idea, ve por ella.map(ord, "*jpovi<")
. Si la salida no conserva el orden para la mayoría de las entradas (es decir,f(m)>=f(n)
sim>=n
), es probable que se necesiten algunas constantes cuidadosamente elaboradas para%
y*
es probable que una búsqueda de fuerza bruta produzca un resultado positivo.Malbolge Unshackled (variante de rotación de 20 trits), 7,784e6 bytes
El tamaño de esta respuesta excede el tamaño máximo de programa postable (eh), por lo que el código se encuentra en mi repositorio de GitHub .
¿Cómo ejecutar esto?
Esto podría ser una parte difícil, porque el ingenuo intérprete de Haskell tardará siglos en ejecutarlo. TIO tiene un intérprete decente Malbogle Unshackled, pero lamentablemente no podré usarlo (limitaciones).
La mejor que pude encontrar es la variante de ancho de rotación fija de 20 trits, que funciona muy bien, convirtiendo 0,5 caracteres por segundo .
Para hacer que el intérprete sea un poco más rápido, eliminé todas las comprobaciones del intérprete Malbolge Unshackled de Matthias Lutter.
Mi versión modificada puede correr alrededor de un 6,3% más rápido.
¡Esta funcionando!
fuente
Python 3 ,
8483 bytesPruébalo en línea!
Esto es principalmente un problema matemático sobre la simplificación de la computación, más algo de golf después de hacer las matemáticas. La versión no codificada del código se muestra a continuación.
Versión no recursiva no golfista
Pruébalo en línea!
fuente
JavaScript (Node.js) , 69 bytes
Pruébalo en línea!
¿Cómo?
fuente
Perl 6 ,
65 5553 bytesPruébalo en línea!
Utiliza el truco mod 11 de la respuesta de Arnaud
fuente
05AB1E ,
32312322 bytes-8 bytes creando un puerto de la respuesta Jelly de NickKennedy , ¡así que asegúrate de votarlo!
-1 byte gracias a @Grimy.
Salidas como una lista de caracteres.
Pruébelo en línea o verifique todos los casos de prueba .
Explicación:
Vea esta sugerencia mía 05AB1E (sección ¿Cómo comprimir enteros grandes? Y ¿Cómo comprimir listas enteras? ) Para comprender por qué
•4¡ˆ¶ü]₁η₃•
es82767635194143615015
y•4¡ˆ¶ü]₁η₃•₃в
es[1,36,30,85,0,67,66,8,49,7,0]
.fuente
•1ÃQWý₂Ýδ9•86в
->•4¡ˆ¶ü]₁η₃•₃в
Perl 5 (
-p
),53, 51 bytesguardar 2 bytes, usar en
de{#0ABT
lugar de'(>DQbcu
para que61
ya no sea necesarioTIO
la primera respuesta fue
TIO
fuente
Japt ,
2423 bytesSolución de jalea del puerto de Nick
Intentalo
fuente
Retina 0.8.2 , 50 bytes
Pruébalo en línea! El enlace incluye casos de prueba. Explicación:
Realice la transliteración como se describe en la pregunta.
p
(descrito a continuación) yo
tienen un significado especial paraT
ransliterate, por lo que deben ser citados.Enumere cada carácter en su propia línea, precedido por un número de espacios de acuerdo con su índice, es decir, cuál sería el contador del programa.
Disminuya cíclicamente repetidamente el último carácter en cada línea, eliminando el espacio anterior cada vez, hasta que se hayan eliminado todos los espacios. Los
p
stands para ASCII imprimible es decir-~
, sin embargo, quieren que el!
asignar a~
fin de que es transcrito primero, y luego la_
hace que el espacio en el partido.¶
se va a eliminar, mientras que los caracteres restantes consiguen transliterados un código de carácter a la vez.Únete a todos los personajes de nuevo juntos.
fuente
Carbón , 23 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Puerto de la respuesta de JavaScript de @ Arnauld. Explicación:
fuente
C # (compilador interactivo de Visual C #) , 62 bytes
Pruébalo en línea!
Puerto de @Arnaulds Respuesta de JavaScript. Uno si las raras instancias donde C # es más corto.
fuente
Haskell , 135 bytes
Pruébalo en línea!
fuente