Pole nałożenia się dwóch prostokątów
Treść zadania
Zaprojektuj klasę Prostokat opisującą prostokąt o bokach równoległych do osi układu współrzędnych. Prostokąt jest wyznaczony przez dwa przeciwległe wierzchołki: lewy dolny $(x_1, y_1)$ i prawy górny $(x_2, y_2)$.
Klasa ma mieć:
- Konstruktor
__init__(self, x1, y1, x2, y2). - Metodę
__str__()zwracającą napislewy dolny (x1, y1), prawy górny (x2, y2). - Metodę statyczną
pole_wspolne(a, b)zwracającą pole części wspólnej prostokątówaib. Jeśli prostokąty nie nachodzą na siebie (albo stykają się tylko bokiem lub wierzchołkiem), pole części wspólnej wynosi0.
Program wczytuje dwa prostokąty $A$ i $B$, wypisuje je i podaje pole ich części wspólnej.
Dane wejściowe
- 1. linia: cztery liczby całkowite $x_1$, $y_1$, $x_2$, $y_2$ — prostokąt $A$
- 2. linia: cztery liczby całkowite $x_1$, $y_1$, $x_2$, $y_2$ — prostokąt $B$
Dane wyjściowe
Trzy linie:
Prostokąt A: lewy dolny (x1, y1), prawy górny (x2, y2)
Prostokąt B: lewy dolny (x1, y1), prawy górny (x2, y2)
Pole części wspólnej: <pole>
Pole jest liczbą całkowitą.
Ograniczenia
- $-1000 \le x_1 < x_2 \le 1000$, $-1000 \le y_1 < y_2 \le 1000$
Uwagi
- Część wspólna (jeśli istnieje) też jest prostokątem. Jej lewa krawędź leży na $\max$ z lewych krawędzi obu prostokątów, a prawa na $\min$ z prawych krawędzi — analogicznie w pionie.
Przykład
3 4 9 6 2 2 7 5
Prostokąt A: lewy dolny (3, 4), prawy górny (9, 6) Prostokąt B: lewy dolny (2, 2), prawy górny (7, 5) Pole części wspólnej: 4
Częścią wspólną jest prostokąt o wierzchołkach $(3, 4)$ i $(7, 5)$, czyli o wymiarach $4 \times 1$.
Potrzebujesz teorii?
Zasady obowiązujące w rozdziale 18
Zadania w tym rozdziale uczą projektowania klas: konstruktora __init__, atrybutów, metod, metod statycznych (@staticmethod) oraz metod specjalnych, dzięki którym obiekty można wypisywać (__str__), porównywać (__eq__) i łączyć operatorami (__add__, __sub__, __mul__, …). Ostatnie zadania wprowadzają też wyjątki (raise, try/except), klasy danych (@dataclass) i generatory (yield).
Konwencje wspólne:
- Każde zadanie to osobny program: czyta standardowe wejście i wypisuje wynik na standardowe wyjście.
- W każdym zadaniu dostajesz kod startowy ze szkieletem klasy, a zwykle także z gotowym wczytywaniem danych i wypisywaniem wyników. Twoim zadaniem jest przede wszystkim uzupełnienie metod klasy — wynik programu zależy od tego, jak działa Twoja klasa.
- Nazwy klas i metod podane w treści są obowiązkowe (kod startowy z nich korzysta). Nazwy w kodzie piszemy bez polskich znaków, np.
Kolo,Prostokat. - „Z dokładnością do 2 miejsc po przecinku” oznacza dokładnie dwie cyfry po kropce, np.
f"{x:.2f}"(3.00,-0.50). - Program nie wypisuje komunikatów typu „Podaj liczbę:”.
Zadanie pochodzi z otwartego zbioru Nauka-Programowania (z rozwiązaniami wzorcowymi). Zgłoś błąd w treści lub testach.
Przywrócono Twój zapisany kod.
Python uruchomi się w przeglądarce przy pierwszym teście.
Kod zapisuje się automatycznie w tej przeglądarce. Tab wstawia wcięcie; aby opuścić edytor klawiaturą, naciśnij Esc, a potem Tab.
Testy
Program dostaje „Wejście” przez input() i musi wypisać „Oczekiwane wyjście”. Liczby porównywane są z tolerancją 0,01, a tekst podany w input("…") nie jest sprawdzany.
Test 1
Nie uruchomiono0 0 2 2 5 5 7 8
Prostokąt A: lewy dolny (0, 0), prawy górny (2, 2) Prostokąt B: lewy dolny (5, 5), prawy górny (7, 8) Pole części wspólnej: 0
Test 2
Nie uruchomiono0 0 2 2 2 0 4 2
Prostokąt A: lewy dolny (0, 0), prawy górny (2, 2) Prostokąt B: lewy dolny (2, 0), prawy górny (4, 2) Pole części wspólnej: 0
Test 3
Nie uruchomiono0 0 10 10 2 3 5 7
Prostokąt A: lewy dolny (0, 0), prawy górny (10, 10) Prostokąt B: lewy dolny (2, 3), prawy górny (5, 7) Pole części wspólnej: 12
Test 4
Nie uruchomiono-3 -2 1 2 -3 -2 1 2
Prostokąt A: lewy dolny (-3, -2), prawy górny (1, 2) Prostokąt B: lewy dolny (-3, -2), prawy górny (1, 2) Pole części wspólnej: 16
Test 5
Nie uruchomiono0 1 8 3 2 -1 5 6
Prostokąt A: lewy dolny (0, 1), prawy górny (8, 3) Prostokąt B: lewy dolny (2, -1), prawy górny (5, 6) Pole części wspólnej: 6