2009-10-07 12 views
17

Je suis entré dans un argument over on SuperUser.com sur les réponses inutiles et me suis retrouvé mettant au défi l'autre affiche pour répondre à la question dans brainfuck. Il ne m'a pas pris dessus, mais maintenant je suis curieux.Port dos2unix à brainfuck

Tout ce que le programme doit faire est de convertir les fins de ligne CRLF en LF (style dos à unix). Tous les codeurs bf autour de ça peuvent vous aider?

+3

+1 de moi pour tous ceux qui le code des postes de travail; ^) – Toad

+0

i allons le match :) –

+0

j'ai accepté la première réponse de travail, mais tous ceux qui messages un (différent, évidemment) programme de travail obtient toujours upvotes. –

Répondre

23

Ici, vous allez:

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

On suppose que EOF est indiquée par une valeur d'entrée de 0 (valeur par défaut sur le boeuf, que je l'habitude de tester, et est un choix raisonnable, je pense qu'il pourrait supporte aussi EOF en laissant le personnage inchangé, mais je n'ai pas testé ça). Suppose également que le fichier se termine par un LF (en fait, il remplace le dernier caractère par LF). Gère correctement le CR s'il ne fait pas partie d'une paire CRLF (c'est-à-dire qu'il sort des CR solitaires).

Pris peut-être une heure pour écrire et tester, et cela inclut apprendre Brainfuck depuis le début.

+0

ha! Je n'ai même pas encore eu de compilateur. en quelque sorte j'ai manqué le boeuf dans les dépôts de debian. Merci! –

+0

fonctionne sur mon cas de test. Vous gagnez! –

+0

Impressionnant! bravo +1 – Toad

24

Ceci est un peu plus court, seulement 41 caractères.

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

Il lit une valeur dans a [0]. Il copie la valeur lue dans [1] et [2] et soustrait 13 d'un [1]. Si un [1] est différent de zéro (ce qui signifie qu'il ne s'agit pas d'un CR), il met un [2] et efface un [1]. Il efface ensuite un [2] et lit dans un [0] à nouveau et répète. Ceci a l'avantage supplémentaire - puisqu'il laisse un [0] = 0 chaque fois qu'il lit - il devrait soutenir des machines virtuelles de BF qui lisent EOF comme 0 ou traiter EOF comme "aucun changement", tous les deux qui sont communs. Comme cela ne remplace pas les paires CRLF avec LF mais plutôt les bandes CR, cela ne dépend pas de l'hypothèse que le fichier se termine par un LF. Mes propres tests avec dos2unix (au moins celui de Cygwin) n'indiquent pas que les CR solitaires sont conservés.

+0

fonctionne sur le bœuf, fonctionne avec mon testcase. C'est assez basique, pas de CRs ou quoi que ce soit. Bon travail. –

+0

Le voilà! Une belle application utile écrite dans un langage inutile. Félicitations! +1 BTW, je viens de créer un compilateur de fourches appelé Brain Force. Je vais le présenter quelque part bientôt. : D Je vais utiliser ce code pour le tester. –

+0

Une langue est-elle vraiment inutile si elle peut être utilisée? =) –

2

légèrement plus court et CR-décapant plus simple:

,[-------------[+++++++++++++.[-]],]