Uderzenie strzałą w kolano wydaje się być teraz zranieniem z wyboru . Jako taki, proponuję następujące wyzwanie golfowe.
Masz poszukiwacza przygód, który wygląda tak:
O
/|\
/ | \
|
|
/ \
/ \
Biorąc pod uwagę plik tekstowy zawierający jeden łuk (narysowany jako }
symbol), zestaw ścian (narysowany jako #
symbole) i jednego poszukiwacza przygód, napisz najmniejszy kod, który oblicza kąt i prędkość początkową, z jaką powinieneś wystrzelić strzałę, aby trafić go w kolanie.
Załóż, że:
- Każdy znak w pliku ma 0,5 x 0,5 metra.
- Strzała jest wystrzeliwana ze środka
}
, tj. Z przesunięcia o0.25m, 0.25m
- Grawitacja jest
10ms^-2
- Strzała waży
0.1kg
- Strzałka jest punktem, tzn. Kolizje występują tylko wtedy, gdy współrzędna strzałki wchodzi w jeden z bloków.
- Maksymalna prędkość początkowa wynosi
50m/s
- Kąt może wynosić od 0 (prosto w górę) do 180 (prosto w dół)
- Uderzenie w dowolną część nogi poszukiwacza przygód jest uważane za uderzenie w kolano.
- Ściana (
#
postać) zajmuje jeden cały blok 0,5 mx 0,5 m. - Strzałka może przemieszczać się nad „górą” pliku, ale nic nie stoi na przeszkodzie, aby wejście zaczynało się od górnego pułapu
#
znaków. - Nie możesz przebić ścian strzałami.
- Trafienie w inną część poszukiwacza przygód jest niedozwolone!
- Powinieneś wyświetlić błąd, jeśli uderzenie go w kolano jest niemożliwe.
Przykładowe dane wejściowe:
#
} O
# /|\
/ | \
# |
# |
/ \
/ \
Jeśli chcesz, możesz zadawać pytania :)
code-golf
path-finding
Wielomian
źródło
źródło
#############
...Odpowiedzi:
Python, 599 znaków
Procedura
X(K,L)
przyjmuje parabolęK=(a,b,c)
reprezentującą y = ax ^ 2 + bx + c i odcinek liniiL=(a,b,c,d)
reprezentujący odcinek między (a, b) i (c, d) . Zarówno przeszkody (O
), jak i cel (T
) są powtarzane jako segmenty linii. Wszystkie odległości są skalowane 2-krotnie.Przykładowe dane wejściowe przedstawiają następującą trajektorię (domyślnie minimalną prędkość):
możesz odwrócić,
R
aby uzyskać ścieżkę maksymalnej prędkości:źródło
8**5
aby uzyskać 64kB)w=v+1
i zastępując 3 wystąpieńv+1
zw
. Jednak nie koduję dużo Pythona, więc mogę się mylić.