Tenho um problema para um cyber clube que solicita que você imprima:
ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)('&%$#"!
Usando Brainf ** k em 29 bytes ou menos sem usar o caractere ','.
Eu tenho um código de trabalho:
++++++++++[>++++++>+++++++++<<-]>-->.<[>-.<-]
No entanto, meu loop é muito longo, enviando-me 16 bytes acima do limite.
Existe uma maneira mais eficiente de definir a segunda e a terceira célula para 58 e 90 para que eu possa executar meu segundo loop? Ou existe uma maneira melhor de fazer isso tudo junto que eu simplesmente não estou vendo?
-.
para.-
, descartando>.<
.+[--->++<]>++++[.-]
para 19 bytes, mas ele imprime os caracteres de controlo, bem ...Respostas:
2724 bytesPassei um dia inteiro basicamente escrevendo um forçador bruto e vendo os resultados chegarem. Agora posso voltar a fazer algum trabalho real ...Outro dia de forçar bruto mais tarde ...Experimente online!
O componente
++[<++[++<]>>>+]
inicializa a fita parao que é perfeito para o que precisamos!
fonte
+[[>++<<]>->+>+]<[-<-.>]
30 bytes
Experimente online!
85 e 171 são bastante fáceis de gerar no cérebro (inversos modulares de 3 e -3 ). 85 está bem próximo de 90 e 171 está bem próximo de 177 ( 59 · 3 ), que é usado aqui. Com um pouco de hackery, sou capaz de produzir 88 e 176 .
Ainda um byte abaixo do alvo, no entanto.
Outras sugestões
Em geral, é mais curto para iterar sobre uma lista, multiplicando por uma constante, e não o contrário. Isto é especialmente verdade para 3 ou mais valores. Por exemplo, isto:
pode ser escrito como:
Havia apenas dois valores internos, portanto, não há muita melhoria neste caso. De fato, apenas a refatoração é um byte mais curto:
Multiplicando 30 por 2 e 3 , em vez de 10 por 6 e 9 . Com a sugestão de Martin Büttner, isso já está reduzido a 38 bytes, sem muita alteração no original:
fonte
34 bytes
Você economizou 11 bytes, mas ainda assim 5 bytes ...
Já passei horas, espero que alguém possa melhorar isso.
fonte