Il set up
Considera una scatola di forma strana contenente 29 celle numerate, come mostrato nella Figura 1 di seguito.
All'interno di questa scatola 2D ci sono due specie di animali di forma quadrata: bolle e smole. La Figura 1 (a) mostra alcune bolle in blu e alcune bolle in rosso. Ogni creatura occupa esattamente una cella della griglia. La confezione può contenere da 0 a 26 bolle, ma conterrà sempre esattamente due smole.
Essendo soggetti alla gravità, bolle e smole siedono sul fondo della scatola, accatastandosi su qualsiasi cosa sotto di loro. Entrambe le specie sono eccezionalmente pigre e rimangono perennemente immobili.
La scatola contiene anche uno stot, rappresentato come un quadrato nero, che occupa esattamente una cella della griglia. Il ceppo non è soggetto alla gravità.
La scatola ha un'apertura situata nella parte inferiore della cella 28, come mostrato nella figura.
Per rappresentare testualmente la configurazione di bolle, smole e stot nella casella, utilizziamo una stringa di 29 caratteri, un carattere per cella della griglia, nell'ordine elencato, con la .
rappresentazione di una cella vuota, che o
rappresenta una shubble, che x
rappresenta un sorriso, e @
rappresenta lo stot. Ad esempio, la configurazione di Fig. 1 (a) è rappresentata dalla stringa .........@...o....ooo..xox...
.
manipolazioni
La scatola può essere ruotata di qualsiasi multiplo di 90 °. Mentre la scatola viene ruotata, le bolle e i buchi rimangono fermi all'interno delle celle della griglia. Non appena una rotazione è completa, cadono direttamente verso il basso fino a quando i ) non vengono bloccati da un muro sottostante, ii ) vengono bloccati da una stoppia, un sorriso o un ceppo al di sotto, oppure iii ) cadono attraverso il foro nella cella 28 e uscire dalla scatola. Il moncone non cade; rimane fisso nella sua cella corrente, anche se le creature vi si trovano sopra.
La scatola non può essere ruotata di nuovo fino a quando le creature non hanno finito di cadere e hanno raggiunto una nuova configurazione stabile.
Dal punto di vista testuale, le rotazioni della scatola sono indicate da +
una rotazione di 90 ° in senso orario, |
per una rotazione di 180 ° e -
per una rotazione di 90 ° in senso antiorario.
Inoltre, lo stot può essere spostato nelle quattro direzioni della bussola con incrementi di una cella della griglia. Una mossa non può: i ) provocare una collisione tra lo stot e una creatura (cioè la cella della griglia di destinazione deve essere vuota), ii ) causare una collisione tra lo stot e un muro, né iii ) causare lo stot attraverso la scatola il buco nella cella 28.
Inoltre, il ceppo potrebbe non muoversi se ha delle creature appoggiate su di esso (rispetto alla gravità attuale).
Testualmente, le mosse di stot sono indicate da <
per sinistra, >
per destra, ^
per su e v
per giù. Le mosse vengono sempre specificate rispetto al telaio "standard" (non ruotato) rappresentato nelle figure. Cioè, se lo stot è nella cella 10, lo spostamento lo sposta ^
sempre nella cella 5 e lo spostamento lo sposta >
sempre nella cella 11. L'orientamento del riquadro non influisce sulla direzione dello spostamento.
Le sequenze di manipolazioni sono codificate usando stringhe di caratteri da sinistra a destra. Ad esempio, la stringa +<<^-
indica che la scatola viene ruotata di 90 ° in senso orario, quindi lo stot viene spostato a sinistra due volte e verso l'alto una volta (rispetto al telaio standard), quindi la scatola viene ruotata di 90 ° in senso antiorario di nuovo nel suo orientamento originale.
La sfida
Per ragioni perfettamente valide (che non posso rivelare), desideriamo districare tutte le bolle dalla scatola senza districarle in un solo sorriso. Per fare ciò, possiamo usare le manipolazioni specificatamente descritte sopra.
Prima di risolvere questo problema, è necessario simulare in che modo le nostre varie manipolazioni influenzeranno il contenuto della confezione, che è al centro di questa sfida.
Devi scrivere un programma che accetta due argomenti stdin
(o equivalenti):
- una stringa che descrive lo stato iniziale della scatola
- una sequenza di manipolazioni
Si può presumere che entrambi gli argomenti siano sintatticamente validi, che la casella inizi con l'orientamento standard e che lo stato iniziale della casella sia stabile e legale.
Il programma deve produrre stdout
(o equivalente):
( caso 1 ) lo stato finale della scatola, espresso come una stringa, se la sequenza di mosse è legale (non viola le regole delle mosse di stot) e non fa uscire alcun sorriso dalla scatola. L'orientamento finale del riquadro non è importante.
( caso 2 ) un singolo punto esclamativo
!
, se la sequenza di mosse è illegale o fa uscire eventuali smole dalla scatola
punteggio
Il programma vincente è il programma più breve per numero di byte , soggetto ad alcuni moltiplicatori di bonus estremamente redditizi:
richiedere un moltiplicatore di 0,65 se invece di stampare l'output codificato per il caso 1, il programma genera un'immagine ASCII della casella nel suo stato e orientamento finale, usando i caratteri di specifica per bolle, smole, stots e celle vuote e posizionando un
*
nella cella appena fuori dal buco nella cella 28. Lo spazio bianco iniziale e finale viene ignorato.Ad esempio, se la Figura 1 (a) viene ruotata di 90 °, l'uscita sarebbe
. . ..... .o... xo.@. *ooo.. x .
richiedere un moltiplicatore di 0,22 se invece di stampare l'output codificato per il caso 1, il programma genera un file di immagine o visualizza una finestra della GUI con un'immagine della casella nel suo stato e orientamento finali. L'immagine dovrebbe essere nello stile di Fig. 1 (a), che mostra le celle della griglia, i muri e le creature / lo stot usando caselle colorate.
rivendicare un moltiplicatore di 0,15 se invece di stampare un output codificato per il caso 1, il programma emette una finestra GIF animata o GUI animata che mostra tutti gli stati intermedi nella simulazione a intervalli di 1 secondo. Si applicano le stesse regole dell'immagine per il moltiplicatore 0,22. Il primo fotogramma dell'animazione dovrebbe rappresentare lo stato iniziale della simulazione. Inoltre, l'animazione dovrebbe mostrare stati intermedi "nascosti", che sono
le bolle / i sorrisi cadono in una configurazione stabile di una cella per fotogramma di animazione dopo una rotazione
lo stato intermedio della scatola ruotato di 90 ° con una rotazione di 180 °
rivendica un moltiplicatore di 0,12 se il programma produce una GIF animata o una finestra della GUI animata dello stile sopra, ma funziona a 20 fps e mostra
animazioni fluide e continue della scatola rotante
animazioni fluide e continue dello stot in movimento e delle bolle / smole che cadono in una configurazione stabile
Le bolle che cadono attraverso il foro nella cella 28 dovrebbero essere mostrate uscendo dalla scatola e dovrebbero scomparire una volta totalmente all'esterno. Puoi scegliere il tuo tempismo per l'animazione purché non venga eseguita più di 1 manipolazione / sec.
Il punteggio totale è floor( base score * multiplier )
. È possibile richiedere un solo moltiplicatore.
È un mondo tutto sommato dopo tutto. ;)