2009-10-07 6 views
17

Я получил argument over on SuperUser.com о бесполезных ответах и ​​обнаружил, что бросаю вызов другому плакату, чтобы ответить на вопрос в brainfuck. Он не взял меня на себя, но теперь мне любопытно.Port dos2unix to brainfuck

Все, что нужно сделать программе, это конвертировать концы CRLF в LF (dos-style to unix). Любые bf-кодеры вокруг, которые могут помочь?

+3

+1 от меня для тех, кто сообщений рабочего кода; ^) – Toad

+0

я буду соответствовать его :) –

+0

я принял первый рабочий ответ, но тот, кто сообщений (другая, очевидно) рабочая программа все еще получает upvotes. –

ответ

23

Здесь вы идете:

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

Предполагает, что EOF указывает входное значение 0 (это по умолчанию на говядину, который я использовал для тестирования, и это разумный выбор, я думаю, что это может также поддерживают EOF, оставляя символ неизменным, но я не тестировал это). Также предполагается, что файл заканчивается LF (фактически, он заменяет последний символ LF). Правильно обрабатывает CR, если не является частью пары CRLF (т. Е. Выводит одиночные CR).

Взял, может быть, час, чтобы написать и проверить, и это включает в себя изучение Brainfuck с самого начала.

+0

ha! Я еще не получил компилятор. так или иначе я пропустил говядину в репозиториях debian. благодаря! –

+0

работает на моем тестовом примере. ты победил! –

+0

Впечатляет! kudos +1 – Toad

24

Это довольно немного короче, всего 41 символ.

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

Он считывает значение в [0]. Он копирует значение чтения в [1] и [2] и вычитает 13 из [1]. Если a [1] отличен от нуля (это означает, что это не CR), он помещает [2] и очищает [1]. Затем он очищает [2] и снова читает [0] и повторяет.

У этого есть дополнительное преимущество: поскольку он оставляет [0] = 0 каждый раз, когда он читает - он должен поддерживать виртуальные машины BF, которые читают EOF как 0 или обрабатывают EOF как «без изменений», оба из которых общие.

Поскольку это не заменяет пары CRLF с LF, а скорее всего ограничивает CR, это не зависит от предположения, что файл заканчивается LF. Мое собственное тестирование с dos2unix (по крайней мере, Cygwin) не указывает, что одиночные CR сохраняются.

+0

работает на говядине, работает с моей тестовой. это довольно простой, без провалов CR или что-то еще. хорошая работа. –

+0

Вот оно! Хорошее полезное приложение, написанное на бесполезном языке. Congrats! +1. Кстати, я просто создаю компилятор fork под названием Brain Force. Я приведу его где-нибудь в ближайшее время. : D Я буду использовать этот код для его проверки. –

+0

Является ли язык действительно бесполезным, если его можно использовать? знак равно –

2

Немного короче и проще CR-съемник:

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