Bob the Bowman
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 |
###########################################################################################
Zadanie
Twoim zadaniem jest wyrenderowanie artystycznego obrazu ASCII, gdy Bob uderza lub nie trafia w cel. Do obliczeń:
- Twój program otrzyma
arrow_x,angle,velocity,distance
dane oddzielone przecinkami w dowolnej kolejności. - Jeden znak ASCII jest równy
1m
. - Pierwszy znak w ostatnim wierszu ma współrzędne
(0,0)
, więc podstawa (renderowana jako#
) znajduje się nay=0
. - Bob zawsze stoi na ziemi, jego
y
pozycja się nie zmienia. - Nie ma maks
y
. Jednak wierzchołek strzałek powinien mieścić się w renderowanym obrazie. - Wszystkie dane wejściowe są podawane jako liczba całkowita dziesiętna.
- Podczas obliczeń załóż, że strzałka jest punktem.
- Początek strzały to strzałka
>
strzelającego Boba (patrz wyżej). Biorąc to pod uwagęarrow_x
, musisz obliczyćarrow_y
. Lewa stopa Boba na wyjściu musi być zgodna zx
koordynacją. strzelającego Boba. distance
jestx
współrzędną stopy celu . (tj. środek celu).- Wszystkie pomiary są podawane odpowiednio w metrach i stopniach.
- Uwaga: Strzelający Bob nigdy nie jest renderowany, służy tylko do obliczeń! Zobacz poniżej dwa prawidłowe boby wyjściowe
- Uderzenie w cel oznacza, że ścieżka strzały przecina jedną z dwóch skrajnie lewych ścian celu (
|
) (To znaczy (odległość 1,3) lub (odległość 1,4). Jeśli w którymś momencie strzałka znajduje się w granicach 2 m2, umieść X zamiast ściany, w którą uderza, cel jest zawsze tej samej wysokości i tylko jego pozycja x może się zmienić.). Trafienia w narożnik lub strzała spadająca z nieba na cel nie liczą się. - Obowiązuje standardowa masa g (9,81 m / s ^ 2).
distance+1
jest końcem pola, potem wszystko jest chybione i żadna strzała nie powinna być renderowana.- Jeśli strzała trafi w cel w jakikolwiek inny sposób (
distance-1
itp.), Nie należy jej renderować.
Chybienie
Jest to przykład renderowania brakującego Boba (strzałka wchodzi w ziemię na 34 m, kąt wynosi 45 °, czas w powietrzu wynosi 10 s, prędkość wynosi ~ 50 - ale istnieje wiele innych możliwych danych wejściowych, które mogą spowodować takie wyjście. Po prostu pokaż, że twój program używa zwykłe wzory do obliczania wyników „dokładnych” fizycznie.):
+-+
| |
c\ | |
/( ) v +++
L L | |
###########################################################################################
Trafienie
To jest przykładowe renderowanie punktacji Boba (strzałka wchodzi w cel (= przecina jego ścieżkę)):
+-+
>--X |
\c/ | |
( ) +++
L L |
###########################################################################################
Przykład
arrow_x
wynosi 7.arrow_y
wynosi zawsze 3.angle
jest30°
lub0.523598776
radianami.velocity
jest13m/s
.distance
ma 20 lat
Aby trafić w cel, strzałka musi przejść (19,3)
lub (19,4)
. Wszystko inne będzie brakowało. W takim przypadku strzałka wejdzie w ziemię (znaczy, y
że będzie <1.0
) 12.9358m = ~13m
później 1.149s
.
Limity i wyniki
- To jest golf golfowy , więc wygrywa najkrótsze rozwiązanie. Nie ma bonusów.
- Twój program (jak nie działa ) musi akceptować dane wejściowe w formacie opisanym powyżej, dodatkowe dane nie są dozwolone.
- Nie musisz obsługiwać złych / bezcelowych / niemożliwych danych wejściowych.
- Drukuj na cokolwiek, co jest najkrótszym rozsądnym wyjściem dla twojego języka (standard, plik, ...).
- Nie dbam o końcowe spacje.
- Wskazówka: szerokość wyjściowa wynosi
distance+2
. Wysokość toapex+1
.
The left foot of Bob in the output has to match the x coord. of the shooting Bob.
iSee below for the two valid output-Bobs
Odpowiedzi:
Ruby, 482
Nie golfił
metoda
Główne równanie tutaj to:
Uwaga: zdjęcie pochodzi z https://en.wikipedia.org/wiki/Trajectory_of_a_projectile
Gdzie,
To, co robię, to przewijanie liczb od 0 do (odległość -1) i przy każdej iteracji sprawdzam, czy strzała uderza w ziemię (lub w cel)
źródło