Xác nhận lasagne của tôi


15

Kịch bản

Tôi thường nấu lasagne, nhưng tôi cũng có một vài sai lầm. Vì tôi lặp đi lặp lại những lỗi này thường xuyên, tôi nghĩ rằng tôi có thể thực hiện một chương trình kiểm tra xem tôi có làm đúng mọi thứ không.

Lasagne hợp lệ

Một lasagne hợp lệ là

  • Ít nhất 5 cột rộng
  • Ít nhất 4 lớp cao
    • Không bao gồm thêm phô mai
  • Lớp trên cùng là phô mai (đại diện bởi ,)
  • Lớp thứ hai là nước sốt (đại diện bởi một trong hai @hoặc #)
  • Sau đó các lớp xen kẽ (1 lớp nước sốt, 1 bún lớp (đại diện bởi một trong hai ~hoặc -))
  • Mỗi cột có thể có một hoặc hai lớp phô mai

Chương trình

Nên

  • lấy một chuỗi lasagne làm đầu vào
    • chuỗi đa dòng
    • mảng chuỗi
    • chuỗi chỉ chứa ký tự ,@#~-
    • Hình hộp chữ nhật
    • Có đệm với không gian nếu cần thiết
  • Đầu ra cho dù đó là một lasagne hợp lệ
    • Bất cứ điều gì gây xúc động trong ngôn ngữ của bạn nếu hợp lệ
    • Không có gì hoặc bất cứ điều gì sai lệch trong ngôn ngữ của bạn
  • là một trong hai
    • một chương trình đầy đủ
    • một chức năng
    • chỉ sử dụng chức năng đã được triển khai trước ngày 14.12.2016

Các trường hợp thử nghiệm

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

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

Tiêu chí chiến thắng

Các

  • ngắn nhất
  • chức năng

nộp chiến thắng.


13
Hãy đóng dấu ngoặc đơn đó.
Quentin

Câu hỏi: Có cần phải là hình chữ nhật theo chiều ngang? tức là nếu nó cao 10 hàng và rộng 9 cột thì sao?
Ruslan

Thông số kỹ thuật cho biết nó chỉ có thể ,@#~-ngoại trừ khoảng trắng dưới dạng phần đệm, nhưng trường hợp thử nghiệm đầu tiên chứa khoảng trắng ở giữa dòng.
frageum

@feersum "Được đệm bằng khoảng trắng nếu cần thiết"
UKMonkey

Câu trả lời:


11

Võng mạc , 38 34 byte

Cảm ơn Grimy vì đã tiết kiệm 4 byte.

Có một regex với lasagne của bạn.

Số lượng byte giả định mã hóa ISO 8859-1.

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

Giả sử rằng đầu vào kết thúc bằng một dòng cấp dữ liệu. In 1(khớp) cho các laser hợp lệ và 0(không khớp) cho các laser không hợp lệ.

Hãy thử trực tuyến!

Giải trình

Đây chỉ là một regex .NET tiêu chuẩn phù hợp với đầu vào, ngoại trừ Retina cung cấp bí danh cho các nguồn cấp dữ liệu hoặc \n.

Vì đầu vào được đảm bảo là hình chữ nhật, chúng tôi chỉ cần kiểm tra độ rộng của lasagne trên một trong các hàng.

^           # 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.

Nếu chúng tôi được phép giả định rằng có một nguồn cấp cuối cùng sau dòng cuối cùng (nghe có vẻ hợp lý), bạn có thể sử dụng ¶[-~]*thay vì (¶[-~]+|$), tiết kiệm 4 byte.
Grimmy

@Grimy Ah bắt tốt, cảm ơn bạn!
Martin Ender

5

Vết bẩn , 43 byte

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

Hãy thử trực tuyến! In 1cho khớp và 0không khớp.

Giải trình

Grime được thiết kế để phù hợp với các mẫu hai chiều, được xây dựng từng mảnh từ các mẫu nhỏ hơn. Tôi xác định lớp trên cùng tùy chọn trước, sau đó đến các lớp khác bằng cách lặp lại một sọc dọc.

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.
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.