내 라자냐 확인


15

대본

나는 종종 라자냐를 요리하지만 몇 가지 실수가 있습니다. 이 오류를 너무 자주 반복하기 때문에 모든 것을 올바르게 수행했는지 확인하는 프로그램을 만들 수 있다고 생각했습니다.

유효한 라자냐

유효한 라자냐는

  • 너비가 최소 5 열
  • 4 층 이상
    • 엑스트라 치즈 제외
  • 상단 레이어는 치즈 (로 표시 ,)
  • 두 번째 레이어는 소스입니다 ( @또는로 #표시됨)
  • 그 후 층이 번갈아 가며 (1 층 소스, 1 층 국수 ( ~또는로 표시 -))
  • 각 열은 1 ~ 2 층의 치즈를 가질 수 있습니다

프로그램

할까요

  • 라자냐 문자열을 입력으로 사용
    • 여러 줄 문자열
    • 문자열 배열
    • 문자열에는 문자 만 포함됩니다 ,@#~-
    • 직사각형
    • 필요한 경우 공백으로 채워짐
  • 유효한 라자냐인지 출력
    • 유효한 경우 귀하의 언어로 진실 된 것
    • 당신의 언어에 틀린 것 또는 아무것도
  • 어느 쪽이든
    • 완전한 프로그램
    • 기능
    • 2016 년 12 월 12 일 이전에 구현 된 기능 만 사용합니다.

테스트 사례

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

--> 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
제발 그 괄호를 닫습니다.
Quentin

질문 : 가로 직사각형이어야합니까? 즉, 행이 10 행, 너비가 9 열이면 어떻게됩니까?
Ruslan

스펙은 ,@#~-공백을 패딩으로 제외한 경우에만 가능 하지만 첫 번째 테스트 케이스에는 줄 중간에 공백이 포함되어 있습니다.
feersum

@feersum "필요한 경우 공백으로
채워짐

답변:


11

망막 , 38 34 바이트

4 바이트를 절약 해 준 Grimy에게 감사합니다.

라자냐와 함께 정규식을 가져라.

바이트 수는 ISO 8859-1 인코딩을 가정합니다.

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

입력이 후행 줄 바꿈으로 끝나는 것으로 가정합니다. 1유효한 라자냐의 경우 인쇄 (일치)하고 유효 0하지 않은 라자냐의 경우 (일치 하지 않음)

온라인으로 사용해보십시오!

설명

이것은 Retina 가 줄 바꿈 또는에 대한 별칭 을 제공한다는 점을 제외하고는 입력과 일치하는 표준 .NET 정규식 \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 Ah 좋은 캐치, 감사합니다!
Martin Ender

5

Grime , 43 바이트

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

온라인으로 사용해보십시오! 1일치하고 일치 0하지 않는 인쇄 합니다 .

설명

Grime은 작은 패턴으로 구성되어있는 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.