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


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)

Критерії виграшу

The

  • найкоротший
  • функціональний

подання виграє.


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

@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.
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.