Annettuna on lista, jossa on varauksia päiväväleinä. Jokainen väli on pari , missä : varaus alkaa päivänä ja päättyy päivänä .
Tehtäväsi on tutkia, onko listassa kahta varausta, jotka menevät päällekkäin eli niissä on yksi tai useampi yhteinen päivä.
Esimerkiksi lista tarkoittaa, että ensimmäinen varaus on päivästä päivään ja toinen varaus on päivästä päivään . Nämä varaukset eivät mene päällekkäin. Listassa varaukset sen sijaan menevät päällekkäin, koska molemmat varaukset sisältävät päivät ja .
Toteuta tiedostoon reservations.py
funktio check_overlapping
, jolle annetaan varaukset listana. Funktion tulee palauttaa True
, jos jotkin kaksi varausta menevät päällekkäin, ja False
muuten.
Sinun tulee toteuttaa funktio niin, että se käsittelee tehokkaasti myös suuren määrän varauksia. Funktion tulee antaa vastaus välittömästi myös tehtäväpohjan kahdessa viimeisessä testissä.
import random def check_overlapping(reservations): # TODO if __name__ == "__main__": print(check_overlapping([])) # False print(check_overlapping([(1, 3)])) # False print(check_overlapping([(4, 7), (1, 2)])) # False print(check_overlapping([(4, 7), (1, 5)])) # True print(check_overlapping([(1, 1), (2, 2)])) # False print(check_overlapping([(1, 1), (1, 1)])) # True print(check_overlapping([(2, 3), (5, 5), (3, 4)])) # True print(check_overlapping([(2, 3), (5, 5), (1, 4)])) # True print(check_overlapping([(2, 3), (5, 5), (1, 5)])) # True reservations = [(day, day) for day in range(1, 10**5+1)] random.shuffle(reservations) print(check_overlapping(reservations)) # False reservations.append((42, 1337)) random.shuffle(reservations) print(check_overlapping(reservations)) # True