6
根据规范生成矩形
介绍 这项挑战的灵感来自我的2D模式匹配语言Grime。基本上,您将获得一个描述二维字符网格的“语法”,而您的工作是根据该语法生成一个网格。另外,从某种意义上说,网格应尽可能小。 输入值 您的输入是一个包含小写ASCII字符以及符号|和的字符串-。为简单起见,输入不包含重复的小写字符。字符串是一类矩形字符网格的规范,它使用堆栈从左到右进行解析,如下所示。 给定一个小写字符c,将任何一个m×n字符的网格压入堆栈。cm, 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: …