ยืนยันลาซานญ่าของฉัน


15

สถานการณ์

ฉันปรุงลาซานญ่าบ่อยครั้ง แต่ฉันก็มีข้อผิดพลาดเล็กน้อยเช่นกัน เนื่องจากฉันทำผิดพลาดเหล่านี้บ่อยครั้งฉันคิดว่าฉันอาจทำโปรแกรมที่ตรวจสอบว่าฉันทำถูกทุกอย่างหรือไม่

ลาซานญ่าที่ถูกต้อง

ลาซานญ่าที่ถูกต้องคือ

  • กว้างอย่างน้อย 5 คอลัมน์
  • อย่างน้อย 4 ชั้นสูง
    • ไม่รวมชีสเสริม
  • ชั้นบนสุดคือชีส (แสดงโดย,)
  • ชั้นที่สองคือซอส (แสดงโดยอย่างใดอย่างหนึ่ง@หรือ#)
  • หลังจากนั้นชั้นอื่น ๆ (ซอส 1 ชั้น, ก๋วยเตี๋ยว 1 ชั้น (แสดงโดยอย่างใดอย่างหนึ่ง~หรือ-))
  • แต่ละคอลัมน์สามารถมีชีสได้หนึ่งหรือสองชั้น

โปรแกรม

ควร

  • ใช้สตริง lasagne เป็นอินพุต
    • สตริงหลายบรรทัด
    • อาร์เรย์สตริง
    • สตริงมีตัวอักษรเท่านั้น ,@#~-
    • เป็นมุมฉาก
    • บุด้วยช่องว่างหากจำเป็น
  • เอาท์พุทไม่ว่าจะเป็นลาซานญ่าที่ถูกต้อง
    • สิ่งใดก็ตามที่เป็นจริงในภาษาของคุณหากถูกต้อง
    • ไม่มีอะไรหรือสิ่งใดที่เป็นเท็จในภาษาของคุณ
  • เป็นทั้ง
    • โปรแกรมเต็มรูปแบบ
    • ฟังก์ชั่น
    • ที่ใช้ฟังก์ชันการทำงานที่นำมาใช้ก่อนวันที่ 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 คอลัมน์ล่ะ
Ruslan

ข้อมูลจำเพาะบอกว่าสามารถ,@#~-ยกเว้นช่องว่างเป็นช่องว่างภายในได้ แต่กรณีทดสอบแรกมีช่องว่างที่อยู่ตรงกลางบรรทัด
feersum

@feersum "บุด้วยช่องว่างหากจำเป็น"
UKMonkey

คำตอบ:


11

เรติน่า , 38 34 ไบต์

ขอบคุณ Grimy สำหรับการบันทึก 4 ไบต์

มี regex กับลาซานญ่าของคุณ

จำนวนไบต์ถือว่าการเข้ารหัส ISO 8859-1

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

สมมติว่าอินพุตสิ้นสุดด้วยการป้อนบรรทัดต่อท้าย พิมพ์1(จับคู่) สำหรับลาซานญที่ถูกต้องและ0(ไม่ตรงกัน) สำหรับลาซานญ่าที่ไม่ถูกต้อง

ลองออนไลน์!

คำอธิบาย

นี่เป็นเพียง regex .NET มาตรฐานจับคู่กับการป้อนข้อมูลยกเว้นว่า Retina ให้นามแฝงสำหรับ linefeeds \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

สิ่งสกปรก 43 ไบต์

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

ลองออนไลน์! พิมพ์1สำหรับการจับคู่และ0ไม่มีการจับคู่

คำอธิบาย

สิ่งสกปรกถูกออกแบบมาเพื่อจับคู่รูปแบบสองมิติซึ่งสร้างขึ้นทีละชิ้นจากรูปแบบขนาดเล็ก ฉันกำหนดเลเยอร์บนสุดที่เป็นทางเลือกก่อนจากนั้นก็เลเยอร์อื่นโดยทำแถบแนวตั้งซ้ำ

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.