Você recebe uma matriz / lista / vetor de pares de números inteiros representando coordenadas cartesianas de pontos em um plano euclidiano 2D; todas as coordenadas estão entre e , duplicatas são permitidas. Encontre a área do casco convexo desses pontos, arredondada para o número inteiro mais próximo; um ponto médio exato deve ser arredondado para o número par mais próximo. Você pode usar números de ponto flutuante em cálculos intermediários, mas apenas se puder garantir que o resultado final estará sempre correto. Isso é código-golfe , então o programa correto mais curto vence.
O casco convexo de um conjunto de pontos de é o mais pequeno conjunto convexo que contém . No plano euclidiano, para qualquer ponto único , é o próprio ponto; para dois pontos distintos, é a linha que os contém; para três pontos não colineares, é o triângulo que eles formam, e assim por diante.
Uma boa explicação visual do casco convexo é melhor descrita como imaginando todos os pontos como pregos em uma placa de madeira e esticando um elástico ao redor deles para incluir todos os pontos:
Alguns casos de teste:
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]]
Respostas:
SQL Server 2012 ou superior, 84 bytes
Faz uso das funções de geometria e agrega no SQL Server. As coordenadas são da tabela
A
com colunasx
ey
.fonte
Java 10,
405... não cabia mais; consulte o histórico de edições ..317316 bytes-52 bytes graças a @ OlivierGrégoire
-3 bytes graças a @PeterTaylor
-7 bytes graças a @ceilingcat
Experimente online.
Ou 299 bytes sem arredondamento .. .
Explicação:
Há três etapas a serem seguidas:
Para calcular as coordenadas que fazem parte do casco convexo, usamos a seguinte abordagem:
Quanto ao código:
fonte
Wolfram Language (Mathematica) , 27 bytes
Experimente online!
fonte
JavaScript (ES6),
191189 bytesImplementa a marcha Jarvis (também conhecido como algoritmo de embrulho de presente).
Experimente online!
Ou 170 bytes sem o complicado esquema de arredondamento.
fonte
R ,
858178 bytesExperimente online!
Recebe entrada como uma matriz de 2 colunas - primeiro para
x
, segundo paray
. Os R'sround
realmente usam o método de arredondamento dos banqueiros, por isso temos muita sorte aqui.Obrigado a Giuseppe por -3 bytes.
fonte
[Pacote R + sp], 55 bytes
Experimente no RDRR
Uma função que pega a matriz ans 2 e retorna a área arredondada. Isso usa o
sp
pacote. Odrop=F
é necessário para lidar com o caso de uma coordenada. O RDRR usado para demonstração, pois o TIO não possui osp
pacote.fonte