Bestimmen Sie anhand der Koordinaten der oberen linken Ecken zweier Quadrate und ihrer Seitenlängen, ob sich die Quadrate überlappen. Ein Quadrat enthält die oberen und linken Linien, jedoch nicht die unteren und rechten Linien. Das heißt, ein Punkt (a,b)
befindet sich innerhalb eines Quadrats mit einer Seitenlänge k
, die (x,y)
genau dann beginnt, wenn x <= a < x+k
und y <= b < y+k
. Ein Quadrat mit der Seitenlänge 0 ist entartet und wird hier nicht berücksichtigt, ist also k
positiv.
Wie üblich gelten alle Standardregeln. Die Eingabe und Ausgabe kann in einer beliebigen Form erfolgen, sofern sie für den Menschen lesbar ist und keine Vorberechnung erfolgt. Stellen Sie sicher, dass Sie angeben, welches Eingabeformat Sie verwenden. Ihr Code sollte sechs Zahlen annehmen und wahrheitsgemäß ausgeben, wenn sich die Quadrate überlappen und ansonsten falsch sind.
Testfälle
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
Alle Eingaben sind nicht negative ganze Zahlen. Ich gehe jedoch davon aus, dass viele oder die meisten Lösungen auch mit Negativen und Floats umgehen können.
Antworten:
Python, 33 Bytes
Python unterstützt Ungleichungsketten, auch wenn sie in entgegengesetzte Richtungen zeigen.
Die x-Koordinatenintervalle
[x,x+k)
und[X,X+K)
überlappen sich, solange sich keiner vollständig rechts vom anderen befindet. Dies bedeutet, dass der linke Endpunkt jedes Intervalls links vom rechten Endpunkt des anderen Intervalls liegt.Das kann zu einer gemeinsamen Ungleichung kombiniert werden
-K<X-x<k
. Das gleiche für y-Koordinaten zu schreiben und an zu spleißen,-K
ergibt den Ausdruckquelle
MATL,
14111054 BytesDiese Lösung akzeptiert Eingaben in Form von zwei Arrays:
[x1, y1; x2, y2]
[k2; k1]
Probieren Sie es online aus
Leicht modifizierte Version, um alle Testfälle auszuführen
Erläuterung
quelle
MATLAB,
3621 BytesErstellt eine anonyme Funktion, die als ausgewertet werden kann
ans(a,b)
. Akzeptiert zwei Eingaben im folgenden Format:[x1, y1; x2, y2]
.[k2; k1]
Alle Testfälle hier .
Erläuterung
Hier ist eine kommentierte Lösung ohne Golf
quelle
JavaScript (ES6), 38 Byte
Wenn d - a ≥ c ist, befindet sich das zweite Quadrat rechts vom ersten. In ähnlicher Weise prüfen die anderen Bedingungen, ob es nicht links, unten oder oben ist.
quelle
Gelee , 8 Bytes
Eingabe ist die verschachtelte Liste [[x1, y1, k1], [x2, y2, k2]] , Ausgabe ist die Liste aller inkrementierten Koordinaten von Punkten mit ganzzahligen Koordinaten, die beiden Quadraten gemeinsam sind (falsch, wenn leer, wahr, wenn nicht ).
Probieren Sie es online aus! oder überprüfen Sie alle Testfälle .
Wie es funktioniert
quelle
TI Basic, 36 Bytes
quelle
Java, 78 Bytes
quelle
Object
Rückgabetyp für -1 ByteOktave, 17 Bytes
Dieselbe Logik wie meine obige MATLAB-Antwort , außer dass Octave die automatische Übertragung von Dimensionen unterstützt, sodass wir sie
[b,b]
einfach ersetzen könnenb
.Alle Testfälle hier
quelle
SmileBASIC,
7657 BytesErstellt ein Sprite mit der Größe / Position des ersten Quadrats und prüft dann, ob es mit dem zweiten Quadrat kollidiert.
quelle
x86-64 Maschinencode, Windows 22 Byte
C ++ - Signatur:
Gibt 0 zurück, wenn sich die Quadrate nicht überlappen, andernfalls -1 (0xFFFFFFFF). Eingänge sind Vektoren von 2 64-Bit-Ganzzahlen für x, y und k (
_mm_set_epi64x(x1, x2)
usw.).quelle
05AB1E , 5 Bytes
Port der MATL -Antwort von @Suever mit zusätzlicher Konvertierung in ein wahrheitsgemäßes / falsches Ergebnis. Das Eingabeformat ist daher auch das gleiche:
Erste Eingabe als
[[x1,y1],[x2,y2]]
und zweite Eingabe als[k2,k1]
.Probieren Sie es online aus oder überprüfen Sie alle Testfälle .
Erläuterung:
quelle