Étant donné les coordonnées des coins supérieurs gauches de deux carrés et leurs longueurs latérales, déterminez si les carrés se chevauchent. Un carré comprend les lignes supérieure et gauche, mais pas les lignes inférieure et droite. Autrement dit, un point se (a,b)
trouve à l'intérieur d'un carré dont la longueur latérale k
commence à (x,y)
si et seulement si x <= a < x+k
et y <= b < y+k
. Un carré avec une longueur de côté 0 est dégénéré et ne sera pas considéré ici, il k
sera donc positif.
Comme d'habitude, toutes les règles standard s'appliquent. L'entrée et la sortie peuvent être sous la forme qui convient, tant qu'elles sont lisibles par l'homme et sans précalcul. Assurez-vous de spécifier le format d'entrée que vous utilisez. Votre code doit prendre six chiffres et afficher la vérité si les carrés se chevauchent et fausser sinon.
Cas de test
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
Toutes les entrées seront des entiers non négatifs. Cela dit, je m'attends à ce que la plupart ou la plupart des solutions soient également capables de gérer les négatifs et les flottants.
Réponses:
Python, 33 octets
Python prend en charge les chaînes d'inégalités même lorsqu'elles pointent dans des directions opposées.
Les intervalles coordonnées x
[x,x+k)
et se[X,X+K)
chevauchent tant que ni l' un est complètement à droite de l'autre, ce qui signifie que extrémité gauche de chaque intervalle est laissé de extrémité droite de l'autre intervalle.Le peut être combiné en une inégalité commune
-K<X-x<k
. Écrire la même chose pour les coordonnées y et les épisser-K
donne l'expressionla source
MATL,
14111054 octetsCette solution accepte les entrées sous la forme de deux tableaux:
[x1, y1; x2, y2]
[k2; k1]
Essayez-le en ligne
Version légèrement modifiée pour exécuter tous les cas de test
Explication
la source
MATLAB,
3621 octetsCrée une fonction anonyme qui peut être évaluée comme
ans(a,b)
. Accepte deux entrées du format suivant:[x1, y1; x2, y2]
.[k2; k1]
Tous les cas de test ici .
Explication
Voici une solution non golfée commentée
la source
JavaScript (ES6), 38 octets
Si d - a ≥ c, le deuxième carré est à droite du premier. De même les autres conditions vérifient qu'il ne se trouve pas à gauche, en dessous ou au dessus.
la source
Gelée , 8 octets
L'entrée est la liste imbriquée [[x1, y1, k1], [x2, y2, k2]] , la sortie est la liste de toutes les coordonnées incrémentées des points avec des coordonnées entières communes aux deux carrés (fausse si vide, véridique sinon ).
Essayez-le en ligne! ou vérifiez tous les cas de test .
Comment ça fonctionne
la source
TI Basic, 36 octets
la source
Java, 78 octets
la source
Object
type de retour pour -1 octetOctave, 17 octets
Même logique que ma réponse MATLAB ci-dessus, sauf que Octave prend en charge la diffusion automatique des dimensions afin que nous puissions les remplacer
[b,b]
simplementb
.Tous les cas de test ici
la source
SmileBASIC,
7657 octetsCrée un sprite avec la taille / position du premier carré, puis vérifie s'il entre en collision avec le deuxième carré.
la source
Code machine x86-64, Windows 22 octets
Signature C ++:
Renvoie 0 si les carrés ne se chevauchent pas et -1 (0xFFFFFFFF) sinon. Les entrées sont des vecteurs de 2 entiers 64 bits pour x, y et k (
_mm_set_epi64x(x1, x2)
etc.).la source
05AB1E , 5 octets
Réponse MATL du port de @Suever , avec conversion supplémentaire en un résultat truey / falsey. Le format d'entrée est donc également le même:
première entrée as
[[x1,y1],[x2,y2]]
et deuxième entrée as[k2,k1]
.Essayez-le en ligne ou vérifiez tous les cas de test .
Explication:
la source