import time
from os import path, system


def preberi_zemljevid(ime_dat: str):
    directory = path.dirname(path.abspath(__file__))
    file = open(path.join(directory, ime_dat))
    return file.read().strip().split("\n")


z = [list("    " + c for c in line) for line in preberi_zemljevid("test.txt")]


def print_z():
    system('clear')
    for line in z:
        print("".join(line))


def check(x: int, y: int, c: str, zemljevid: list[list[str]], prepovedani: set = None):
    if prepovedani is None:
        prepovedani = set()

    return (
            (x, y) not in prepovedani
            and 0 <= y < len(zemljevid)
            and 0 <= x < len(zemljevid[0])
            and (c == "" and zemljevid[y][x] != "." or zemljevid[y][x] == c)
    )


counter = 1


def najblizji_distance(x: int, y: int, c: str, zemljevid: list[list[str]], prepovedani: set):
    global counter

    z[y][x] = "    ."

    d = 1
    max_d = len(zemljevid) + len(zemljevid[0])

    while d <= max_d:
        x -= 1

        ry = 0
        ry_inc = 1

        for rx in range(d * 2 + 1):
            if (0 <= y - ry < len(zemljevid)
                    and 0 <= x + rx < len(zemljevid[0])):
                z[y - ry][x + rx] = (" " * (5 - len(str(d)))) + str(d)

            print_z()
            counter += 1

            if (0 <= y + ry < len(zemljevid)
                    and 0 <= x + rx < len(zemljevid[0])):
                z[y + ry][x + rx] = (" " * (5 - len(str(d)))) + str(d)

            print_z()
            counter += 1

            if check(x + rx, y + ry, c, zemljevid, prepovedani):
                return x + rx, y + ry, d
            if check(x + rx, y - ry, c, zemljevid, prepovedani):
                return x + rx, y - ry, d
            if ry == d:
                ry_inc = -1
            ry += ry_inc

        d += 1


def angelca(x, y, znamenitosti, zemljevid):
    prepovedani = set()
    distance = 0
    for znam in znamenitosti:
        res = najblizji_distance(x, y, znam, zemljevid, prepovedani)
        if res is None:
            return distance
        x, y, d = res
        prepovedani.add((x, y))
        distance += d

    return distance


res = najblizji_distance(37, 14, "c", z, set())

print(res)
