结束标签与太空战争
因此,关于是否使用制表符或空格来缩进/格式化代码存在很多争论。您可以通过采用一种极为疯狂的独特格式化方法来帮助大学解决争议。
您的工作是编写一个完整的程序或函数,以将所有选项卡扩展为四个空格。然后用“ /(n-这里有两颗星)/”替换n个前导空格。您将以任何合理的格式接收多行输入(每行新字符串的单个字符串数组,列数组等)。
样品输入被偷偷地偷了。请注意,由于制表符在SE上会自动扩展为四个空格,因此我将其表示为“ ^”字符,但您也必须处理制表符(代码点0x09)。所有的“ ^”字符都代表一个列表。
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
Not zero so multiply by 256 again to get 65536
[>++++<-]>[<++++++++>-]<[>++++++++<-]
+>[>
# Print "32"
++++++++++[>+++++<-]>+.-.[-]<
<[-]<->] <[>>
# Print "16"
+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
# Print "8"
++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
^this is preceded by a tab
^^two tabs
^^^three tabs etcetera!
样品输出
Calculate the value 256 and test if it's zero
If the interpreter errors on overflow this is where it'll happen
++++++++[>++++++++<-]>[<++++>-]
+<[>-<
/**/Not zero so multiply by 256 again to get 65536
/**/[>++++<-]>[<++++++++>-]<[>++++++++<-]
/**/+>[>
/******/# Print "32"
/******/++++++++++[>+++++<-]>+.-.[-]<
/**/<[-]<->] <[>>
/******/# Print "16"
/******/+++++++[>+++++++<-]>.+++++.[-]<
<<-]] >[>
/**/# Print "8"
/**/++++++++[>+++++++<-]>.[-]<
<-]<
# Print " bit cells\n"
+++++++++++[>+++>+++++++++>+++++++++>+<<<<-]>-.>-.+++++++.+++++++++++.<.
>>.++.+++++++..<-.>>-
Clean up used cells.
[[-]<]l
/**/this is preceded by a tab
/******/two tabs
/**********/three tabs etcetera!
因为大学需要空间来下载Vim和Emacs,所以只允许很少的代码存储空间。因此,这是代码高尔夫球,最短的代码获胜。您可能会假设输入格式正确,并且少于四个空格的行(替换制表符后)可能会导致行为不确定。
免责声明
这种“出色”的格式化策略是由Geobits提供的,并且在他的允许下得以复制。在产生此挑战期间,没有程序员受到伤害。
/*
,还是可以将其假定为不是“格式正确的输入”?C ++源文件将是一个更好的测试,因为它的多行注释/* */
可能会破坏一些答案,这些答案用an替换开头和结尾的前导空格/
,然后用填充空格*
。
/* */
C ++代码,但是这次是在行的开头。根据您的规范,应保留原样。这里的陷阱是,并且已经发现了错误的答案,正则表达式(比如说)/\** /
用星号填充//之间的空格会使该行变为/***/
。我也看到了这种转换/*//*/
。我认为两者都不正确。