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:

Spill

Implementer ditt eget spill (Følg enten oppskriften eller lag ditt eget spill)