Provando il mio primo esolang inventato. Dopo la prima confusione ho scoperto che la soluzione è così semplice.
_1 p
_^v>~2+p
> >~3+p
> >~4+X@7~8+~@$^^{;
> >~5+@7~8+~@${;
Spiegazione:
i programmi di cera d'api funzionano su una griglia esagonale 2D. I programmi sono memorizzati in un formato rettangolare.
a — b — c — d
/ \ / \ / \ /
e — f — g — h
/ \ / \ / \ /
i — j — k — l
è memorizzato come
abcd
efgh
ijkl
Le istruzioni per spostarsi in determinate direzioni sono:
b — d
/ \ / \ bd
< —IP — > or in compact form (β=IP): <β>
\ / \ / pq
p — q
Breve spiegazione
_1 p
Crea un IP, aggiungi 1, quindi reindirizza IP alla riga 2
_^v>~2+p
Crea un altro IP, nel caso in cui manchi la linea 1, rallenta l'IP per assicurarti che l'IP dalla linea uno sia avanti, quindi aggiungi 2, quindi reindirizza alla linea 3
> >~3+p
Aggiungi 3, quindi reindirizza alla riga 4
> >~4+X@7~8+~@$^^{;
Aggiungi 4, quindi imposta il 2o valore dello stack su 15, quindi XOR i migliori valori dello stack e 2o, rallenta l'IP (per assicurarti che l'IP nella riga 5 sia avanti, se esiste la riga 5) e produci il risultato, quindi termina il programma.
> >~5+@7~8+~@${;
Aggiungi 5, quindi fai come nella riga 4, tranne il rallentamento.
Fondamentalmente il programma calcola solo una somma xo 15
- Programma intatto: (1 + 2 + 3 + 4 + 5) xo 15 = 0
- Riga 1 mancante: (2 + 3 + 4 + 5) xo 15 = 1
- Riga 2 mancante: (1 + 3 + 4 + 5) xo 15 = 2
- Riga 3 mancante: (1 + 2 + 4 + 5) xo 15 = 3
- Riga 4 mancante: (1 + 2 + 3 + 5) xo 15 = 4
- Riga 5 mancante: (1 + 2 + 3 + 4) xo 15 = 5
L'aggiunta >
nelle righe da 3 a 5 garantisce solo che se manca una delle righe da 2 a 4, l'IP viene comunque reindirizzato correttamente e non lascia il programma.
Puoi clonare il mio interprete di cera d'api, scritto in Julia, dal mio repository GitHub
Il file Leggimi su GitHub è più aggiornato e strutturato meglio della pagina di esolangs.