Решение на Шахматни фенове от Харут Партамиан

Обратно към всички решения

Към профила на Харут Партамиан

Резултати

  • 10 точки от тестове
  • 0 бонус точки
  • 10 точки общо
  • 17 успешни тест(а)
  • 0 неуспешни тест(а)

Код

from math import sqrt
white_pons_dict = {
'R': 5,
'N': 3,
'B': 3,
'Q': 9,
'K': 4,
'P': 1
}
black_pons_dict = {
'r': 5,
'n': 3,
'b': 3,
'q': 9,
'k': 4,
'p': 1
}
class ChessException(Exception):
pass
class ChessScore:
def __init__(self, pons):
self.pons = pons
self.sum_of_pones = self.pons_sum()
def pons_sum(self):
return sum(black_pons_dict[char.lower()] for char in self.pons)
def __int__(self):
return self.sum_of_pones
def __lt__(self, other):
return self.sum_of_pones < other.sum_of_pones
def __le__(self, other):
return self.sum_of_pones <= other.sum_of_pones
def __eq__(self, other):
return self.sum_of_pones == other.sum_of_pones
def __ne__(self, other):
return self.sum_of_pones != other.sum_of_pones
def __gt__(self, other):
return self.sum_of_pones > other.sum_of_pones
def __add__(self, other):
return self.sum_of_pones + other.sum_of_pones
def __sub__(self, other):
return self.sum_of_pones - other.sum_of_pones
class ChessPosition:
def __init__(self, fen):
self.fen = fen
self.splited_fen = fen.split('/')
self.matrix = self.matrix_from_fen()
self.white_sum = None
self.black_sum = None
self.pons_sum()
self.exception_calculation()
def matrix_from_fen(self):
matrix = [

Хмм, не знам защо. Явно някакъв друг проблем при сетването.

matrix = [['0'] * 8 for _ in range(8)]

print(matrix) # [['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0']]
matrix[1][2] = 'test'
print(matrix) # [['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', 'test', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', 
'0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0']]
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0']
]
column = 0
for i in range(8):
for j in range(len(self.splited_fen[i])):
if self.splited_fen[i][j] in ('1', '2', '3', '4', '5', '6', '7', '8'):
column += int(self.splited_fen[i][j])
else:
matrix[i][column] = self.splited_fen[i][j]
column += 1
column = 0
return matrix
def __str__(self):
return self.fen
def __len__(self):
length = 0
for char in self.fen:
if char in black_pons_dict.keys() or char in white_pons_dict.keys():
length += 1
return length
def __getitem__(self, item):
letters_to_nums = {'A': 0,
'B': 1,
'C': 2,
'D': 3,
'E': 4,
'F': 5,
'G': 6,
'H': 7}
wanted_pon = self.matrix[0 - int(item[1])][letters_to_nums[item[0].upper()]]
if wanted_pon == '0':
return None
return wanted_pon
def check_pawn_position(self):
if 'p' in self.splited_fen[0] or 'p' in self.splited_fen[-1] or 'P' in self.splited_fen[0] or 'P' in \

Избягвай пренасяне на нов ред с наклонена черта на всяка цена. Можеш да дефинираш две промнеливи по-горе, за да се справиш с този недостатък.

self.splited_fen[-1]:
return False
return True
def check_kings_number(self):
if self.fen.count('K') != 1 or self.fen.count('k') != 1:
return False
return True
def check_kings_positions(self):
white_king_coordinates = (0, 0)
black_king_coordinates = (0, 0)
for line in range(len(self.matrix)):
if 'K' in self.matrix[line]:
white_king_coordinates = (line, self.matrix[line].index('K'))
if 'k' in self.matrix[line]:
black_king_coordinates = (line, self.matrix[line].index('k'))
x1, y1 = white_king_coordinates
x2, y2 = black_king_coordinates
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) < 2:
return False
return True
def exception_calculation(self):
check_positions = (self.check_kings_positions(), self.check_kings_number(), self.check_pawn_position())
if check_positions.count(False) > 1 or not check_positions[0] or not check_positions[1]:
raise ChessException("kings")
elif not self.check_pawn_position():
raise ChessException("pawns")
def get_white_score(self):
white_pons = []
for char in self.fen:
if char in ('R', 'N', 'B', 'Q', 'K', 'P'):
white_pons.append(char)
return ChessScore(white_pons)
def get_black_score(self):
black_pons = []
for char in self.fen:
if char in ('r', 'n', 'b', 'q', 'k', 'p'):
black_pons.append(char)
return ChessScore(black_pons)
def pons_sum(self):
whites = 0
blacks = 0
for char in self.fen:
if char in white_pons_dict:
whites += white_pons_dict[char]
if char in black_pons_dict:
blacks += black_pons_dict[char]
self.white_sum = whites
self.black_sum = blacks
def white_is_winning(self):
return self.white_sum > self.black_sum
def black_is_winning(self):
return self.black_sum > self.white_sum
def is_equal(self):
return self.white_sum == self.black_sum

