Sie erhalten ein Array / eine Liste / einen Vektor von Ganzzahlpaaren, die kartesische Koordinaten von Punkten auf einer euklidischen 2D-Ebene darstellen. Alle Koordinaten liegen zwischen und , Duplikate sind zulässig. Finden Sie den Bereich der konvexen Hülle dieser Punkte, gerundet auf die nächste ganze Zahl; Ein exakter Mittelpunkt sollte auf die nächste gerade ganze Zahl gerundet werden. Sie können Gleitkommazahlen in Zwischenberechnungen verwenden, aber nur, wenn Sie garantieren können, dass das Endergebnis immer korrekt ist. Dies ist Code-Golf , also gewinnt das kürzeste richtige Programm.
Die konvexe Hülle einer Menge von Punkten ist die kleinste konvexe Menge, die enthält . Auf der euklidischen Ebene ist es für jeden einzelnen Punkt der Punkt selbst; für zwei verschiedene Punkte ist es die Linie, die sie enthält, für drei nicht kollineare Punkte ist es das Dreieck, das sie bilden, und so weiter.
Eine gute visuelle Erklärung dafür, was eine konvexe Hülle ist, lässt sich am besten beschreiben, indem man sich alle Punkte als Nägel in einem Holzbrett vorstellt und dann ein Gummiband um sie spannt, um alle Punkte einzuschließen:
Einige Testfälle:
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]]
Antworten:
SQL Server 2012+, 84 Byte
Verwendet die Geometriefunktionen und -aggregate in SQL Server. Die Koordinaten stammen aus einer Tabelle
A
mit Spaltenx
undy
.quelle
Java 10,
405... passte nicht mehr; Siehe Bearbeitungsverlauf.317316 Bytes-52 Bytes dank @ OlivierGrégoire
-3 Bytes dank @PeterTaylor
-7 Bytes dank @ceilingcat
Probieren Sie es online aus.
Oder 299 Bytes ohne Rundung .
Erläuterung:
Es gibt drei Schritte:
Um die Koordinaten zu berechnen, die Teil des konvexen Rumpfs sind, verwenden wir den folgenden Ansatz:
Wie für den Code:
quelle
Wolfram Language (Mathematica) , 27 Bytes
Probieren Sie es online aus!
quelle
JavaScript (ES6),
191189 BytesImplementiert den Jarvis-Marsch (auch bekannt als Geschenkverpackungsalgorithmus).
Probieren Sie es online aus!
Oder 170 Bytes ohne das umständliche Rundungsschema.
quelle
R ,
858178 BytesProbieren Sie es online aus!
Nimmt die Eingabe als 2-Spalten-Matrix auf - erstens für
x
, zweitens füry
. R verwendetround
tatsächlich die Rundungsmethode des Bankiers, daher haben wir hier ziemlich viel Glück.Danke an Giuseppe für -3 Bytes.
quelle
[R + sp-Paket], 55 Bytes
Probieren Sie es bei RDRR
Eine Funktion, die die anx 2-Matrix verwendet und den gerundeten Bereich zurückgibt. Dies verwendet das
sp
Paket. Dasdrop=F
wird benötigt, um den einen Koordinatenfall zu behandeln. RDRR wird für die Demo verwendet, da TIO dassp
Paket fehlt .quelle