Wprowadzenie
Napisz program lub funkcję, która, biorąc pod uwagę współrzędne miejsca, w którym rzutka wyląduje na tarczy, zwraca wynik tej strzałki. Współrzędne strzałki są podawane jako dwie liczby całkowite, x,y
mierzone od środka tarczy do gry z dokładnością do milimetra.
Jak zdobyć rzutkę
Rzutki to gra polegająca na rzucaniu rzutką w okrąg. Rzutki jest podzielony na 20 równych rozmiarów „klinów”. Zaczynając od góry i idąc zgodnie z ruchem wskazówek zegara, sekcje mają wartości 20,1,18,4,13,6,10,15,2,17,3,19,7,16,8,11,4,4,12 , 5. Jeśli twoja strzałka wyląduje w czarnych lub białych częściach któregoś z klinów, uzyskasz wartość wskazaną na zewnątrz tego klina.
.
Jeśli jednak twoja strzałka wyląduje w zewnętrznym zielonym / czerwonym pierścieniu tarczy, zdobędziesz podwójną liczbę punktów wskazanych na zewnątrz klina, na który trafiłeś. Podobnie, uderzając w wewnętrzny zielony / czerwony pierścień (ten pomiędzy dwiema białymi / czarnymi sekcjami), zdobywasz trzykrotnie liczbę wskazaną na zewnętrznej stronie klina. Jeśli twoja strzałka trafi w najbardziej wewnętrzny krąg (czerwone oko byka), zamiast tego zdobędziesz 50 punktów i wreszcie, jeśli twoja strzałka trafi w drugie najbardziej wewnętrzne koło (zielony pierścień wokół tarczy), zdobędziesz 25 punktów.
Wymiary pierścieni, mierzone od środka tarczy do rzutek, są następujące:
Bullseye (50): [0mm-6mm)
25: [6mm-16mm)
Inner Single: [16mm-99mm)
Triple: [99mm-107mm)
Outer Single: [107mm-162mm)
Double: [162mm-170mm)
Miss (0): 170mm+
Uwaga 1: Dostarczone zdjęcia służą wyłącznie celom ilustracyjnym i nie są skalowane.
Uwaga 2: Podane pomiary są przybliżone i mogą nie być dokładne do prawdziwej tarczy do rzutek.
Uwaga 3: Wszystkie podane pomiary są [inclusive-exclusive)
. Na potrzeby tego wyzwania nie będziemy się martwić, że strzałki uderzą w drut i odskoczą. Jeśli rzutka wyląduje „na drucie” z jedną z linii promieniowych, to od osoby odpowiadającej decyduje, czy przerwać wiązanie zgodnie z ruchem wskazówek zegara, czy przeciwnie do ruchu wskazówek zegara. Kierunek zerwania musi być zgodny i wskazany.
Uwaga 4: Tarcza jest zawieszona w standardowy sposób, a środek 20 sekcji znajduje się bezpośrednio nad tarczą, a 3 sekcja bezpośrednio pod tarczą.
Wkład
Dwie liczby całkowite reprezentujące x,y
współrzędne miejsca lądowania strzałki, mierzone w milimetrach, w stosunku do środka tarczy.
Wydajność
Pojedyncza liczba całkowita dla liczby punktów, które zostałyby przyznane rzutce, która wylądowała na podanych współrzędnych.
Próba
0,0 -> 50
2,101 -> 60
-163,-1 -> 22
6,18 -> 1
-6,18 -> 5
45,-169 -> 0
22, 22 -> 4 (if tie-broken clock-wise)
18(if tie-broken counter-clockwise)
-150,0 -> 11
-150,-1 -> 11
Punktacja
golf-golf . Wygrywa najmniej bajtów w kodzie źródłowym.
-150,-1
a-150,0
które powinny dadzą11
i może być przypadek kant w niektórych przykładach wykonania, jak to jest przejście między theta konwergencję -PI theta = + PI w układzie współrzędnych biegunowych. (Moja pierwsza odpowiedź nie powiodła się w sprawie drugiej).Odpowiedzi:
JavaScript (ES7), 137 bajtów
Przyjmuje współrzędne w składni curry
(x)(y)
. Wykorzystuje remis przeciwny do ruchu wskazówek zegara.Wypróbuj online!
W jaki sposób?
Wyjście graficzne
Poniższy fragment kodu ES6 rysuje tarczę przy użyciu tej samej logiki, co w kodzie golfowym.
Pokaż fragment kodu
źródło
JavaScript (ES6) + SVG (HTML5),
53 + 52351 +519507 =576570558 bajtówWejście odbywa się poprzez kliknięcie myszą, wyjście przez
alert
. Edycja: Zapisano 12 bajtów, używając nieco więcej przybliżonych kolorów, jak sugeruje @Arnauld.źródło
b33
i474
za czerwony i zielony. :-)b33
jestbb3333
takb22
(akabb3322
) bliższy oryginałowibe3628
.Zespół Intel 8086/8087,
180144142138 bajtówWykorzystuje on koprocesor matematyczny 8087 dla całej arytmetyki triggera i zmiennoprzecinkowej. Wszystkie obliczenia są wykonywane sprzętowo z 80-bitową precyzją zmiennoprzecinkową.
Zapisany jako MASM MACRO (w zasadzie funkcja), przyjmuje X i Y jako współrzędne i zwraca obliczony wynik w AX. Remis jest zerwany zgodnie z ruchem wskazówek zegara.
Przykładowy program testowy dla PC DOS. Pobierz go tutaj DARTTEST.COM .
Wydajność
Przykładowe użycie powyższego programu testowego . Wymagany jest rzeczywisty komputer IBM z 8087, DOSBox lub ulubionym emulatorem.
* Edycje:
źródło
Galaretka , 56 bajtów
Monadyczny link akceptujący parę jako listę,
[x,y]
która daje wynik.Wykorzystuje rozbijanie remisów zgodnie z ruchem wskazówek zegara.
Wypróbuj online! Lub zobacz zestaw testowy
Uwaga: wersja dynamiczna ma również 56 bajtów
W jaki sposób?
źródło
TI-Basic (TI-84 Plus CE),
147146 bajtówMonituje o X i Y na osobnych liniach.
Łamanie remisów przeciwnie do ruchu wskazówek zegara.
TI-Basic to tokenizowany język ; wszystkie użyte tutaj tokeny są jednobajtowe.
Wyjaśnienie:
Wykorzystuje fakt, że porównania boolowskie TI-Basic zwracają 0 lub 1, dodając je i mnożąc przez wartości punktowe.
źródło
T-SQL,
392 374366 bajtówPodziały linii służą do czytelności. Początkowy
UPDATE
dba ox=y=0
problemie, który w przeciwnym razie byłoby wyrzucić błąd zATN2()
, ale nie zmienia wynik.Dane wejściowe są pobierane za pomocą istniejącej tabeli t , zgodnie z naszymi wytycznymi IO . Ze względu na użycie
TOP 1
ta tabela powinna zawierać tylko jeden wiersz.Zasadniczo dołączam do 3 tabel:
ROUND()
, który był nieco krótszy, ale dawał niespójny remis.)TOP 1
. Wartość f jest albo stałym wynikiem (dla tarczy), albo mnożnikiem dla wyniku klinowego.EDYCJA : Porzuciłem
ORDER BY
, wydaje się, że działa bez niego poprawnie, przynajmniej na SQL 2017. Upuściłem teżAND y=0
na warunek aktualizacji; Testowałem dla wszystkichy
wartości całkowitych , zmieniając się,x=0
abyx=1
nigdy nie zmieniać wyniku.EDYCJA 2 : Usunąłem kolumnę gz tabeli d , zastąpiłem ją
IIF()
instrukcją, która zwracaf
bezpośrednio (jak na oko) lubf*b
zapisała 8 bajtów. Usunięto również spację poTOP 1
.źródło
Haskell , 198 bajtów
Krawat pęka przeciwnie do ruchu wskazówek zegara.
(#)
jest funkcją wyszukiwania. Kąt biegunowy służy do indeksowania z listy liczb, zaczynając odatan2
punktu odcięcia od 11. Odległość służy do indeksowania z listy funkcji,[const 50, const 25, id, (*3), id, (*2), const 0]
a na koniec funkcja ta jest stosowana do liczby, którą poprzednio otrzymaliśmy.Wypróbuj online!
źródło
Perl 5
-MMath::Trig':pi' -MMath::Trig':radial' -apl
, 166 bajtówWypróbuj online!
Zajmuje przestrzeń dwóch współrzędnych oddzieloną na STDIN. Łamanie krawatów odbywa się w lewo.
źródło