Hai una pila di pancake su un piatto con sopra un globo di sciroppo così denso che non può scorrere lungo i lati. Non sarai felice di mangiare fino a quando entrambe le facce di ogni pancake non avranno toccato almeno lo sciroppo, ma in questo momento solo una faccia del pancake superiore ha.
Sai che lo sciroppo non si impregnerà mai nemmeno attraverso un pancake, ma può essere trasferito indefinitamente tramite il contatto faccia a faccia tra due pancake. Una volta che una faccia di un pancake ha toccato lo sciroppo, viene considerata ricoperta di sciroppo per sempre e renderà rivestita anche qualsiasi faccia non sciroppata che lo tocca. È possibile trasferire anche lo sciroppo da e verso il lato superiore della piastra.
Si procede a ricoprire ogni faccia di pancake con lo sciroppo inserendo una spatola sotto una o più frittelle e capovolgendole dappertutto, esattamente come avviene nello smistamento dei pancake . (Sfortunatamente questa spatola è resistente allo sciroppo e non aiuta a distribuire lo sciroppo toccando le facce del pancake.) Purtroppo perdi traccia di quali facce del pancake hanno toccato lo sciroppo, ma ricordi i colpi che hai fatto.
Dati i tuoi precedenti salti, puoi determinare se i tuoi pancake sono ancora tutti ricoperti di sciroppo?
Sfida
Scrivi un programma che includa un numero intero positivo N per il numero di pancake e un elenco di numeri interi positivi (tutti <= N) per i lanci che hai fatto finora. Ogni numero nell'elenco rappresenta il numero di pancake che sono stati capovolti. Emetti un valore veritiero se i pancake sono stati rivestiti e un valore falso in caso contrario. ( definizione di verità / falsa )
L'input dovrebbe provenire da stdin o dalla riga di comando e l'output dovrebbe passare a stdout (o alle alternative più vicine). Va bene se il tuo input ha bisogno di un po 'di formattazione extra: ad esempio [1, 1, 2, 2]
invece che 1 1 2 2
per l'elenco.
Esempi
Assumi N = 2, quindi abbiamo una pila di due pancake su un piatto, iniziando con lo sciroppo in cima.
Se l'elenco è 1 1 2 2
, ciò significa che ...
- capovolgi il pancake superiore - rivestendo la parte superiore del pancake inferiore
- capovolgi di nuovo la parte superiore - rivestendo la faccia inferiore originale del pancake superiore
- capovolgi entrambi - rivestendo la piastra
- capovolgi di nuovo entrambi - rivestendo la parte inferiore originale del pancake inferiore
Poiché tutte e quattro le facce sono rivestite, l'output sarebbe simile a True
o 1
.
Se l'elenco è 1 2 2 1
, ciò significa che ...
- capovolgi il pancake superiore - rivestendo la parte superiore del pancake inferiore
- capovolgi entrambi - non rivestendo nulla
- capovolgi entrambi - non rivestendo nulla
- capovolgi di nuovo la parte superiore - rivestendo la faccia inferiore originale del pancake superiore
Poiché la faccia che tocca la piastra è ancora priva di sciroppo, l'uscita sarebbe simile False
o 0
.
Gli appunti
- L'elenco di fogli mobili può essere arbitrariamente grande e può essere vuoto, nel qual caso l'output è errato.
- La piastra funge da portatore di sciroppo ma non importa se viene rivestita o meno. (In realtà qualsiasi soluzione vibrazione volontà rivestire la piastra perché la faccia pancake tocca deve essere rivestito, ma indipendentemente.)
- La piastra non può essere capovolta.
- Puoi presumere che questi pancake siano dischi di unità senza lati di cui parlare, solo due facce opposte.
punteggio
Questo è code-golf. Vince la soluzione più breve in byte .
Put syrup on the pancakes!