RoboCritters ( etimologia ) è un nuovissimo linguaggio di programmazione esoterico (non preoccuparti di cercarlo, l'ho appena inventato). È una variante di Brainfuck (BF), leggermente più complessa rispetto ai soliti schemi di sostituzione dell'operatore. Ogni programma in RoboCritters è una griglia rettangolare di testo che contiene solo i sette caratteri . []/\|
, oltre a nuove righe per modellare la griglia.
Esempio di programma RoboCritters:
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
Per tradurre un programma RoboCritters in BF, guarda ogni carattere non newline nella griglia nell'ordine di lettura normale (da sinistra a destra e dall'alto verso il basso), ad es |\/||./|[]||[..][][] ||/\|[..][..][..] \/\/
.
Se la sezione 4 × 2 della griglia che si estende a destra e in basso dal carattere corrente corrisponde esattamente a uno degli otto criteri di robot elencati di seguito, aggiungere il comando BF corrispondente ( ><+-.,[]
) al programma (inizialmente vuoto) BF.
Se la sezione della griglia 4 × 2 non corrisponde a nessuna delle creature robot o va oltre i limiti , nulla viene aggiunto al programma BF.
Joybot,
>
comando:[..] \][/
Calmbot,
<
comando:[..] /][\
Squidbot,
+
comando:[..] //\\
Spiderbot,
-
comando:[..] ||||
Bunnybot,
.
comando:[][] [..]
Toothbot,
,
comando:[..] |/\|
Foxbot,
[
comando:|\/| [..]
Batbot,
]
comando:[..] \/\/
Quindi, leggendo il programma di esempio
|\/||./|[]||
[..][][] |
|/\|[..][..]
[..] \/\/
possiamo vedere che incontriamo prima un Foxbot (alla colonna 1, riga 1), quindi un Toothbot (c1, r2), quindi un Bunnybot (c5, r2) e infine un Batbot (c9, r3). Ciò corrisponde al programma BF [,.]
.
Si noti che Foxbot e Toothbot si sovrappongono. Questo è intenzionale; le creature robotiche non vengono interpretate diversamente quando si sovrappongono .
Sfida
Scrivi il programma più breve possibile che accetta un programma RoboCritters e produce il suo equivalente BF. Non è necessario eseguire BF o verificarne la validità, tradurre solo il codice RoboCritters in codice BF.
Dettagli
Tutti i programmi di input RoboCritters saranno validi, ovvero saranno un blocco di testo esattamente rettangolare contenente solo i sette caratteri
. []/\|
, oltre a nuove righe per modellarlo. Le newline possono essere in qualsiasi rappresentazione comune conveniente . Puoi facoltativamente supporre che i programmi abbiano una nuova riga finale.È necessario supportare i programmi RoboCritters di dimensioni inferiori a 4 × 2, incluso il programma 0 × 0 vuoto (o single newline). Questi corrispondono tutti al programma BF vuoto (la stringa vuota).
Il programma di output BF dovrebbe essere una stringa di una riga contenente solo gli otto caratteri del comando BF
><+-.,[]
. Opzionalmente può esserci una sola nuova riga finale.Prendi l'input in qualsiasi modo normale (stdin / file di testo / riga di comando) e l'output su stdout o l'alternativa più vicina alla tua lingua.
Invece di un programma è possibile scrivere una funzione che accetta il programma RoboCritters come una stringa e stampa o restituisce la stringa del programma BF.
Esempi
Input: (variante dell'esempio sopra)
|\/|[][] [..][][] |/\|[..] \/\/
Produzione:
[,.]
Input: (verifica tutte le creature robot)
[..][[[[[..]]. ]|\/| \][/[..]//\\[..][..] [..]/][\[][]|/\|[..] ||||/\| [..]| |\/\/
Produzione:
>+[<,-.]
Ingresso:
[..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] [..] |\/| [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [][] [][] [..] [..] [..] [][] [..] [..] [][] [..] [..] [][] [..] [][] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [..] [..] [..] [..] [..] [][] [..] [..] [..] [][] [..] [..] [..] [][] //\\ //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ //\\ //\\ [..] \][/ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ //\\ //\\ \][/ //\\ /][\ /][\ /][\ /][\ |||| \/\/ \][/ //\\ \][/ //\\ \][/ |||| \][/ \][/ //\\ [..] /][\ \/\/ /][\ |||| \/\/ \][/ \][/ [..] \][/ |||| |||| |||| [..] //\\ //\\ //\\ //\\ //\\ //\\ //\\ [..] [..] //\\ //\\ //\\ [..] \][/ \][/ [..] /][\ |||| [..] /][\ [..] //\\ //\\ //\\ [..] |||| |||| |||| |||| |||| |||| [..] |||| |||| |||| |||| |||| |||| |||| |||| [..] \][/ \][/ //\\ [..] \][/ //\\ //\\ [..]
Output: ( programma BF Hello World )
++++++++[>++++[>++>+++>+++>+<<<<-]>+>+>->>+[<]<-]>>.>---.+++++++..+++.>>.<-.<.+++.------.--------.>>+.>++.
Input: (nessuna creatura robot presente)
/\\\[]. ]..[..] \\//||\
Output: (stringa vuota)
punteggio
Vince l'invio più breve in byte. ( Handy byte counter. ) Tiebreaker è il post più votato.