shogiops 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/attacks.d.ts +27 -6
- package/attacks.js +207 -66
- package/attacks.js.map +1 -1
- package/board.d.ts +8 -21
- package/board.js +35 -75
- package/board.js.map +1 -1
- package/compat.d.ts +7 -4
- package/compat.js +19 -18
- package/compat.js.map +1 -1
- package/debug.d.ts +4 -5
- package/debug.js +32 -24
- package/debug.js.map +1 -1
- package/index.d.ts +11 -7
- package/index.js +11 -7
- package/index.js.map +1 -1
- package/notation/csa/csa.d.ts +7 -7
- package/notation/csa/csa.js +11 -11
- package/notation/csa/csa.js.map +1 -1
- package/notation/japanese.d.ts +1 -1
- package/notation/japanese.js +70 -40
- package/notation/japanese.js.map +1 -1
- package/notation/kif/kif.d.ts +7 -4
- package/notation/kif/kif.js +113 -60
- package/notation/kif/kif.js.map +1 -1
- package/notation/kitaoKawasaki.d.ts +1 -1
- package/notation/kitaoKawasaki.js +24 -11
- package/notation/kitaoKawasaki.js.map +1 -1
- package/notation/notationUtil.d.ts +1 -1
- package/notation/notationUtil.js +1 -1
- package/notation/notationUtil.js.map +1 -1
- package/notation/western.d.ts +1 -1
- package/notation/western.js +24 -9
- package/notation/western.js.map +1 -1
- package/notation/westernEngine.d.ts +1 -1
- package/notation/westernEngine.js +24 -9
- package/notation/westernEngine.js.map +1 -1
- package/package.json +13 -12
- package/sfen.d.ts +16 -12
- package/sfen.js +387 -76
- package/sfen.js.map +1 -1
- package/squareSet.d.ts +5 -1
- package/squareSet.js +45 -17
- package/squareSet.js.map +1 -1
- package/src/attacks.ts +227 -71
- package/src/board.ts +34 -92
- package/src/compat.ts +32 -20
- package/src/debug.ts +38 -28
- package/src/index.ts +29 -26
- package/src/notation/csa/csa.ts +21 -19
- package/src/notation/japanese.ts +83 -45
- package/src/notation/kif/kif.ts +142 -63
- package/src/notation/kitaoKawasaki.ts +34 -14
- package/src/notation/western.ts +25 -10
- package/src/notation/westernEngine.ts +25 -10
- package/src/sfen.ts +414 -73
- package/src/squareSet.ts +60 -17
- package/src/types.ts +70 -21
- package/src/util.ts +55 -265
- package/types.d.ts +31 -17
- package/types.js +43 -12
- package/types.js.map +1 -1
- package/util.d.ts +6 -9
- package/util.js +42 -233
- package/util.js.map +1 -1
- package/hand.d.ts +0 -38
- package/hand.js +0 -69
- package/hand.js.map +0 -1
- package/shogi.d.ts +0 -67
- package/shogi.js +0 -370
- package/shogi.js.map +0 -1
- package/src/hand.ts +0 -94
- package/src/notation/notationUtil.ts +0 -122
- package/src/shogi.ts +0 -428
- package/src/variant.ts +0 -70
- package/src/variantUtil.ts +0 -163
- package/variant.d.ts +0 -17
- package/variant.js +0 -47
- package/variant.js.map +0 -1
- package/variantUtil.d.ts +0 -13
- package/variantUtil.js +0 -149
- package/variantUtil.js.map +0 -1
package/attacks.d.ts
CHANGED
|
@@ -1,15 +1,36 @@
|
|
|
1
|
-
import { Square, Piece, Color } from './types.js';
|
|
2
1
|
import { SquareSet } from './squareSet.js';
|
|
2
|
+
import { Color, Piece, Square } from './types.js';
|
|
3
3
|
export declare function kingAttacks(square: Square): SquareSet;
|
|
4
|
-
export declare function knightAttacks(
|
|
5
|
-
export declare function silverAttacks(
|
|
6
|
-
export declare function goldAttacks(
|
|
7
|
-
export declare function pawnAttacks(
|
|
4
|
+
export declare function knightAttacks(square: Square, color: Color): SquareSet;
|
|
5
|
+
export declare function silverAttacks(square: Square, color: Color): SquareSet;
|
|
6
|
+
export declare function goldAttacks(square: Square, color: Color): SquareSet;
|
|
7
|
+
export declare function pawnAttacks(square: Square, color: Color): SquareSet;
|
|
8
8
|
export declare function bishopAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
9
9
|
export declare function rookAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
10
|
-
export declare function lanceAttacks(
|
|
10
|
+
export declare function lanceAttacks(square: Square, color: Color, occupied: SquareSet): SquareSet;
|
|
11
11
|
export declare function horseAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
12
12
|
export declare function dragonAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
13
|
+
export declare function goBetweenAttacks(square: Square): SquareSet;
|
|
14
|
+
export declare function chariotAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
15
|
+
export declare function sideMoverAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
16
|
+
export declare function verticalMoverAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
17
|
+
export declare function copperAttacks(square: Square, color: Color): SquareSet;
|
|
18
|
+
export declare function leopardAttacks(square: Square): SquareSet;
|
|
19
|
+
export declare function tigerAttacks(square: Square, color: Color): SquareSet;
|
|
20
|
+
export declare function elephantAttacks(square: Square, color: Color): SquareSet;
|
|
21
|
+
export declare function kirinAttacks(square: Square): SquareSet;
|
|
22
|
+
export declare function phoenixAttacks(square: Square): SquareSet;
|
|
23
|
+
export declare function queenAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
24
|
+
export declare function stagAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
25
|
+
export declare function oxAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
26
|
+
export declare function boarAttacks(square: Square, occupied: SquareSet): SquareSet;
|
|
27
|
+
export declare function whaleAttacks(square: Square, color: Color, occupied: SquareSet): SquareSet;
|
|
28
|
+
export declare function whiteHorseAttacks(square: Square, color: Color, occupied: SquareSet): SquareSet;
|
|
29
|
+
export declare function falconLionAttacks(square: Square, color: Color): SquareSet;
|
|
30
|
+
export declare function falconAttacks(square: Square, color: Color, occupied: SquareSet): SquareSet;
|
|
31
|
+
export declare function eagleLionAttacks(square: Square, color: Color): SquareSet;
|
|
32
|
+
export declare function eagleAttacks(square: Square, color: Color, occupied: SquareSet): SquareSet;
|
|
33
|
+
export declare function lionAttacks(square: Square): SquareSet;
|
|
13
34
|
export declare function attacks(piece: Piece, square: Square, occupied: SquareSet): SquareSet;
|
|
14
35
|
export declare function ray(a: Square, b: Square): SquareSet;
|
|
15
36
|
export declare function between(a: Square, b: Square): SquareSet;
|
package/attacks.js
CHANGED
|
@@ -1,70 +1,36 @@
|
|
|
1
|
-
import { squareFile, squareRank } from './util.js';
|
|
2
1
|
import { SquareSet } from './squareSet.js';
|
|
2
|
+
import { opposite, squareFile, squareRank } from './util.js';
|
|
3
3
|
function computeRange(square, deltas) {
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
const sq = square + delta;
|
|
7
|
-
if (0 <= sq && sq < 256 && Math.abs(squareFile(square) - squareFile(sq)) <= 2) {
|
|
8
|
-
range = range.with(sq);
|
|
9
|
-
}
|
|
10
|
-
}
|
|
11
|
-
return range;
|
|
4
|
+
const file = squareFile(square), dests = deltas.map(delta => square + delta).filter(sq => Math.abs(file - squareFile(sq)) <= 2);
|
|
5
|
+
return SquareSet.fromSquares(...dests);
|
|
12
6
|
}
|
|
13
|
-
function
|
|
7
|
+
function tabulateSquares(f) {
|
|
14
8
|
const table = [];
|
|
15
9
|
for (let square = 0; square < 256; square++)
|
|
16
10
|
table[square] = f(square);
|
|
17
11
|
return table;
|
|
18
12
|
}
|
|
19
|
-
|
|
20
|
-
const
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
const PAWN_ATTACKS = {
|
|
25
|
-
sente: tabulate(sq => computeRange(sq, [-16])),
|
|
26
|
-
gote: tabulate(sq => computeRange(sq, [16])),
|
|
27
|
-
};
|
|
28
|
-
const SILVER_ATTACKS = {
|
|
29
|
-
sente: tabulate(sq => computeRange(sq, [17, 15, -15, -16, -17])),
|
|
30
|
-
gote: tabulate(sq => computeRange(sq, [17, 16, 15, -15, -17])),
|
|
31
|
-
};
|
|
32
|
-
const GOLD_ATTACKS = {
|
|
33
|
-
sente: tabulate(sq => computeRange(sq, [16, 1, -1, -15, -16, -17])),
|
|
34
|
-
gote: tabulate(sq => computeRange(sq, [17, 16, 15, 1, -1, -16])),
|
|
35
|
-
};
|
|
36
|
-
export function kingAttacks(square) {
|
|
37
|
-
return KING_ATTACKS[square];
|
|
38
|
-
}
|
|
39
|
-
export function knightAttacks(color, square) {
|
|
40
|
-
return KNIGHT_ATTACKS[color][square];
|
|
41
|
-
}
|
|
42
|
-
export function silverAttacks(color, square) {
|
|
43
|
-
return SILVER_ATTACKS[color][square];
|
|
44
|
-
}
|
|
45
|
-
export function goldAttacks(color, square) {
|
|
46
|
-
return GOLD_ATTACKS[color][square];
|
|
47
|
-
}
|
|
48
|
-
export function pawnAttacks(color, square) {
|
|
49
|
-
return PAWN_ATTACKS[color][square];
|
|
13
|
+
function tabulateRanks(f) {
|
|
14
|
+
const table = [];
|
|
15
|
+
for (let rank = 0; rank < 16; rank++)
|
|
16
|
+
table[rank] = f(rank);
|
|
17
|
+
return table;
|
|
50
18
|
}
|
|
51
|
-
const
|
|
52
|
-
const
|
|
53
|
-
const
|
|
54
|
-
const
|
|
55
|
-
const
|
|
56
|
-
|
|
57
|
-
const shift = 16 * (squareRank(sq) - squareFile(sq));
|
|
19
|
+
const FORW_RANKS = tabulateRanks(rank => SquareSet.ranksAbove(rank));
|
|
20
|
+
const BACK_RANKS = tabulateRanks(rank => SquareSet.ranksBelow(rank));
|
|
21
|
+
const NEIGHBORS = tabulateSquares(sq => computeRange(sq, [-17, -16, -15, -1, 1, 15, 16, 17]));
|
|
22
|
+
const FILE_RANGE = tabulateSquares(sq => SquareSet.fromFile(squareFile(sq)).without(sq));
|
|
23
|
+
const RANK_RANGE = tabulateSquares(sq => SquareSet.fromRank(squareRank(sq)).without(sq));
|
|
24
|
+
const DIAG_RANGE = tabulateSquares(sq => {
|
|
25
|
+
const diag = new SquareSet([0x20001, 0x80004, 0x200010, 0x800040, 0x2000100, 0x8000400, 0x20001000, 0x80004000]), shift = 16 * (squareRank(sq) - squareFile(sq));
|
|
58
26
|
return (shift >= 0 ? diag.shl256(shift) : diag.shr256(-shift)).without(sq);
|
|
59
27
|
});
|
|
60
|
-
const ANTI_DIAG_RANGE =
|
|
61
|
-
const diag = new SquareSet([0x40008000, 0x10002000, 0x4000800, 0x1000200, 0x400080, 0x100020, 0x40008, 0x10002]);
|
|
62
|
-
const shift = 16 * (squareRank(sq) + squareFile(sq) - 15);
|
|
28
|
+
const ANTI_DIAG_RANGE = tabulateSquares(sq => {
|
|
29
|
+
const diag = new SquareSet([0x40008000, 0x10002000, 0x4000800, 0x1000200, 0x400080, 0x100020, 0x40008, 0x10002]), shift = 16 * (squareRank(sq) + squareFile(sq) - 15);
|
|
63
30
|
return (shift >= 0 ? diag.shl256(shift) : diag.shr256(-shift)).without(sq);
|
|
64
31
|
});
|
|
65
32
|
function hyperbola(bit, range, occupied) {
|
|
66
|
-
let forward = occupied.intersect(range);
|
|
67
|
-
let reverse = forward.rowSwap256(); // Assumes no more than 1 bit per rank
|
|
33
|
+
let forward = occupied.intersect(range), reverse = forward.rowSwap256(); // Assumes no more than 1 bit per rank
|
|
68
34
|
forward = forward.minus256(bit);
|
|
69
35
|
reverse = reverse.minus256(bit.rowSwap256());
|
|
70
36
|
return forward.xor(reverse.rowSwap256()).intersect(range);
|
|
@@ -74,12 +40,38 @@ function fileAttacks(square, occupied) {
|
|
|
74
40
|
}
|
|
75
41
|
function rankAttacks(square, occupied) {
|
|
76
42
|
const range = RANK_RANGE[square];
|
|
77
|
-
let forward = occupied.intersect(range);
|
|
78
|
-
let reverse = forward.rbit256();
|
|
43
|
+
let forward = occupied.intersect(range), reverse = forward.rbit256();
|
|
79
44
|
forward = forward.minus256(SquareSet.fromSquare(square));
|
|
80
45
|
reverse = reverse.minus256(SquareSet.fromSquare(255 - square));
|
|
81
46
|
return forward.xor(reverse.rbit256()).intersect(range);
|
|
82
47
|
}
|
|
48
|
+
export function kingAttacks(square) {
|
|
49
|
+
return NEIGHBORS[square];
|
|
50
|
+
}
|
|
51
|
+
export function knightAttacks(square, color) {
|
|
52
|
+
if (color === 'sente')
|
|
53
|
+
return computeRange(square, [-31, -33]);
|
|
54
|
+
else
|
|
55
|
+
return computeRange(square, [31, 33]);
|
|
56
|
+
}
|
|
57
|
+
export function silverAttacks(square, color) {
|
|
58
|
+
if (color === 'sente')
|
|
59
|
+
return NEIGHBORS[square].withoutMany(square + 16, square - 1, square + 1);
|
|
60
|
+
else
|
|
61
|
+
return NEIGHBORS[square].withoutMany(square - 16, square - 1, square + 1);
|
|
62
|
+
}
|
|
63
|
+
export function goldAttacks(square, color) {
|
|
64
|
+
if (color === 'sente')
|
|
65
|
+
return NEIGHBORS[square].withoutMany(square + 17, square + 15);
|
|
66
|
+
else
|
|
67
|
+
return NEIGHBORS[square].withoutMany(square - 17, square - 15);
|
|
68
|
+
}
|
|
69
|
+
export function pawnAttacks(square, color) {
|
|
70
|
+
if (color === 'sente')
|
|
71
|
+
return SquareSet.fromSquare(square - 16);
|
|
72
|
+
else
|
|
73
|
+
return SquareSet.fromSquare(square + 16);
|
|
74
|
+
}
|
|
83
75
|
export function bishopAttacks(square, occupied) {
|
|
84
76
|
const bit = SquareSet.fromSquare(square);
|
|
85
77
|
return hyperbola(bit, DIAG_RANGE[square], occupied).xor(hyperbola(bit, ANTI_DIAG_RANGE[square], occupied));
|
|
@@ -87,10 +79,11 @@ export function bishopAttacks(square, occupied) {
|
|
|
87
79
|
export function rookAttacks(square, occupied) {
|
|
88
80
|
return fileAttacks(square, occupied).xor(rankAttacks(square, occupied));
|
|
89
81
|
}
|
|
90
|
-
export function lanceAttacks(
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
82
|
+
export function lanceAttacks(square, color, occupied) {
|
|
83
|
+
if (color === 'sente')
|
|
84
|
+
return fileAttacks(square, occupied).intersect(FORW_RANKS[squareRank(square)]);
|
|
85
|
+
else
|
|
86
|
+
return fileAttacks(square, occupied).intersect(BACK_RANKS[squareRank(square)]);
|
|
94
87
|
}
|
|
95
88
|
export function horseAttacks(square, occupied) {
|
|
96
89
|
return bishopAttacks(square, occupied).union(kingAttacks(square));
|
|
@@ -98,30 +91,178 @@ export function horseAttacks(square, occupied) {
|
|
|
98
91
|
export function dragonAttacks(square, occupied) {
|
|
99
92
|
return rookAttacks(square, occupied).union(kingAttacks(square));
|
|
100
93
|
}
|
|
94
|
+
// Chushogi pieces
|
|
95
|
+
export function goBetweenAttacks(square) {
|
|
96
|
+
return SquareSet.fromSquares(square - 16, square + 16);
|
|
97
|
+
}
|
|
98
|
+
export function chariotAttacks(square, occupied) {
|
|
99
|
+
return fileAttacks(square, occupied);
|
|
100
|
+
}
|
|
101
|
+
export function sideMoverAttacks(square, occupied) {
|
|
102
|
+
return rankAttacks(square, occupied).union(SquareSet.fromSquares(square - 16, square + 16));
|
|
103
|
+
}
|
|
104
|
+
export function verticalMoverAttacks(square, occupied) {
|
|
105
|
+
return fileAttacks(square, occupied).union(computeRange(square, [-1, 1]));
|
|
106
|
+
}
|
|
107
|
+
export function copperAttacks(square, color) {
|
|
108
|
+
if (color === 'sente')
|
|
109
|
+
return NEIGHBORS[square].withoutMany(square + 17, square + 15, square + 1, square - 1);
|
|
110
|
+
else
|
|
111
|
+
return NEIGHBORS[square].withoutMany(square - 17, square - 15, square - 1, square + 1);
|
|
112
|
+
}
|
|
113
|
+
export function leopardAttacks(square) {
|
|
114
|
+
return NEIGHBORS[square].withoutMany(square + 1, square - 1);
|
|
115
|
+
}
|
|
116
|
+
export function tigerAttacks(square, color) {
|
|
117
|
+
if (color === 'sente')
|
|
118
|
+
return NEIGHBORS[square].without(square - 16);
|
|
119
|
+
else
|
|
120
|
+
return NEIGHBORS[square].without(square + 16);
|
|
121
|
+
}
|
|
122
|
+
export function elephantAttacks(square, color) {
|
|
123
|
+
return tigerAttacks(square, opposite(color));
|
|
124
|
+
}
|
|
125
|
+
export function kirinAttacks(square) {
|
|
126
|
+
return NEIGHBORS[square]
|
|
127
|
+
.withoutMany(square + 1, square - 1, square + 16, square - 16)
|
|
128
|
+
.union(computeRange(square, [32, -32, -2, 2]));
|
|
129
|
+
}
|
|
130
|
+
export function phoenixAttacks(square) {
|
|
131
|
+
return NEIGHBORS[square]
|
|
132
|
+
.withoutMany(square - 15, square - 17, square + 15, square + 17)
|
|
133
|
+
.union(computeRange(square, [30, 34, -30, -34]));
|
|
134
|
+
}
|
|
135
|
+
export function queenAttacks(square, occupied) {
|
|
136
|
+
return rookAttacks(square, occupied).union(bishopAttacks(square, occupied));
|
|
137
|
+
}
|
|
138
|
+
export function stagAttacks(square, occupied) {
|
|
139
|
+
return fileAttacks(square, occupied).union(NEIGHBORS[square]);
|
|
140
|
+
}
|
|
141
|
+
export function oxAttacks(square, occupied) {
|
|
142
|
+
return fileAttacks(square, occupied).union(bishopAttacks(square, occupied));
|
|
143
|
+
}
|
|
144
|
+
export function boarAttacks(square, occupied) {
|
|
145
|
+
return rankAttacks(square, occupied).union(bishopAttacks(square, occupied));
|
|
146
|
+
}
|
|
147
|
+
export function whaleAttacks(square, color, occupied) {
|
|
148
|
+
if (color === 'sente')
|
|
149
|
+
return fileAttacks(square, occupied).union(bishopAttacks(square, occupied).intersect(BACK_RANKS[squareRank(square)]));
|
|
150
|
+
else
|
|
151
|
+
return fileAttacks(square, occupied).union(bishopAttacks(square, occupied).intersect(FORW_RANKS[squareRank(square)]));
|
|
152
|
+
}
|
|
153
|
+
export function whiteHorseAttacks(square, color, occupied) {
|
|
154
|
+
return whaleAttacks(square, opposite(color), occupied);
|
|
155
|
+
}
|
|
156
|
+
export function falconLionAttacks(square, color) {
|
|
157
|
+
if (color === 'sente')
|
|
158
|
+
return SquareSet.fromSquares(square - 16, square - 32);
|
|
159
|
+
else
|
|
160
|
+
return SquareSet.fromSquares(square + 16, square + 32);
|
|
161
|
+
}
|
|
162
|
+
export function falconAttacks(square, color, occupied) {
|
|
163
|
+
if (color === 'sente')
|
|
164
|
+
return bishopAttacks(square, occupied)
|
|
165
|
+
.union(rankAttacks(square, occupied))
|
|
166
|
+
.union(fileAttacks(square, occupied).intersect(BACK_RANKS[squareRank(square)]))
|
|
167
|
+
.union(falconLionAttacks(square, color));
|
|
168
|
+
else
|
|
169
|
+
return bishopAttacks(square, occupied)
|
|
170
|
+
.union(rankAttacks(square, occupied))
|
|
171
|
+
.union(fileAttacks(square, occupied).intersect(FORW_RANKS[squareRank(square)]))
|
|
172
|
+
.union(falconLionAttacks(square, color));
|
|
173
|
+
}
|
|
174
|
+
export function eagleLionAttacks(square, color) {
|
|
175
|
+
if (color === 'sente')
|
|
176
|
+
return computeRange(square, [-15, -17, -30, -34]);
|
|
177
|
+
else
|
|
178
|
+
return computeRange(square, [15, 17, 30, 34]);
|
|
179
|
+
}
|
|
180
|
+
export function eagleAttacks(square, color, occupied) {
|
|
181
|
+
if (color === 'sente')
|
|
182
|
+
return rookAttacks(square, occupied)
|
|
183
|
+
.union(bishopAttacks(square, occupied).intersect(BACK_RANKS[squareRank(square)]))
|
|
184
|
+
.union(eagleLionAttacks(square, color));
|
|
185
|
+
else
|
|
186
|
+
return rookAttacks(square, occupied)
|
|
187
|
+
.union(bishopAttacks(square, occupied).intersect(FORW_RANKS[squareRank(square)]))
|
|
188
|
+
.union(eagleLionAttacks(square, color));
|
|
189
|
+
}
|
|
190
|
+
export function lionAttacks(square) {
|
|
191
|
+
return NEIGHBORS[square].union(computeRange(square, [-34, -33, -32, -31, -30, -18, -14, -2, 2, 14, 18, 30, 31, 32, 33, 34]));
|
|
192
|
+
}
|
|
101
193
|
export function attacks(piece, square, occupied) {
|
|
102
194
|
switch (piece.role) {
|
|
103
195
|
case 'pawn':
|
|
104
|
-
return pawnAttacks(piece.color
|
|
196
|
+
return pawnAttacks(square, piece.color);
|
|
105
197
|
case 'lance':
|
|
106
|
-
return lanceAttacks(piece.color,
|
|
198
|
+
return lanceAttacks(square, piece.color, occupied);
|
|
107
199
|
case 'knight':
|
|
108
|
-
return knightAttacks(piece.color
|
|
200
|
+
return knightAttacks(square, piece.color);
|
|
109
201
|
case 'silver':
|
|
110
|
-
return silverAttacks(piece.color
|
|
111
|
-
case '
|
|
202
|
+
return silverAttacks(square, piece.color);
|
|
203
|
+
case 'promotedpawn':
|
|
204
|
+
case 'tokin':
|
|
112
205
|
case 'promotedlance':
|
|
206
|
+
case 'promotedknight':
|
|
113
207
|
case 'promotedsilver':
|
|
114
|
-
case 'tokin':
|
|
115
208
|
case 'gold':
|
|
116
|
-
return goldAttacks(piece.color
|
|
209
|
+
return goldAttacks(square, piece.color);
|
|
117
210
|
case 'bishop':
|
|
211
|
+
case 'bishoppromoted':
|
|
118
212
|
return bishopAttacks(square, occupied);
|
|
119
213
|
case 'rook':
|
|
214
|
+
case 'rookpromoted':
|
|
120
215
|
return rookAttacks(square, occupied);
|
|
121
216
|
case 'horse':
|
|
217
|
+
case 'horsepromoted':
|
|
122
218
|
return horseAttacks(square, occupied);
|
|
123
219
|
case 'dragon':
|
|
220
|
+
case 'dragonpromoted':
|
|
124
221
|
return dragonAttacks(square, occupied);
|
|
222
|
+
case 'tiger':
|
|
223
|
+
return tigerAttacks(square, piece.color);
|
|
224
|
+
case 'copper':
|
|
225
|
+
return copperAttacks(square, piece.color);
|
|
226
|
+
case 'elephant':
|
|
227
|
+
case 'elephantpromoted':
|
|
228
|
+
return elephantAttacks(square, piece.color);
|
|
229
|
+
case 'leopard':
|
|
230
|
+
return leopardAttacks(square);
|
|
231
|
+
case 'ox':
|
|
232
|
+
return oxAttacks(square, occupied);
|
|
233
|
+
case 'stag':
|
|
234
|
+
return stagAttacks(square, occupied);
|
|
235
|
+
case 'boar':
|
|
236
|
+
return boarAttacks(square, occupied);
|
|
237
|
+
case 'gobetween':
|
|
238
|
+
return goBetweenAttacks(square);
|
|
239
|
+
case 'falcon':
|
|
240
|
+
return falconAttacks(square, piece.color, occupied);
|
|
241
|
+
case 'kirin':
|
|
242
|
+
return kirinAttacks(square);
|
|
243
|
+
case 'lion':
|
|
244
|
+
case 'lionpromoted':
|
|
245
|
+
return lionAttacks(square);
|
|
246
|
+
case 'phoenix':
|
|
247
|
+
return phoenixAttacks(square);
|
|
248
|
+
case 'queen':
|
|
249
|
+
case 'queenpromoted':
|
|
250
|
+
return queenAttacks(square, occupied);
|
|
251
|
+
case 'chariot':
|
|
252
|
+
return chariotAttacks(square, occupied);
|
|
253
|
+
case 'sidemover':
|
|
254
|
+
case 'sidemoverpromoted':
|
|
255
|
+
return sideMoverAttacks(square, occupied);
|
|
256
|
+
case 'eagle':
|
|
257
|
+
return eagleAttacks(square, piece.color, occupied);
|
|
258
|
+
case 'verticalmover':
|
|
259
|
+
case 'verticalmoverpromoted':
|
|
260
|
+
return verticalMoverAttacks(square, occupied);
|
|
261
|
+
case 'whale':
|
|
262
|
+
return whaleAttacks(square, piece.color, occupied);
|
|
263
|
+
case 'whitehorse':
|
|
264
|
+
return whiteHorseAttacks(square, piece.color, occupied);
|
|
265
|
+
case 'prince':
|
|
125
266
|
case 'king':
|
|
126
267
|
return kingAttacks(square);
|
|
127
268
|
}
|
package/attacks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attacks.js","sourceRoot":"","sources":["src/attacks.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"attacks.js","sourceRoot":"","sources":["src/attacks.ts"],"names":[],"mappings":"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"}
|
package/board.d.ts
CHANGED
|
@@ -1,29 +1,16 @@
|
|
|
1
|
-
import { Square, Color, Role, Piece } from './types.js';
|
|
2
1
|
import { SquareSet } from './squareSet.js';
|
|
2
|
+
import { Color, Piece, Role, Square } from './types.js';
|
|
3
3
|
export declare class Board implements Iterable<[Square, Piece]> {
|
|
4
4
|
occupied: SquareSet;
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
rook: SquareSet;
|
|
8
|
-
bishop: SquareSet;
|
|
9
|
-
gold: SquareSet;
|
|
10
|
-
silver: SquareSet;
|
|
11
|
-
knight: SquareSet;
|
|
12
|
-
lance: SquareSet;
|
|
13
|
-
pawn: SquareSet;
|
|
14
|
-
dragon: SquareSet;
|
|
15
|
-
horse: SquareSet;
|
|
16
|
-
promotedsilver: SquareSet;
|
|
17
|
-
promotedknight: SquareSet;
|
|
18
|
-
promotedlance: SquareSet;
|
|
19
|
-
tokin: SquareSet;
|
|
20
|
-
king: SquareSet;
|
|
5
|
+
private colorMap;
|
|
6
|
+
private roleMap;
|
|
21
7
|
private constructor();
|
|
22
|
-
static default(): Board;
|
|
23
|
-
reset(): void;
|
|
24
|
-
static minishogi(): Board;
|
|
25
8
|
static empty(): Board;
|
|
9
|
+
static from(occupied: SquareSet, colorsIter: Iterable<[Color, SquareSet]>, rolesIter: Iterable<[Role, SquareSet]>): Board;
|
|
26
10
|
clone(): Board;
|
|
11
|
+
role(role: Role): SquareSet;
|
|
12
|
+
roles(role: Role, ...roles: Role[]): SquareSet;
|
|
13
|
+
color(color: Color): SquareSet;
|
|
27
14
|
equals(other: Board): boolean;
|
|
28
15
|
getColor(square: Square): Color | undefined;
|
|
29
16
|
getRole(square: Square): Role | undefined;
|
|
@@ -32,6 +19,6 @@ export declare class Board implements Iterable<[Square, Piece]> {
|
|
|
32
19
|
set(square: Square, piece: Piece): Piece | undefined;
|
|
33
20
|
has(square: Square): boolean;
|
|
34
21
|
[Symbol.iterator](): Iterator<[Square, Piece]>;
|
|
22
|
+
presentRoles(): Role[];
|
|
35
23
|
pieces(color: Color, role: Role): SquareSet;
|
|
36
|
-
kingOf(color: Color): Square | undefined;
|
|
37
24
|
}
|
package/board.js
CHANGED
|
@@ -1,87 +1,45 @@
|
|
|
1
|
-
import { COLORS, ROLES } from './types.js';
|
|
2
1
|
import { SquareSet } from './squareSet.js';
|
|
2
|
+
import { ROLES } from './types.js';
|
|
3
3
|
export class Board {
|
|
4
|
-
constructor() {
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
return board;
|
|
9
|
-
}
|
|
10
|
-
reset() {
|
|
11
|
-
this.occupied = new SquareSet([0x8201ff, 0x1ff, 0x0, 0x8201ff, 0x1ff, 0x0, 0x0, 0x0]);
|
|
12
|
-
this.sente = new SquareSet([0x0, 0x0, 0x0, 0x8201ff, 0x1ff, 0x0, 0x0, 0x0]);
|
|
13
|
-
this.gote = new SquareSet([0x8201ff, 0x1ff, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
14
|
-
this.rook = new SquareSet([0x800000, 0x0, 0x0, 0x20000, 0x0, 0x0, 0x0, 0x0]);
|
|
15
|
-
this.bishop = new SquareSet([0x20000, 0x0, 0x0, 0x800000, 0x0, 0x0, 0x0, 0x0]);
|
|
16
|
-
this.gold = new SquareSet([0x28, 0x0, 0x0, 0x0, 0x28, 0x0, 0x0, 0x0]);
|
|
17
|
-
this.silver = new SquareSet([0x44, 0x0, 0x0, 0x0, 0x44, 0x0, 0x0, 0x0]);
|
|
18
|
-
this.knight = new SquareSet([0x82, 0x0, 0x0, 0x0, 0x82, 0x0, 0x0, 0x0]);
|
|
19
|
-
this.lance = new SquareSet([0x101, 0x0, 0x0, 0x0, 0x101, 0x0, 0x0, 0x0]);
|
|
20
|
-
this.pawn = new SquareSet([0x0, 0x1ff, 0x0, 0x1ff, 0x0, 0x0, 0x0, 0x0]);
|
|
21
|
-
this.dragon = SquareSet.empty();
|
|
22
|
-
this.horse = SquareSet.empty();
|
|
23
|
-
this.promotedsilver = SquareSet.empty();
|
|
24
|
-
this.promotedknight = SquareSet.empty();
|
|
25
|
-
this.promotedlance = SquareSet.empty();
|
|
26
|
-
this.tokin = SquareSet.empty();
|
|
27
|
-
this.king = new SquareSet([0x10, 0x0, 0x0, 0x0, 0x10, 0x0, 0x0, 0x0]);
|
|
28
|
-
}
|
|
29
|
-
static minishogi() {
|
|
30
|
-
const board = new Board();
|
|
31
|
-
board.occupied = new SquareSet([0x1001f, 0x100000, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
32
|
-
board.sente = new SquareSet([0x0, 0x100000, 0x1f, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
33
|
-
board.gote = new SquareSet([0x1001f, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
34
|
-
board.rook = new SquareSet([0x10, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
35
|
-
board.bishop = new SquareSet([0x8, 0x0, 0x2, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
36
|
-
board.gold = new SquareSet([0x2, 0x0, 0x8, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
37
|
-
board.silver = new SquareSet([0x4, 0x0, 0x4, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
38
|
-
board.knight = SquareSet.empty();
|
|
39
|
-
board.lance = SquareSet.empty();
|
|
40
|
-
board.pawn = new SquareSet([0x10000, 0x100000, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
41
|
-
board.dragon = SquareSet.empty();
|
|
42
|
-
board.horse = SquareSet.empty();
|
|
43
|
-
board.promotedsilver = SquareSet.empty();
|
|
44
|
-
board.promotedknight = SquareSet.empty();
|
|
45
|
-
board.promotedlance = SquareSet.empty();
|
|
46
|
-
board.tokin = SquareSet.empty();
|
|
47
|
-
board.king = new SquareSet([0x1, 0x0, 0x10, 0x0, 0x0, 0x0, 0x0, 0x0]);
|
|
48
|
-
return board;
|
|
4
|
+
constructor(occupied, colorMap, roleMap) {
|
|
5
|
+
this.occupied = occupied;
|
|
6
|
+
this.colorMap = colorMap;
|
|
7
|
+
this.roleMap = roleMap;
|
|
49
8
|
}
|
|
50
9
|
static empty() {
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
for (const role of ROLES)
|
|
56
|
-
board[role] = SquareSet.empty();
|
|
57
|
-
return board;
|
|
10
|
+
return new Board(SquareSet.empty(), new Map(), new Map());
|
|
11
|
+
}
|
|
12
|
+
static from(occupied, colorsIter, rolesIter) {
|
|
13
|
+
return new Board(occupied, new Map(colorsIter), new Map(rolesIter));
|
|
58
14
|
}
|
|
59
15
|
clone() {
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
return
|
|
16
|
+
return Board.from(this.occupied, this.colorMap, this.roleMap);
|
|
17
|
+
}
|
|
18
|
+
role(role) {
|
|
19
|
+
return this.roleMap.get(role) || SquareSet.empty();
|
|
20
|
+
}
|
|
21
|
+
roles(role, ...roles) {
|
|
22
|
+
return roles.reduce((acc, r) => acc.union(this.role(r)), this.role(role));
|
|
23
|
+
}
|
|
24
|
+
color(color) {
|
|
25
|
+
return this.colorMap.get(color) || SquareSet.empty();
|
|
67
26
|
}
|
|
68
27
|
equals(other) {
|
|
69
|
-
if (!this.gote.equals(other.gote))
|
|
28
|
+
if (!this.color('gote').equals(other.color('gote')))
|
|
70
29
|
return false;
|
|
71
|
-
return ROLES.every(role => this
|
|
30
|
+
return ROLES.every(role => this.role(role).equals(other.role(role)));
|
|
72
31
|
}
|
|
73
32
|
getColor(square) {
|
|
74
|
-
if (this.sente.has(square))
|
|
33
|
+
if (this.color('sente').has(square))
|
|
75
34
|
return 'sente';
|
|
76
|
-
if (this.gote.has(square))
|
|
35
|
+
if (this.color('gote').has(square))
|
|
77
36
|
return 'gote';
|
|
78
37
|
return;
|
|
79
38
|
}
|
|
80
39
|
getRole(square) {
|
|
81
|
-
for (const role of
|
|
82
|
-
if (
|
|
40
|
+
for (const [role, sqs] of this.roleMap)
|
|
41
|
+
if (sqs.has(square))
|
|
83
42
|
return role;
|
|
84
|
-
}
|
|
85
43
|
return;
|
|
86
44
|
}
|
|
87
45
|
get(square) {
|
|
@@ -95,16 +53,16 @@ export class Board {
|
|
|
95
53
|
const piece = this.get(square);
|
|
96
54
|
if (piece) {
|
|
97
55
|
this.occupied = this.occupied.without(square);
|
|
98
|
-
this
|
|
99
|
-
this
|
|
56
|
+
this.colorMap.set(piece.color, this.color(piece.color).without(square));
|
|
57
|
+
this.roleMap.set(piece.role, this.role(piece.role).without(square));
|
|
100
58
|
}
|
|
101
59
|
return piece;
|
|
102
60
|
}
|
|
103
61
|
set(square, piece) {
|
|
104
62
|
const old = this.take(square);
|
|
105
63
|
this.occupied = this.occupied.with(square);
|
|
106
|
-
this
|
|
107
|
-
this
|
|
64
|
+
this.colorMap.set(piece.color, this.color(piece.color).with(square));
|
|
65
|
+
this.roleMap.set(piece.role, this.role(piece.role).with(square));
|
|
108
66
|
return old;
|
|
109
67
|
}
|
|
110
68
|
has(square) {
|
|
@@ -115,11 +73,13 @@ export class Board {
|
|
|
115
73
|
yield [square, this.get(square)];
|
|
116
74
|
}
|
|
117
75
|
}
|
|
118
|
-
|
|
119
|
-
return
|
|
76
|
+
presentRoles() {
|
|
77
|
+
return Array.from(this.roleMap)
|
|
78
|
+
.filter(([_, sqs]) => sqs.nonEmpty())
|
|
79
|
+
.map(([r]) => r);
|
|
120
80
|
}
|
|
121
|
-
|
|
122
|
-
return this.
|
|
81
|
+
pieces(color, role) {
|
|
82
|
+
return this.color(color).intersect(this.role(role));
|
|
123
83
|
}
|
|
124
84
|
}
|
|
125
85
|
//# sourceMappingURL=board.js.map
|