CSES - Laatikon valinta

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][4,4,6,8] ja sinulle tulee tuotteita seuraavasti:

  • Tuotteen 11 koko on 55. Valitset sille laatikon kokoa 66.
  • Tuotteen 22 koko on 55. Valitset sille laatikon kokoa 88.
  • Tuotteen 33 koko on 44. Valitset sille laatikon kokoa 44.
  • Tuotteen 44 koko on 66. Tuotteelle ei löydy laatikkoa.
  • Tuotteen 55 koko on 11. Valitset sille laatikon kokoa 44.

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-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