将dos2unix移植到brainfuck

19

我在SuperUser.com上涉及无用答案的争论,并挑战其他帖子的人用brainfuck回答问题。他没有接受我的挑战,但现在我很好奇。

程序只需要将CRLF行结尾转换为LF(dos风格到unix)。有bf编码器可以帮忙吗?


3
只翻译文本内容:+1 给任何发布可行代码的人;^) - Toad
我接受了第一个可运行的答案,但是任何发布(显然)可运行程序的人仍将获得点赞。 - quack quixote
3个回答

26

这篇文章较短,仅有41个字符。

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

该代码读取一个值到a[0]。它将读取的值复制到a[1]和a[2]中,并从a[1]中减去13。如果a[1]不为零(表示它不是CR),则放置a[2]并清除a[1]。然后清除a[2]并再次读取a[0]并重复此过程。

这种方法的优点是,它每次读取后都将a[0]设为0,因此应支持将EOF读取为0或将EOF视为“无更改”的BF虚拟机,这两种情况都很常见。

由于这不会将CRLF对替换为LF,而仅仅是去掉CR,因此这不依赖于假定文件以LF结尾。我使用dos2unix(至少是Cygwin版本)进行了自己的测试,结果表明孤立的CR未被保留。


运行良好,与我的测试用例相匹配。这很基础,没有任何杂乱的CR等问题。干得好。 - quack quixote
这就是它!一个用无用语言编写的好用的应用程序。恭喜!+1。顺便说一句,我刚刚创建了一个名为Brain Force的分支编译器。不久我会在某个地方展示它。:D 我将使用这段代码来测试它。 - DrBeco
如果一种语言可以被使用,那么它真的是毫无用处的吗?=) - Alan Krueger

25

这是您需要的:

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

假定输入值为0时表示EOF(在我用来测试的beef上默认为此,这是一个合理的选择;我认为它也可能支持将EOF保留为字符不变,但我没有测试)。还假定文件以LF结尾(实际上,它会将最后一个字符替换为LF)。如果CR不是CRLF对的一部分(即,输出单个CR),则正确处理CR。

编写和测试可能需要约一个小时,其中包括从头开始学习Brainfuck。


哈!我甚至还没有让编译器工作起来。不知怎么的,我在Debian存储库中错过了beef。谢谢! - quack quixote
令人印象深刻!赞一个。+1 - Toad
+1 不错。但它仍然没有“dos2unix”易于阅读..这就是我的观点 @su - akira

4
稍微更简单一些的CR转义字符去除程序:
,[-------------[+++++++++++++.[-]],]

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接