Лог от изпълнението

.................
----------------------------------------------------------------------
Ran 17 tests in 0.160s

OK

История (4 версии и 10 коментара)

Харут обнови решението на 28.11.2022 21:03 (преди над 1 година)

+from math import sqrt
+
+
+white_pons_dict = {
+ 'R': 5,
+ 'N': 3,
+ 'B': 3,
+ 'Q': 9,
+ 'K': 4,
+ 'P': 1
+}
+black_pons_dict = {
+ 'r': 5,
+ 'n': 3,
+ 'b': 3,
+ 'q': 9,
+ 'k': 4,
+ 'p': 1
+}
+
+
+class ChessException(Exception):
+ pass
+
+
+class ChessScore:
+ def __init__(self, pons):
+ self.pons = pons
+ self.sum_of_pones = self.pons_sum()
+
+ def pons_sum(self):
+ return sum(black_pons_dict[char] for char in self.pons)
+
+ def __lt__(self, other):
+ return self.sum_of_pones < other.sum_of_pones
+
+ def __le__(self, other):
+ return self.sum_of_pones <= other.sum_of_pones
+
+ def __eq__(self, other):
+ return self.sum_of_pones == other.sum_of_pones
+
+ def __ne__(self, other):
+ return self.sum_of_pones != other.sum_of_pones
+
+ def __gt__(self, other):
+ return self.sum_of_pones > other.sum_of_pones
+
+ def __add__(self, other):
+ return self.sum_of_pones + other.sum_of_pones
+
+ def __sub__(self, other):
+ return self.sum_of_pones - other.sum_of_pones
+
+
+class ChessPosition:
+ def __init__(self, fen):
+ self.fen = fen
+ self.splited_fen = fen.split('/')
+ self.matrix = self.matrix_from_fen()
+ self.white_sum = None
+ self.black_sum = None
+ self.pons_sum()
+
+ def matrix_from_fen(self):
+ matrix = [
+ ['0', '0', '0', '0', '0', '0', '0', '0'],
+ ['0', '0', '0', '0', '0', '0', '0', '0'],
+ ['0', '0', '0', '0', '0', '0', '0', '0'],
+ ['0', '0', '0', '0', '0', '0', '0', '0'],
+ ['0', '0', '0', '0', '0', '0', '0', '0'],
+ ['0', '0', '0', '0', '0', '0', '0', '0'],
+ ['0', '0', '0', '0', '0', '0', '0', '0'],
+ ['0', '0', '0', '0', '0', '0', '0', '0']
+ ]
+
+ column = 0
+ for i in range(8):
+ for j in range(len(self.splited_fen[i])):
+ if self.splited_fen[i][j] in ('1', '2', '3', '4', '5', '6', '7', '8'):
+ column += int(self.splited_fen[i][j])
+ else:
+ matrix[i][column] = self.splited_fen[i][j]
+ column += 1
+ column = 0
+
+ return matrix
+
+ def __str__(self):
+ return self.fen
+
+ def __len__(self):
+ length = 0
+ for char in self.fen:
+ if char in ('R', 'N', 'B', 'Q', 'K', 'P', 'r', 'n', 'b', 'q', 'k', 'p'):
+ length += 1
+ return length
+
+ def __getitem__(self, item):
+ letters_to_nums = {'A': 0,
+ 'B': 1,
+ 'C': 2,
+ 'D': 3,
+ 'E': 4,
+ 'F': 5,
+ 'G': 6,
+ 'H': 7}
+ wanted_pon = self.matrix[0 - int(item[1])][letters_to_nums[item[0].upper()]]
+ if wanted_pon == '0':
+ return None
+ return wanted_pon
+
+ def check_pawn_position(self):
+ if 'p' in self.splited_fen[0] or 'p' in self.splited_fen[-1] or 'P' in self.splited_fen[0] or 'P' in \

