Bob der Bogenschütze
o
/( )\ This is Bob.
L L Bob wants to be an archer.
#############
.
/ \ <--- bow So he bought himself a
(c -)-> <--- arrow nice longbow and is about
( )/ <--- highly focused Bob shoot at a target.
L L
#############
___________________________________________________________________________________________
sky
Bob is a smart guy. He already knows what angle and
velocity his arrow has / will have. But only YOU know
the distance to the target, so Bob doesn't know if he
will hit or miss. This is where you have to help him.
. +-+
/ \ | |
(c -)-> | |
( )/ +++
L L |
###########################################################################################
Aufgabe
Ihre Aufgabe ist es, ein ASCII-Kunstbild von Bob zu rendern, wie er das Ziel trifft oder verfehlt. Zur Berechnung:
- Ihr Programm erhält eine
arrow_x,angle,velocity,distance
durch Kommas getrennte Eingabe in beliebiger Reihenfolge. - Ein ASCII-Zeichen entspricht
1m
. - Das erste Zeichen in der letzten Zeile hat die Koordinaten
(0,0)
, so dass der Boden (gerendert als#
) an isty=0
. - Bob steht immer am Boden, seine
y
Position ändert sich nicht. - Es gibt keine max
y
. Die Spitze der Pfeile sollte jedoch in das gerenderte Bild passen. - Alle Eingaben erfolgen als Dezimalzahl.
- Nehmen Sie während der Berechnung an, dass der Pfeil ein Punkt ist.
- Der Pfeilursprung ist die Pfeilspitze
>
eines schießenden Bob (so). Alsoarrow_x
muss man rechnenarrow_y
. Der linke Fuß von Bob in der Ausgabe muss mit derx
Koordinate übereinstimmen . des Schießens Bob. distance
ist diex
Koordinate des Zielfußes . (dh die Mitte des Ziels).- Alle Maße werden in Metern bzw. Grad angegeben.
- Achtung: Der Shooter Bob wird nie gerendert, nur für Berechnungen verwendet! Siehe unten für die zwei gültigen Output-Bobs
|
Wenn Sie auf das Ziel treffen, kreuzen die Pfeile eine der beiden linken Zielwände ( ) (Das ist entweder (Abstand-1,3) oder (Abstand-1,4). Wenn sich der Pfeil irgendwann innerhalb dieser 2 m² befindet, platzieren Sie ihn das X anstelle der Wand, auf die es trifft. Das Ziel ist immer gleich hoch und nur seine x-Position kann sich ändern.). Eckentreffer oder ein vom Himmel auf das Ziel fallender Pfeil zählen nicht.- Es gilt die Norm Erde g (9,81 m / s ^ 2).
distance+1
ist das Ende des Feldes, danach ist alles ein Fehlschuss und es darf kein Pfeil mehr gerendert werden.- Wenn der Pfeil das Ziel auf andere Weise trifft (
distance-1
usw.), sollte kein Pfeil gerendert werden.
Fräulein
Dies ist ein Beispiel für eine fehlende Darstellung von Bob (Pfeil geht in 34 m Höhe in den Boden, Winkel ist 45 °, Zeit in Luft ist 10 s, Geschwindigkeit ist ~ 50 - aber es gibt viel mehr Eingabemöglichkeiten, um diese Ausgabe zu verursachen übliche Formeln zur Berechnung physikalisch "genauer" Ergebnisse.):
+-+
| |
c\ | |
/( ) v +++
L L | |
###########################################################################################
Schlagen
Dies ist ein Beispiel-Rendering der Bob-Wertung (Pfeil dringt in das Ziel ein (= kreuzt den Pfad)):
+-+
>--X |
\c/ | |
( ) +++
L L |
###########################################################################################
Beispiel
arrow_x
ist 7.arrow_y
ist immer 3.angle
ist30°
oder0.523598776
Bogenmaß.velocity
ist13m/s
.distance
ist 20.
Um das Ziel zu treffen, muss der Pfeil (19,3)
oder kreuzen (19,4)
. Alles andere wird ein Fehlschlag sein. In diesem Fall wird geben Sie den Pfeil , um den Boden (Mittel y
wird <1.0
) an 12.9358m = ~13m
nach 1.149s
.
Limits & Scoring
- Das ist Code-Golf , also gewinnt die kürzeste Lösung. Es gibt keine Boni.
- Ihr Programm (wie in Funktion nicht ) muss Eingaben im oben beschriebenen Format akzeptieren, zusätzliche Eingaben sind nicht zulässig.
- Sie müssen nicht mit falschen / sinnlosen / unmöglichen Eingaben umgehen.
- Drucken Sie mit der kürzesten Ausgabe, die für Ihre Sprache zumutbar ist (Standard, Datei, ...).
- Es ist mir egal, ob Leerzeichen nachgestellt werden.
- Tipp: Die Ausgabebreite beträgt
distance+2
. Die Höhe istapex+1
.
The left foot of Bob in the output has to match the x coord. of the shooting Bob.
undSee below for the two valid output-Bobs
Antworten:
Ruby, 482
Ungolfed
Methode
Die Hauptgleichung lautet hier:
Hinweis: Bild aus https://en.wikipedia.org/wiki/Trajectory_of_a_projectile
Wo,
Was ich tue, ist, durch Zahlen von 0 bis (Abstand -1) zu schleifen und in jeder Iteration zu überprüfen, ob der Pfeil den Boden (oder das Ziel) trifft
quelle