Проверьте мою лазанью


15

сценарий

Я часто готовлю лазанью, но у меня также есть несколько ошибок. Поскольку я повторяю эти ошибки так часто, я подумал, что, возможно, смогу создать программу, которая проверяет, все ли я сделал правильно

Допустимая лазанья

Действительная лазанья

  • Не менее 5 столбцов в ширину
  • Минимум 4 слоя
    • Исключая дополнительный сыр
  • Верхний слой - сыр (представлен ,)
  • Второй слой - соус (обозначенный либо @или #)
  • После этого слои чередуются (1 слой соуса, 1 слой лапши (обозначен либо ~или -))
  • Каждая колонка может иметь один или два слоя сыра

Программа

Должен

  • взять в качестве входного сигнала лазанью
    • многострочная строка
    • массив строк
    • строка содержит только символы ,@#~-
    • прямоугольный
    • Дополнено пробелами при необходимости
  • Выведите, действительно ли это лазанья
    • Любая вещь, которая является правдой на вашем языке, если действительна
    • Ничего или ничего ложного в твоем языке
  • быть либо
    • полная программа
    • функция
    • который использует только функциональность, которая была реализована до 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

@feersum "Дополняется пробелами при необходимости"
UKMonkey

Ответы:


11

Сетчатка , 38 34 байта

Спасибо Грими за сохранение 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

@ Грими А, хороший улов, спасибо!
Мартин Эндер

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.
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.