introduction
Écrivez un programme ou une fonction qui, étant donné les coordonnées de l'endroit où une fléchette atterrit sur une cible, renvoie le score de cette cible. Les coordonnées des fléchettes sont données sous forme de deux nombres entiers, x,y
mesurés à partir du centre du jeu de fléchettes, avec une précision millimétrique.
Comment marquer une fléchette
Fléchettes est un jeu joué en lançant une fléchette sur un plateau circulaire. Le jeu de fléchettes est divisé en 20 "coins" de taille égale. En partant du haut et dans le sens horaire, les sections ont des valeurs de 20,1,18,4,13,6,10,15,2,17,3,19,7,16,8,11,14,9,12 , 5. Si votre fléchette atterrit dans les parties noires ou blanches de l'un des coins, vous marquez la valeur indiquée à l'extérieur de ce coin.
.
Cependant, si votre fléchette atterrit dans l'anneau extérieur vert / rouge du jeu de fléchettes, vous marquez le double des points indiqués à l'extérieur du coin que vous avez touché. De même, en frappant l'anneau intérieur vert / rouge (celui entre les deux sections blanches / noires), vous marquez le triple du nombre indiqué à l'extérieur du coin. Si votre fléchette frappe le cercle le plus à l'intérieur (l'oeil de boeuf rouge), vous marquez à la place 50 points et enfin, si votre fléchette frappe le deuxième cercle le plus à l'intérieur (l'anneau vert autour de l'oeil de boeuf), vous marquez 25 points.
Les dimensions des anneaux, mesurées à partir du centre du jeu de fléchettes, sont les suivantes:
Bullseye (50): [0mm-6mm)
25: [6mm-16mm)
Inner Single: [16mm-99mm)
Triple: [99mm-107mm)
Outer Single: [107mm-162mm)
Double: [162mm-170mm)
Miss (0): 170mm+
Remarque 1: les images fournies sont fournies à titre d'illustration uniquement et ne sont pas à l'échelle.
Remarque 2: les mesures fournies sont approximatives et peuvent ne pas être exactes pour un véritable jeu de fléchettes.
Note 3: Toutes les mesures données sont [inclusive-exclusive)
. Aux fins de ce défi, nous n'allons pas nous inquiéter des fléchettes frappant le fil et rebondissant. Si la fléchette atterrit "sur le fil" avec l'une des lignes radiales, il appartient au répondeur de décider de rompre le lien dans le sens horaire ou antihoraire. Le sens de rupture des liens doit être cohérent et indiqué.
Remarque 4: Le jeu de fléchettes est suspendu de manière standard, le milieu de la section 20 étant directement au-dessus de la bulle et la section 3 directement en dessous de la bulle.
Contribution
Deux entiers représentant les x,y
coordonnées de l'endroit où la fléchette a atterri, mesurées en millimètres, par rapport au centre de la cible.
Sortie
Un seul entier, pour le nombre de points qui seraient attribués à une fléchette qui a atterri aux coordonnées données.
Échantillon
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
Notation
code-golf . Le moins d'octets dans votre code source gagne.
-150,-1
et-150,0
qui devraient à la fois donner11
et peuvent être un cas de bord sur certaines implémentations, car il s'agit de la transition entre thêta convergeant vers -pi et thêta = + pi en coordonnées polaires. (Ma réponse initiale a échoué le 2e.)Réponses:
JavaScript (ES7), 137 octets
Prend les coordonnées dans la syntaxe de curry
(x)(y)
. Utilise le tie-break dans le sens antihoraire.Essayez-le en ligne!
Comment?
Sortie graphique
L'extrait de code ES6 suivant dessine le jeu de fléchettes en utilisant la même logique que dans le code golfé.
Afficher l'extrait de code
la source
JavaScript (ES6) + SVG (HTML5),
53 + 52351 +519507 =576570558 octetsL'entrée se fait via un clic de souris, la sortie via
alert
. Edit: enregistré 12 octets en utilisant des couleurs légèrement plus approximatives comme suggéré par @Arnauld.la source
b33
et474
pour le rouge et le vert. :-)b33
estbb3333
sib22
(akabb3322
) est plus proche de l' originalbe3628
.Assemblage Intel 8086/8087,
180144142138 octetsCelui-ci utilise le coprocesseur mathématique 8087 pour l'ensemble de l'arithmétique trigonométrique et virgule flottante. Tous les calculs sont effectués en matériel avec une précision à virgule flottante de 80 bits.
Écrit en tant que MACRO MASM (essentiellement une fonction), prend X et Y comme coordonnées et renvoie le score calculé dans AX. La cravate est brisée dans le sens des aiguilles d'une montre.
Un exemple de programme de test pour PC DOS. Téléchargez-le ici DARTTEST.COM .
Sortie
Exemple d'utilisation du programme de test ci-dessus . PC IBM réel avec 8087, DOSBox ou votre émulateur préféré requis.
* Modifications:
la source
Gelée , 56 octets
Un lien monadique acceptant la paire comme une liste
[x,y]
qui donne le score.Utilise le bris d'égalité dans le sens horaire.
Essayez-le en ligne! Ou consultez la suite de tests
NB une version dyadique fait aussi 56 octets
Comment?
la source
TI-Basic (TI-84 Plus CE),
147146octetsInvite X et Y sur des lignes distinctes.
Cravates dans le sens antihoraire.
TI-Basic est un langage à jetons ; tous les jetons utilisés ici sont d'un octet.
Explication:
Utilise le fait que les comparaisons booléennes TI-Basic retournent 0 ou 1 en les additionnant et en les multipliant par des valeurs en points.
la source
T-SQL,
392 374366 octetsLes sauts de ligne sont pour la lisibilité. L'initiale
UPDATE
s'occupe dux=y=0
problème qui, sinon, entraînerait une erreurATN2()
, mais ne change pas le score.L'entrée est prise via la table t préexistante , selon nos directives IO . En raison de l'utilisation
TOP 1
, ce tableau ne doit contenir qu'une seule ligne.Fondamentalement, je rejoins 3 tables:
ROUND()
, ce qui était légèrement plus court, mais cela a donné un bris d'égalité incohérent.)TOP 1
. La valeur f est soit un score fixe (pour un oeil de boeuf) ou un multiplicateur pour le score de coin.EDIT : Supprimé le
ORDER BY
, il semble fonctionner correctement sans lui, au moins sur SQL 2017. J'ai également supprimé laAND y=0
condition de mise à jour; J'ai testé toutes lesy
valeurs entières , en changeantx=0
pourx=1
ne jamais changer le score.EDIT 2 : Suppression de la colonne g du tableau d , remplacement de celle-ci par une
IIF()
instruction qui renvoie soitf
directement (pour un œil de boeuf), soitf*b
économise 8 octets. A également supprimé l'espace aprèsTOP 1
.la source
Haskell , 198 octets
Le lien se brise dans le sens antihoraire.
(#)
est une fonction de recherche. L'angle polaire est utilisé pour indexer à partir de la liste des nombres, en commençant auatan2
point de coupure à 11. La distance est utilisée pour indexer à partir de la liste des fonctions[const 50, const 25, id, (*3), id, (*2), const 0]
et enfin cette fonction est appliquée au nombre que nous avons précédemment obtenu.Essayez-le en ligne!
la source
Perl 5
-MMath::Trig':pi' -MMath::Trig':radial' -apl
, 166 octetsEssayez-le en ligne!
Prend l'espace des deux coordonnées séparées sur STDIN. Le bris d'égalité se fait dans le sens inverse des aiguilles d'une montre.
la source