Mi sembra di essermi messo un po 'in agitazione. Letteralmente. Ho lasciato cadere un mucchio di sottaceti sul pavimento e ora sono tutti sparpagliati! Ho bisogno che tu mi aiuti a raccoglierli tutti. Oh, ho detto che ho un sacco di robot al mio comando? (Sono anche tutti sparsi dappertutto; sono davvero pessimo nell'organizzare le cose.)
È necessario prendere input sotto forma di:
P.......
..1..2..
.......P
........
P3PP...4
.......P
vale a dire, più righe di ., P(sottaceto) o una cifra (ID robot). (Si può presumere che ogni riga sia della stessa lunghezza, riempita con ..) È possibile inserire queste righe come un array, o bere da STDIN, oppure leggere in una riga separata da virgola, o leggere un file o fare qualunque cosa tu voglia piace prendere l'input.
L'output deve essere sotto forma di nlinee, dove nè l'ID robot più alto. (Gli ID robot saranno sempre sequenziali a partire da 1.) Ogni riga conterrà il percorso del robot, formato dalle lettere L(sinistra), R(destra), U(su) e D(giù). Ad esempio, ecco un esempio di output per quel puzzle:
LLU
RDR
LRRR
D
Può anche essere
LLU RDR LRRR D
O
["LLU","RDR","LRRR","D"]
O qualsiasi formato desideri, purché tu possa dire quale dovrebbe essere la soluzione.
Il tuo obiettivo è trovare l'output ottimale, che è quello che ha il minor numero di passaggi. La quantità di passaggi viene conteggiata come la più grande quantità di passaggi da tutti i robot. Ad esempio, l'esempio sopra aveva 4 passaggi. Nota che potrebbero esserci più soluzioni, ma devi solo produrne una.
punteggio:
- Il programma verrà eseguito con ciascuno dei 5 casi di test (generati casualmente).
- Devi aggiungere i passaggi di ciascuna corsa e quello sarà il tuo punteggio.
- Vincerà il punteggio cumulativo totale più basso.
- Non è possibile codificare per questi input specifici. Il tuo codice dovrebbe funzionare anche per qualsiasi altro input.
- I robot possono attraversarsi.
- Il programma deve essere deterministico, ovvero lo stesso output per ogni esecuzione. È possibile utilizzare un generatore di numeri casuali, purché sia seminato e produca costantemente gli stessi numeri multipiattaforma.
- Il codice deve essere eseguito entro 3 minuti per ciascuno degli input. (Preferibilmente molto meno.)
- In caso di pareggio, vincerà la maggior parte dei voti.
Ecco i casi di test. Sono stati generati casualmente con una piccola sceneggiatura di Ruby che ho scritto.
P.......1.
..........
P.....P...
..P.......
....P2....
...P.P....
.PP..P....
....P....P
PPPP....3.
.P..P.P..P
....P.....
P....1....
.P.....PP.
.PP....PP.
.2.P.P....
..P....P..
.P........
.....P.P..
P.....P...
.3.P.P....
..P..P..P.
..1....P.P
..........
.......2P.
...P....P3
.P...PP..P
.......P.P
..P..P..PP
..P.4P..P.
.......P..
..P...P...
.....P....
PPPP...P..
..P.......
...P......
.......P.1
.P..P....P
P2PP......
.P..P.....
..........
......PP.P
.P1..P.P..
......PP..
P..P....2.
.P.P3.....
....4..P..
.......PP.
..P5......
P.....P...
....PPP..P
Buona fortuna e non lasciare che i sottaceti rimangano lì troppo a lungo, altrimenti rovinano!
Oh, e perché i sottaceti, chiedi?
Perchè no?
