Zweryfikuj moją lasagne

15

Scenariusz

Często gotuję lasagne, ale mam też kilka błędów. Ponieważ powtarzam te błędy tak często, pomyślałem, że mógłbym zrobić program, który sprawdza, czy wszystko zrobiłem dobrze.

Ważna lasagne

Prawidłowa lasagne to

  • Szerokość co najmniej 5 kolumn
  • Wysokość co najmniej 4 warstw
    • Z wyłączeniem dodatkowego sera
  • Górna warstwa to ser (reprezentowany przez ,)
  • Drugą warstwą jest sos (reprezentowany przez jeden @lub #)
  • Następnie warstwy naprzemiennie (1-warstwowy sos, 1-warstwowy makaron (reprezentowany przez jeden ~lub -))
  • Każda kolumna może zawierać jedną lub dwie warstwy sera

Program

Powinien

  • weź ciąg lasagne jako dane wejściowe
    • ciąg wielowierszowy
    • tablica ciągów
    • ciąg zawiera tylko znaki ,@#~-
    • Prostokątny
    • W razie potrzeby wypełnione spacjami
  • Dane wyjściowe, czy jest to poprawna lasagne
    • Każda rzecz, która jest prawdomówna w twoim języku, jeśli jest ważna
    • Nic lub cokolwiek, co byłoby fałszywe w twoim języku
  • być albo
    • pełny program
    • funkcja
    • korzystający tylko z funkcji wdrożonych przed 14.12.2016

Przypadki testowe

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

--> 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)

Kryteria wygranej

The

  • najkrótszy
  • funkcjonalny

zgłoszenie wygrywa.

Roman Gräf
źródło
13
Proszę zamknąć ten nawias.
Quentin
Pytanie: Czy musi być prostokątny w poziomie? tj. co jeśli ma 10 rzędów wysokości i 9 kolumn szerokości?
Ruslan
Specyfikacja mówi, że może to tylko ,@#~-z wyjątkiem spacji jako wypełnienia, ale pierwszy przypadek testowy zawiera spacje w środku linii.
feersum
@feersum „W razie potrzeby
wypełnione

Odpowiedzi:

11

Siatkówka , 38 34 bajtów

Dzięki Grimy za zaoszczędzenie 4 bajtów.

Zrób regex ze swoją lasagne.

Liczba bajtów zakłada kodowanie ISO 8859-1.

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

Zakłada, że ​​wejście kończy się końcowym podawaniem linii. Odbitki 1(dopasowanie) dla prawidłowych lasagne i 0(brak dopasowania) dla nieprawidłowych.

Wypróbuj online!

Wyjaśnienie

Jest to tylko standardowe wyrażenie regularne .NET dopasowane do danych wejściowych, z tym wyjątkiem, że Retina zapewnia alias dla linii lub \n.

Ponieważ wejście jest zagwarantowane jako prostokątne, musimy tylko sprawdzić szerokość lasagne w jednym z rzędów.

^           # 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.
Martin Ender
źródło
Jeśli możemy założyć, że po ostatnim wierszu znajduje się końcowy kanał (co brzmi rozsądnie), możesz użyć ¶[-~]*zamiast (¶[-~]+|$), oszczędzając 4 bajty.
Grimmy,
@Grimy Ah dobry połów, dziękuję!
Martin Ender
5

Brud , 43 bajty

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

Wypróbuj online! Drukuje 1dla dopasowania i 0bez dopasowania.

Wyjaśnienie

Grime jest przeznaczony do dopasowywania dwuwymiarowych wzorów, które są budowane kawałek po kawałku z mniejszych wzorów. Najpierw definiuję opcjonalną górną warstwę, a następnie pozostałe warstwy, powtarzając pionowy pasek.

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.
Zgarb
źródło