Questa sfida è stata creata per celebrare il mio primo linguaggio esoterico, Backhand !
Il rovescio è un linguaggio unidimensionale con un flusso di puntatore non lineare. Il puntatore si sposta di tre passaggi alla volta, eseguendo solo ogni terza istruzione.
Il programma 1..1..+..O..@
aggiungerà 1 + 1 e l'uscita 2 prima di terminare. Le istruzioni intermedie vengono saltate, quindi 1<>1()+{}O[]@
è esattamente lo stesso programma.
Quando il puntatore sta per uscire dalla fine del nastro, inverte invece la direzione e si sposta dall'altra parte, così 1.@1.O+.
è lo stesso programma. Nota che conta l'istruzione finale una sola volta. Questo ci consente di comprimere la maggior parte dei programmi lineari, come ad esempio1O+1@
La tua sfida qui è scrivere un programma o una funzione che prendano una stringa e produrre le istruzioni che verrebbero eseguite se il programma fosse interpretato come Backhand (non è necessario gestire alcuna istruzione Backhand effettiva). Devi solo emettere fino a quando il puntatore non si ferma sull'ultimo carattere della stringa (a quel punto l'esecuzione normalmente andrebbe indietro).
Ma aspetta , non è tutto! Quando il programma stesso viene interpretato in questo modo, il codice risultante dovrebbe generare uno dei seguenti:
(Mostly) works
Turing complete
'Recreational'
(le virgolette possono essere o'
o"
, ma non entrambe)Perfectly okay
Only a few bugs
Ad esempio, se il codice sorgente è code 2 backhand
, il programma ce cankb od2ahd
dovrebbe generare una di queste frasi.
Casi test:
"1 1 + O @" -> "11+O@"
"1O+1@" -> "11+O@"
"HoreWll dlo!" -> "Hello World!"
"abcdefghijklmnopqrstuvwxyz" -> "adgjmpsvyxurolifcbehknqtwz"
"0123456789" -> "0369" (not "0369630369")
"@" -> "@"
"io" -> "io" (Cat program in Backhand)
"!?O" -> "!?O" (Outputs random bits forever in Backhand)
"---!---!" -> "-!-----!"
E un programma di riferimento scritto in Backhand ( questo potrebbe essere un po 'difettoso Okay, penso di averlo corretto).
Regole.
- Sono vietate le scappatoie standard
- L'input del primo programma conterrà solo ASCII e newline stampabili (ovvero byte
0x20
-0x7E
oltre a 0x0A) - Puoi scegliere se convertire il tuo secondo programma dal tuo primo byte o byte UTF-8.
- Secondo programma:
- Il caso non ha importanza, quindi l'output potrebbe essere
pErFectLy OKay
se lo desideri. - Anche qualsiasi quantità di spazio bianco finale / iniziale (newline, tab, spazi) va bene.
- Il secondo programma dovrebbe avere la stessa lingua del primo, sebbene non necessariamente lo stesso formato (programma / funzione)
- Sono felice di includere suggerimenti dai commenti su frasi extra (purché non siano troppo brevi)
- Il caso non ha importanza, quindi l'output potrebbe essere
- Poiché si tratta di code-golf , il tuo obiettivo è quello di ottenere la risposta più breve per la tua lingua!
- Tra due settimane, assegnerò un premio di 200 alla risposta più corta al rovescio.
"---!---!"
(o qualsiasi stringa in cui l'ultimo carattere appare più di una volta)