介绍
这项挑战的灵感来自我的2D模式匹配语言Grime。基本上,您将获得一个描述二维字符网格的“语法”,而您的工作是根据该语法生成一个网格。另外,从某种意义上说,网格应尽可能小。
输入值
您的输入是一个包含小写ASCII字符以及符号|
和的字符串-
。为简单起见,输入不包含重复的小写字符。字符串是一类矩形字符网格的规范,它使用堆栈从左到右进行解析,如下所示。
- 给定一个小写字符
c
,将任何一个m×n
字符的网格压入堆栈。c
m, n ≥ 1
- 给定一个管道
|
,弹出两个网格A
并B
从堆栈中弹出(B
位于顶部),然后将AB
通过串联B
而获得的网格推到的右侧A
。这要求A
并B
具有相等的高度。 - 给定一个连字符
-
,弹出两个网格A
并B
从堆栈中弹出(B
位于顶部),然后将A/B
通过串联B
而获得的网格推到的底部A
。这需要A
并B
具有相等的宽度。
确保在解析过程中对进行某些选择m
和选择n
(每个字母可能有所不同),输入规范正确地描述了一些矩形,该矩形最后留在堆栈上。
输出量
您的输出是由输入指定的字符的矩形网格。在删除任何行或列将使其无效的意义上,网格必须最小。您可以返回以换行符分隔的字符串(带或不带尾随换行符),2D字符数组或字符串数组,以最方便的格式为准。
请注意,您不需要完全如上所述地处理输入;唯一重要的是您的输出正确。
例
考虑规格
par-s||e-
首先,我们选择推1×2
的矩形p
,和1×1
的矩形a
和r
(这样做的原因很清楚更高版本)。然后,我们弹出a
和r
矩形,并推动它们的垂直串联
a
r
接下来,我们推1×2
的矩形s
,弹出它和上面的矩形,并推动其横向拼接
as
rs
然后,我们弹出该矩形和该p
矩形,并推动它们的串联
pas
prs
最后,我们推入的3×1
矩形e
,将其弹出并上方的矩形,然后推入垂直串联
pas
prs
eee
这是程序的输出,或者是至少一种可能性。请注意,即使
ppas
ppas
pprs
eeee
也是由规范生成的,它不是有效的输出,因为可以删除许多行和列。
作为一个更微妙的例子,考虑
co|m|p|il|e|r|-
此规范生成矩形
comp
iler
这是有效的输出。但是,它也会产生
commp
iiler
这也是有效的,因为没有使无效的行和列都无法删除。
规则
您可以提供完整的程序或功能。最低字节数获胜,并且不允许出现标准漏洞。
额外的测试案例
您可以使用它们来测试您的程序。
Input:
a
Output:
a
Input:
co|mp|l|-ex|i|f|-y|
Example output:
cccoy
mplly
exify
Input:
ja-r|g-o|ni-|ze|d-|
Example output:
jronze
arondd
ggoidd
Input:
un|co|p-yr|i|gh-t-ab|-|le-||-
Example output:
unnnnnnn
coyriggl
ppyrihhe
ppyritte
ppyriabe
n
和不确定m
地选择。可以保证存在适合它们的值,但是程序的工作是找到它们。
un|co|p-|yr|i|gh--t-ab|-|le-||-
是不可能的。最后-
一个的Arity为2,而堆栈上只有1个元素。