Seu desafio é transformar o texto de entrada no código de quebra-cérebro que produzirá o texto.
Tutorial tirado daqui com permissão aqui
Brain-Flak tem duas pilhas, conhecidas como 'esquerda' e 'direita'. A pilha ativa começa na esquerda. Se uma pilha vazia for exibida, ele retornará 0. É isso. Sem outras variáveis. Quando o programa é iniciado, cada argumento da linha de comando é enviado para a pilha ativa.
Os únicos caracteres válidos em um programa Brain-Flak são ()[]{}<>
e sempre devem ser equilibrados. Existem dois tipos de funções: Nilads e Mônadas . Um nilad é uma função que recebe 0 argumentos. Aqui estão todas as niladas:
()
Avalia para um.[]
Avalia a altura da pilha atual.{}
Pop a pilha ativa. Avalia para o valor popped.<>
Alterne a pilha ativa. Avalia para zero.
Eles são concatenados juntos quando são avaliados. Portanto, se tivéssemos um '3' no topo da pilha ativa, este trecho:
()(){}
avaliaria para 1 + 1 + active.pop()
qual avaliaria para 5.
As mônadas têm um argumento, um pedaço do código Brain-Flak. Aqui estão todas as mônadas:
(n)
Pressione 'n' na pilha ativa.[n]
Avalia como negativo 'n'{foo}
Embora zero não esteja no topo da pilha, foo.<foo>
Execute foo, mas avalie-o como 0.
Essas funções também retornarão o valor dentro delas, portanto
(()()())
Vai empurrar 3, mas
((()()()))
Empurrará 3 duas vezes .
O {}
irá avaliar a soma de todas as execuções. Então, se tivéssemos '3' e '4' no topo da pilha:
{{}}
avaliaria como 7.
Quando o programa é executado, cada valor restante na pilha ativa é impresso, com uma nova linha entre. Os valores na outra pilha são ignorados.
Regras
- Você pode assumir que o Brain-Flak está sendo executado com ascii out. (
-A
) - O código de falha cerebral NÃO deve exigir entrada
- Todas as regras padrão se aplicam
- O código deve ser executado dentro de 1 minuto para qualquer entrada de até 1024 bytes no TIO. (Se nenhuma saída TIO estiver disponível, forneça um intérprete e eu o executarei na minha máquina (minha máquina poderá chegar perto do TIO)).
- Você deve suportar entrada arbitrária de comprimento.
- Você pode receber informações de um arquivo.
- Otimização para casos de teste não é permitida
- Saída determinística é necessária
- Os programas não precisam ser limpos com pilha
Casos de teste (tente seu código com eles, os textos de pontuação reais serão liberados em uma a duas semanas após o lançamento do desafio)
ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz
The meaning of brain-flak is to flak your brain with pain.
`1234567890-=qwertyuiop[]\asdfghjkl;'zxcvbnm,./~!@#$%^&*()_+QWERTYUIOP{}|ASDFGHJKL:"ZXCVBNM<>?
To be, or not to be, that is the question:
Whether 'tis nobler in the mind to suffer
The slings and arrows of outrageous fortune,
Or to take arms against a sea of troubles
And by opposing end them. To die-to sleep,
No more; and by a sleep to say we die
<your brain-flak code here>
The fitness pacer test is a multi stage test. Avacado Avacado Avacadad Avacadad carrot.bat carrot.jar carrot.carrot Quack Quack Quack Quack Quack Quack Quack Quack Quack downgoat doawngoat down down gaot
This challenge came from a online program that turned text into brain-fuck. However brain-fuck has limitations and it is not nearly as cool as brain-flak. I really am looking forward to cool programs :) I am glad you took the time to read this and look forward to seeing your answer.
Ganhando
Para ganhar, você deve fornecer o comprimento total do código de falha cerebral fornecido por cada um dos casos de teste, que será lançado 1-2 semanas após a data de postagem. O menor comprimento total vence.
NOTA!!!!!!:
Isso não é código-golfe , o comprimento do seu código não afetará sua pontuação final de forma alguma. Tornar o código legível limpo é apreciado. Obrigado!
Casos de teste
fonte
<your brain-flak code here>
abaixo de 1000 recebe a recompensa. Que não posso postar por outro dia, gritos; não percebeu como isso era novo.Respostas:
Flak cerebral , 130 bytes
Experimente online!
Saída para
<your brain-flak code here>
: 5045 bytesExperimente online!
fonte
Python 3 , 17744 bytes
Edit: eu adicionei algumas opções para ajudar o golfe em situações seguras de stack.
Experimente online!
Uma solução recursiva
simplesque continuarei a melhorar ainda mais. Isso funciona muito bem com entradas menores, mas perde para a resposta Ruby da MegaTom por entradas mais longas.Notas:
[]
se tornam inúteis (embora possam ser desativadas comentando algumas linhas, e elas apenas melhoram emcerca de 100 bytesum pouco).Como esse é um algoritmo recursivo, levará mais tempo para caracteres com valores grandes. Por exemplo, o caractere ÿ (valor 255) leva 9 segundos para avaliar, onde cada caso de teste ao mesmo tempo leva 1,6 segundos.Cache implementado![]
)-
. Isso cortou alguns bytes e muito tempo, dado o valor desse traço, foi de 8212: o.Exemplo de saídas:
<your brain-flak code here>
(312 bytes):Experimente online!
Hello, World!
( 142 bytes [Nota: o melhoratualanterior era 148 bytes e agora é 136 bytes]):Experimente online!
fonte
Ruby , 17398 bytes para todos os (novos) casos de teste
Experimente online!
<your brain-flak code here>
,362358 bytesExperimente online!
fonte
Must run under 1 minute for inputs up to 1024 bytes
regra (embora seja muito mais rápido agora)cache
, nãocash
; pPython 3 , 16222 bytes
Experimente online!
Primeiro abaixo de 1000 para
<your brain-flak code here>
: DBrain-Flak , 448 bytes
Experimente online!
(originalmente 827 para
<your brain-flak code here>
)fonte
05AB1E , muitos bytes (meu primeiro BF)
Experimente online!
Tentativa extremamente básica de jogar golfe usando um código pré-fabricado de "multiplicação" do Brain-flak. Tudo o que isso faz é encontrar o par de divisores de soma menor para cada ponto de código ASCII e, em seguida, envia os dois pares de divisores como números. O código Brainflak
({}<>)({<({}[()])><>({})<>}{}<><{}>)
é então anexado e executado em um loop até que todos os valores estejam na pilha alternativa.Lista de pessoas que estou agradecendo:
(()())(()()())
=((()())())
(-252 bytes
)-927 bytes
).Exemplo de golfe de
<your brain-flak code here>
em347032182291 bytes:Flak cerebral , 2291 bytes
Experimente online!
Cada linha representa um personagem sendo jogado no golfe, superando a solução básica que eu postei em 60% , e, sabendo literalmente nada sobre Brainflak, sinto que essa é uma boa base do que não fazer. Marcarei a resposta daqui a pouco, no meio de outra coisa e tenho certeza de que posso melhorar isso. (Estou incluindo as novas linhas na contagem de bytes, porque não espero que isso aconteça).
fonte
(()()()())(()()()()())
e((()()()())())
2) A multiplicação por uma constante pode ser muito menor quepush(); multiply();
. Por exemplo, para dobrar um número, você pode fazer em(({}){})
vez de(()())({}<>)({<({}[()])><>({})<>}{}<><{}>)
. Mas essa não é uma linha de base terrível. Se você quiser mais de entrada, eu estou sempre feliz para conversar na terceira pilhaBrain-Flak
Experimente online!
Saída para
<your brain-flak code here>
, 582 bytes:fonte