Biorąc pod uwagę współrzędne lewego górnego rogu dwóch kwadratów i ich długości boków, określ, czy kwadraty nachodzą na siebie. Kwadrat zawiera górną i lewą linię, ale nie dolną i prawą linię. Oznacza to, że punkt (a,b)
znajduje się wewnątrz kwadratu o długości boku, k
która zaczyna się (x,y)
wtedy i tylko wtedy x <= a < x+k
i wtedy y <= b < y+k
. Kwadrat o długości boku 0 jest zdegenerowany i nie będzie tutaj brany pod uwagę, więc k
będzie dodatni.
Jak zwykle obowiązują wszystkie standardowe zasady. Dane wejściowe i wyjściowe mogą być w dowolnej dogodnej formie, o ile są czytelne dla człowieka i nie ma wstępnego obliczenia. Pamiętaj, aby określić używany format wejściowy. Twój kod powinien przyjmować sześć liczb i wyświetlać zgodnie z prawdą, jeśli kwadraty nachodzą na siebie, a fałsz w przeciwnym razie.
Przypadki testowe
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
Wszystkie dane wejściowe będą liczbami całkowitymi nieujemnymi. To powiedziawszy, oczekuję, że wiele lub większość rozwiązań będzie w stanie poradzić sobie z negatywami i zmiennymi.
Odpowiedzi:
Python, 33 bajty
Python obsługuje łańcuch nierówności, nawet gdy wskazują przeciwne kierunki.
Współrzędna x interwały
[x,x+k)
i[X,X+K)
nakładają się na siebie, o ile nie jest w pełni jeden na prawo od drugiej, co oznacza, że lewy punkt końcowy każdego przedziału jest na lewo od prawego punktu końcowego drugiego interwału jest.Można je połączyć we wspólną nierówność
-K<X-x<k
. Pisanie tego samego dla współrzędnych y i łączenie ich w-K
daje wyrażenieźródło
MATL,
14111054 bajtówTo rozwiązanie przyjmuje dane wejściowe w postaci dwóch tablic:
[x1, y1; x2, y2]
[k2; k1]
Wypróbuj online
Nieznacznie zmodyfikowana wersja do uruchamiania wszystkich przypadków testowych
Wyjaśnienie
źródło
MATLAB,
3621 bajtówTworzy anonimową funkcję, którą można ocenić jako
ans(a,b)
. Akceptuje dwa wejścia o następującym formacie:[x1, y1; x2, y2]
.[k2; k1]
Wszystkie przypadki testowe tutaj .
Wyjaśnienie
Oto skomentowane rozwiązanie bez gry w golfa
źródło
JavaScript (ES6), 38 bajtów
Jeśli d - a ≥ c, to drugi kwadrat jest po prawej stronie pierwszego. Podobnie pozostałe warunki sprawdzają, czy nie jest po lewej, poniżej lub powyżej.
źródło
Galaretka , 8 bajtów
Dane wejściowe to lista zagnieżdżona [[x1, y1, k1], [x2, y2, k2]] , dane wyjściowe to lista wszystkich inkrementowanych współrzędnych punktów o współrzędnych całkowitych wspólnych dla obu kwadratów (fałsz, jeśli jest pusty, prawda jeśli nie, ).
Wypróbuj online! lub zweryfikuj wszystkie przypadki testowe .
Jak to działa
źródło
TI Basic, 36 bajtów
źródło
Java, 78 bajtów
źródło
Object
typ zwracany dla bajtu -1Oktawa, 17 bajtów
Ta sama logika, co moja odpowiedź MATLAB powyżej, z tą różnicą, że Octave obsługuje automatyczne rozgłaszanie wymiarów, dzięki czemu możemy
[b,b]
po prostu zastąpićb
.Wszystkie przypadki testowe tutaj
źródło
SmileBASIC,
7657 bajtówTworzy duszka o rozmiarze / pozycji pierwszego kwadratu, a następnie sprawdza, czy koliduje z drugim kwadratem.
źródło
x86-64 Kod maszynowy, Windows 22 bajtów
Podpis w C ++:
Zwraca 0, jeśli kwadraty się nie nakładają, a w przeciwnym razie -1 (0xFFFFFFFF). Wejściami są wektory 2 64-bitowych liczb całkowitych dla x, y i k (
_mm_set_epi64x(x1, x2)
itp.).źródło
05AB1E , 5 bajtów
Port odpowiedzi MATL @Suever , z dodatkową konwersją do wyniku true / falsey. Format wejściowy jest zatem również taki sam:
Pierwsze wejście jako
[[x1,y1],[x2,y2]]
i drugie wejście jako[k2,k1]
.Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło