-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbook.shl
More file actions
83 lines (73 loc) · 2.67 KB
/
book.shl
File metadata and controls
83 lines (73 loc) · 2.67 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
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"],
"e2e4 e7e5 g1f3": ["b8c6", "g8f6", "d7d6"],
"e2e4 e7e5 g1f3 b8c6": ["f1b5", "f1c4", "d2d4"],
"e2e4 e7e5 g1f3 b8c6 f1b5": ["a7a6", "g8f6"],
"e2e4 e7e5 g1f3 b8c6 f1c4": ["g8f6", "f1c5"],
"e2e4 e7e5 g1f3 b8c6 d2d4": ["e5d4"],
"e2e4 e7e5 g1f3 b8c6 d2d4 e5d4": ["f3d4", "c2c3"],
"e2e4 c7c5": ["g1f3", "b1c3", "c2c3"],
"e2e4 c7c5 g1f3": ["d7d6", "e7e6", "b8c6"],
"e2e4 c7c5 g1f3 d7d6": ["d2d4"],
"e2e4 c7c5 g1f3 d7d6 d2d4 c5d4": ["f3d4"],
"e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4": ["g8f6"],
"e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6": ["b1c3"],
"e2e4 c7c5 g1f3 d7d6 d2d4 c5d4 f3d4 g8f6 b1c3": ["a7a6", "g7g6", "e7e6"],
"e2e4 e7e6": ["d2d4"],
"e2e4 e7e6 d2d4": ["d7d5"],
"e2e4 e7e6 d2d4 d7d5": ["b1c3", "e4e5", "e4d5"],
"e2e4 c7c6": ["d2d4"],
"e2e4 c7c6 d2d4": ["d7d5"],
"e2e4 c7c6 d2d4 d7d5": ["b1c3", "e4e5", "e4d5"],
"d2d4": ["d7d5", "g8f6"],
"d2d4 d7d5": ["c2c4", "g1f3"],
"d2d4 d7d5 c2c4": ["e7e6", "c7c6", "d5c4"],
"d2d4 d7d5 c2c4 e7e6": ["b1c3", "g1f3"],
"d2d4 d7d5 c2c4 e7e6 b1c3": ["g8f6"],
"d2d4 g8f6": ["c2c4", "g1f3"],
"d2d4 g8f6 c2c4": ["e7e6", "g7g6"],
"d2d4 g8f6 c2c4 e7e6": ["g1f3", "b1c3"],
"d2d4 g8f6 c2c4 g7g6": ["b1c3", "g1f3"],
"d2d4 g8f6 c2c4 g7g6 b1c3": ["d7d5", "e2e4"]
}
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