Calculez l'aire d'un polygone.
Inspiré par cette vidéo d'algorithme de lacet.
Tâche
Votre travail consiste à créer un programme ou une fonction qui calcule l'aire d'un polygone. Le programme ou la fonction est défini selon la définition par défaut de la méta.
Contribution
Vous recevrez les coordonnées X et Y de chaque sommet du polygone. Vous pouvez prendre l'entrée comme une liste de tuples ( [[x1, y1], [x2, y2], etc]
), une matrice ou une liste plate ( [x1, y1, x2, y2, etc]
). Deux listes contenant x
et y
coordonnées respectivement sont également autorisées. Les sommets sont numérotés dans le sens antihoraire et le premier sommet est le même que le dernier sommet fourni, fermant ainsi le polygone.
Si vous le souhaitez, vous pouvez prendre l'entrée sans le dernier sommet (donc ne recevoir chaque coordonnée qu'une seule fois).
Vous pouvez supposer que les bords des polygones ne se coupent pas. Vous pouvez également supposer que tous les sommets ont des coordonnées entières.
Production
L'aire du polygone. Toutes les méthodes de sortie standard sont autorisées. Si votre langue ne permet pas la division flottante et que la solution ne serait pas un entier, vous êtes autorisé à renvoyer une fraction. La fraction ne doit pas nécessairement être simplifiée, donc le retour 2/4
serait autorisé.
Critère gagnant
Le code le plus court gagne!
Cas de test
[[4,4],[0,1],[-2,5],[-6,0],[-1,-4],[5,-2],[4,4]]
55
[[1,1],[0,1],[1,0],[1,1]]
0.5
1/2
[x1, x2, x3], [y1, y2, y3]
autorisée?Réponses:
Gelée ,
86 octets-1 octet grâce à Emigna (redondant
€
,ÆḊ
a une profondeur à gauche de 2)-1 octet grâce à Emigna, encore une fois (diviser par deux,, la
H
virgule flottante n'est pas nécessaire÷2
)Un lien monadique prenant une liste de paires de coordonnées dans le sens antihoraire selon les exemples (avec une répétition) et retournant la zone.
Essayez-le en ligne!
Comment?
Applique l'algorithme du lacet, tel que décrit dans la vidéo (que j'ai également regardé l'autre jour!)
la source
[x,y]
coordonnées sont données dans le sens horaire plutôt que dans le sens antihoraire. Une entrée de[[1,1],[0,1],[1,0],[1,1]]
renverra a0.5
.H
au lieu de÷2
Mathematica, 13 octets
la source
Octave , 9 octets
Les entrées sont un vecteur avec les valeurs x et un vecteur avec les valeurs y . Cela fonctionne aussi dans MATLAB.
Essayez-le en ligne!
la source
JavaScript (ES6),
696747 octetsMerci à @Rick d'avoir remarqué que nous n'avons pas besoin de la valeur absolue si les sommets sont garantis pour être triés dans le sens antihoraire et d'avoir suggéré de prendre une liste plate en entrée, économisant 20 octets!
Prend l'entrée comme une liste plate de sommets, y compris le dernier sommet.
Essayez-le en ligne!
Comment?
la source
a=>(g=([x,y,...a])=>1-a?0:x*a[1]-y*a[0]+g(a))(a)/2
R,
5452 octetsQui évalue à la fonction:
Utilise le prédéfini
F = FALSE = 0
. Implémente l'algorithme de lacet dans la vidéo liée :)-2 octets grâce à Giuseppe
la source
i+-1:0
comme index de ligne+
aussi le;)Python 3 ,
7271 octetsPrend deux listes, comme cela a été autorisé dans les commentaires
Essayez-le en ligne!
Il s'agit essentiellement de la mise en œuvre de la formule du lacet . Puis-je obtenir des points positifs pour un golf que vous mettriez en œuvre comme ça? :RÉ
-1, il n'y a pas besoin d'espace derrière
x,y:
.la source
lambda x,y:
est bien.Mathématiques , 31 octets
Essayez-le en ligne!
Mathematica, 25 octets
la source
JS (ES6),
98959493888682817773 octetsPrend l'entrée comme
[x1, x2, x3], [y1, y2, y3]
et ignore la paire de coordonnées répétée.-3 octets grâce à @JarkoDubbeldam
-4 octets grâce à @JarkoDubbeldam
-1 octet grâce à @ZacharyT
-4 octets grâce à @ZacharyT
-4 octets grâce à @Rick
la source
J, 12 octets
En supposant que l'entrée est une liste de 2 listes d'éléments (c'est-à-dire un tableau)
2[\
- le décompose en lacet Xs, c'est-à-dire en carrés superposés de 4 ormes-/ .*
- le déterminant de chacun+/
- résume-:
- diviser par 2Si nous obtenons l'entrée comme une seule liste, nous devons d'abord nous transformer en table, en nous donnant 20 octets:
la source
MS-SQL, 66 octets
MS SQL 2008 et les versions supérieures prennent en charge les données / fonctions spatiales standard du Open Geospatial Consortium (OGC), dont je profite ici.
Les données d'entrée sont stockées dans le champ p du tableau g préexistant , selon nos normes d'entrée .
La saisie est un champ de texte avec des paires ordonnées au format suivant:
(4 4,0 1,-2 5,-6 0,-1 -4,5 -2,4 4)
Maintenant, juste pour le plaisir, si vous autorisez ma table d' entrée à contenir des objets de géométrie standard Open Geospatial Consortium (au lieu de simplement des données de texte), cela devient presque trivial:
la source
Haskell , 45 octets
Essayez-le en ligne!
la source
Perl 5
-pa
, 62 octetsEssayez-le en ligne!
Prend la saisie sous la forme d'une liste de coordonnées X sur la première ligne suivie d'une liste de coordonnées Y sur la seconde.
la source