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.
Files changed (81) hide show
  1. package/attacks.d.ts +27 -6
  2. package/attacks.js +207 -66
  3. package/attacks.js.map +1 -1
  4. package/board.d.ts +8 -21
  5. package/board.js +35 -75
  6. package/board.js.map +1 -1
  7. package/compat.d.ts +7 -4
  8. package/compat.js +19 -18
  9. package/compat.js.map +1 -1
  10. package/debug.d.ts +4 -5
  11. package/debug.js +32 -24
  12. package/debug.js.map +1 -1
  13. package/index.d.ts +11 -7
  14. package/index.js +11 -7
  15. package/index.js.map +1 -1
  16. package/notation/csa/csa.d.ts +7 -7
  17. package/notation/csa/csa.js +11 -11
  18. package/notation/csa/csa.js.map +1 -1
  19. package/notation/japanese.d.ts +1 -1
  20. package/notation/japanese.js +70 -40
  21. package/notation/japanese.js.map +1 -1
  22. package/notation/kif/kif.d.ts +7 -4
  23. package/notation/kif/kif.js +113 -60
  24. package/notation/kif/kif.js.map +1 -1
  25. package/notation/kitaoKawasaki.d.ts +1 -1
  26. package/notation/kitaoKawasaki.js +24 -11
  27. package/notation/kitaoKawasaki.js.map +1 -1
  28. package/notation/notationUtil.d.ts +1 -1
  29. package/notation/notationUtil.js +1 -1
  30. package/notation/notationUtil.js.map +1 -1
  31. package/notation/western.d.ts +1 -1
  32. package/notation/western.js +24 -9
  33. package/notation/western.js.map +1 -1
  34. package/notation/westernEngine.d.ts +1 -1
  35. package/notation/westernEngine.js +24 -9
  36. package/notation/westernEngine.js.map +1 -1
  37. package/package.json +13 -12
  38. package/sfen.d.ts +16 -12
  39. package/sfen.js +387 -76
  40. package/sfen.js.map +1 -1
  41. package/squareSet.d.ts +5 -1
  42. package/squareSet.js +45 -17
  43. package/squareSet.js.map +1 -1
  44. package/src/attacks.ts +227 -71
  45. package/src/board.ts +34 -92
  46. package/src/compat.ts +32 -20
  47. package/src/debug.ts +38 -28
  48. package/src/index.ts +29 -26
  49. package/src/notation/csa/csa.ts +21 -19
  50. package/src/notation/japanese.ts +83 -45
  51. package/src/notation/kif/kif.ts +142 -63
  52. package/src/notation/kitaoKawasaki.ts +34 -14
  53. package/src/notation/western.ts +25 -10
  54. package/src/notation/westernEngine.ts +25 -10
  55. package/src/sfen.ts +414 -73
  56. package/src/squareSet.ts +60 -17
  57. package/src/types.ts +70 -21
  58. package/src/util.ts +55 -265
  59. package/types.d.ts +31 -17
  60. package/types.js +43 -12
  61. package/types.js.map +1 -1
  62. package/util.d.ts +6 -9
  63. package/util.js +42 -233
  64. package/util.js.map +1 -1
  65. package/hand.d.ts +0 -38
  66. package/hand.js +0 -69
  67. package/hand.js.map +0 -1
  68. package/shogi.d.ts +0 -67
  69. package/shogi.js +0 -370
  70. package/shogi.js.map +0 -1
  71. package/src/hand.ts +0 -94
  72. package/src/notation/notationUtil.ts +0 -122
  73. package/src/shogi.ts +0 -428
  74. package/src/variant.ts +0 -70
  75. package/src/variantUtil.ts +0 -163
  76. package/variant.d.ts +0 -17
  77. package/variant.js +0 -47
  78. package/variant.js.map +0 -1
  79. package/variantUtil.d.ts +0 -13
  80. package/variantUtil.js +0 -149
  81. 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(color: Color, square: Square): SquareSet;
5
- export declare function silverAttacks(color: Color, square: Square): SquareSet;
6
- export declare function goldAttacks(color: Color, square: Square): SquareSet;
7
- export declare function pawnAttacks(color: Color, square: Square): SquareSet;
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(color: Color, square: Square, occupied: SquareSet): SquareSet;
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
- let range = SquareSet.empty();
5
- for (const delta of deltas) {
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 tabulate(f) {
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
- const KING_ATTACKS = tabulate(sq => computeRange(sq, [-17, -16, -15, -1, 1, 15, 16, 17]));
20
- const KNIGHT_ATTACKS = {
21
- sente: tabulate(sq => computeRange(sq, [-31, -33])),
22
- gote: tabulate(sq => computeRange(sq, [31, 33])),
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 FILE_RANGE = tabulate(sq => SquareSet.fromFile(squareFile(sq)).without(sq));
52
- const RANK_RANGE = tabulate(sq => SquareSet.fromRank(squareRank(sq)).without(sq));
53
- const FORW_RANGE = tabulate(sq => SquareSet.ranksAbove(squareRank(sq)).without(sq));
54
- const BACK_RANGE = tabulate(sq => SquareSet.ranksBelow(squareRank(sq)).without(sq));
55
- const DIAG_RANGE = tabulate(sq => {
56
- const diag = new SquareSet([0x20001, 0x80004, 0x200010, 0x800040, 0x2000100, 0x8000400, 0x20001000, 0x80004000]);
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 = tabulate(sq => {
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(color, square, occupied) {
91
- return color === 'sente'
92
- ? fileAttacks(square, occupied).intersect(FORW_RANGE[square])
93
- : fileAttacks(square, occupied).intersect(BACK_RANGE[square]);
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, square);
196
+ return pawnAttacks(square, piece.color);
105
197
  case 'lance':
106
- return lanceAttacks(piece.color, square, occupied);
198
+ return lanceAttacks(square, piece.color, occupied);
107
199
  case 'knight':
108
- return knightAttacks(piece.color, square);
200
+ return knightAttacks(square, piece.color);
109
201
  case 'silver':
110
- return silverAttacks(piece.color, square);
111
- case 'promotedknight':
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, square);
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
- sente: SquareSet;
6
- gote: SquareSet;
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
- static default() {
6
- const board = new Board();
7
- board.reset();
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
- const board = new Board();
52
- board.occupied = SquareSet.empty();
53
- for (const color of COLORS)
54
- board[color] = SquareSet.empty();
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
- const board = new Board();
61
- board.occupied = this.occupied;
62
- for (const color of COLORS)
63
- board[color] = this[color];
64
- for (const role of ROLES)
65
- board[role] = this[role];
66
- return board;
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[role].equals(other[role]));
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 ROLES) {
82
- if (this[role].has(square))
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[piece.color] = this[piece.color].without(square);
99
- this[piece.role] = this[piece.role].without(square);
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[piece.color] = this[piece.color].with(square);
107
- this[piece.role] = this[piece.role].with(square);
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
- pieces(color, role) {
119
- return this[color].intersect(this[role]);
76
+ presentRoles() {
77
+ return Array.from(this.roleMap)
78
+ .filter(([_, sqs]) => sqs.nonEmpty())
79
+ .map(([r]) => r);
120
80
  }
121
- kingOf(color) {
122
- return this.king.intersect(this[color]).singleSquare();
81
+ pieces(color, role) {
82
+ return this.color(color).intersect(this.role(role));
123
83
  }
124
84
  }
125
85
  //# sourceMappingURL=board.js.map