-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbook.shl
More file actions
110 lines (100 loc) · 4.18 KB
/
book.shl
File metadata and controls
110 lines (100 loc) · 4.18 KB
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
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
use "constants.shl"
use "moves.shl"
to square_to_str sq
r = int(sq / 8)
c = sq % 8
f = char(ord("a") + c)
rank = str(8 - r)
give f + rank
to move_to_str move
give square_to_str(move.from_sq) + square_to_str(move.to_sq)
opening_book = {
"": ["e2e4", "d2d4", "g1f3", "c2c4"],
"e2e4": ["e7e5", "c7c5", "e7e6", "c7c6"],
"e2e4 e7e5": ["g1f3", "f2f4", "b1c3", "d2d4"],
"e2e4 e7e5 d2d4": ["e5d4"],
"e2e4 e7e5 d2d4 e5d4": ["c2c3"],
"e2e4 e7e5 d2d4 e5d4 c2c3 d4c3": ["f1c4"],
"e2e4 e7e5 d2d4 e5d4 c2c3 d4c3 f1c4 c3b2": ["c1b2"],
"e2e4 e7e5 f2f4": ["e5f4"],
"e2e4 e7e5 f2f4 e5f4": ["g1f3", "f1c4"],
"e2e4 e7e5 g1f3": ["b8c6", "g8f6", "d7d6"],
"e2e4 e7e5 g1f3 g8f6": ["f3e5"],
"e2e4 e7e5 g1f3 g8f6 f3e5": ["b8c6"],
"e2e4 e7e5 g1f3 g8f6 f3e5 b8c6 e5c6": ["d7c6"],
"e2e4 e7e5 g1f3 g8f6 f3e5 b8c6 e5c6 d7c6 d2d3": ["f8c5"],
"e2e4 e7e5 g1f3 g8f6 f3e5 b8c6 e5c6 d7c6 b1c3": ["f8c5"],
"e2e4 e7e5 g1f3 b8c6": ["f1b5", "f1c4", "d2d4"],
"e2e4 e7e5 g1f3 b8c6 f1b5": ["a7a6", "g8f6", "d2d3", "f2f4"],
"e2e4 e7e5 g1f3 b8c6 f1b5 a7a6": ["b5a4", "b5c6"],
"e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4": ["g8f6", "d7d6"],
"e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6": ["e1g1", "d2d3"],
"e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1": ["f6e4", "b7b5", "d7d6"],
"e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 f6e4": ["d2d4"],
"e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 b7b5": ["a4b3"],
"e2e4 e7e5 g1f3 b8c6 f1b5 a7a6 b5a4 g8f6 e1g1 b7b5 a4b3": ["f8c5", "f8e7"],
"e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 a7a6": ["c1e3", "c1g5", "f1e2", "f2f3", "h2h3"],
"e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3 g7g6": ["c1e3", "c1g5", "f2f3", "f1e2"],
"e2e4 c7c5 g1f3 e7e6": ["d2d4"],
"e2e4 c7c5 g1f3 e7e6 d2d4": ["c5d4"],
"e2e4 c7c5 g1f3 e7e6 d2d4 c5d4": ["f3d4"],
"e2e4 c7c5 g1f3 e7e6 d2d4 c5d4 f3d4": ["b8c6", "a7a6", "g8f6"],
"e2e4 c7c6 d2d4 d7d5 b1c3": ["d5e4"],
"e2e4 c7c6 d2d4 d7d5 b1c3 d5e4": ["c3e4"],
"e2e4 c7c6 d2d4 d7d5 b1c3 d5e4 c3e4": ["c8f5", "g8f6", "b8d7"],
"e2e4 c7c6 d2d4 d7d5 e4e5": ["c8f5", "c7c5"],
"e2e4 e7e6 d2d4 d7d5 b1c3": ["g8f6", "f8b4"],
"e2e4 e7e6 d2d4 d7d5 b1c3 g8f6": ["c1g5", "e4e5"],
"e2e4 e7e6 d2d4 d7d5 b1c3 f8b4": ["e4e5"],
"e2e4 d7d5": ["e4d5"],
"e2e4 d7d5 e4d5": ["d8d5", "g8f6"],
"d2d4": ["d7d5", "g8f6"],
"d2d4 d7d5 c2c4 c7c6": ["g1f3", "b1c3", "c4d5"],
"d2d4 d7d5 c2c4 c7c6 g1f3": ["g8f6"],
"d2d4 d7d5 c2c4 c7c6 g1f3 g8f6": ["b1c3", "e2e3"],
"g1f3": ["d7d5", "g8f6", "c7c5"],
"c2c4": ["e7e5", "c7c5", "g8f6", "e7e6"],
"d2d4 d7d5 c2c4": ["e7e6", "c7c6", "d5c4"],
"d2d4 d7d5 c2c4 d5c4": ["e2e4", "g1f3"],
"d2d4 d7d5 c2c4 e7e6": ["b1c3", "g1f3"],
"d2d4 d7d5 c2c4 e7e6 b1c3": ["g8f6"],
"d2d4 g8f6": ["c2c4", "g1f3"],
"d2d4 g8f6 c2c4": ["e7e6", "g7g6", "e7e5"],
"d2d4 g8f6 c2c4 e7e5": ["d4e5"],
"d2d4 g8f6 c2c4 e7e5 d4e5": ["f6g4"],
"d2d4 g8f6 c2c4 e7e6": ["g1f3", "b1c3"],
"d2d4 g8f6 c2c4 g7g6": ["b1c3", "g1f3"],
"d2d4 g8f6 c2c4 g7g6 b1c3": ["d7d5", "e2e4"],
"d2d4 g8f6 c2c4 c7c5": ["d4d5"],
"d2d4 g8f6 c2c4 c7c5 d4d5": ["b7b5"],
"d2d4 g8f6 c2c4 c7c5 d4d5 b7b5 d5b5": ["a7a6"]
}
to is_starting_position board
if board.squares[0] != ROOK + BLACK or board.squares[4] != KING + BLACK or board.squares[7] != ROOK + BLACK
give no
if board.squares[56] != ROOK + WHITE or board.squares[60] != KING + WHITE or board.squares[63] != ROOK + WHITE
give no
give yes
to get_book_move board
if not is_starting_position(board)
give null
seq = ""
for state in board.history
m = state["move"]
m_str = move_to_str(m)
if seq == ""
seq = m_str
else
seq = seq + " " + m_str
if contains(opening_book, seq)
choices = opening_book[seq]
n_choices = len(choices)
if n_choices > 0
idx = randint(0, n_choices - 1)
chosen_str = choices[idx]
legal_moves = generate_legal_moves(board)
for m in legal_moves
if move_to_str(m) == chosen_str
print("info string Opening book play: " + chosen_str)
give m
give null