introduzione
Sisifo stava avendo dei problemi al lavoro ultimamente. Sembra che non riesca mai a fare nulla e gli piacerebbe trovare una soluzione a questo problema.
Il suo attuale impiego richiede di far rotolare una roccia su una collina. Di solito fa bene il suo lavoro, ma ogni volta che si trova vicino alla cima della collina rotola di nuovo giù.
Si sta davvero frustrando per il suo lavoro e vuole risolvere scientificamente il problema facendo simulare al computer un rock che rotola giù per la collina.
Accade così che Sisifo non sia particolarmente bravo a programmare, quindi forse puoi aiutarlo?
La sfida
Dopo questa stupida introduzione, veniamo al mondo degli affari. Il tuo programma riceverà un'illustrazione della collina e della roccia simile a questa:
#o
##
###
######
########
Dove #rappresenta una parte della collina e orappresenta la roccia.
Ora devi implementare un programma che sposta lo strato rock 1 verso il basso. Ad esempio, l'output di quanto sopra dovrebbe essere:
#
##o
###
######
########
Se c'è un'area uniformemente orizzontale, la collina rotola solo orizzontalmente, quindi ...
o
########
... questo farebbe solo rotolare lateralmente la pietra.
o
########
Se c'è un'area verticale, la roccia cade di un gradino, quindi ...
#o
#
#
#####
... cederebbe ...
#
#o
#
#####
Riceverai anche la larghezza e l'altezza dell'immagine rispettivamente in una riga sopra l'immagine. Quindi, in totale, il nostro input di esempio sarebbe simile al seguente:
10 5
#o
##
###
######
#########
(Nota che gli spazi bianchi qui sono spazi. Seleziona il testo e vedi cosa intendo.)
Alcuni dettagli
- Quando il rock è già nell'ultima riga durante l'esecuzione del programma, è possibile scegliere di terminare il programma o emettere l'input invariato
- La collina scende sempre e solo verso il basso
Il tuo programma dovrebbe formattare l'output esattamente come l'input (comprese le dimensioni), quindi se installi l'output del programma su se stesso, calcola il passaggio successivo.
Si può presumere che ci sia sempre una strada verso il fondo, quindi l'input in cui il percorso è "bloccato" può causare un comportamento indefinito
Puoi presumere che ci sia sempre uno spazio nell'ultima riga. Il rock dovrebbe "riposare" lì, quindi dopo aver richiamato il programma alcune volte, convogliando sempre il suo output su se stesso, dovresti finire con il rock nell'ultima riga, posizionando dove era lo spazio in precedenza.
Puoi accettare l'input in qualsiasi forma ti piaccia (stdin, file, ...). Devi pubblicare il programma INTERO (quindi tutte le variabili pre-inizializzate contano come codice).
Le linee sono terminate con
\n.Puoi ottenere alcuni input di esempio qui (assicurati di copiare correttamente gli spazi!)
Questo è code-golf , quindi vince l'invio funzionante con il minor numero di byte .
Il vincitore verrà scelto il 26 luglio 2014. Successivamente puoi pubblicare soluzioni, ma non puoi vincere
Se avete domande, fatemi sapere nei commenti.
Buon golf!
#s, quindi alla fine c'è uno spazio perché la larghezza è 10. In questo caso (dopo alcune iterazioni) la roccia giaceva dove si trova lo spazio bianco (quindi in fondo -angolo destro).
