ラザニアを確認する


15

シナリオ

私はよくラザニアを調理しますが、いくつかの間違いもあります。私はこれらの障害を頻繁に繰り返すので、すべてを正しく行ったかどうかをチェックするプログラムを実行できると思いました。

有効なラザニア

有効なラザニアは

  • 少なくとも5列幅
  • 少なくとも4層の高さ
    • 余分なチーズを除く
  • 最上層はチーズ( ,
  • 2番目の層はソースです(@またはで表されます#
  • その後、層が交互になります(1層のソース、1層の麺(~またはで表されます-))
  • 各列には、1層または2層のチーズを入れることができます

プログラム

すべき

  • 入力としてラザニア文字列を取ります
    • 複数行の文字列
    • 文字列配列
    • 文字列には文字のみが含まれます ,@#~-
    • 長方形
    • 必要に応じてスペースを埋めます
  • 有効なラザニアかどうかを出力します
    • 有効であればあなたの言語で通用するもの
    • あなたの言語で偽物は何もない
  • どちらか
    • 完全なプログラム
    • 機能
    • 14.12.2016より前に実装された機能のみを使用する

テストケース

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

--> 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列の場合はどうなりますか?
ルスラン

仕様では,@#~-、パディングとしてスペースを除いてのみ可能ですが、最初のテストケースには行の途中にスペースが含まれています。
feersum 16

@feersum「必要に応じてスペースで埋め」
UKMonkey

回答:


11

網膜38 34バイト

4バイトを節約してくれたGrimyに感謝します。

あなたのラザニアで正規表現を持っています。

バイトカウントはISO 8859-1エンコーディングを前提としています。

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

入力が末尾の改行で終わると仮定します。1有効なラザニアの印刷(一致)および0無効なもののために(マッチしません)。

オンラインでお試しください!

説明

これは、Retina がラインフィードまたはのエイリアスを提供することを除いて、入力と一致する標準の.NET正規表現\nです。

入力は長方形であることが保証されているため、行の1つでラザニアの幅を確認するだけです。

^           # 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バイトを節約できます。
グリムミー

@Grimy Ah良いキャッチ、ありがとう!
マーティンエンダー

5

グライム、43バイト

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

オンラインでお試しください! プリント1一致する場合と一致0しない場合にします。

説明

グライムは、小さなパターンから部分ごとに構築される2次元パターンに一致するように設計されています。最初にオプションの最上層を定義し、次に縦縞を繰り返して他の層を定義します。

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.
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.