我在 SuperUser.com 上就无用的答案进行了争论,并发现自己在挑战另一位发帖人,让他用脑筋急转弯来回答这个问题。他没有接受我,但现在我很好奇。
程序所需要做的就是将 CRLF 行尾转换为 LF(dos 样式到 unix)。周围的任何 bf 编码器都可以提供帮助吗?
我在 SuperUser.com 上就无用的答案进行了争论,并发现自己在挑战另一位发帖人,让他用脑筋急转弯来回答这个问题。他没有接受我,但现在我很好奇。
程序所需要做的就是将 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 虚拟机,这两种情况都很常见。
由于这不会用 LF 替换 CRLF 对,而只是去除 CR,因此这不依赖于假设文件以 LF 结尾。我自己对 dos2unix(至少是 Cygwin 的测试)的测试并不表明保留了单独的 CR。
干得好:
,[[->+>+<<]>>>,[<-------------[+++++++++++++.>>>]<[>>----------[>+++++++++++++.-------------]<++++++++++>]<<<<[-]>>>[-<<<+>>>]]<[-]<[-]<]++++++++++.
假设 EOF 由输入值 0 指示(这是牛肉的默认值,我曾经测试过,这是一个合理的选择;我认为它也可能支持 EOF 保持字符不变,但我没有测试)。还假设文件以 LF 结尾(实际上,它用 LF 替换了最后一个字符)。如果 CR 不是 CRLF 对的一部分(即,它输出单独的 CR),则正确处理 CR。
可能花了一个小时来编写和测试,其中包括从一开始就学习 Brainfuck。
略短且简单的 CR 剥离器:
,[-------------[+++++++++++++.[-]],]