2009-10-07 14 views
17

Ho ottenuto un argument over on SuperUser.com di risposte inutili e mi sono trovato a sfidare l'altro poster per rispondere alla domanda in brainfuck. Non mi ha preso su, ma ora sono curioso.Porta dos2unix a Brainfuck

Tutto il programma deve essere convertire le terminazioni di linea CRLF in LF (dos-style in unix). Qualche programmatore di bf in giro può aiutarti?

+3

+1 da me per chiunque pubblichi un codice di lavoro; ^) – Toad

+0

mi pagherai :) –

+0

ho accettato la prima risposta di lavoro ma chi messaggi un (diverso, ovviamente) programma di lavoro ottiene ancora voti positivi. –

risposta

23

Qui si va:

,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++. 

presuppone che EOF è indicato da un valore di ingresso pari a 0 (questo è il default sulla carne bovina, che ho usato per testare, ed è una scelta ragionevole, penso che potrebbe supporta anche EOF lasciando il personaggio invariato, ma non l'ho verificato). Suppone anche che il file termini con un LF (in realtà sostituisce l'ultimo carattere con LF). Gestisce correttamente CR se non fa parte di una coppia CRLF (ovvero, emette solo CR).

Ci è voluta forse un'ora per scrivere e testare, compreso l'apprendimento del Brainfuck sin dall'inizio.

+0

ha! Non ho ancora ottenuto un compilatore ancora funzionante. in qualche modo ho mancato manzo nei repository debian. Grazie! –

+0

funziona sul mio caso di test. hai vinto! –

+0

Impressionante! Complimenti +1 – Toad

24

Questo è un po 'più breve, solo 41 caratteri.

,[[->+>+<<]>-------------[>.<[-]]>[-]<<,] 

Legge un valore in un [0]. Copia il valore letto in un [1] e un [2] e sottrae 13 da un [1]. Se un [1] è diverso da zero (ovvero non è un CR), inserisce un [2] e cancella un [1]. Quindi cancella un [2] e legge nuovamente in [0] e ripete.

Questo ha il vantaggio aggiunto che - poiché lascia un [0] = 0 ogni volta che legge - dovrebbe supportare macchine virtuali BF che leggono EOF come 0 o considerano EOF come "nessun cambiamento" sono comuni.

Poiché ciò non sostituisce le coppie CRLF con LF ma piuttosto solo le strisce CR, ciò non dipende dall'ipotesi che il file termini con un LF. Il mio test con dos2unix (almeno quello di Cygwin) non indica che i CR soliti vengono mantenuti.

+0

gira su manzo, funziona con il mio banco di prova. è piuttosto semplice, senza randagi o altro. bel lavoro. –

+0

Eccolo! Una bella applicazione utile scritta in un linguaggio inutile. Congratulazioni! +1. A proposito, ho appena creato un compilatore di fork chiamato Brain Force. Lo presenterò da qualche parte presto. : D Userò questo codice per testarlo. –

+0

Un linguaggio è davvero inutile se può essere utilizzato? =) –

2

leggermente più corta e più semplice CR-stripper:

,[-------------[+++++++++++++.[-]],] 
Problemi correlati