Experimentando meu primeiro esolang inventado. Após confusão inicial, descobri que a solução é muito simples.
_1 p
_^v>~2+p
> >~3+p
> >~4+X@7~8+~@$^^{;
> >~5+@7~8+~@${;
Explicação:
programas de cera de abelha trabalham em uma grade hexagonal 2D. Os programas são armazenados em um formato retangular.
a — b — c — d
/ \ / \ / \ /
e — f — g — h
/ \ / \ / \ /
i — j — k — l
é armazenado como
abcd
efgh
ijkl
As instruções para se mover em determinadas direções são:
b — d
/ \ / \ bd
< —IP — > or in compact form (β=IP): <β>
\ / \ / pq
p — q
Breve explicação
_1 p
Crie um IP, adicione 1 e redirecione o IP para a linha 2
_^v>~2+p
Crie outro IP, caso a linha 1 esteja ausente, diminua a velocidade do IP para garantir que o IP da linha um esteja à frente, adicione 2 e redirecione para a linha 3
> >~3+p
Adicione 3 e redirecione para a linha 4
> >~4+X@7~8+~@$^^{;
Adicione 4, defina o 2º valor do lstack como 15 e, em seguida, o XOR lstack top e o 2º, reduza a velocidade do IP (para garantir que o IP na linha 5 esteja à frente, se a linha 5 existir) e emita o resultado e encerre o programa.
> >~5+@7~8+~@${;
Adicione 5 e faça o mesmo que na linha 4, exceto a desaceleração.
Basicamente, o programa apenas calcula uma soma xor 15
- Programa intacto: (1 + 2 + 3 + 4 + 5) xor 15 = 0
- Linha 1 ausente: (2 + 3 + 4 + 5) xor 15 = 1
- Linha 2 ausente: (1 + 3 + 4 + 5) xor 15 = 2
- Linha 3 ausente: (1 + 2 + 4 + 5) xor 15 = 3
- Linha 4 ausente: (1 + 2 + 3 + 5) xor 15 = 4
- Linha 5 ausente: (1 + 2 + 3 + 4) xor 15 = 5
O adicional >
nas linhas 3 a 5 apenas garante que, se uma das linhas 2 a 4 estiver ausente, o IP ainda será redirecionado corretamente e não sairá do programa.
Você pode clonar meu intérprete de cera de abelha, escrito em Julia, no meu repositório GitHub
O leia-me no GitHub é mais atualizado e melhor estruturado que a página esolangs.