Избягвай пренасяне на нов ред с наклонена черта на всяка цена. Можеш да дефинираш две промнеливи по-горе, за да се справиш с този недостатък.

+ self.splited_fen[-1]:
+ return False
+ return True
+
+ def check_kings_number(self):
+ if self.fen.count('K') != 1 or self.fen.count('k') != 1:
+ return False
+ return True
+
+ def check_kings_positions(self):
+ white_king_coordinates = (0, 0)
+ black_king_coordinates = (0, 0)
+ for line in range(len(self.matrix)):
+ if 'K' in self.matrix[line]:
+ white_king_coordinates = (line, self.matrix[line].index('K'))
+ if 'k' in self.matrix[line]:
+ black_king_coordinates = (line, self.matrix[line].index('k'))
+ x1, y1 = white_king_coordinates
+ x2, y2 = black_king_coordinates
+ if sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)) < 2:
+ return False
+ return True
+
+ def exception_calculation(self):
+ check_positions = (self.check_kings_positions(), self.check_kings_number(), self.check_pawn_position())
+ if check_positions.count(False) > 1 or not check_positions[0] or not check_positions[1]:
+ raise ChessException("kings")
+ raise ChessException("pawns")
+
+ def get_white_score(self):
+ white_pons = []
+
+ for char in self.fen:
+ if char in ('R', 'N', 'B', 'Q', 'K', 'P'):
+ white_pons.append(char)
+
+ return ChessScore(white_pons)
+
+ def get_black_score(self):
+ black_pons = []
+
+ for char in self.fen:
+ if char in ('r', 'n', 'b', 'q', 'k', 'p'):
+ black_pons.append(char)
+
+ return ChessScore(black_pons)
+
+ def pons_sum(self):
+ whites = 0
+ blacks = 0
+
+ for char in self.fen:
+ if char in white_pons_dict:
+ whites += white_pons_dict[char]
+ if char in black_pons_dict:
+ blacks += black_pons_dict[char]
+
+ self.white_sum = whites
+ self.black_sum = blacks
+
+ def white_is_winning(self):
+ return self.white_sum > self.black_sum
+
+ def black_is_winning(self):
+ return self.black_sum > self.white_sum
+
+ def is_equal(self):
+ return self.white_sum == self.black_sum

Харут обнови решението на 29.11.2022 11:14 (преди над 1 година)

