Oppgave med objekter som peker p? andre objekter
Vi ?nsker at f?lgende kode skal fungere:
l = Liste()
l.append(1)
l.append("Hei")
l.append(3)
assert 3 in l
assert 2 not in l
assert l[0] == 1
assert l[1] == "Hei"
print(str(l)) # skal gi [1, "Hei", 3] eller lignende
Implementer en klasse Liste og evt andre klasser som gj?r som koden over fungerer uten ? bruke lister, ordb?ker eller lignende. Du vil f? bruk for noen magiske metoder:
def __contains__(self, element):
# blir kalt n?r man bruker "in" og skal returnere True/False
def __getitem__(self, element):
# blir kalt n?r man indekserer med [element] og returnerer elementet p? den posisjonen
Algoritmeoppgave
Vi har en to-dimensjonal verden representert som et rutetenett. Noen ruter er utilgjengelige, men ellers kan vi bevege oss opp/ned og til h?yre/venstre p? alle andre ruter (men ikke skr?tt).
Implementer en algoritme som finner den korteste veien mellom to ruter. Returner gjerne veien som en liste over koordinater.
Velg selv hvordan verdenen skal representeres og hvilke klasser/funksjoner/metoder du vil bruke.
Eksempel:
# Representerer verden som en n?stet liste med 1 for tilgjengelige ruter og 0 for utilgjengelige ruter.
verden = [
[1, 1, 1, 1],
[0, 0, 0, 1],
[1, 1, 1, 1]]
# Finn korteste sti fra nederste venstre hj?rne til ?verste venstre hj?rne
# [2, 0] er rad 2/kolonne 0
rute = finn_korteste_vei(fra=[2, 0], til=[0, 0], verden=verden)
# b?r gi stien [[2,0], [2,1], [2,2], [2, 3], [1,3], [0,3], [0,2], [0,1], [0,0]]
PS:
- Noen ganger kan det v?re fler like korte stier, da trenger man bare finne én.
- Det kan v?re lurt ? bruke en klasse for ? resentere verdenen (og ha en fin print-metode)
- Pr?v ? finne en algoritme som er noenlunde rask og fungerer p? store verdener (f. eks 30x30 ruter).
Spill
Implementer ditt eget spill (F?lg enten oppskriften eller lag ditt eget spill)