Порт dos2unix для мозгового траха - PullRequest
18 голосов
/ 07 октября 2009

Я попал на спор на SuperUser.com о бесполезных ответах и ​​обнаружил, что заставляю другого автора ответить на этот вопрос в бреду. Он не поднял меня на это, но теперь мне любопытно.

Все, что нужно сделать программе, - это преобразовать окончания строк CRLF в LF (DOS-стиль в Unix). Любые BF кодеры, которые могут помочь?

Ответы [ 3 ]

25 голосов
/ 09 октября 2009

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

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

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

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

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

24 голосов
/ 08 октября 2009

Вот, пожалуйста:

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

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

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

3 голосов
/ 01 августа 2015

Чуть короче и проще CR-стриппер:

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