Sinulla on laatikoita, joista jokaisella on tietty koko. Sinulle annetaan yksi kerrallaan tuotteita, ja sinun tulee valita kullekin tuotteelle pienin riittävän suuri laatikko. Samaa laatikkoa voi käyttää vain kerran.
Esimerkki: Laatikoiden koot ovat [4,4,6,8] ja sinulle tulee tuotteita seuraavasti:
- Tuotteen 1 koko on 5. Valitset sille laatikon kokoa 6.
- Tuotteen 2 koko on 5. Valitset sille laatikon kokoa 8.
- Tuotteen 3 koko on 4. Valitset sille laatikon kokoa 4.
- Tuotteen 4 koko on 6. Tuotteelle ei löydy laatikkoa.
- Tuotteen 5 koko on 1. Valitset sille laatikon kokoa 4.
Toteuta tiedostoon nextbox.py funktio find_boxes, jolle annetaan listoina laatikoiden koot sekä tuotteiden koot käsittelyjärjestyksessä. Funktion tulee palauttaa lista, joka ilmoittaa kullekin tuotteelle laatikon koon tai luvun -1, jos sopivaa laatikkoa ei löytynyt.
Funktion tulee toimia tehokkaasti silloinkin, kun molemmat listat ovat suuria. Tehtäväpohjan viimeinen funktiokutsu testaa tällaista tilannetta.
def find_boxes(boxes, products):
# TODO
if __name__ == "__main__":
print(find_boxes([4, 4, 6, 8], [5, 5, 4, 6, 1]))
# [6, 8, 4, -1, 4]
print(find_boxes([1, 2, 3, 4], [1, 1, 1, 1, 1]))
# [1, 2, 3, 4, -1]
print(find_boxes([2, 2, 2, 2], [1, 1, 1, 1, 1, 1]))
# [2, 2, 2, 2, -1, -1]
print(find_boxes([1, 1, 1, 1], [2, 2]))
# [-1, -1]
boxes = []
products = []
for i in range(10**5):
boxes.append(i % 100 + 1)
products.append(3 * i % 97 + 1)
result = find_boxes(boxes, products)
print(result[42]) # 30
print(result[1337]) # 35
print(result[-1]) # 100
