from task1 import task1
from task2 import task2
from task3 import task3
# funkcja wczytująca dane z podanego pliku
def load_data(filename):
# zmienna, która przechowa nam wynik
# będzie to tablica plansz
result = []
# zmienna, która przechowa nam aktualną planszę (tablica stringów)
board = []
# otwieramy plik
# konstrukcja `with` zadba o to, żebyśmy nie musieli pamiętać o zamknięciu pliku
with open(filename, "r") as f:
# iterujemy po kolejnych liniach pliku
for line in f:
# usuwamy znaki białe
line = line.strip()
# sprawdzamy czy linia nie jest pusta
if line:
# dodajemy linię do planszy
board.append(line)
else:
# jeśli linia jest pusta, to dodajemy planszę do wyniku
result.append(board)
# samą planszę zerujemy
board = []
# dodajemy ostatnią planszę do wyniku, jeśli jest niepusta
if len(board) > 0:
result.append(board)
# zwracamy wynik
return result
# funkcja zapisująca wynik zadania
def save_result(result, name):
# otwieramy plik do zapisu
# parametr 'w' spowoduje nadpisanie istniejącego pliku
with open(f"{name}.txt", "w") as f:
# zapisujemy wynik
f.write(result)
# dodatkowo wypiszmy go też w konsoli
print(result)
sample_data = load_data('szachy_przyklad.txt')
real_data = load_data('szachy.txt')
print('Zadanie 1.1, przykładowe dane')
print(task1(sample_data))
print('Zadanie 1.1, prawdziwe dane')
save_result(task1(real_data), 'zadanie1_1')
print('Zadanie 1.2, przykładowe dane')
print(task2(sample_data))
print('Zadanie 1.2, prawdziwe dane')
save_result(task2(real_data), 'zadanie1_2')
print('Zadanie 1.3, przykładowe dane')
print(task3(sample_data))
print('Zadanie 1.3, prawdziwe dane')
save_result(task3(real_data), 'zadanie1_3')
# zadanie 1.1
def task1(data):
# zmienna przechowująca liczbę plansz z pustymi kolumnami
count = 0
# zmienna z max liczbą pustych kolumn
max_cols = 0
# iterujemy po kolei po planszach
for board in data:
# zmienna przechowująca liczbę pustych kolumn
empty = 0
# iterujemy po kolei po 8 kolumnach
for col_index in range(8):
# zmienna przechowująca, czy kolumna jest pusta
is_empty = True
# iterujemy po kolei po 8 wierszach kolumny
for row_index in range(8):
# sprawdzamy, czy w danej pozycji jest inny znak niż '.'
if board[row_index][col_index] != ".":
# jeśli tak, to zmieniamy zmienną na False
is_empty = False
# i przerywamy pętlę
break
# jeśli kolumna była pusta
if is_empty:
# zwiększamy liczbę pustych kolumn
empty += 1
# jeśli była przynajmniej jedna pusta kolumna
if empty > 0:
# zwiększamy liczbę plansz z pustymi kolumnami
count += 1
# jeśli liczba pustych kolumn jest większa od poprzedniej
# to przypisujemy ją do max_cols
max_cols = max(max_cols, empty)
# zwracamy rezultat zadania
return f"{count} {max_cols}"
# zadanie 1.2
def task2(data):
# zmienna przechowująca liczbę plansz w równowadze
count = 0
# zmienna z min liczbą bierek
min_stones = 9999
# iterujemy po kolei po planszach
for board in data:
# zmienna ze słownikiem zliczającym bierki danego rodzaju
# dla ułatwienia zliczajmy też liczbę pustych pól
symbols = {
'K': 0,
'k': 0,
'W': 0,
'w': 0,
'S': 0,
's': 0,
'H': 0,
'h': 0,
'G': 0,
'g': 0,
'P': 0,
'p': 0,
'.': 0,
}
# iterujemy po kolei po wierszach
for row in board:
# iterujemy po kolei po znakach
for char in row:
# zwiększamy liczbę
symbols[char] += 1
# sprawdźmy czy jest stan równowagi
# zróbmy to w najprostszy możliwy sposób
if (symbols['K'] == symbols['k'] and symbols['W'] == symbols['w']
and symbols['S'] == symbols['s'] and symbols['H'] == symbols['h']
and symbols['G'] == symbols['g'] and symbols['P'] == symbols['p']):
# jeśli tak, to zwiększamy liczbę plansz w równowadze
count += 1
# i sprawdzamy czy liczba bierek jest mniejsza od poprzedniej
# wykorzystajmy fakt, że plansza ma 64 pola (8*8) i znamy liczbę pustych pól
min_stones = min(min_stones, 64 - symbols['.'])
# zwracamy rezultat zadania
return f"{count} {min_stones}"
# funkcja pomocnicza do zadania 1.3
# znajduje pozycje, na których znajduje się wskazany znak
def find_char(board, char):
# zmienna przechowująca pozycje
result = []
# iterujemy po kolei po wierszach
for row_index in range(8):
# iterujemy po kolei po znakach
for col_index in range(8):
# jeśli na danej pozycji jest wskazany znak, zapisujemy go
if board[row_index][col_index] == char:
result.append((row_index, col_index))
# zwracamy wynik
return result
# funkcja pomocnicza do zadania 1.3
# sprawdza czy jest pusta ścieżka poziomo do wskazanego znaku
# wersja z przejściem w prawo
def is_horizontal_right(board, row, col, char):
# iterujemy po kolei po wskazanym wierszu od zadanej pozycji
for col_index in range(col + 1, 8):
# pobieramy aktualny znak do zmiennej
current_char = board[row][col_index]
# jeśli trafiliśmy na szukamy znak, to zwracamy True
if current_char == char:
return True
# jeśli trafiliśmy na znak inny niż pusty to zwracamy False
elif current_char != ".":
return False
# jak doszliśmy do końca nie znajdując znaku, również zwracamy False
return False
# funkcja pomocnicza do zadania 1.3
# sprawdza czy jest pusta ścieżka poziomo do wskazanego znaku
# wersja z przejściem w lewo
def is_horizontal_left(board, row, col, char):
# iterujemy po kolei po wskazanym wierszu od zadanej pozycji
# reversed() aby iterować od aktualnej pozycji do zera
for col_index in reversed(range(col)):
# pobieramy aktualny znak do zmiennej
current_char = board[row][col_index]
# jeśli trafiliśmy na szukamy znak, to zwracamy True
if current_char == char:
return True
# jeśli trafiliśmy na znak inny niż pusty to zwracamy False
elif current_char != ".":
return False
# jak doszliśmy do końca nie znajdując znaku, również zwracamy False
return False
# funkcja pomocnicza do zadania 1.3
# sprawdza czy jest pusta ścieżka pionowo do wskazanego znaku
# wersja z przejściem w dół
def is_vertical_down(board, row, col, char):
# iterujemy po kolei po wskazanym wierszu od zadanej pozycji
for row_index in range(row + 1, 8):
# pobieramy aktualny znak do zmiennej
current_char = board[row_index][col]
# jeśli trafiliśmy na szukamy znak, to zwracamy True
if current_char == char:
return True
# jeśli trafiliśmy na znak inny niż pusty to zwracamy False
elif current_char != ".":
return False
# jak doszliśmy do końca nie znajdując znaku, również zwracamy False
return False
# funkcja pomocnicza do zadania 1.3
# sprawdza czy jest pusta ścieżka pionowo do wskazanego znaku
# wersja z przejściem w górę
def is_vertical_up(board, row, col, char):
# iterujemy po kolei po wskazanym wierszu od zadanej pozycji
# reversed() aby iterować od aktualnej pozycji do zera
for row_index in reversed(range(row)):
# pobieramy aktualny znak do zmiennej
current_char = board[row_index][col]
# jeśli trafiliśmy na szukamy znak, to zwracamy True
if current_char == char:
return True
# jeśli trafiliśmy na znak inny niż pusty to zwracamy False
elif current_char != ".":
return False
# jak doszliśmy do końca nie znajdując znaku, również zwracamy False
return False
# zadanie 1.3
def task3(data):
# liczba plansz z szachem białej wieży
white = 0
# liczba plansz z szachem czarnej wieży
black = 0
# iterujemy po kolei po planszach
for board in data:
# pobierzmy pozycje wież
white_pos = find_char(board, 'W')
black_pos = find_char(board, 'w')
# sprawdźmy najpierw czy któraś biała wieża szachuje
for (row, col) in white_pos:
# sprawdzamy czy szachuje poziomo lub pionowo
if (is_horizontal_right(board, row, col, 'k')
or is_horizontal_left(board, row, col, 'k')
or is_vertical_down(board, row, col, 'k')
or is_vertical_up(board, row, col, 'k')):
# jeśli tak, zwiększamy zmienną o 1
white += 1
# powtarzamy to samo dla czarnych wież
for (row, col) in black_pos:
# sprawdzamy czy szachuje poziomo lub pionowo
if (is_horizontal_right(board, row, col, 'K')
or is_horizontal_left(board, row, col, 'K')
or is_vertical_down(board, row, col, 'K')
or is_vertical_up(board, row, col, 'K')):
# jeśli tak, zwiększamy zmienną o 1
black += 1
# zwracamy rezultat zadania
return f"{white} {black}"
k.......
.w...s..
........
...pp...
...PP...
..S.....
......W.
.......K
k.......
.w...s..
........
...pP...
....P...
..S.....
......W.
.......K
k.......
.w...s..
........
....P...
....p...
..S.....
......W.
.......K
k.......
.w...s..
........
....P...
....S...
........
......W.
.......K
k.......
.w......
........
....s...
....S...
........
......W.
.......K
k.....W.
.w......
........
....s...
....S...
........
........
.......K
kw....W.
........
........
....s...
....S...
........
........
.......K
kW......
........
........
....s...
....S...
........
........
.......K
.k......
........
........
....s...
....S...
........
........
.......K
wsghkgsw
pppppppp
........
........
....P...
........
PPPP.PPP
WSGHKGSW
wsghkgsw
pp.ppppp
..p.....
........
....P...
........
PPPP.PPP
WSGHKGSW
wsghkgsw
pp.ppppp
..p.....
........
...PP...
........
PPP..PPP
WSGHKGSW
wsghkgsw
pp..pppp
..p.....
...p....
...PP...
........
PPP..PPP
WSGHKGSW
wsghkgsw
pp..pppp
..p.....
...p....
...PP...
..S.....
PPP..PPP
W.GHKGSW
wsghkgsw
pp..pppp
..p.....
........
...Pp...
..S.....
PPP..PPP
W.GHKGSW
wsghkgsw
pp..pppp
..p.....
........
...PS...
........
PPP..PPP
W.GHKGSW
wsghkg.w
pp..pppp
..p..s..
........
...PS...
........
PPP..PPP
W.GHKGSW
wsghkg.w
pp..pppp
..p..S..
........
...P....
........
PPP..PPP
W.GHKGSW
wsghkg.w
pp...ppp
..p..p..
........
...P....
........
PPP..PPP
W.GHKGSW
wsghkg.w
pp...ppp
..p..p..
........
...P....
..P.....
PP...PPP
W.GHKGSW
wsghk..w
pp...ppp
..pg.p..
........
...P....
..P.....
PP...PPP
W.GHKGSW
wsghk..w
pp...ppp
..pg.p..
........
...P....
..PG....
PP...PPP
W.GHK.SW
wsgh.wk.
pp...ppp
..pg.p..
........
...P....
..PG....
PP...PPP
W.GHK.SW
wsgh.wk.
pp...ppp
..pg.p..
........
...P....
..PG....
PPH..PPP
W.G.K.SW
wsghw.k.
pp...ppp
..pg.p..
........
...P....
..PG....
PPH..PPP
W.G.K.SW
wsghw.k.
pp...ppp
..pg.p..
........
...P....
..PG....
PPH.SPPP
W.G.K..W
wsghw.k.
pp...pp.
..pg.p..
.......p
...P....
..PG....
PPH.SPPP
W.G.K..W
wsghw.k.
pp...pp.
..pg.p..
.......p
...P....
..PGG...
PPH.SPPP
W...K..W
w.ghw.k.
pp.s.pp.
..pg.p..
.......p
...P....
..PGG...
PPH.SPPP
W...K..W
w.ghw.k.
pp.s.pp.
..pg.p..
.......p
...P....
..PGG...
PPH.SPPP
..KW...W
w.ghw.k.
p..s.pp.
..pg.p..
.p.....p
...P....
..PGG...
PPH.SPPP
..KW...W
w.ghw.k.
p..s.pp.
..pg.p..
.p.P...p
........
..PGG...
PPH.SPPP
..KW...W
w.ghw.k.
p..s.pp.
...g.p..
.ppP...p
........
..PGG...
PPH.SPPP
..KW...W
w.ghw.k.
p..s.pp.
...g.p..
.GpP...p
........
..P.G...
PPH.SPPP
..KW...W
.wghw.k.
p..s.pp.
...g.p..
.GpP...p
........
..P.G...
PPH.SPPP
..KW...W
.wghw.k.
p..s.pp.
...g.p..
.GpP...p
..P.....
....G...
PPH.SPPP
..KW...W
.wghw.k.
...s.pp.
p..g.p..
.GpP...p
..P.....
....G...
PPH.SPPP
..KW...W
.wghw.k.
...s.pp.
p..g.p..
..pP...p
G.P.....
....G...
PPH.SPPP
..KW...W
.wgh..k.
...swpp.
p..g.p..
..pP...p
G.P.....
....G...
PPH.SPPP
..KW...W
.wgh..k.
...swpp.
p..g.p..
..pP...p
G.P.....
....G.S.
PPH..PPP
..KW...W
.wgh..k.
....wpp.
p..g.p..
..pPs..p
G.P.....
....G.S.
PPH..PPP
..KW...W
.wgh..k.
....wpp.
p..g.p..
..pPs..p
G.P.S...
....G...
PPH..PPP
..KW...W
.wgh..k.
.w...pp.
p..g.p..
..pPs..p
G.P.S...
....G...
PPH..PPP
..KW...W
.wgh..k.
.w...pp.
p..g.p..
..pPs..p
G.P.S...
.P..G...
P.H..PPP
..KW...W
.wgh..k.
.....pp.
p..g.p..
..pPs..p
GwP.S...
.P..G...
P.H..PPP
..KW...W
.wgh..k.
.....pp.
p..g.p..
..pPs..p
GwP.S...
.P......
P.HG.PPP
..KW...W
.wgh..k.
.....pp.
p..g.p..
..pPs..p
w.P.S...
.P......
P.HG.PPP
..KW...W
.wgh..k.
.....pp.
p..g.p..
..pPs..p
P.P.S...
........
P.HG.PPP
..KW...W
.w.h..k.
.....pp.
p..g.p..
..pPsg.p
P.P.S...
........
P.HG.PPP
..KW...W
.w.h..k.
.....pp.
p..g.p..
..pPsg.p
P.P.S...
........
P.HG.PPP
..K.W..W
.w.h..k.
.....pp.
p..g.p..
..pPsg..
P.P.S..p
........
P.HG.PPP
..K.W..W
.w.h..k.
.....pp.
p..g.p..
..pPsg..
P.P.S..p
.......P
P.HG.PP.
..K.W..W
.w.h..k.
.....pp.
p..g.ps.
..pP.g..
P.P.S..p
.......P
P.HG.PP.
..K.W..W
.w.h..k.
.....pp.
p..g.ps.
..pP.g..
P.P.S..p
....W..P
P.HG.PP.
..K....W
.w.h..k.
.....pp.
p..g.p..
..pP.g..
P.P.Ss.p
....W..P
P.HG.PP.
..K....W
.w.h..k.
.....pp.
p..g.p..
..pP.g..
P.P.SsPp
....W..P
P.HG.P..
..K....W
.w.h..k.
.....pp.
p..g.pg.
..pP....
P.P.SsPp
....W..P
P.HG.P..
..K....W
.w.h..k.
.....pp.
p..g.pg.
..pP....
P.P.SsPp
....W..P
P.HG.P..
...K...W
.w.h..k.
.....pp.
p..g..g.
..pP.p..
P.P.SsPp
....W..P
P.HG.P..
...K...W
.w.h..k.
.....pp.
p..S..g.
..pP.p..
P.P..sPp
....W..P
P.HG.P..
...K...W
.w....k.
.....pp.
p..h..g.
..pP.p..
P.P..sPp
....W..P
P.HG.P..
...K...W
.w....k.
.....pp.
p..h..g.
..pP.P..
P.P..s.p
....W..P
P.HG.P..
...K...W
.w....k.
.....pp.
p..h....
..pP.P.g
P.P..s.p
....W..P
P.HG.P..
...K...W
.w....k.
.....pp.
p..h....
..pP.P.g
P.P..s.p
....WP.P
P.HG....
...K...W
.w....k.
.....pp.
p....h..
..pP.P.g
P.P..s.p
....WP.P
P.HG....
...K...W
.w....k.
.....pp.
p....h..
..pP.P.g
P.P..s.p
..G.WP.P
P.H.....
...K...W
.w....k.
.....pp.
p.......
..pP.Phg
P.P..s.p
..G.WP.P
P.H.....
...K...W
.w....k.
.....pp.
p.......
..pP.Phg
P.P.Hs.p
..G.WP.P
P.......
...K...W
.w....k.
.....pp.
p.......
..pP.P.g
P.P.Hs.p
..G.WP.P
P.....h.
...K...W
.w....k.
.....pp.
p.......
..pP.P.g
P.P.Hs.p
..G.WP.P
P.....h.
...KW...
.w....k.
.....pp.
p.......
..pP.P.g
P.P.Hs.p
..G.WP.P
h.......
...KW...
.w....k.
.....pp.
p.......
..pP.P.g
P.P..s.p
..G.WP.P
h.H.....
...KW...
.w....k.
.....pp.
p.......
..pP.P.g
P.h..s.p
..G.WP.P
..H.....
...KW...
.w..W.k.
.....pp.
p.......
..pP.P.g
P.h..s.p
..G..P.P
..H.....
...KW...
.w..W...
.....ppk
p.......
..pP.P.g
P.h..s.p
..G..P.P
..H.....
...KW...
.W......
.....ppk
p.......
..pP.P.g
P.h..s.p
..G..P.P
..H.....
...KW...
.W......
.....ppk
p.......
..ph.P.g
P....s.p
..G..P.P
..H.....
...KW...
.W......
.....ppk
p.......
..ph.P.g
P....s.p
..G..P.P
...H....
...KW...
.W......
.....ppk
p.......
..ph.P..
P....s.p
..G..g.P
...H....
...KW...
.W......
.....ppk
p.......
..ph.P..
P....s.p
..G..g.P
...H....
..K.W...
.W......
.....ppk
p.......
..p..h..
P....s.p
..G..g.P
...H....
..K.W...
.W......
.....ppk
p.......
..p..h..
P....s.p
..G.Wg.P
...H....
..K.....
.W......
.....ppk
p.......
..p..h..
P......p
..G.Wg.P
...Hs...
..K.....
.W......
.....ppk
p.......
..p..h..
P......p
..G.Wg.P
.K.Hs...
........
.W......
.....ppk
p.......
..p..h..
P......p
..s.Wg.P
.K.H....
........
.W......
.....ppk
p.......
..p..h..
P......p
..H.Wg.P
.K......
........
.W......
.....ppk
p.......
..p.....
P....h.p
..H.Wg.P
.K......
........
.W......
.....ppk
p.......
..p.....
P....h.p
...HWg.P
.K......
........
.W......
......pk
p.......
..p..p..
P....h.p
...HWg.P
.K......
........
.....W..
......pk
p.......
..p..p..
P....h.p
...HWg.P
.K......
........
.....W..
......pk
p.......
..p..p..
Ph.....p
...HWg.P
.K......
........
.....W..
......pk
p.......
..p..p..
Ph.....p
...HWg.P
........
..K.....
.....W..
......pk
p.......
..p..p..
Ph..g..p
...HW..P
........
..K.....
.....W..
......pk
p.......
..p..p..
Ph..g..p
.H..W..P
........
..K.....
.....W..
......pk
p.......
..p..p..
P..hg..p
.H..W..P
........
..K.....
.....W..
......pk
p.......
..p..p..
P..hg..p
..H.W..P
........
..K.....
.....W..
......pk
p..h....
..p..p..
P...g..p
..H.W..P
........
..K.....
........
.....Wpk
p..h....
..p..p..
P...g..p
..H.W..P
........
..K.....
........
.....Wpk
p.....h.
..p..p..
P...g..p
..H.W..P
........
..K.....
........
...W..pk
p.....h.
..p..p..
P...g..p
..H.W..P
........
..K.....
........
...W..pk
p.......
..p..p..
P...g..p
..H.W..P
........
..K...h.
........
...W..pk
p.......
..p..p..
P...g..p
..H.W..P
.K......
......h.
........
...W..pk
p.......
.....p..
P.p.g..p
..H.W..P
.K......
......h.
........
...W..pk
p.......
.....p..
P.p.W..p
..H....P
.K......
......h.
........
...W..pk
p.......
........
P.p.p..p
..H....P
.K......
......h.
........
......pk
p.......
........
P.pWp..p
..H....P
.K......
......h.
........
......pk
p.......
........
P.pWp..p
..H....P
.K...h..
........
........
......pk
p.......
........
P.pWp..p
.......P
.K.H.h..
........
........
......pk
p.......
........
P..Wp..p
..p....P
.K.H.h..
........
........
......pk
p.......
........
P..Wp..p
..K....P
...H.h..
........
........
......pk
p.......
........
P..Wp..p
..K...hP
...H....
........
........
......pk
p.......
........
P..Wp..p
......hP
.K.H....
........
........
......pk
p.......
........
P..Wp..p
.......h
.K.H....
........
........
......pk
p.......
........
P...W..p
.......h
.K.H....
........
........
......pk
p.......
........
P...W..p
......h.
.K.H....
........
........
......pk
p.......
........
P..HW..p
......h.
.K......
........
........
......pk
p.......
........
P..HW..p
........
.K....h.
........
........
......pk
p.......
........
P..HW..p
..K.....
......h.
........
........
......pk
p.......
........
P..HW..p
..K..h..
........
........
........
......pk
p.......
........
PK.HW..p
.....h..
........
........
.....h..
......pk
p.......
........
PK.HW..p
........
........
........
.....h..
......pk
p.......
K.......
P..HW..p
........
........
........
........
......pk
p.......
K....h..
P..HW..p
........
........
........
........
......pk
K.......
.....h..
P..HW..p
........
........
........
........
.......k
K.......
.....hp.
P..HW..p
........
........
........
........
.......k
K.......
P....hp.
...HW..p
........
........
........
........
.......k
K.......
P....hp.
...HW...
.......p
........
........
........
....W..k
K.......
P....hp.
...H....
.......p
........
........
........
....W...
K.....k.
P....hp.
...H....
.......p
........
........
........
....W.H.
K.....k.
P....hp.
........
.......p
........
........
........
....W.H.
K.......
P....hpk
........
.......p
........
........
........
....W..H
K.......
P....hpk
........
.......p
........
........
........
....W..H
K.......
P....hp.
......k.
.......p
........
........
........
.......H
K.......
P....hp.
....W.k.
.......p
........
........
36 3
22 28
3 1