Ich scheine mich in eine Art Essiggurke verwickelt zu haben. Buchstäblich. Ich habe ein paar Gurken auf den Boden fallen lassen und jetzt sind sie alle verstreut! Du musst mir helfen, sie alle zu sammeln. Oh, habe ich schon erwähnt, dass ich ein paar Roboter zur Verfügung habe? (Sie sind auch alle überall verstreut; ich bin wirklich schlecht darin, Dinge zu organisieren.)
Sie müssen Eingaben in Form von:
P.......
..1..2..
.......P
........
P3PP...4
.......P
dh mehrzeiligen entweder ., P(Gurke) oder eine Ziffer (Roboter ID). (Sie können davon ausgehen, dass jede Zeile gleich lang und aufgefüllt ist ..) Sie können diese Zeilen als Array eingeben oder aus STDIN schlürfen oder eine durch Kommas getrennte einzelne Zeile einlesen oder eine Datei lesen oder alles tun, was Sie möchten nehme gerne die Eingabe.
Ihre Ausgabe muss in Form von nLinien erfolgen, wobei ndie höchste Roboter-ID angegeben ist. (Roboter-IDs beginnen immer ab 1.) Jede Zeile enthält den Pfad des Roboters, der aus den Buchstaben L(links), R(rechts), U(oben) und D(unten) besteht. Hier ist zum Beispiel eine Beispielausgabe für dieses Puzzle:
LLU
RDR
LRRR
D
Es kann auch sein
LLU RDR LRRR D
Oder
["LLU","RDR","LRRR","D"]
Oder ein beliebiges Format, solange Sie wissen, wie die Lösung aussehen soll.
Ihr Ziel ist es, die optimale Ausgabe zu finden, die die geringsten Schritte aufweist. Die Anzahl der Schritte wird als die größte Anzahl von Schritten aller Roboter gezählt. Zum Beispiel hatte das obige Beispiel 4 Schritte. Beachten Sie, dass es möglicherweise mehrere Lösungen gibt, Sie jedoch nur eine ausgeben müssen.
Wertung:
- Ihr Programm wird mit jedem der 5 (zufällig generierten) Testfälle ausgeführt.
- Sie müssen die Schritte aus jedem Lauf hinzufügen, und das ist Ihre Punktzahl.
- Die niedrigste kumulative Gesamtpunktzahl gewinnt.
- Sie können diese spezifischen Eingaben möglicherweise nicht fest codieren. Ihr Code sollte auch für andere Eingaben funktionieren.
- Roboter können sich gegenseitig passieren.
- Ihr Programm muss deterministisch sein, dh für jeden Lauf dieselbe Ausgabe. Sie können einen Zufallszahlengenerator verwenden, solange dieser gesetzt ist und plattformübergreifend dieselben Zahlen erzeugt.
- Ihr Code muss für jede Eingabe innerhalb von 3 Minuten ausgeführt werden. (Am liebsten viel weniger.)
- Bei einem Unentschieden gewinnen die meisten Upvotes.
Hier sind die Testfälle. Sie wurden zufällig mit einem kleinen Ruby-Skript generiert, das ich geschrieben habe.
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
Viel Glück und lass die Gurken nicht zu lange dort sitzen, sonst werden sie verderben!
Oh, und warum Gurken, fragst du?
Warum nicht?
