Verifica le mie lasagne


15

Scenario

Cucino spesso lasagne, ma ho anche qualche errore. Dato che ripeto questi errori così spesso, ho pensato che forse avrei potuto fare un programma che controlla se ho fatto tutto bene.

Lasagne valide

Una lasagna valida è

  • Almeno 5 colonne di larghezza
  • Almeno 4 strati di altezza
    • Escluso il formaggio extra
  • Lo strato superiore è il formaggio (rappresentato da ,)
  • Il secondo strato è salsa (rappresentato da uno @o da #)
  • Successivamente gli strati si alternano (1 strato di salsa, 1 strato di noodles (rappresentato da uno ~o -)
  • Ogni colonna può avere uno o due strati di formaggio

Il programma

Dovrebbero

  • accetta una stringa di lasagne come input
    • stringa multilinea
    • array di stringhe
    • la stringa contiene solo i caratteri ,@#~-
    • Rettangolare
    • Imbottito con spazi se necessario
  • Uscita se si tratta di una lasagna valida
    • Qualsiasi cosa che sia vera nella tua lingua, se valida
    • Niente o niente di falso nella tua lingua
  • sia
    • un programma completo
    • una funzione
    • che utilizza solo funzionalità implementate prima del 14.12.2016

Casi test

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

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

Criteri vincenti

Il

invio vince.


13
Per favore chiudi quella parentesi.
Quentin,

Domanda: deve essere rettangolare in senso orizzontale? cioè cosa succede se è alto 10 righe e largo 9 colonne?
Ruslan,

La specifica dice che può essere ,@#~-fatta eccezione per gli spazi come riempimento, ma il primo caso di test contiene spazi nel mezzo di una linea.
febbraio

@feersum "Riempito con spazi se necessario"
UKMonkey

Risposte:


11

Retina , 38 34 byte

Grazie a Grimy per aver salvato 4 byte.

Goditi una regex con le tue lasagne.

Il conteggio dei byte presuppone la codifica ISO 8859-1.

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

Presuppone che l'input termina con un avanzamento riga finale. Stampa 1(abbina) per lasagne valide e 0(nessuna corrispondenza) per quelle non valide.

Provalo online!

Spiegazione

Questo è solo un regex .NET standard confrontato con l'input, tranne per il fatto che Retina fornisce l'alias per gli avanzamenti di riga o \n.

Poiché l'ingresso è garantito per essere rettangolare, dobbiamo solo verificare la larghezza delle lasagne su una delle file.

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

Se ci è permesso supporre che ci sia un avanzamento di riga finale dopo l'ultima riga (che suona ragionevole), puoi usare ¶[-~]*invece di (¶[-~]+|$), risparmiando 4 byte.
Grimmy,

@Grimy Ah buona cattura, grazie!
Martin Ender,

5

Grime , 43 byte

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

Provalo online! Stampa 1per corrispondenza e 0per nessuna corrispondenza.

Spiegazione

Grime è progettato per abbinare modelli bidimensionali, che sono costruiti pezzo per pezzo da modelli più piccoli. Definisco prima il livello superiore opzionale, quindi gli altri livelli ripetendo una striscia verticale.

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.
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.