from math import sqrt
white_pons_dict = {
'R': 5,
'N': 3,
'B': 3,
'Q': 9,
'K': 4,
'P': 1
}
black_pons_dict = {
'r': 5,
'n': 3,
'b': 3,
'q': 9,
'k': 4,
'p': 1
}
class ChessException(Exception):
pass
class ChessScore:
def __init__(self, pons):
self.pons = pons
self.sum_of_pones = self.pons_sum()
def pons_sum(self):
return sum(black_pons_dict[char] for char in self.pons)
+ def __int__(self):
+ return self.sum_of_pones
+
def __lt__(self, other):
return self.sum_of_pones < other.sum_of_pones
def __le__(self, other):
return self.sum_of_pones <= other.sum_of_pones
def __eq__(self, other):
return self.sum_of_pones == other.sum_of_pones
def __ne__(self, other):
return self.sum_of_pones != other.sum_of_pones
def __gt__(self, other):
return self.sum_of_pones > other.sum_of_pones
def __add__(self, other):
return self.sum_of_pones + other.sum_of_pones
def __sub__(self, other):
return self.sum_of_pones - other.sum_of_pones
class ChessPosition:
def __init__(self, fen):
self.fen = fen
self.splited_fen = fen.split('/')
self.matrix = self.matrix_from_fen()
self.white_sum = None
self.black_sum = None
self.pons_sum()
+ self.exception_calculation()
def matrix_from_fen(self):
matrix = [
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0']
]
column = 0
for i in range(8):
for j in range(len(self.splited_fen[i])):
if self.splited_fen[i][j] in ('1', '2', '3', '4', '5', '6', '7', '8'):
column += int(self.splited_fen[i][j])
else:
matrix[i][column] = self.splited_fen[i][j]
column += 1
column = 0
return matrix
def __str__(self):
return self.fen
def __len__(self):
length = 0
for char in self.fen:
if char in ('R', 'N', 'B', 'Q', 'K', 'P', 'r', 'n', 'b', 'q', 'k', 'p'):
length += 1
return length
def __getitem__(self, item):
letters_to_nums = {'A': 0,
'B': 1,
'C': 2,
'D': 3,
'E': 4,
'F': 5,
'G': 6,
'H': 7}
wanted_pon = self.matrix[0 - int(item[1])][letters_to_nums[item[0].upper()]]
if wanted_pon == '0':
return None
return wanted_pon
def check_pawn_position(self):
if 'p' in self.splited_fen[0] or 'p' in self.splited_fen[-1] or 'P' in self.splited_fen[0] or 'P' in \
self.splited_fen[-1]:
return False
return True
def check_kings_number(self):
if self.fen.count('K') != 1 or self.fen.count('k') != 1:
return False
return True
def check_kings_positions(self):
white_king_coordinates = (0, 0)
black_king_coordinates = (0, 0)
for line in range(len(self.matrix)):
if 'K' in self.matrix[line]:
white_king_coordinates = (line, self.matrix[line].index('K'))
if 'k' in self.matrix[line]:
black_king_coordinates = (line, self.matrix[line].index('k'))
x1, y1 = white_king_coordinates
x2, y2 = black_king_coordinates
if sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)) < 2:
return False
return True
def exception_calculation(self):
check_positions = (self.check_kings_positions(), self.check_kings_number(), self.check_pawn_position())
if check_positions.count(False) > 1 or not check_positions[0] or not check_positions[1]:
raise ChessException("kings")
- raise ChessException("pawns")
+ elif not self.check_kings_positions():
+ raise ChessException("pawns")
def get_white_score(self):
white_pons = []
for char in self.fen:
if char in ('R', 'N', 'B', 'Q', 'K', 'P'):
white_pons.append(char)
return ChessScore(white_pons)
def get_black_score(self):
black_pons = []
for char in self.fen:
if char in ('r', 'n', 'b', 'q', 'k', 'p'):
black_pons.append(char)
return ChessScore(black_pons)
def pons_sum(self):
whites = 0
blacks = 0
for char in self.fen:
if char in white_pons_dict:
whites += white_pons_dict[char]
if char in black_pons_dict:
blacks += black_pons_dict[char]
self.white_sum = whites
self.black_sum = blacks
def white_is_winning(self):
return self.white_sum > self.black_sum
def black_is_winning(self):
return self.black_sum > self.white_sum
def is_equal(self):
return self.white_sum == self.black_sum

Харут обнови решението на 29.11.2022 11:23 (преди над 1 година)

