Lazanyamı doğrula


15

senaryo

Genellikle lazanya pişiririm, ama birkaç hatam var. Bu hataları çok sık tekrarladığım için, her şeyi doğru yapıp yapmadığımı kontrol eden bir program yapabileceğimi düşündüm.

Geçerli lazanya

Geçerli bir lazanya

  • En az 5 sütun genişliğinde
  • En az 4 kat yüksek
    • Ekstra peynir hariç
  • Üst tabaka peynirdir (ile temsil edilir ,)
  • İkinci katman sostur ( @veya ile temsil edilir #)
  • Bundan sonra katmanlar dönüşümlü olarak (1 katman sos, 1 katman erişte ( ~veya ile temsil edilir -))
  • Her sütun bir veya iki kat peynir içerebilir

Program

Meli

  • lazanya ipini giriş olarak al
    • çok satırlı dize
    • dize dizisi
    • dize yalnızca karakterleri içerir ,@#~-
    • dikdörtgen biçiminde
    • Gerekirse boşluklarla doldurulur
  • Geçerli bir lazanya olup olmadığını çıktı
    • Geçerliyse kendi dilinizde gerçek olan herhangi bir şey
    • Kendi dilinizde yanlış olan hiçbir şey veya herhangi bir şey
  • ya da ol
    • tam bir program
    • bir işlev
    • yalnızca 14.12.2016 tarihinden önce uygulanan işlevleri kullanan

Test senaryoları

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

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

Kazanma kriterleri

  • en kısa
  • fonksiyonel

başvuru kazanır.


13
Lütfen bu parantezi kapatın.
Quentin

Soru: Yatay olarak dikdörtgen olması gerekiyor mu? 10 satır yüksekliğinde ve 9 sütun genişliğinde ise ne olacak?
Ruslan

Spesifikasyon, yalnızca ,@#~-boşluklar dışında dolgu olarak yapılabileceğini, ancak ilk test senaryosunun bir satırın ortasında boşluklar içerdiğini söylüyor .
feersum

@feersum "Gerekirse boşluklarla
doldurulur

Yanıtlar:


11

Retina , 38 34 bayt

Grimy'e 4 bayt kaydettiği için teşekkürler.

Lazanya ile düzenli ol.

Bayt sayımı ISO 8859-1 kodlamasını varsayar.

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

Girişin bir satır besleme ile bittiği varsayılmaktadır. 1Geçerli lazerler için 0(eşleşme) ve geçersiz olanlar için (eşleşme yok) yazdırır .

Çevrimiçi deneyin!

açıklama

Retina'nın satır beslemeleri veya için takma ad sağlaması dışında, yalnızca girişle eşleşen standart bir .NET regexidir \n.

Girdinin dikdörtgen olduğu garanti edildiğinden, lazerin genişliğini yalnızca satırlardan birinde kontrol etmemiz gerekir.

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

Son satırdan sonra (makul görünen) bir son satır beslemesi olduğunu varsayabilirsek, 4 bayt kaydetmek ¶[-~]*yerine kullanabilirsiniz (¶[-~]+|$).
Grimmy

@Grimy Ah iyi yakaladın, teşekkürler!
Martin Ender

5

Grime , 43 bayt

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

Çevrimiçi deneyin! Eşleşecek 1ve eşleşmeyecek şekilde yazdırır 0.

açıklama

Grime, daha küçük desenlerden parça parça inşa edilen iki boyutlu desenleri eşleştirmek için tasarlanmıştır. Önce isteğe bağlı üst katmanı, sonra dikey bir şeridi tekrarlayarak diğer katmanları tanımlarım.

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.
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.