Dada a entrada de qualquer programa Glypho válido, envie sua contraparte "legível por humanos".
Glypho é uma idéia interessante do esolang:
A referência da instrução é dada aqui. Para cada instrução, os caracteres abcd representam os símbolos que compõem cada instrução. a refere-se ao primeiro símbolo exclusivo, b refere-se ao segundo símbolo exclusivo, 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, também conhecido como Wildhalcyon)
Assim, por exemplo, PPCG
representaria a instrução Push -PPCG
corresponde ao padrão aabc
, onde a
representa P
, b
representa C
e c
representa G
.
A entrada será uma única sequência que consiste apenas em caracteres ASCII imprimíveis. Sempre terá um comprimento divisível por quatro (duh).
A saída é cada grupo de quatro caracteres na sequência de entrada substituída pela instrução que eles designam. Use os nomes de instruções de uma letra (aqueles logo após os cinco pontos na tabela citada acima).
Como esse é o código-golfe , o código mais curto em bytes será vencedor.
Casos de teste:
In Out
------------------------------------------------
Programming Puzzles & Code Golof ]!]!]]]+
nananananananana batman! dddd]]
;;;;;;;:;;:;;;:: ni>\
llamas sleep 1-*
8488133190003453 <[oe
<empty string> <empty string>
Respostas:
Pyth,
373534 bytesO código contém caracteres não imprimíveis, então aqui está o
xxd
hexdump:Aqui está uma versão imprimível em 36 bytes:
Experimente online. Suíte de teste.
Explicação
fonte
CJam,
423935 bytesEconomizou 4 bytes emprestando a idéia de user81655 de usar a base 3 em vez da base 4.
Execute todos os casos de teste.
Deve haver uma maneira melhor de compactar a tabela de comandos de pesquisa ...
fonte
JavaScript (ES6), 97
Para cada bloco de 4 caracteres, substituo cada símbolo com sua posição no bloco, obtendo um número base 4. Por exemplo
'aabc' -> '0023'
. Os números possíveis estão no intervalo 0..0123, ou seja, 0..27 em decimal. Eu uso o número como um índice para encontrar o caractere de instrução correto de uma string de 28 caracteres.Teste
fonte
MATLAB, 291 bytes
Hesitei por muito tempo se eu deveria dar minha resposta. Eu estava apenas brincando com o MATLAB. Estou ciente de que não é realmente possível gerar código denso (um número baixo de instruções / bytes; cerca de três vezes mais do que suas soluções de ~ 100 bytes) e que o MATLAB pode não ser muito adequado ao código golf e eu sou novo no código golf . Mas eu simplesmente queria tentar, e o código funciona (caracteres de nova linha mantidos). Qualquer dica bem-vinda. : P
fonte
JavaScript (ES6),
115101 bytesEconomizou 14 bytes graças a @ edc65 !
Explicação
Armazena a lista de instruções em uma string com cada caractere no índice base-3. Por exemplo,
+
corresponde aoabac
qual pode ser representado na base 3 como0102
ou11
em decimal. A única instrução que não pode ser representada na base 3 é]
, mas com o algoritmo usado para calcular o número da base 3, ele acaba precisando convenientemente estar na posição 18 no final da string.Teste
Mostrar snippet de código
fonte
parseInt
e computar o número com soma e multiplicação repetidas. Isso evita o problema com '0123' inválido na base 3, mas fornece 1 * 9 + 2 * 6 + 3 == 18 que é uma boa posição. 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"
. Saída é uma lista de caracteres.Experimente online
Ungolfed:
fonte