验证我的千层面


15

情境

我经常煮烤宽面条,但我也有一些错误。由于我经常重复这些错误,所以我认为我可以做一个检查我是否做对的程序。

有效千层面

有效的千层面是

  • 至少5列宽
  • 至少4层高
    • 不包括多余的奶酪
  • 顶层是奶酪(以表示,
  • 第二层是酱料(用@或表示#
  • 之后,各层交替显示(1层酱汁,1层面条(由~或表示-))
  • 每列可以有一层或两层奶酪

该程序

应该

  • 以烤宽面条串作为输入
    • 多行字符串
    • 字符串数组
    • 字符串仅包含字符 ,@#~-
    • 长方形
    • 必要时用空格填充
  • 输出是否是有效的千层面
    • 任何有效的语言
    • 没什么用你的语言造假
  • 要么
    • 完整程序
    • 一个功能
    • 仅使用2016年12月14日之前实现的功能

测试用例

,, ,
,,,,,,
@@@###
~~~~~-
@##@@#

--> truthy


@@@#
----
@@##
----
@###

--> falsy (cause of cheese and width (You don't have to print the stuff in the brackets))


,,,,,
-----
@####
-----
@@@@@

--> falsy (have the sauce as last layer)

获奖标准

提交获胜。


13
关闭该括号。
昆汀

问题:是否需要水平矩形?即如果它高10行,宽9列怎么办?
Ruslan

规范说只能,@#~-用空格作为填充,但第一个测试用例在一行中间包含空格。
feersum

@feersum“必要时用空格填充”
UKMonkey '16

Answers:


11

视网膜38 34字节

感谢Grimy节省了4个字节。

正则表达式与您的千层面。

字节数假定为ISO 8859-1编码。

^([, ]+¶)?,{5,}(¶[@#]+¶[-~]*){2,}$

假定输入以换行符结尾。打印1(匹配)有效的千层面和0(不匹配)无效的千层面。

在线尝试!

说明

这只是与输入匹配的标准.NET正则表达式,除了Retina提供换行符或的别名\n

由于保证输入为矩形,因此我们只需要检查其中一行的烤宽面条的宽度。

^           # Anchor the regex to the beginning of the input.
([, ]+¶)?   # Match an optional first line of only commas an spaces.
,{5,}       # Match at least 5 commas.
(           # Match this at least twice to ensure at least two layers of sauce.
  ¶[@#]+    #   Match a line of sauce.
  ¶[-~]*    #   Match a line of pasta. This line may be empty (which would
            #   indicate the end of the input.
){2,}
$           # Make sure we've indeed reached the end. Note that `$` can
            # match either at the very end of the input, or in front of
            # the trailing linefeed.

如果允许我们假设最后一行之后有最后一个换行符(听起来很合理),则可以使用¶[-~]*代替(¶[-~]+|$),节省4个字节。
Grimmy

@Grimy不错啊,谢谢!
马丁·恩德

5

污垢,43个字节

e`[ \,]+/?/(\,/[#@]^/[\-~]/+/[#@]/?)+{5-,4-

在线尝试! 打印1匹配和0不匹配。

说明

Grime设计用于匹配二维图案,这些图案是由较小的图案逐个构造而成的。我先定义可选的顶层,然后通过重复垂直条纹来定义其他层。

e`                                           Match entire input against pattern:
        /?                                   Optionally
  [ \,]+                                     a row of spaces and commas,
          /                                  below that
           (                       )         this pattern
                                    +        repeated horizontally
                                     {5-,4-  having size at least 5x4. 
                                             The brace is closed implicitly.
                                             "This pattern" is a vertical stripe containing
            \,                               a comma,
              /                              below that
               [#@]^/[\-~]                   a sauce character on top of a noodle character
                                             (the ^/ is like / but with higher precedence)
                          /+                 repeated vertically,
                            /                below that
                                 /?          optionally
                             [#@]            a sauce character.
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.