Mit Pfeilen ins Knie getroffen zu werden, scheint momentan die Verletzung der Wahl zu sein . Als solches schlage ich die folgende Golfherausforderung vor.
Du hast einen Abenteurer, der so aussieht:
O
/|\
/ | \
|
|
/ \
/ \
Schreiben Sie in einer Textdatei, die einen Bogen (als }
Symbol gezeichnet ), eine Reihe von Wänden (als #
Symbole gezeichnet ) und einen Abenteurer enthält, den kleinsten Code, der den Winkel und die Anfangsgeschwindigkeit berechnet, mit der Sie einen Pfeil abfeuern müssen, um zu treffen ihn im Knie.
Es sei folgendes angenommen:
- Jedes Zeichen in der Datei ist 0,5 x 0,5 Meter groß.
- Der Pfeil wird von der Mitte des abgefeuert
}
, dh ein Versatz von0.25m, 0.25m
- Die Schwerkraft ist
10ms^-2
- Pfeil wiegt
0.1kg
- Pfeil ist ein Punkt, dh Kollisionen treten nur auf, wenn die Pfeilkoordinate in einen der Blöcke eintritt.
- Die maximale Anfangsgeschwindigkeit beträgt
50m/s
- Der Winkel kann zwischen 0 (gerade nach oben) und 180 (gerade nach unten) liegen.
- Wenn Sie einen Teil des Beines des Abenteurers treffen, wird dies als Knietreffer angesehen.
- Eine Wand (
#
Charakter) nimmt einen ganzen 0,5 mx 0,5 m großen Block ein. - Der Pfeil kann sich über die "Oberseite" der Datei bewegen, aber nichts hindert die Eingabe daran, mit einer Zeichenobergrenze zu beginnen
#
. - Sie können nicht Wände mit Pfeilen durchdringen.
- Das Schlagen eines anderen Teils des Abenteurers ist nicht erlaubt!
- Sie sollten einen Fehler anzeigen, wenn es nicht möglich ist, ihn im Knie zu treffen.
Beispiel Eingabe:
#
} O
# /|\
/ | \
# |
# |
/ \
/ \
Fühlen Sie sich frei, Fragen zu stellen, wenn Sie müssen :)
code-golf
path-finding
Polynom
quelle
quelle
#############
...Antworten:
Python, 599 Zeichen
Die
X(K,L)
Routine nimmt eine Parabel,K=(a,b,c)
die y = ax ^ 2 + bx + c darstellt, und ein Liniensegment,L=(a,b,c,d)
das das Segment zwischen (a, b) und (c, d) darstellt . Beide Hindernisse (O
) und das Ziel (T
) werden als Liniensegmente dargestellt. Alle Abstände sind um den Faktor 2 skaliert.Die Beispieleingabe gibt die folgende Flugbahn an (standardmäßig die Mindestgeschwindigkeit eins):
Sie können rückwärts fahren
R
, um den maximalen Geschwindigkeitspfad zu erhalten:quelle
8**5
64kB benötigen könnten)w=v+1
indem Sie die 3 Instanzen vonv+1
mit zuweisen und ersetzenw
. Ich codiere allerdings nicht viel Python, daher kann ich mich irren.