CSES - Suorakulmiot Tasossa on kolme suorakulmiota, joiden sivut ovat vaaka- ja pystyakselien suuntaisia. Tehtäväsi on laskea sen alueen pinta-ala, jota peittää vähintään yksi annetuista suorakulmioista.

Esimerkiksi seuraavassa kuvassa suorakulmioiden peittämän alueen pinta-ala on 16. Kuva vastaa koodipohjissa olevaa esimerkkiä.

Voit olettaa, että kaikki koordinaatit ovat kokonaislukuja välillä $-10^9 \dots 10^9$.

Huomaa, että on liian hidasta käydä läpi kaikki pisteet suorakulmioiden alueelta, vaan sinun tulee keksiä tehokkaampi matemaattinen ratkaisu.

Python

Toteuta funktio area(rec1, rec2, rec3), joka antaa kysytyn pinta-alan. Funktiolle annetaan kolme tuplea, joista jokainen määrittelee yhden suorakulmion. Jokaisessa tuplessa on neljä kokonaislukua $x_1$, $y_1$, $x_2$ ja $y_2$: suorakulmion vasen ylänurkka on $(x_1,y_1)$ ja oikea alanurkka on $(x_2,y_2)$.

Toteuta funktio tiedostoon rectangles.py.
def area(rec1, rec2, rec3):
    # TODO

if __name__ == "__main__":
    rec1 = (-1,1,1,-1)
    rec2 = (0,3,2,0)
    rec3 = (0,2,3,-2)
    print(area(rec1,rec2,rec3)) # 16
Java

Toteuta metodi area(rec1, rec2, rec3), joka antaa kysytyn pinta-alan. Metodille annetaan kolme taulukkoa, joista jokainen määrittelee yhden suorakulmion. Jokaisessa taulukossa on neljä kokonaislukua $x_1$, $y_1$, $x_2$ ja $y_2$: suorakulmion vasen ylänurkka on $(x_1,y_1)$ ja oikea alanurkka on $(x_2,y_2)$.

Toteuta metodi tiedostoon Rectangles.java.
public class Rectangles {
    public long area(int rec1[], int rec2[], int rec3[]) {
        // TODO
    }
    
    public static void main(String[] args) {
        Rectangles r = new Rectangles();
        int[] rec1 = {-1,1,1,-1};
        int[] rec2 = {0,3,2,0};
        int[] rec3 = {0,2,3,-2};
        System.out.println(r.area(rec1,rec2,rec3)); // 16
    }
}