Nesta tarefa, você escreverá um programa / função que pega um programa Malbolge Normalizado e gera o programa Malbolge resultante . (Esta é uma ferramenta secreta que todos os programadores de Malbolge estão usando!)
Entrada
Uma estrutura de dados que (de alguma forma) representa um programa Malbolge Normalizado.
Resultado
Uma estrutura de dados que representa o programa Malbolge resultante.
Exemplos
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 converter
Repita o programa Malbolge normalizado, executando as seguintes etapas para cada caractere:
Substitua os caracteres na sequência
*jpovi</
pelo caractere correspondente em'(>DQbcu
. (Ou seja, mapeie*
para'
,j
para(
e assim por diante.)Subtraia a posição atual do contador de programa (ou seja, o número de caracteres antes do atual) do código ASCII do caractere.
Se o código ASCII resultante for menor que 33, aumente-o em 94 e repita até que seja pelo menos 33.
Anexe o caractere resultante à saída.
Regras
- Este é um concurso de código-golfe ; a resposta mais curta vence.
- Sem brechas padrão, por favor.
- Os métodos de E / S padrão são permitidos.
- A entrada conterá apenas os caracteres
*jpovi</
.
*jpovi</
"?a: if ascii_code(temporary Malbolge representation) < 33: char := char + 94; goto a;
Respostas:
Geléia ,
2922 bytesExperimente online!
Um link monádico usando uma sequência Jelly como argumento e retornando uma sequência Jelly.
Obrigado a @ JonathanAllan por salvar 2 bytes!
Explicação
fonte
..._J‘ịØṖḊ¤
salva um byte.Oị“%þV DCµ2® ‘_JịØṖḊ¤
Python 3 , 82 bytes
Experimente online!
Agradecemos ao @Joel por substituir os caracteres feios e não imprimíveis na sequência de caracteres por caracteres imprimíveis.
Estou procurando uma corrente mod para substituir
"*jpovi<".find(c)
, mas não acho que exista uma que seja mais curta, e uma busca não exaustiva por força bruta não encontrou nada até agora.82 bytes
Experimente online!
fonte
b"de{#0ABT"["*jpovi<".find(c)]
se tiver um programa para isso.x%84%15%7
na metade direita do mapeamento, mas acho que posso reciclar algum código que escrevi para outro desafio de pesquisar termos*
e/
condições.%
e*
(//
no Python 3 provavelmente não vale a pena.) De fato, nada correspondeu aos 6 primeiros de 7 valores. Eu esperava que isso funcionasse porque uma estimativa aproximada da entropia diz que provavelmente há expressões suficientes terminando em% 7`, mas está próximo. E talvez essas cadeias ofereçam resultados que estão longe de serem distribuídos uniformemente, especialmente porque quando duas entradas entram em colapso para o mesmo valor, nenhuma operação adicional pode separá-las. As coisas que estou tentando ainda são burras demais para procurar a expressão maior, mas se você tiver alguma idéia, vá em frente.map(ord, "*jpovi<")
. Se a saída não preservar a ordem da maioria das entradas (por exemplo,f(m)>=f(n)
sem>=n
), algumas constantes cuidadosamente criadas para%
e*
provavelmente são necessárias e é improvável que uma busca por força bruta produza um resultado positivo.Malbolge Unshackled (variante de rotação de 20 trit), 7.784e6 bytes
O tamanho desta resposta excede o tamanho máximo do programa postável (eh); portanto, o código está localizado no meu repositório GitHub .
Como executar isso?
Isso pode ser uma parte complicada, porque o intérprete ingênuo de Haskell levará anos e anos para executá-lo. O TIO possui um intérprete decente do Malbogle Unshackled, mas, infelizmente, não poderei usá-lo (limitações).
O melhor que eu pude encontrar é a variante fixa de largura de rotação de 20 trit, que executa muito bem, convertendo 0,5 caracteres por segundo .
Para tornar o intérprete um pouco mais rápido, removi todas as verificações do interpretador Malbolge Unshackled de Matthias Lutter.
Minha versão modificada pode executar cerca de 6,3% mais rápido.
Está funcionando!
fonte
Python 3 ,
8483 bytesExperimente online!
Isso é principalmente um problema de matemática sobre a simplificação do cálculo, além de um pouco de golfe após a conclusão da matemática. A versão sem código do código é mostrada abaixo.
Versão não-gasta e não recursiva
Experimente online!
fonte
JavaScript (Node.js) , 69 bytes
Experimente online!
Quão?
fonte
Perl 6 ,
65 5553 bytesExperimente online!
Usa o truque mod 11 da resposta de Arnaud
fonte
05AB1E ,
32312322 bytes-8 bytes criando uma porta da resposta de NickKennedy 's Jelly , portanto, faça um voto positivo !
-1 byte graças a @Grimy.
Saída como uma lista de caracteres.
Experimente online ou verifique todos os casos de teste .
Explicação:
Consulte esta minha dica do 05AB1E (seção Como compactar números inteiros grandes? E Como compactar listas de números inteiros? ) Para entender por que
•4¡ˆ¶ü]₁η₃•
é82767635194143615015
e•4¡ˆ¶ü]₁η₃•₃в
é[1,36,30,85,0,67,66,8,49,7,0]
.fonte
•1ÃQWý₂Ýδ9•86в
->•4¡ˆ¶ü]₁η₃•₃в
Perl 5 (
-p
),53, 51 byteseconomizando 2 bytes, usando em
de{#0ABT
vez de'(>DQbcu
para que61
não seja mais necessárioTIO
primeira resposta foi
TIO
fonte
Japonês ,
2423 bytesSolução de porta de geléia de Nick
Tente
fonte
Retina 0.8.2 , 50 bytes
Experimente online! O link inclui casos de teste. Explicação:
Faça a transliteração conforme descrito na pergunta.
p
(descrito abaixo) eo
têm um significado especial paraT
traduzir novamente, de modo que precisam ser citados.Liste cada caractere em sua própria linha, precedido por vários espaços de acordo com seu índice, ou seja, qual seria o contador do programa.
Reduza repetidamente ciclicamente o último caractere em cada linha, excluindo o espaço anterior a cada vez, até que todos os espaços tenham sido excluídos. O
p
suporte para ASCII imprimível, ou seja,-~
, no entanto queremos que o!
de mapear a~
forma que é transliterado primeiro, e depois o_
faz com que o espaço no jogo.¶
a ser excluída, enquanto os restantes caracteres se transliterado um código de caracteres de cada vez.Junte todos os personagens novamente.
fonte
Carvão , 23 bytes
Experimente online! Link é a versão detalhada do código. Porto da resposta JavaScript de @ Arnauld. Explicação:
fonte
C # (compilador interativo do Visual C #) , 62 bytes
Experimente online!
Porto da resposta do @Arnaulds JavaScript. Um se os casos raros em que C # for mais curto!
fonte
Haskell , 135 bytes
Experimente online!
fonte