Einen Zug sabotieren, damit er zu spät kommt [geschlossen]


15

"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, wobei Xeine 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 aund North Richmond Street ist vertreten mit n.
  • Alle Pfade sind bidirektional.

Zum Beispiel dieses Diagramm (so tun, als wären die Pfade bidirektional):

Graph
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 nund 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, aersetzt durch nund fersetzt durch a).

Der Junge muss Suche von nbis ainnerhalb 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-> aden 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):

Eingang 1

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:

Eingang 2

Eine mögliche Ausgabe:

n,d,a

 


Können wir eine Funktion schreiben (anstelle eines eigenständigen Programms)?
Golfer9338

@ golfer9338 Ja. Ich hätte gerne ein Programm , wenn möglich bevorzugen, aber wenn der hinterhältige Teil darauf beruht , um eine Funktion ist dann eine Funktion erlaubt.
Absinth

Ich frage, weil ich vorhabe, dies in Javascript zu tun.
Golfer9338

3
Die eigentliche Frage ist, warum wir diesen verliebten Jungen nicht leiden wollen. Vielleicht hat er unsere Familie beleidigt? Haben wir selbst Entwürfe zum Gegenstand seiner Zuneigung? Wir müssen es wissen!
Claudiu

3
Ich stimme dafür, diese Frage als "Off-Topic" zu schließen, da "Underhanded Challenges" in diesem Sinne "Off-Topic" sind
Rohan Jhunjhunwala,

Antworten:


2

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.

def a(b,c,d):
    e,f,g=[],{},{}
    f[c]=0
    while f:
        h=sorted(f.keys(),key=lambda z:-f[z],reverse=True)[-1]
        if h==d:break
        e.append(h)
        for z in b[h]:
            if z in e:continue
            if z in f and f[z]>f[h]+b[z][h]:continue
            g[z]=h
            f[z]=f[h]+b[z][h]
        del f[h]
    i=[]
    j=d
    q=0
    while j!=c:
        i.append(j)
        q+=b[j][g[j]]
        j=g[j]
    return q,(i+[c])[::-1]
t,q=input().split(" ")
t=int(t)
q=q[:-1]
q=[i.split(",")for i in q.split(";")]
g={a:{}for a in __import__("functools").reduce(lambda zz,zy:zz+zy,[[v[0],v[2]]for v in q])}
for l in q:g[l[0]][l[2]]=g[l[2]][l[0]]=int(l[1])

r=a(g,'n','a')
print("time-good: %d, time-ours: %d" % (t, r[0]))
print("path: %s" % " -> ".join(r[1]))
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.