from bisect import bisect_left

# Lees het bestand in in een lijst
with open("woorden5letters.txt", "r") as bestand:
    woorden5letters = bestand.read().splitlines()


def is_nederlands (woord):
    index = bisect_left(woorden5letters,woord)
    return index != len(woorden5letters) and woord == woorden5letters[index]


# Telt in hoeveel posities woord1 en woord2 van elkaar verschillen.
def tel_verschillen(woord_1, woord_2):
    verschillen = 0
    for i in range(len(woord_1)):
        if woord_1[i] != woord_2[i]:
            verschillen += 1
    return verschillen


# Controleert alle regels. Geeft True terug als die voldaan zijn, geeft
# anders False terug EN drukt een gepaste melding af
def zijn_regels_voldaan (vorig_woord, nieuw_woord):
    voldaan = False
    if len(nieuw_woord) != 5:
        print("Het woord moet uit precies 5 letters bestaan")
    else:
        verschillen = tel_verschillen(vorig_woord, nieuw_woord)
        if verschillen == 0:
            print("Je moet minstens één letter veranderen")
        elif verschillen  > 1:
            print(f"'{nieuw_woord}' kan niet de volgende stap zijn na '{vorig_woord}'")
        elif not is_nederlands(nieuw_woord):
            print(f"'{nieuw_woord}' is geen Nederlands woord")
        else:
            voldaan = True        
    return voldaan


# I/O functie: leest een woord in en blijft dit herhalen tot het geldig is
def volgend_woord(vorig_woord):
    nieuw_woord = input("> ")
    while not zijn_regels_voldaan(vorig_woord, nieuw_woord):
        nieuw_woord = input("? ")
    return nieuw_woord

    
start_woord = "hopen"
print(f"Je start met het woord '{start_woord}'")
print(volgend_woord(start_woord))