Dada una entrada de cualquier programa Glypho válido, genera su contraparte "legible para humanos".
Glypho es una idea interesante de esolang:
La referencia de instrucciones se da aquí. Para cada instrucción, los caracteres abcd representan los símbolos que componen cada instrucción. a se refiere al primer símbolo único, b se refiere al segundo símbolo único, etc.
aaaa ..... n NOP - no operation; do nothing aaab ..... i Input - push input onto top of stack aaba ..... > Rot - pops top stack element and pushes to bottom of stack aabb ..... \ Swap - swaps top two stack elements aabc ..... 1 Push - pushes a 1 onto the top of stack (creates new element) abaa ..... < RRot - pops bottom element and pushes to top of stack abab ..... d Dup - Duplicates top stack element abac ..... + Add - pops top two elements and pushes their sum abba ..... [ L-brace - skip to matching ] if top stack element is 0 abbb ..... o Output - pops and outputs top stack element abbc ..... * Multiply - pops top two elements and pushes their product abca ..... e Execute - Pops four elements and interprets them as an instruction abcb ..... - Negate - pops value from stack, pushes -(value) abcc ..... ! Pop - pops and discards top stack element abcd ..... ] R-brace - skip back to matching [
(crédito: Brian Thompson, alias Wildhalcyon)
Entonces, por ejemplo, PPCG
representaría la instrucción Push:PPCG
coincide con el patrón aabc
, donde a
representa P
, b
representa C
y c
representa G
.
La entrada será una sola cadena que consta de solo caracteres ASCII imprimibles. Siempre tendrá una longitud divisible por cuatro (duh).
La salida es cada grupo de cuatro caracteres en la cadena de entrada reemplazado por la instrucción que designan. Utilice los nombres de instrucciones de una letra (los que aparecen justo después de los cinco puntos en la tabla citada anteriormente).
Como se trata de code-golf , ganará el código más corto en bytes.
Casos de prueba:
In Out
------------------------------------------------
Programming Puzzles & Code Golof ]!]!]]]+
nananananananana batman! dddd]]
;;;;;;;:;;:;;;:: ni>\
llamas sleep 1-*
8488133190003453 <[oe
<empty string> <empty string>
Respuestas:
Pyth,
373534 bytesEl código contiene caracteres no imprimibles, así que aquí está el
xxd
hexdump:Aquí hay una versión imprimible de 36 bytes:
Pruébalo en línea. Banco de pruebas.
Explicación
fuente
CJam,
423935 bytesAhorro de 4 bytes prestando la idea del usuario 81655 de usar la base 3 en lugar de la base 4.
Ejecute todos los casos de prueba.
Tiene que haber una mejor manera de comprimir la tabla de búsqueda de comandos ...
fuente
JavaScript (ES6), 97
Para cada bloque de 4 caracteres, sustituyo cada símbolo con su posición en el bloque, obteniendo un número base 4. Por ejemplo
'aabc' -> '0023'
. Los números posibles están en el rango 0..0123, es decir 0..27 en decimal. Utilizo el número como índice para encontrar el carácter de instrucción correcto de una cadena de 28 caracteres.Prueba
fuente
MATLAB, 291 bytes
Dudé durante bastante tiempo si debía comprometer mi respuesta. Solo estaba jugando con MATLAB. Soy consciente de que no es realmente posible generar código denso (un número bajo de instrucciones / bytes; aproximadamente 3 veces mayor que sus soluciones de ~ 100 bytes) y que MATLAB podría no ser demasiado adecuado para el golf de código y soy nuevo en el código de golf . Pero simplemente quería probar, y el código funciona (se mantienen los caracteres de nueva línea). Cualquier sugerencia bienvenida. :PAG
fuente
JavaScript (ES6),
115101bytes¡Guardado 14 bytes gracias a @ edc65 !
Explicación
Almacena la lista de instrucciones en una cadena con cada carácter en su índice de base 3. Por ejemplo,
+
corresponde a loabac
que se puede representar en base-3 como0102
, o11
en decimal. La única instrucción que no se puede representar en base-3 es]
, pero con el algoritmo utilizado para calcular el número de base-3, convenientemente termina necesitando estar en la posición 18 al final de la cadena.Prueba
Mostrar fragmento de código
fuente
parseInt
y calcular el número con suma y multiplicación repetidas. Esto evita el problema con '0123' que no es válido en la base 3 pero da 1 * 9 + 2 * 6 + 3 == 18 que es una buena posición. Resultado:F=s=>s.replace(/..../g,g=>"ni]>\\1 <d+[o*e-!]"[[...g].map(c=>r=r*3+(m[c]=m[c]||++i)-1,r=i=0,m={})|r])
Python 2, 158 bytes
Toma entrada como
"test"
. La salida es una lista de caracteres.Pruébalo en línea
Sin golf:
fuente