背景
(根据真实的,令人费解的故事)
在我的时间里,我经常玩Lisp和类似语言。我已经与他们一起书写,运行它们,对其进行了解释,对其进行了设计,并让机器为我为它们编写了……如果有什么困扰着我,那就是Lisp不符合我的特定格式样式。
不幸的是,每当复制和粘贴代码时,一些文本编辑器(cough XCode cough)都会剥离我漂亮的制表符和空格。
(A
(B
(C)
(D))
(E))
(哪里ABCDE
有任意函数)
一些文本编辑器将此可爱的代码分割到了下面:
(A
(B
(C)
(D))
(E))
真是一团糟!这是不可读的!
帮帮我吗?
挑战
您在此挑战中的目标是采用一系列功能,这些功能以换行符分隔,格式如下所述,并返回更加美观的布局,突出可读性和优雅性。
输入
我们将F
arity N
参数的函数定义为类似于以下内容的构造:
(F (G1 ...) (G2 ...) (G3 ...) ... (GN ...))
G1, G2, ..., GN
自身的功能在哪里?一个arity 0
函数A
很简单(A)
,而arity 2
函数B
的形式是(B (...) (...))
您的代码应在每个函数的前导括号之前(第一个函数除外)以一个换行符作为一系列函数来输入输入。上面的示例是有效输入。
您可以假设:
- 括号是平衡的。
- 一个函数缩进的次数永远不会超过250次。
- 每个函数都用括号括起来:
()
- 函数名称将仅包含可打印的ASCII字符。
- 函数名称将永远不会包含括号或空格。
- 输入上有一个可选的尾随换行符。
输出
您的代码应输出相同的函数集,唯一的变化是在函数的前括号之前添加空格或制表符。输出应符合以下规则:
- 给定的第一个函数(以及后来的顶级函数)不应包含空格
- 函数水平位置的参数恰好是该函数水平位置右侧的一个制表符。
- 制表符是实现定义的,但必须至少有3个空格。
- 您可以选择在每行之后最多打印两个空格。
规则
- 这是代码高尔夫:最短的代码胜出!
- 不允许使用标准漏洞。
例子
输入:
(A
(B
(C)
(D))
(E))
输出:
(A
(B
(C)
(D))
(E))
输入:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
输出:
(!@#$%^&*
(asdfghjklm
(this_string_is_particularly_long
(...))
(123456789)))
(THIS_IS_TOP_LEVEL_AGAIN
(HERE'S_AN_ARGUMENT))
输入:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
输出:
(-:0
(*:0
(%:0
(Arg:6)
(Write:0
(Read:0
(Arg:30))
(Write:0
(Const:-6)
(Arg:10))))
(%:0
(Const:9)
(/:0
(Const:-13)
(%:0
(Arg:14)
(Arg:0)))))
(WriteArg:22
(-:0
(Const:45)
(?:0
(Arg:3)
(Arg:22)
(Arg:0)))))
()
?