O desafio
Dada uma quantidade arbitrária de retângulos, produza a contagem total de interseções daquelas quando desenhadas em um plano 2D.
Uma interseção aqui é definida como um ponto P
que é cruzado por duas linhas que são ortogonais entre si e que não terminam em P
.
Exemplo
Cada retângulo aqui é indicado por uma tupla de 2 com as coordenadas do canto superior esquerdo primeiro e as coordenadas do canto inferior direito em segundo.
[(-8,6), (- 4, -2)] [(-4,9), (4,3)] [(2,10), (14,4)] [(1,7), (10, -6)] [(7,4), (10,2)] [(5,2), (9, -4)] [(-6, -4), (- 2, -6)]
Esses retângulos criam 6 interseções, que devem ser sua saída.
- Como você pode ver na imagem acima, tocar em retângulos não criará interseções aqui e não será contado.
- Você pode codificar os retângulos em qualquer formato que desejar. Deixe claro qual formato você usa.
- Se vários retângulos se cruzam no mesmo ponto, isso conta apenas como uma interseção.
- As coordenadas serão sempre números inteiros.
- Não haverá retângulos duplicados na entrada.
- Você sempre terá pelo menos um retângulo como entrada.
- Você não pode usar nenhum componente interno que resolva esse problema diretamente. Além disso, você não pode usar os componentes internos que resolvem equações. Todos os outros builtins são permitidos.
- A saída deve ser um único inteiro indicando a contagem de interseções.
Regras
- Função ou programa completo permitido.
- Regras padrão para entrada / saída.
- Aplicam-se brechas padrão .
- Isso é código-golfe , e a menor contagem de bytes vence. O desempate é uma submissão anterior.
Casos de teste
Mesmo formato que no exemplo acima. Os retângulos são agrupados em uma lista.
[[(-8,6), (- 4, -2)], [(- 4,9), (4,3)], [(2,10), (14,4)], [(1 , 7), (10, -6)], [(7,4), (10,2)], [(5,2), (9, -4)], [(- 6, -4), (-2, -6)]] -> 6 [[(-2,2), (6, -4)]] -> 0 [[(-12,10), (- 8,6)], [(- 14,6), (- 10,2)], [(- 10,6), (- 6,2)]] - > 0 [[(-4,10), (6,2)], [(- 2,8), (4,3)], [(1,6), (8,4)], [(2,11 ), (5,5)]] -> 10 [[(8,2), (12, -2)], [(10,0), (14, -4)]] -> 2 [[(0,2), (2,0)], [(0,1), (3,0)]] -> 1 [[(-10, -2), (- 6, -6)], [(- 6, -2), (- 2, -6)], [(- 8, -4), (- 4, -8)]] -> 3
Feliz codificação!
[[(0,0),(1,2)],[(0,0),(2,1)]]
teria 1 interseção?Respostas:
JavaScript (ES6), 186 bytes
Divide cada retângulo em suas linhas de componentes e intercepta as linhas horizontais e verticais, criando uma lista de interseções para evitar duplicatas.
fonte
[[-4,10,6,2],[-2,8,4,3],[1,6,8,4],[2,11,5,5]]
. Como o JavaScript não possui tuplas, se você tentasse usar seus exemplos literalmente, teria acionado o operador de vírgula, invalidando a entrada.Mathematica 138 bytes
Não finalizado! Isso funciona para todos os casos, exceto
[[(0,0),(1,2)],[(0,0),(2,1)]]
Exemplo
fonte