from itertools import groupby import operator from os import path from collections import Counter 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") def check(x: int, y: int, c: str, zemljevid: list[str]): return x >= 0 and y >= 0 and (c == "" and zemljevid[y][x] != "." or zemljevid[y][x] == c) def najblizji(x: int, y: int, c: str, zemljevid: list[str]): d = 1 max_d = max(len(zemljevid), len(zemljevid[0])) while d <= max_d: x -= 1 for i in range(d): if check(x, y, c, zemljevid): return x, y x += 1 y += 1 for i in range(d): if check(x, y, c, zemljevid): return x, y x += 1 y -= 1 for i in range(d): if check(x, y, c, zemljevid): return x, y x -= 1 y -= 1 for i in range(d): if check(x, y, c, zemljevid): return x, y x -= 1 y += 1 d += 1 def najpogostejsi(x, y, d, zemljevid): chars = [] for y2, line in enumerate(zemljevid): for x2, val in enumerate(line): if abs(x - x2) + abs(y - y2) <= d and val != ".": chars.append(val) if len(chars) == 0: return None m, _ = max(Counter(sorted(chars)).items(), key=operator.itemgetter(1)) return m def vsi_najpogostejsi(x, y, d, zemljevid): chars = [] for y2, line in enumerate(zemljevid): for x2, val in enumerate(line): if abs(x - x2) + abs(y - y2) <= d and val != ".": chars.append(val) if len(chars) == 0: return set() a = [(k, list(v)) for (k, v) in groupby(sorted(Counter(chars).items(), key=operator.itemgetter(1)), key=operator.itemgetter(1))] _, c = max(sorted(a)) return set(k for (k, v) in c)