CSES - Kurssisuunnitelma

Tehtäväsi on toteuttaa luokka, jonka avulla voi määritellä kurssien välisiä esitietovaatimuksia sekä etsiä tavan suorittaa kurssit vaatimusten mukaisessa järjestyksessä.

Esimerkki: Suoritettavana on neljä kurssia Jym, Ohpe, Ohja ja Tira. Esitietovaatimukset ovat:

  • Ohpe tulee suorittaa ennen Ohjaa
  • Ohja tulee suorittaa ennen Tiraa
  • Jym tulee suorittaa ennen Tiraa

Tässä tapauksessa mahdolliset suoritusjärjestykset ovat:

  • Jym, Ohpe, Ohja, Tira
  • Ohpe, Jym, Ohja, Tira
  • Ohpe, Ohja, Jym, Tira

Sinun riittää etsiä mikä tahansa kelvollinen suoritusjärjestys, eli yllä olevassa esimerkissä on kolme mahdollista suoritusjärjestystä.

Toteuta tiedostoon courseplan.py luokka CoursePlan, jossa on seuraavat metodit:

  • add_course lisää annetun nimisen kurssin
  • add_requisite lisää esitietovaatimuksen
  • find_order palauttaa listana jonkin tavan suorittaa kurssit vaatimusten mukaisesti

Metodi find_order voi palauttaa minkä tahansa vaatimusten mukaisen järjestyksen. Jos kursseja ei ole mahdollista suorittaa vaatimusten mukaisesti, metodin tulee palauttaa None.

class CoursePlan:
    def __init__(self):
        # TODO

    def add_course(self, course):
        # TODO

    def add_requisite(self, course1, course2):
        # TODO

    def find_order(self):
        # TODO

if __name__ == "__main__":
    courses = CoursePlan()

    courses.add_course("Ohpe")
    courses.add_course("Ohja")
    courses.add_course("Tira")
    courses.add_course("Jym")

    courses.add_requisite("Ohpe", "Ohja")
    courses.add_requisite("Ohja", "Tira")
    courses.add_requisite("Jym", "Tira")

    print(courses.find_order()) # esim. [Ohpe, Jym, Ohja, Tira]

    courses.add_requisite("Tira", "Tira")

    print(courses.find_order()) # None