"Ich möchte zum Araby-Basar gehen, um ein Geschenk für das zu kaufen, in das ich mich verliebt habe. Wenn ich jedoch zu spät ankomme, werden alle Geschäfte geschlossen und ich kann nichts kaufen. Können Sie mir helfen? ich? "
Ziel: Bringen Sie den Jungen von der North Richmond Street nach Araby, bevor alle Geschäfte schließen.
Tatsächliches Ziel: Stellen Sie sicher, dass der Junge nicht vor Ladenschluss in Araby ankommt.
Ihr Programm nimmt Eingaben in folgendem Format auf:
<time> <map>
wo
<time>
Dies ist die maximale Zeit, die der Junge in Minuten auf Reisen verbringen kann. Es ist eine positive ganze Zahl.<map>
ist eine grafische Darstellung der Strecken, die der Zug fahren kann.
So funktioniert das Format für das Diagramm:
- Jede Anweisung wird mit einem Semikolon abgeschlossen.
- Knoten in der Karte (die Schalter darstellen) werden durch einzelne Kleinbuchstaben dargestellt.
- Ein Pfad zwischen Knoten wird mit der Syntax dargestellt
a,X,b
, wobeiX
eine Ganzzahl die Gewichtung des Pfads darstellt. Das Gewicht der Strecke ist die Zeit in Minuten, die der Zug benötigt, um diese beiden Knoten zu durchfahren. - Araby ist vertreten mit
a
und North Richmond Street ist vertreten mitn
. - Alle Pfade sind bidirektional.
Zum Beispiel dieses Diagramm (so tun, als wären die Pfade bidirektional):
Bild von Artyom Kalinin, über Wikimedia Commons. Wird unter der CC BY-SA 3.0- Lizenz verwendet.
würde in der graphischen Notation aufgezeichnet werden als:
a,4,b;a,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,f;
Beachten Sie, dass diese Eingabe kein hat n
und daher eine ungültige Eingabe ist. Ihr Programm kann bei einer ungültigen Eingabe alles Mögliche tun.
Hier ist eine Beispieleingabe:
21 n,4,b;n,2,c;b,5,c;b,10,d;c,3,e;e,4,d;d,11,a;
(Es ist nur die gleiche Grafik wie das obige Bild, a
ersetzt durch n
und f
ersetzt durch a
).
Der Junge muss Suche von n
bis a
innerhalb von 21 Minuten. Nimmt er die Route n
-> c
-> e
-> d
-> a
, gelangt er in 20 Minuten dorthin, was pünktlich ist. Wir könnten diese Route als durch Kommas getrennte Liste von Knoten darstellen:
n,c,e,d,a
Andererseits wird die Route n
-> b
-> c
-> e
-> d
-> a
den Jungen veranlassen, 27 Minuten zu dauern, was nicht rechtzeitig ist. Wir könnten diese Route so darstellen:
n,b,c,e,d,a
Eine andere mögliche Route, bei der der Junge es nicht rechtzeitig schafft, ist:
n,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,b,c,e,d,a
Ihr Programm sollte die Eingabe wie oben beschrieben aufnehmen und auf den ersten Blick eine Route ausgeben, die den Jungen veranlasst, es rechtzeitig zu schaffen, aber tatsächlich eine Route ausgibt, die den Jungen veranlasst, es nicht rechtzeitig zu schaffen. Für jede Eingabe gibt es immer eine Route ohne Zurückverfolgung, die den Jungen dazu veranlasst, es nicht rechtzeitig zu schaffen.
Dies ist ein unüberlegter Beliebtheitswettbewerb, bei dem der Teilnehmer mit den meisten Stimmen gewinnt. Stimmen werden für den Einfallsreichtum beim Verstecken des Bugs vergeben - je weniger offensichtlich, desto besser.
Hier sind einige Beispieldiagramme, mit denen Sie Ihr Programm testen können.
Eingang:
12 a,2,c;a,2,e;b,5,c;b,4,d;b,11,e;d,7,n;e,4,n;
Eine visuelle Darstellung (diese visuelle Darstellung dient nur der Klarheit und ist nicht Teil der Herausforderung):
Eine mögliche Ausgabe:
n,d,b,e,a
Eingang:
10 a,8,b;a,12,d;b,1,n;d,11,n;a,1,n;
Hier ist ein visuelles Bild des Graphen:
Eine mögliche Ausgabe:
n,d,a
Antworten:
Python 3 (nicht 2)
Edit: Ich werde dies morgen früh ungolf machen, oops.
Es ist eine ganz normale A-Star-Suche. Richtig? Riiiiiiight? Scheint für alle Testfälle zu funktionieren.
quelle