我在SuperUser.com上涉及无用答案的争论,并挑战其他帖子的人用brainfuck回答问题。他没有接受我的挑战,但现在我很好奇。
程序只需要将CRLF行结尾转换为LF(dos风格到unix)。有bf编码器可以帮忙吗?
我在SuperUser.com上涉及无用答案的争论,并挑战其他帖子的人用brainfuck回答问题。他没有接受我的挑战,但现在我很好奇。
程序只需要将CRLF行结尾转换为LF(dos风格到unix)。有bf编码器可以帮忙吗?
这篇文章较短,仅有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未被保留。
这是您需要的:
,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.
假定输入值为0时表示EOF(在我用来测试的beef上默认为此,这是一个合理的选择;我认为它也可能支持将EOF保留为字符不变,但我没有测试)。还假定文件以LF结尾(实际上,它会将最后一个字符替换为LF)。如果CR不是CRLF对的一部分(即,输出单个CR),则正确处理CR。
编写和测试可能需要约一个小时,其中包括从头开始学习Brainfuck。
,[-------------[+++++++++++++.[-]],]