78 lines
2.0 KiB
Python
78 lines
2.0 KiB
Python
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)
|