-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathPawn_Brotherhood.py
60 lines (53 loc) · 1.91 KB
/
Pawn_Brotherhood.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
def safe_pawns(pawns: set) -> int:
"""
Return number of 'safe' pawns by taking pawns position inside.
"""
global count
count = 0
safe_list = []
# Check for pawns on borders
def left_border(i, pawns):
global count
for el in pawns:
if el[0] == chr(ord(i[0]) + 1) and int(el[1]) == int(i[1])-1 and i not in safe_list:
count += 1
safe_list.append(i)
#print(i, ", safe")
return count
def right_border(i, pawns):
global count
for el in pawns:
if el[0] == chr(ord(i[0]) - 1) and int(el[1]) == int(i[1])-1 and i not in safe_list:
count += 1
safe_list.append(i)
#print(i, ", safe")
return count
# Check for pawns inside playdesk
def inside(i, pawns):
global count
for el in pawns:
if el[0] == chr(ord(i[0]) + 1) and int(el[1]) == int(i[1])-1 and i not in safe_list:
count += 1
safe_list.append(i)
#print(i, ", safe")
elif el[0] == chr(ord(i[0]) - 1) and int(el[1]) == int(i[1])-1 and i not in safe_list:
count += 1
safe_list.append(i)
#print(i, ", safe")
return count
# Main loop, that maintain upper functions, depending on each pawn spot
for element in pawns:
if '1' in element:
pass
elif 'a' in element:
left_border(element, pawns)
elif 'h' in element:
right_border(element, pawns)
else:
inside(element, pawns)
return count
if __name__ == "__main__":
print(safe_pawns({"b4", "d4", "f4", "c3", "e3", "g5", "d2"})) # 6
print(safe_pawns({"b4", "c4", "d4", "e4", "f4", "g4", "e5"})) # 1
print(safe_pawns({"b4", "c4", "d4"})) # 0
print(safe_pawns({"b4", "d4", "c3"})) # 1