Rappresentiamo un mattone in muratura standard come [__](e ignoriamo il fatto che la parte superiore è aperta). Quando questi mattoni vengono impilati, ogni altro strato viene spostato di mezzo mattone, come al solito nella costruzione di mattoni:
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
Quindi ogni mattone ha al massimo sei vicini ed è impossibile che due mattoni si allineino direttamente in verticale.
Il punto chiave è che le disposizioni di questi mattoni non sono mortali , ma semplicemente tenute insieme dalla gravità. Quindi è importante che ogni mattone nella struttura sia stabile, altrimenti l'intera struttura è instabile.
Esistono tre modi in cui un singolo mattone può essere stabile:
- Qualsiasi mattone sul terreno (la linea più bassa di mattoni) è stabile.
Qualsiasi mattone che ha due mattoni direttamente sotto di esso è stabile:
[__] <- this brick is stable [__][__] <- because these bricks hold it upQualsiasi mattone che ha un mattone sia sopra che sotto sullo stesso lato è stabile:
[__] [__] [__] [__] <- these middle bricks are stable [__] [__] because the upper and lower bricks clamp them in [__] [__] [__] [__] <- these middle bricks are NOT stable [__] [__]
Da queste regole possiamo vedere, ad esempio, la disposizione
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
[__][__][__][__]
è instabile perché il mattone in alto a destra è instabile, il che è tutto ciò che serve.
Una struttura in mattoni è stabile solo se tutti i suoi mattoni sono stabili.
Sfida
Il tuo compito è scrivere una funzione che accetta una stringa di struttura in mattoni e restituisce un valore di verità se la struttura è stabile e un valore di falsa se instabile. ( definizione di verità / falsa )
La stringa di input può essere arbitrariamente grande ma sarà sempre una griglia rettangolare di caratteri, con spazi che riempiono le aree prive di mattoni. La larghezza della griglia del personaggio sarà divisibile per 4 ma l'altezza può essere pari o dispari.
La griglia del mattone si estende sempre sopra e a destra della posizione del mattone in basso a sinistra:
.
.
.
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK? . . .
BRK?BRK?BRK?BRK?
BRK?BRK?BRK?BRK?BRK?
A seconda della struttura, ognuno BRK?rappresenta uno [__]spazio in mattoni ( ) o vuoto (4 spazi).
Si noti che le cavità del mezzo mattone sono riempite di spazi per garantire che la griglia del personaggio sia rettangolare.
punteggio
Vince il codice più breve in byte .
Gli appunti
- Se lo si desidera è possibile utilizzare
.posto dello spazio come carattere spazio vuoto. - La stringa vuota è considerata stabile.
- Se la tua lingua non ha funzioni, puoi utilizzare una variabile stringa denominata come input e assegnare il risultato a un'altra variabile.
- Se la tua lingua non ha stringhe, puoi fare tutto ciò che sembra appropriato per l'input.
Casi test
Vari casi di test, separati da righe vuote. Per chiarezza .viene utilizzato al posto dello spazio per gli spazi vuoti.
Stabile:
[__]
..[__]..
[__][__]
........[__]........
......[__][__]......
........[__]........
..[__][__]..
[__][__][__]
..[__][__]..
[__]....[__]
............[__]..
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
..[__]........[__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
Instabile:
..[__]..
........
..[__]..
[__]....
..[__]..
....[__]
..[__][__]..
[__]....[__]
..[__][__]..
[__]....[__]
..[__][__][__][__]
[__][__][__][__]..
..[__][__][__][__]
[__][__][__][__]..
[__][__][__][__][__]
..[__][__][__][__]..
....[__][__][__]....
......[__][__]......
........[__]........
........[__].... ......[__][__].. ....[__][__].... ..[__][__]...... [__][__]........ ..[__]..........(Dovrai impilare mentalmente le linee una sopra l'altra. Il punto è che le tue regole consentono alle strutture il cui baricentro è lontano dal punto di contatto con il terreno. Dovrebbe essere possibile restringerle per evitare questo , senza aver bisogno di un motore fisico, se ne hai avuto voglia.)