Einführung
Schreiben Sie ein Programm oder eine Funktion, die anhand der Koordinaten, in denen ein Pfeil auf einer Dartscheibe landet, die Punktzahl dieses Pfeils zurückgibt. Dartkoordinaten werden als zwei Ganzzahlen angegeben, x,y
die von der Mitte der Dartscheibe aus millimetergenau gemessen werden.
Wie man einen Pfeil schießt
Dart ist ein Spiel, bei dem ein Pfeil auf ein kreisförmiges Brett geworfen wird. Die Dartscheibe ist in 20 gleich große "Wedges" unterteilt. Ausgehend von oben und im Uhrzeigersinn haben die Abschnitte Werte von 20,1,18,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12 , 5. Wenn Ihr Pfeil in den schwarzen oder weißen Teilen eines der Keile landet, erhalten Sie den Wert, der auf der Außenseite dieses Keils angegeben ist.
.
Wenn Ihr Pfeil jedoch im äußeren grün / roten Ring der Dartscheibe landet, erhalten Sie doppelt so viele Punkte wie auf der Außenseite des von Ihnen getroffenen Keils angegeben. Wenn Sie auf den inneren grün / roten Ring (den Ring zwischen den beiden weiß / schwarzen Abschnitten) treffen, erhalten Sie die dreifache Punktzahl, die auf der Außenseite des Keils angegeben ist. Trifft Ihr Pfeil auf den innersten Kreis (das rote Bullauge), erhalten Sie stattdessen 50 Punkte. Trifft Ihr Pfeil auf den zweitinnersten Kreis (den grünen Ring um das Bullauge), erhalten Sie 25 Punkte.
Die Abmessungen der Ringe, gemessen von der Mitte der Dartscheibe, sind wie folgt:
Bullseye (50): [0mm-6mm)
25: [6mm-16mm)
Inner Single: [16mm-99mm)
Triple: [99mm-107mm)
Outer Single: [107mm-162mm)
Double: [162mm-170mm)
Miss (0): 170mm+
Hinweis 1: Die angegebenen Bilder dienen nur zu Illustrationszwecken und sind nicht maßstabsgetreu.
Hinweis 2: Die angegebenen Maße sind ungefähre Werte und können von einer echten Dartscheibe abweichen.
Anmerkung 3: Alle angegebenen Maße sind [inclusive-exclusive)
. Für die Zwecke dieser Herausforderung brauchen wir uns keine Sorgen zu machen, dass Pfeile den Draht treffen und abprallen. Wenn der Pfeil mit einer der radialen Linien "auf dem Draht" landet, muss der Antwortende entscheiden, ob die Verbindung im oder gegen den Uhrzeigersinn abgebrochen wird. Die Biegerichtung muss übereinstimmen und angegeben werden.
Anmerkung 4: Die Dartscheibe wird wie üblich aufgehängt, wobei die Mitte des Abschnitts 20 direkt über dem Bullseye und der Abschnitt 3 direkt unter dem Bullseye liegt.
Eingang
Zwei Ganzzahlen, die die x,y
Koordinaten der Landung des Pfeils in Millimetern relativ zur Mitte der Dartscheibe darstellen.
Ausgabe
Eine einzelne Ganzzahl für die Anzahl der Punkte, die für einen Pfeil vergeben werden, der an den angegebenen Koordinaten gelandet ist.
Probe
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
Wertung
Code-Golf . Die wenigsten Bytes in Ihrem Quellcode gewinnen.
-150,-1
und-150,0
die11
bei einigen Implementierungen sowohl einen Randfall ergeben als auch möglicherweise einen Randfall darstellen, da dies der Übergang zwischen Theta-Konvergenz zu -pi und Theta = + pi in Polarkoordinaten ist. (Meine erste Antwort schlug am 2. fehl.)Antworten:
JavaScript (ES7), 137 Byte
Übernimmt die Koordinaten in Currying-Syntax
(x)(y)
. Wird gegen den Uhrzeigersinn verwendet.Probieren Sie es online!
Wie?
Grafische Ausgabe
Das folgende ES6-Code-Snippet zeichnet die Dartscheibe nach der gleichen Logik wie im Golf-Code.
Code-Snippet anzeigen
quelle
JavaScript (ES6) + SVG (HTML5),
53 + 52351 +519507 =576570558 ByteDie Eingabe erfolgt per Mausklick, die Ausgabe per
alert
. Bearbeiten: 12 Bytes mit etwas mehr ungefähren Farben gespeichert, wie von @Arnauld vorgeschlagen.quelle
b33
und474
für Rot und Grün verwendest. :-)b33
dasbb3333
jab22
(akabb3322
) näher an deinem Original liegtbe3628
.Intel 8086/8087 Assembly,
180144142138 BytesDabei wird der 8087-Mathe-Coprozessor für alle Trigger- und Gleitkomma-Arithmetik verwendet. Alle Berechnungen werden in Hardware mit einer Gleitkomma-Genauigkeit von 80 Bit ausgeführt.
Geschrieben als MASM MACRO (im Grunde eine Funktion), nimmt X und Y als Koordinaten und gibt die berechnete Punktzahl in AX zurück. Die Krawatte ist im Uhrzeigersinn gebrochen.
Ein Beispiel-Testprogramm für PC-DOS. Laden Sie es hier herunter DARTTEST.COM .
Ausgabe
Anwendungsbeispiel des obigen Testprogramms . Tatsächlicher IBM PC mit 8087, DOSBox oder Ihrem Lieblingsemulator erforderlich.
* Bearbeitungen:
quelle
Jelly , 56 Bytes
Ein monadischer Link, der das Paar als Liste akzeptiert, aus der
[x,y]
die Punktzahl hervorgeht.Wird im Uhrzeigersinn zum Brechen verwendet.
Probieren Sie es online! Oder sehen Sie sich die Testsuite an
NB eine dyadische Version ist auch 56 Bytes
Wie?
quelle
TI-Basic (TI-84 Plus CE),
147 bis146 ByteFordert zur Eingabe von X und Y in separaten Zeilen auf.
Gleichstand gegen den Uhrzeigersinn.
TI-Basic ist eine Token-Sprache . Alle hier verwendeten Token sind ein Byte.
Erläuterung:
Nutzt die Tatsache, dass boolesche TI-Basic-Vergleiche 0 oder 1 zurückgeben, indem sie addiert und mit Punktwerten multipliziert werden.
quelle
T-SQL,
392 374366 BytesZeilenumbrüche dienen der Lesbarkeit. Die Initialisierung
UPDATE
kümmert sich um dasx=y=0
Problem, das andernfalls einen Fehler verursachen würdeATN2()
, ändert aber nicht die Punktzahl.Die Eingabe erfolgt über bereits vorhandene Tabelle entnommen t , gemäß unseren IO - Richtlinien . Aufgrund der Verwendung
TOP 1
sollte diese Tabelle nur eine einzelne Zeile enthalten.Grundsätzlich gehe ich zu 3 Tischen:
ROUND()
, was etwas kürzer war, aber es gab einen inkonsistenten Tie Breaker.)TOP 1
. Der Wert f ist entweder eine feste Punktzahl (für ein Volltreffer) oder ein Multiplikator für die Keilpunktzahl.BEARBEITEN : Fiel die
ORDER BY
, es scheint richtig zu funktionieren, zumindest in SQL 2017. Ich habe auchAND y=0
die Update-Bedingung fallen gelassen ; Ich habe auf alle ganzzahligeny
Werte getestet und die Punktzahl so geändert , dassx=0
sie sichx=1
nie ändert.BEARBEITEN 2 : Spalte g aus Tabelle d entfernt , durch eine
IIF()
Anweisung ersetzt, die entwederf
direkt (für ein Volltreffer) zurückgibt oderf*b
8 Byte gespeichert hat. Auch das Leerzeichen nach entferntTOP 1
.quelle
Haskell , 198 Bytes
Krawattenbruch gegen den Uhrzeigersinn.
(#)
ist eine Suchfunktion. Der Polarwinkel wird verwendet, um aus der Liste der Zahlen zu indexieren, beginnend mit dematan2
Grenzpunkt bei 11. Der Abstand wird verwendet, um aus der Liste der Funktionen zu indexieren,[const 50, const 25, id, (*3), id, (*2), const 0]
und zuletzt wird diese Funktion auf die zuvor erhaltene Zahl angewendet.Probieren Sie es online!
quelle
Perl 5
-MMath::Trig':pi' -MMath::Trig':radial' -apl
, 166 BytesProbieren Sie es online!
Nimmt den auf STDIN getrennten Raum mit zwei Koordinaten. Das Brechen erfolgt gegen den Uhrzeigersinn.
quelle