Ótimo comprovado!
((([()][()][()])))
Experimente online!
Explicação
Flak cerebral, Flueue cerebral, Miniflak e Fλak
([()][()][()]) Push -3
( ) Copy
( ) Copy
Isso imprime:
-3
-3
-3
(Existe uma nova linha à direita)
Brain-Flak Classic
O Brain-Flak Classic é a versão original do Brain-Flak e apresenta algumas diferenças importantes em relação ao Brain-Flak moderno. No BFC [...]
imprime seu conteúdo em vez de negá-lo.
[()] Print 1
[()] Print 1
[()] Print 1
( ) Push 3
( ) Push 3
( ) Push 3
No final da execução, o conteúdo da pilha ( 3 3 3
) é impresso.
Isso imprime:
1
1
1
3
3
3
(Existe uma nova linha à direita)
Flakcats
O Flakcats é bem diferente dos outros 4 flocos e estou surpreso que isso funcione no Flakcats. Os três operadores aqui são quase os mesmos que o Brain-Flak usa.
A principal diferença neste programa em particular entre o Flakcats é o (...)
operador que no Flakcats é equivalente ao ([{}]...)
Brain-Flak. Isso, no entanto, não faz diferença para nós, porque apanha zeros e, portanto, opera da mesma maneira que o Brain-Flak.
Aqui está o programa compilado no Brian-Flak:
([{}]([{}]([{}][()][()][()])))
Isso imprime:
-3
-3
-3
(Existe uma nova linha à direita)
Prova de Optimalidade em Brain-Flak e Miniflak
Esta não é uma prova formal, mas sim uma prova informal que precisaria ser expandida para se tornar mais rigorosa
Devido às restrições de que os programas Brain-Flak devem ser de seqüência equilibrada e o tamanho do programa deve ser um múltiplo de 3, qualquer envio válido deve ter um múltiplo de 6 de comprimento. Isso significa que qualquer solução menor que 18 deve ter o comprimento 12.
Devido às saídas que seguem a nova linha, a altura final da pilha deve ser um múltiplo de três ou quebraremos as restrições na saída.
Qualquer envio válido de tamanho 12 deve ter 2 tipos de chaves (se menos, violaria as restrições ao número de caracteres distintos e mais significaria mais de 12 caracteres). Como o programa produz saída, ele deve ser pressionado.
Isso nos deixa selecionar nosso outro conjunto de chaves. As opções são:
<...>/<>
Isso falha porque precisamos gerar "valor" para criar qualquer número diferente de zero. Devemos desistir de a ()
para criar um número que torne impossível pressionar mais de duas vezes.
[...]/[]
Isso falha pelo mesmo motivo que o último falhou. As chaves quadradas são muito ruins em gerar valor. A []
mônada pode criar valor, mas precisamos pressionar os números primeiro e, então, não temos parênteses suficientes para pressionar três vezes.
{...}/{}
Este é promissor, poderíamos criar um loop e usá-lo ()
para enviar várias vezes, mas, infelizmente, não é possível.
Para que o loop termine, deve haver um zero na pilha em algum momento e, para que possamos ter a saída correta, devemos ter algo diferente de zero na pilha no final do programa. Como não temos []
nem <>
o zero no final do loop deve ser um zero implícito da parte inferior da pilha. Isso significa que o loop não pode adicionar novos números à pilha, tornando-a inútil.
Como nenhuma das opções de chaves pode criar um programa de comprimento 12, nenhuma pode existir.
Como o Miniflak é um subconjunto do Brain-Flak, qualquer programa Miniflak mais curto também seria um programa Brain-Flak mais curto e, portanto, não existe.
Brain-Flueue é uma linguagem de piada baseada no Brain-Flak. Os dois são tão parecidos que seus intérpretes são idênticos em qualquer lugar, exceto em duas linhas. A diferença entre os dois é, como o nome sugere, o Brain-Flueue armazena seus dados em filas, enquanto o Brain-Flak armazena seus dados em pilhas.
Para começar, temos as mesmas restrições no tamanho do programa criadas pelo Brain-Flak, portanto, estamos procurando um programa de tamanho 12. Além disso, precisaremos de um (...)
para criar qualquer saída e outro par. os pares <>
e []
não funcionam no Brain-Flueue exatamente pela mesma razão que não funcionam no Brain-Flak.
Agora sabemos que nosso programa deve consistir nos caracteres ((())){{{}}}
.
Através dos mesmos métodos usados na prova anterior, podemos demonstrar que deve haver um loop no programa final.
Agora, aqui é onde as provas diferem, porque o Brain-Flueue opera em filas, em vez de pilhas, o programa pode sair de um loop com valores na fila.
Para sair do loop, precisaremos de um zero na fila (ou uma fila vazia, mas se a fila estiver vazia, teremos o mesmo problema que o Brain-Flak), isso significa que teremos que abrir nosso programa ({})
para criar o zero. Vamos precisar de um push dentro do loop para enviar o número necessário de itens para a fila. Também precisaremos enviar um número diferente de zero antes do loop, para que possamos inseri-lo; isso nos custará no mínimo absoluto (())
. Agora usamos mais parênteses do que usamos.
Portanto, não existe um programa Brain-Flueue para executar a tarefa com 12 bytes e, além disso, nosso programa é ideal.
A solução a seguir é ideal no Flakcats e no Brain-Flak Classic.
((([][][])))
Explicação
[][][] -3
((( ))) push 3 times
Soluções alternativas de Brain-Flak de 24 bytes
(<((<((<(())>)())>)())>)
Experimente online!
((<((<((<>)())>)())>)())
Experimente online!
((((((()()()){}){}){})))
Experimente online!