from math import sqrt
-
white_pons_dict = {
'R': 5,
'N': 3,
'B': 3,
'Q': 9,
'K': 4,
'P': 1
}
black_pons_dict = {
'r': 5,
'n': 3,
'b': 3,
'q': 9,
'k': 4,
'p': 1
}
class ChessException(Exception):
pass
class ChessScore:
def __init__(self, pons):
self.pons = pons
self.sum_of_pones = self.pons_sum()
def pons_sum(self):
return sum(black_pons_dict[char] for char in self.pons)
def __int__(self):
return self.sum_of_pones
def __lt__(self, other):
return self.sum_of_pones < other.sum_of_pones
def __le__(self, other):
return self.sum_of_pones <= other.sum_of_pones
def __eq__(self, other):
return self.sum_of_pones == other.sum_of_pones
def __ne__(self, other):
return self.sum_of_pones != other.sum_of_pones
def __gt__(self, other):
return self.sum_of_pones > other.sum_of_pones
def __add__(self, other):
return self.sum_of_pones + other.sum_of_pones
def __sub__(self, other):
return self.sum_of_pones - other.sum_of_pones
class ChessPosition:
def __init__(self, fen):
self.fen = fen
self.splited_fen = fen.split('/')
self.matrix = self.matrix_from_fen()
self.white_sum = None
self.black_sum = None
self.pons_sum()
self.exception_calculation()
def matrix_from_fen(self):
matrix = [

Хмм, не знам защо. Явно някакъв друг проблем при сетването.

matrix = [['0'] * 8 for _ in range(8)]

print(matrix) # [['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0']]
matrix[1][2] = 'test'
print(matrix) # [['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', 'test', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', 
'0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0'], ['0', '0', '0', '0', '0', '0', '0', '0']]
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0']
]
column = 0
for i in range(8):
for j in range(len(self.splited_fen[i])):
if self.splited_fen[i][j] in ('1', '2', '3', '4', '5', '6', '7', '8'):
column += int(self.splited_fen[i][j])
else:
matrix[i][column] = self.splited_fen[i][j]
column += 1
column = 0
return matrix
def __str__(self):
return self.fen
def __len__(self):
length = 0
for char in self.fen:
- if char in ('R', 'N', 'B', 'Q', 'K', 'P', 'r', 'n', 'b', 'q', 'k', 'p'):
+ if char in black_pons_dict.keys() or char in white_pons_dict.keys():
length += 1
return length
def __getitem__(self, item):
letters_to_nums = {'A': 0,
'B': 1,
'C': 2,
'D': 3,
'E': 4,
'F': 5,
'G': 6,
'H': 7}
wanted_pon = self.matrix[0 - int(item[1])][letters_to_nums[item[0].upper()]]
if wanted_pon == '0':
return None
return wanted_pon
def check_pawn_position(self):
if 'p' in self.splited_fen[0] or 'p' in self.splited_fen[-1] or 'P' in self.splited_fen[0] or 'P' in \
self.splited_fen[-1]:
return False
return True
def check_kings_number(self):
if self.fen.count('K') != 1 or self.fen.count('k') != 1:
return False
return True
def check_kings_positions(self):
white_king_coordinates = (0, 0)
black_king_coordinates = (0, 0)
for line in range(len(self.matrix)):
if 'K' in self.matrix[line]:
white_king_coordinates = (line, self.matrix[line].index('K'))
if 'k' in self.matrix[line]:
black_king_coordinates = (line, self.matrix[line].index('k'))
x1, y1 = white_king_coordinates
x2, y2 = black_king_coordinates
- if sqrt(pow((x1 - x2), 2) + pow((y1 - y2), 2)) < 2:
+ if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) < 2:
return False
return True
def exception_calculation(self):
check_positions = (self.check_kings_positions(), self.check_kings_number(), self.check_pawn_position())
if check_positions.count(False) > 1 or not check_positions[0] or not check_positions[1]:
raise ChessException("kings")
elif not self.check_kings_positions():
raise ChessException("pawns")
def get_white_score(self):
white_pons = []
for char in self.fen:
if char in ('R', 'N', 'B', 'Q', 'K', 'P'):
white_pons.append(char)
return ChessScore(white_pons)
def get_black_score(self):
black_pons = []
for char in self.fen:
if char in ('r', 'n', 'b', 'q', 'k', 'p'):
black_pons.append(char)
return ChessScore(black_pons)
def pons_sum(self):
whites = 0
blacks = 0
for char in self.fen:
if char in white_pons_dict:
whites += white_pons_dict[char]
if char in black_pons_dict:
blacks += black_pons_dict[char]
self.white_sum = whites
self.black_sum = blacks
def white_is_winning(self):
return self.white_sum > self.black_sum
def black_is_winning(self):
return self.black_sum > self.white_sum
def is_equal(self):
return self.white_sum == self.black_sum

Харут обнови решението на 29.11.2022 16:04 (преди над 1 година)

