W tym kodzie w golfa, trzeba będzie określić kierunek najkrótszym strzale, która uderza dokładnie n poduszki przed wpadnięciem do kieszeni.
Stół bilardowy to 6-kieszeniowy stół bilardowy o następujących cechach:
- Wymiary są zmienne ( a x b )
- Bez tarcia: piłka będzie toczyła się wiecznie, aż wpadnie do kieszeni
- Rozmiary kieszeni i kulek są prawie zerowe. Oznacza to, że piłka wpadnie do kieszeni tylko wtedy, gdy będzie miała tę samą pozycję.
- Piłka jest umieszczana w lewym dolnym otworze na początku (ale nie wpada w nią)
Utwórz pełny program lub funkcję, która przyjmuje wymiary ( a , b ) tabeli i liczbę poduszek, które należy uderzyć n jako dane wejściowe, i zwraca kąt w stopniach najkrótszej ścieżki uderzając dokładnie n poduszek przed wpadnięciem do kieszeni.
- a > 0
- b > 0
- 0 <= n <10000000
- Dokładność 0 < alfa <90 (w stopniach): co najmniej 10 ^ -6
przykłady:
przy a = 2, b = 1, n = 1 istnieją trzy możliwe ścieżki: (1) (2) (3) na poniższym rysunku. liczba (1) jest najkrótsza, więc wyjście powinno wynosić atan (2) = 63,43494882292201 stopni
Rozwiązaniem dla a = 2, b = 1, n = 4 jest atan (4/3) = 53,133010235415598 stopni
próbki testowe:
a = 2, b = 1, n = 1, -> alpha = 63.43494882292201
a = 2, b = 1, n = 2, -> alpha = 71.56505117707799
a = 2, b = 1, n = 3, -> alpha = 75.96375653207353
a = 2, b = 1, n = 4, -> alpha = 53.13010235415598
a = 2, b = 1, n = 5, -> alpha = 59.03624346792648
a = 2, b = 1, n = 6, -> alpha = 81.86989764584403
a = 4.76, b = 3.64, n = 27, -> alpha = 48.503531644784466
a = 2, b = 1, n = 6, -> alpha = 81.86989764584403
a = 8, b = 3, n = 33, -> alpha = 73.24425107080101
a = 43, b = 21, n = 10005, -> alpha = 63.97789961246943
To jest golf kodowy / bilardowy: wygrywa najkrótszy kod!
n
poduszki, a przynajmniej wn
poduszki?Odpowiedzi:
Python 2.7,
352344281 bajtówObjaśnienie: zamiast obliczać trafienia poduszek, dodaję n tabel i biorę nowe dziury za prawidłowe: czarna ramka / dziury jest oryginalna, zielona ramka / dziury jest ważna dla n = 1, czerwona ramka / dziury jest ważna dla n = 2 i tak dalej. Następnie usuwam nieprawidłowe otwory (np. Niebieska strzałka dla n = 1). Będę miał listę prawidłowych otworów i ich współrzędnych, następnie obliczę ich odległość od punktu początkowego, a następnie kąt mniejszej odległości.
Uwagi:
a = 4,76, b = 3,64, n = 27 - podaj 52,66286, próbując dowiedzieć się, dlaczegonaprawiono i zapisano 8 bajtów w procesie = Da = 43, b = 21, n = 10005 - zajmuje ~ 80 sekund ( ale daje odpowiedni kąt)
czytelna wersja:
źródło
: degrees
b < a
. Można to łatwo naprawić, uzyskując minimum / maksimuma
ib
chociaż.Haskell,
133117 bajtówTo jest moja realizacja:
Przy stole 2x1 ścieżka trafi dokładnie n poduszek przed wejściem do kieszeni, jeśli: (x-1) / 2 + (y-1) == n i x, y są liczbami pierwszymi. gdzie x, y to odległość piłki nad osiami poziomymi / pionowymi.
Ścieżki są takie same z dowolnym rozmiarem tabeli, więc musimy tylko zaktualizować długości i kąty za pomocą (a, b) i zachować najkrótsze. Długość ścieżki to sqrt ((x * a / 2) ^ 2 + (y * b) ^ 2), a kąt to atan ((y * b) / (x * a / 2))
źródło