Annettuna on lista, jossa on varauksia päiväväleinä. Jokainen väli on pari (a,b), missä 1 \le a \le b: varaus alkaa päivänä a ja päättyy päivänä b.
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 [(4,7),(1,2)] tarkoittaa, että ensimmäinen varaus on päivästä 4 päivään 7 ja toinen varaus on päivästä 1 päivään 2. Nämä varaukset eivät mene päällekkäin. Listassa [(4,7),(1,5)] varaukset sen sijaan menevät päällekkäin, koska molemmat varaukset sisältävät päivät 4 ja 5.
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