from math import sqrt
+
white_pons_dict = {
'R': 5,
'N': 3,
'B': 3,
'Q': 9,
'K': 4,
'P': 1
}
black_pons_dict = {
'r': 5,
'n': 3,
'b': 3,
'q': 9,
'k': 4,
'p': 1
}
class ChessException(Exception):
pass
class ChessScore:
def __init__(self, pons):
self.pons = pons
self.sum_of_pones = self.pons_sum()
def pons_sum(self):
- return sum(black_pons_dict[char] for char in self.pons)
+ return sum(black_pons_dict[char.lower()] for char in self.pons)
def __int__(self):
return self.sum_of_pones
def __lt__(self, other):
return self.sum_of_pones < other.sum_of_pones
def __le__(self, other):
return self.sum_of_pones <= other.sum_of_pones
def __eq__(self, other):
return self.sum_of_pones == other.sum_of_pones
def __ne__(self, other):
return self.sum_of_pones != other.sum_of_pones
def __gt__(self, other):
return self.sum_of_pones > other.sum_of_pones
def __add__(self, other):
return self.sum_of_pones + other.sum_of_pones
def __sub__(self, other):
return self.sum_of_pones - other.sum_of_pones
class ChessPosition:
def __init__(self, fen):
self.fen = fen
self.splited_fen = fen.split('/')
self.matrix = self.matrix_from_fen()
self.white_sum = None
self.black_sum = None
self.pons_sum()
self.exception_calculation()
def matrix_from_fen(self):
matrix = [
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0'],
['0', '0', '0', '0', '0', '0', '0', '0']
]
column = 0
for i in range(8):
for j in range(len(self.splited_fen[i])):
if self.splited_fen[i][j] in ('1', '2', '3', '4', '5', '6', '7', '8'):
column += int(self.splited_fen[i][j])
else:
matrix[i][column] = self.splited_fen[i][j]
column += 1
column = 0
return matrix
def __str__(self):
return self.fen
def __len__(self):
length = 0
for char in self.fen:
if char in black_pons_dict.keys() or char in white_pons_dict.keys():
length += 1
return length
def __getitem__(self, item):
letters_to_nums = {'A': 0,
'B': 1,
'C': 2,
'D': 3,
'E': 4,
'F': 5,
'G': 6,
'H': 7}
wanted_pon = self.matrix[0 - int(item[1])][letters_to_nums[item[0].upper()]]
if wanted_pon == '0':
return None
return wanted_pon
def check_pawn_position(self):
if 'p' in self.splited_fen[0] or 'p' in self.splited_fen[-1] or 'P' in self.splited_fen[0] or 'P' in \
self.splited_fen[-1]:
return False
return True
def check_kings_number(self):
if self.fen.count('K') != 1 or self.fen.count('k') != 1:
return False
return True
def check_kings_positions(self):
white_king_coordinates = (0, 0)
black_king_coordinates = (0, 0)
for line in range(len(self.matrix)):
if 'K' in self.matrix[line]:
white_king_coordinates = (line, self.matrix[line].index('K'))
if 'k' in self.matrix[line]:
black_king_coordinates = (line, self.matrix[line].index('k'))
x1, y1 = white_king_coordinates
x2, y2 = black_king_coordinates
if sqrt((x1 - x2) ** 2 + (y1 - y2) ** 2) < 2:
return False
return True
def exception_calculation(self):
check_positions = (self.check_kings_positions(), self.check_kings_number(), self.check_pawn_position())
if check_positions.count(False) > 1 or not check_positions[0] or not check_positions[1]:
raise ChessException("kings")
- elif not self.check_kings_positions():
+ elif not self.check_pawn_position():
raise ChessException("pawns")
def get_white_score(self):
white_pons = []
for char in self.fen:
if char in ('R', 'N', 'B', 'Q', 'K', 'P'):
white_pons.append(char)
return ChessScore(white_pons)
def get_black_score(self):
black_pons = []
for char in self.fen:
if char in ('r', 'n', 'b', 'q', 'k', 'p'):
black_pons.append(char)
return ChessScore(black_pons)
def pons_sum(self):
whites = 0
blacks = 0
for char in self.fen:
if char in white_pons_dict:
whites += white_pons_dict[char]
if char in black_pons_dict:
blacks += black_pons_dict[char]
self.white_sum = whites
self.black_sum = blacks
def white_is_winning(self):
return self.white_sum > self.black_sum
def black_is_winning(self):
return self.black_sum > self.white_sum
def is_equal(self):
return self.white_sum == self.black_sum