## Ordknute
# https://www.bt.no/spill/i/veev8j/bts-ordknute

# Steg 1: lag en funksjon som besvarer hvorvidt et
# forslags ord er korrekt eller ikke

def is_legal_word(word):
    # ordet må inneholde bokstaven i midten
    if 'n' not in word:
        return False
    
    # ordet må ha minst fire bokstaver
    if len(word) < 4:
        return False
    
    # ordet inneholder kun lovlige bokstaver
    for character in word:
        if character not in 'dgikuyn':
            return False
        
    # å sjekke om ordet faktisk er i ordboken er unødvendig her,
    # siden alle ord vi prøver er ord fra ordboken.
        
    # PS: 'n' og 'dgikuyn' er konstanter som gjør at denne funksjonen
    # kun vil virke med én ordknute. Disse burde vært byttet ut med
    # parametre for å gjøre funksjonen mer anvendelig
        
    # dersom vi ikke fant noe feil, må ordet være lovlig
    return True

assert True is is_legal_word('dunk')
assert False is is_legal_word('gnu')


# Steg 2: prøv alle ord i ordboken, og finn dem som er lovlig
def read_file(path):
    """ Given the file path (file name) of a plain text file, returns
    the content of the file as a string. """
    with open(path, 'rt', encoding='utf-8') as f:
        return f.read()
    
file_content = read_file('05_lister/nsf2022.txt')
all_words = file_content.splitlines()

legal_words = []
for word in all_words:
    if is_legal_word(word):
        legal_words.append(word)

print(legal_words)


        
## Eksamen høst 23 oppgave 3b (om gjennomsnittstemperatur)
# Oppgavetekst: https://inf100h23.stromme.me/lab/eksamen/

def average_temp(months_of_temps):
    # Finn antall måleverdier og summen av måleverdiene
    num_of_temps = 0
    sum_of_temps = 0
    for month in months_of_temps:
        for temp in month:
            num_of_temps += 1
            sum_of_temps += temp
    # Svaret er sum av målinger / antall målinger
    return sum_of_temps / num_of_temps

actual = average_temp([
    [-3.0, 2.1, -1.1, -4.5],
    [4.8, 2.9, -1.3, 5.0, 6.1],
    [10.0, 12.0]
])
expected = 3.0
assert abs(actual - expected) < 0.000000001