RoboCritters ( etimología ) es un nuevo lenguaje de programación esotérico (no te molestes en buscarlo, lo acabo de inventar). Es una variante de Brainfuck (BF), un poco más compleja que los esquemas habituales de sustitución del operador. Cada programa en RoboCritters es una cuadrícula de texto rectangular que solo contiene los siete caracteres . []/\|
, además de nuevas líneas para dar forma a la cuadrícula.
Ejemplo de programa RoboCritters:
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
Para traducir un programa RoboCritters a BF, observe cada carácter que no sea de nueva línea en la cuadrícula en el orden de lectura normal (de izquierda a derecha y luego de arriba a abajo), por ejemplo |\/||./|[]||[..][][] ||/\|[..][..][..] \/\/
.
Si la sección 4 × 2 de la cuadrícula que se extiende hacia la derecha y hacia abajo desde el carácter actual coincide exactamente con uno de los ocho bichos robot enumerados a continuación, agregue el comando BF correspondiente ( ><+-.,[]
) al programa BF (inicialmente vacío).
Si la sección de cuadrícula 4 × 2 no coincide con ninguno de los bichos del robot o se sale de los límites , no se agrega nada al programa BF.
Joybot,
>
comando:[..] \][/
Calmbot,
<
comando:[..] /][\
Squidbot,
+
comando:[..] //\\
Spiderbot,
-
comando:[..] ||||
Bunnybot,
.
comando:[][] [..]
Toothbot,
,
comando:[..] |/\|
Foxbot,
[
comando:|\/| [..]
Batbot,
]
comando:[..] \/\/
Entonces, leyendo el programa de ejemplo
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
podemos ver que primero encontramos un Foxbot (en la columna 1, fila 1), luego un Toothbot (c1, r2), luego un Bunnybot (c5, r2) y finalmente un Batbot (c9, r3). Esto corresponde al programa BF [,.]
.
Tenga en cuenta que Foxbot y Toothbot se superponen. Esto es intencional; los bichos robot no se interpretan de manera diferente cuando se superponen .
Desafío
Escriba el programa más corto posible que tome un programa RoboCritters y genere su equivalente BF. No necesita ejecutar el BF o verificar que sea válido, solo traduzca el código RoboCritters al código BF.
Detalles
Todos los programas de entrada de RoboCritters serán válidos, es decir, serán un bloque de texto exactamente rectangular que solo contenga los siete caracteres
. []/\|
, más nuevas líneas para darle forma. Las nuevas líneas pueden estar en cualquier representación común conveniente . Opcionalmente, puede suponer que los programas tienen una nueva línea final.Debe admitir los programas RoboCritters que sean más pequeños que 4 × 2, incluido el programa 0 × 0 vacío (o una nueva línea). Todos estos corresponden al programa BF vacío (la cadena vacía).
El programa BF de salida debe ser una cadena de una línea que solo contenga los ocho caracteres de comando BF
><+-.,[]
. Opcionalmente, puede haber una nueva línea final.Tome la entrada de la forma habitual (stdin / archivo de texto / línea de comando) y envíela a stdout o la alternativa más cercana a su idioma.
En lugar de un programa, puede escribir una función que tome el programa RoboCritters como una cadena e imprima o devuelva la cadena del programa BF.
Ejemplos
Entrada: (variante del ejemplo anterior)
|\/|[][] [..][][] |/\|[..] \/\/
Salida:
[,.]
Entrada: (prueba todas las criaturas robot)
[..][[[[[..]]. ]|\/| \][/[..]//\\[..][..] [..]/][\[][]|/\|[..] ||||/\| [..]| |\/\/
Salida:
>+[<,-.]
Entrada:
[..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [][] [][] [..] [..] [..] [][] [..] [..] [][] [..] [..] [][] [..] [][] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [][] [..] [..] [..] [][] //\\ //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ /][\ /][\ /][\ /][\ |||| \/\/ \][/ //\\ \][/ //\\ \][/ |||| \][/ \][/ //\\ [..] /][\ \/\/ /][\ |||| \/\/ \][/ \][/ [..] \][/ |||| |||| |||| [..] //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] [..] //\\ //\\ //\\ [..] \][/ \][/ [..] /][\ |||| [..] /][\ [..] //\\ //\\ //\\ [..] |||| |||| |||| |||| |||| |||| [..] |||| |||| |||| |||| |||| |||| |||| |||| [..] \][/ \][/ //\\ [..] \][/ //\\ //\\ [..]
Salida: (programa BF Hello World )
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Entrada: (no hay bichos robot presentes)
/\\\[]. ]..[..] \\//||\
Salida: (cadena vacía)
Puntuación
La presentación más corta en bytes gana. ( Práctico contador de bytes ) . Tiebreaker es la publicación más votada