Joe é o seu desenvolvedor BF médio. Ele está prestes a verificar suas alterações de código no repositório quando receber uma ligação de seu chefe. "Joe! A máquina do novo cliente está quebrada! O intérprete de brainfuck define todas as células para valores aleatórios antes da execução do programa. Sem tempo para consertá-lo, seu código terá que lidar com isso." Joe não pensa muito sobre isso e está prestes a escrever um programa para zerar o primeiro milhão de células, quando seu chefe o interrompe novamente - "... e não pensa em usar força bruta, o código precisa ser o menor possível. " Agora você tem que ajudar o pobre Joe!
Especificações
- Você receberá algum código válido do brainfuck como entrada
- Seu programa modificará o código para que ele funcione em um intérprete aleatório de cérebro
- Isso significa que antes da execução do programa, as células podem ser configuradas para qualquer valor.
- O novo programa deve ter exatamente o mesmo comportamento, independentemente das condições iniciais.
- O intérprete terá um valor máximo de célula de 255 com quebra automática e uma fita de comprimento infinito.
Pontuação
Sua pontuação é 10 vezes o tamanho do compilador em bytes mais a soma dos tamanhos dos casos de teste . A pontuação mais baixa obviamente vence. Para atenuar a otimização de casos de teste, reservo-me o direito de alterar os casos de teste, se suspeitar de alguma coisa, e provavelmente o fará antes de escolher um vencedor.
Casos de teste
( Comprei na página esolangs e nesta página: http://www.hevanet.com/cristofd/brainfuck/ ). Também obrigado a @Sparr pelo último caso de teste.
- Olá Mundo:
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
- Entrada reversa:
>,[>,]<[.<]
- Poderes de Dois (Fluxo Infinito):
>++++++++++>>+<+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<]>.>[->[ <++>-[<++>-[<++>-[<++>-[<-------->>[-]++<-[<++>-]]]]]]<[>+<-]+>>]<<]
- Quadrados abaixo de 10000:
++++[>+++++<-]>[<+++++>-]+<+[>[>+>+<<-]++>>[<<+>>-]>>>[-]++>[-]+>>>+[[-]++++++>>>]<<<[[<++++++++<++>>-]+<.<[>----<-]<]<<[>>>>>[>>>[-]+++++++++<[>-<-]+++++++++>[-[<->-]+[<<<]]<[>+<-]>]<<-]<<-]
- Fluxo de Fibonacci:
>++++++++++>+>+[[+++++[>++++++++<-]>.<++++++[>--------<-]+<<<]>.>>[[-]<[>+<-]>>[<<+>+>-]<[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>+<-[>[-]>+>+<<<-[>+<-]]]]]]]]]]]+>>>]<<<]
- Sequência ASCII até a entrada:
,[.[>+<-]>-]
(Esta requer vários números de células com base na entrada)
Respostas:
sed, compilador de 46 bytes
Eu não percebi que a saída também deveria ser de golfe até depois de escrever o programa, então irei para o compilador curto. Também foi muito trabalhoso testar, portanto, notifique se ele não funcionar corretamente :)
fonte
C ++
Tamanho do compilador: 630 bytes (-10 bytes graças a Zacharý)
Hello World tamanho do resultado da compilação: 139
Square under 10000: 319
Compilador:
O intérprete randomizado de brainfuck:
Algumas notas :
fonte
pii
paraP
, alterando a definição deR
param[p<0?p%30000+30000:p]
e modificando todas as chamadas / referências a eles de acordo. Além disso, ele modificou os casos de teste. Eu não verifiquei isso, mas pode salvar alguns bytes para definir algo para ser30000
, uma vez que você o usa com tanta frequência.R
para om[p<0?p%S+S:p]
trabalho?R
deve salvar alguns bytes.rs , 33 bytes, Pontuação: 2659
Principalmente apenas uma porta simples da
sed
resposta.fonte