Port dos2unix a brainfuck
-
20-09-2019 - |
Domanda
ho ottenuto in un argomento href="https://superuser.com/questions/52044/convert-crlfs-to-line-feeds-on-linux/52056#52056"> sulle risposte inutili e mi sono trovato sfidando l'altro poster per rispondere alla domanda in brainfuck. Egli non ha preso me su di esso, ma ora sono curioso.
Tutto il programma ha bisogno di fare è convertire i fine riga CRLF a LF (dos-stile Unix). Eventuali programmatori bf intorno che può dare una mano?
Soluzione
Qui si va:
,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.
presupposto che EOF è indicato da un valore di ingresso di 0 (questo è il default sulla carne, che ho usato per testare, ed è una scelta ragionevole; Credo che potrebbe anche sostenere EOF lasciando invariato il personaggio, ma didn' t test che). presuppone inoltre che il file termina con un LF (in realtà, si sostituisce l'ultimo carattere con LF). Maniglie CR correttamente se non parte di una coppia CRLF (cioè, emette CR soli).
Ha preso forse un'ora di scrivere e testare, e che include l'apprendimento Brainfuck dall'inizio.
Altri suggerimenti
Questo è un po 'più breve, a soli 41 caratteri.
,[[->+>+<<]>-------------[>.<[-]]>[-]<<,]
Si legge un valore in una [0]. Esso copia il valore letto in un [1] e una [2] e sottrae 13 da un [1]. Se un [1] è diverso da zero (il che significa che non è una CR), mette una [2] e cancella un [1]. E poi cancella un [2] e legge in un nuovo e ripete [0].
Questo ha il vantaggio che - dal momento che lascia a [0] = 0 ogni volta che si legge - che dovrebbe supportare macchine virtuali BF che leggono EOF come 0 o trattano EOF come "nessun cambiamento", che sono entrambi comune.
Poiché questo non sostituisce coppie CRLF con LF, ma piuttosto solo strisce CR, questo non dipende supponendo che il file termina con un LF. Il mio test con dos2unix (almeno il Cygwin uno) non indica che CR solitari vengono mantenuti.
Un po 'più breve e più semplice CR-stripper:
,[-------------[+++++++++++++.[-]],]