Dadas as coordenadas dos cantos superiores esquerdo de dois quadrados e seus comprimentos laterais, determine se os quadrados se sobrepõem. Um quadrado inclui as linhas superior e esquerda, mas não as linhas inferior e direita. Ou seja, um ponto (a,b)
está dentro de um quadrado com comprimento lateral k
que começa em (x,y)
se e somente se x <= a < x+k
e y <= b < y+k
. Um quadrado com comprimento lateral 0 é degenerado e não será considerado aqui, portanto, k
será positivo.
Como sempre, todas as regras padrão se aplicam. A entrada e a saída podem estar em qualquer forma que seja conveniente, desde que seja legível por humanos e não haja pré-computação. Certifique-se de especificar qual formato de entrada você usa. Seu código deve receber seis números e produzir verdade se os quadrados se sobrepuserem e falsificarem o contrário.
Casos de teste
x1 y1 k1 x2 y2 k2 overlap?
1 1 1 0 1 1 false
0 0 3 1 1 1 true
1 1 1 0 0 3 true
0 0 3 2 1 2 true
0 0 2 1 1 2 true
1 1 2 0 0 2 true
0 1 2 1 0 2 true
1 0 2 0 1 2 true
2 0 2 0 2 2 false
1 0 3 0 1 1 false
0 2 3 0 0 2 false
Todas as entradas serão números inteiros não negativos. Dito isto, espero que muitas ou a maioria das soluções também sejam capazes de lidar com negativos e flutuadores.
Respostas:
Python, 33 bytes
O Python suporta cadeias de desigualdades, mesmo quando apontam direções opostas.
A coordenada x intervalos
[x,x+k)
e[X,X+K)
se sobrepõem, desde que nenhum deles é completamente para a direita do outro, o que significa que endpoint esquerda de cada intervalo é deixado de endpoint o direito da outra intervalo.O pode ser combinado em uma desigualdade conjunta
-K<X-x<k
. Escrever o mesmo para as coordenadas y e uni-las em-K
dá a expressãofonte
MATL,
14111054 bytesEsta solução aceita entrada na forma de duas matrizes:
[x1, y1; x2, y2]
[k2; k1]
Experimente Online
Versão ligeiramente modificada para executar todos os casos de teste
Explicação
fonte
MATLAB,
3621 bytesCria uma função anônima que pode ser avaliada como
ans(a,b)
. Aceita duas entradas do seguinte formato:[x1, y1; x2, y2]
.[k2; k1]
Todos os casos de teste aqui .
Explicação
Aqui está uma solução não-golfe comentada
fonte
JavaScript (ES6), 38 bytes
Se d - a ≥ c , o segundo quadrado fica à direita do primeiro. Da mesma forma, as outras condições verificam se não está à esquerda, abaixo ou acima.
fonte
Geléia , 8 bytes
Input é a lista aninhada [[x1, y1, k1], [x2, y2, k2]] , output é a lista de todas as coordenadas incrementadas de pontos com coordenadas inteiras que são comuns a ambos os quadrados (falso se estiver vazio, verdadeiro se não estiver) )
Experimente online! ou verifique todos os casos de teste .
Como funciona
fonte
TI Basic, 36 bytes
fonte
Java, 78 bytes
fonte
Object
tipo de retorno para -1 byteOitava, 17 bytes
A mesma lógica da minha resposta do MATLAB acima, exceto que o Octave suporta a transmissão automática de dimensões para que possamos substituí
[b,b]
-lo simplesmenteb
.Todos os casos de teste aqui
fonte
SmileBASIC,
7657 bytesCria um sprite com o tamanho / posição do primeiro quadrado e verifica se ele colide com o segundo quadrado.
fonte
x86-64 Código da máquina, Windows 22 bytes
Assinatura C ++:
Retorna 0 se os quadrados não se sobrepõem e -1 (0xFFFFFFFF), caso contrário. As entradas são vetores de 2 números inteiros de 64 bits para x, yek (
_mm_set_epi64x(x1, x2)
etc.).fonte
05AB1E , 5 bytes
Porto de @Suever resposta MATL 's , com a conversão adicional a um resultado truthy / Falsey. O formato de entrada também é o mesmo:
Primeira entrada como
[[x1,y1],[x2,y2]]
e segunda entrada como[k2,k1]
.Experimente online ou verifique todos os casos de teste .
Explicação:
fonte