On vous donne un tableau / liste / vecteur de paires d'entiers représentant les coordonnées cartésiennes de points sur un plan euclidien 2D; toutes les coordonnées sont comprises entre et , les doublons sont autorisés. Trouvez l'aire de la coque convexe de ces points, arrondie à l'entier le plus proche; un point médian exact doit être arrondi à l'entier pair le plus proche. Vous pouvez utiliser des nombres à virgule flottante dans les calculs intermédiaires, mais uniquement si vous pouvez garantir que le résultat final sera toujours correct. Il s'agit de code-golf , donc le programme correct le plus court l'emporte.
L' enveloppe convexe d'un ensemble de points est l'ensemble convexe le plus petit qui contient . Sur le plan euclidien, pour tout point unique , c'est le point lui-même; pour deux points distincts, c'est la ligne qui les contient, pour trois points non colinéaires, c'est le triangle qu'ils forment, etc.
Une bonne explication visuelle de ce qu'est une coque convexe est décrite comme imaginant tous les points comme des clous dans une planche de bois, puis en étirant une bande de caoutchouc autour d'eux pour enfermer tous les points:
Quelques cas de test:
Input: [[50, -13]]
Result: 0
Input: [[-25, -26], [34, -27]]
Result: 0
Input: [[-6, -14], [-48, -45], [21, 25]]
Result: 400
Input: [[4, 30], [5, 37], [-18, 49], [-9, -2]]
Result: 562
Input: [[0, 16], [24, 18], [-43, 36], [39, -29], [3, -38]]
Result: 2978
Input: [[19, -19], [15, 5], [-16, -41], [6, -25], [-42, 1], [12, 19]]
Result: 2118
Input: [[-23, 13], [-13, 13], [-6, -7], [22, 41], [-26, 50], [12, -12], [-23, -7]]
Result: 2307
Input: [[31, -19], [-41, -41], [25, 34], [29, -1], [42, -42], [-34, 32], [19, 33], [40, 39]]
Result: 6037
Input: [[47, 1], [-22, 24], [36, 38], [-17, 4], [41, -3], [-13, 15], [-36, -40], [-13, 35], [-25, 22]]
Result: 3908
Input: [[29, -19], [18, 9], [30, -46], [15, 20], [24, -4], [5, 19], [-44, 4], [-20, -8], [-16, 34], [17, -36]]
Result: 2905
[[0, 0], [1, 1], [0, 1]]
devrait vraiment donner plutôt que . 0Réponses:
SQL Server 2012+, 84 octets
Utilise les fonctions de géométrie et les agrégats dans SQL Server. Les coordonnées proviennent du tableau
A
avec les colonnesx
ety
.la source
Java 10,
405... ne correspondait plus; voir l'historique des modifications ..317316 octets-52 octets grâce à @ OlivierGrégoire
-3 octets grâce à @PeterTaylor
-7 octets grâce à @ceilingcat
Essayez-le en ligne.
Ou 299 octets sans arrondi .. .
Explication:
Il y a trois étapes à faire:
Pour calculer les coordonnées qui font partie de la coque convexe, nous utilisons l'approche suivante:
Réglez le point et sur la coordonnée la plus à gauche. Calculez ensuite le point dans une rotation dans le sens antihoraire; et continuez ainsi jusqu'à ce que nous soyons revenus au point initial . Voici un visuel pour cela:l p p l
Quant au code:
la source
Wolfram Language (Mathematica) , 27 octets
Essayez-le en ligne!
la source
JavaScript (ES6),
191189 octetsImplémente la marche Jarvis (alias algorithme d'emballage cadeau).
Essayez-le en ligne!
Ou 170 octets sans le schéma d'arrondi encombrant.
la source
R ,
858178 octetsEssayez-le en ligne!
Prend l'entrée comme une matrice à 2 colonnes - d'abord pour
x
, deuxième poury
. Rround
utilise en fait la méthode d'arrondi des banquiers, nous avons donc beaucoup de chance ici.Merci à Giuseppe pour -3 octets.
la source
[Package R + sp], 55 octets
Essayez-le au RDRR
Une fonction qui prend une matrice anx 2 et renvoie la zone arrondie. Cela utilise le
sp
package. Ledrop=F
est nécessaire pour gérer le cas à une coordonnée. RDRR utilisé pour la démonstration car TIO n'a pas lesp
package.la source