金字塔计划是@ ConorO'Brien开发的一种语言。在金字塔计划中,您编写的代码如下所示:
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
现在,该代码具有两个明显的特性:很难解析,也很难编写。Conor解决了第一个问题,但是解决第二个问题将是您的工作。
上面的代码由PyramidScheme解释器处理为嵌套的字符串数组,如下所示:
[["+", ["9123", "3"]], "3"]
您的任务是编写一个给定嵌套字符串数组的程序或函数,输出或返回重新创建的PyramidScheme代码。您可以假设输入数组将始终有效。
金字塔是等腰三角形。顶部是^
,侧面与/
和对角倾斜\
,底部是-
。两个底角为空或包含其他金字塔的起点,它们是自变量。中间充满了金字塔的名称,忽略了换行符。
解析器将代码转换为可用格式的方式如下。首先,它会扫描顶级金字塔。如果不带参数,则用单个字符串表示它并继续前进。否则,它表示为数组["name",[arg1,arg2]]
或["name",[arg1]]
。参数是金字塔左下角和右下角的金字塔,它们可以是字符串,也可以是如上所述的更多数组。您可能会注意到它有点像Lisp,在这种情况下,您可能还注意到了语言名称的双关语。金字塔被完全表示后,解析器将移动到下一个金字塔。
这是代码高尔夫,最短的代码获胜!
测试用例:这些不是唯一有效的输出,它们是有效输出的示例。
[["+", ["9123", "3"]], "3"]
^ ^
/ \ /3\
/ \ ---
/ + \
^-------^
/9\ /3\
/123\ ---
-----
[["out", [["chr", ["72"]], ["chr", ["101"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["108"]]]], ["out", [["chr", ["111"]]]]]
^ ^ ^ ^
/ \ / \ / \ / \
/out\ /out\ /out\ /out\
^-----^ -----^----- -----^
/ \ / \ / \ / \
/chr\ /chr\ /chr\ /chr\
^----- -----^ -----^ ^-----
/ \ / \ / \ / \
/72 \ /101\ /108\ /111\
----- ----- ----- -----
[ ["+", [ ["asdfghjkl"], ["do", [ "1" ]] ]] ]
^
/ \
/ + \
/ \
^-------^
/a\ /d\
/sdf\ /o \
/ghjkl\ ^-----
-------/1\
---
请注意,在第二个测试案例中,第二个和第三个out
金字塔都有一个["chr", ["108"]]
作为参数,该金字塔被折叠成两个顶层堆栈共享的一个金字塔堆栈。这是您的代码可能支持的有效优化,但它是完全可选的。得分不是基于输出的长度。
出于好奇,第一种情况是9126 3
由于隐式打印顶级金字塔而出现的,第二种情况Hello
是由于语法错误而出现的,而第二种情况是由于语法结构整齐而出现的。
你可以假设输入只包含可打印的ASCII,不包括空格^
,/
,\
,和-
。输入将始终有效,并且至少包含一个金字塔。数组或输入字符串的大小没有限制,但是您可以编写代码,就像您的语言的默认整数类型是无限精度并且计算机具有任意内存一样。如果将输入作为单个字符串,则可以使用任何合理的值(逗号,空格等,只要它在可打印的ascii中而不是"
or []
)就可以分隔数组。您不必在整个内容周围包括方括号,而是使用由定界符分隔的多个数组。
您的输出不必打高尔夫球,可以插入额外的空间或使金字塔变大。顶级金字塔应该位于第一行。输出应该是带有换行符的字符串或字符串列表。
任何确实包含其代码版本的人都可以最佳地金字塔金字塔高尔夫,任何人都可以以投票/赏金的形式获得回报(但可能仅仅是投票)。