p1/09_kontrola/naloga.py

78 lines
2.0 KiB
Python
Raw Normal View History

2023-12-25 19:13:08 +00:00
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)