shogiops 0.2.8 → 0.5.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 (115) hide show
  1. package/attacks.js +32 -48
  2. package/attacks.js.map +1 -1
  3. package/board.d.ts +3 -0
  4. package/board.js +60 -33
  5. package/board.js.map +1 -1
  6. package/compat.d.ts +6 -24
  7. package/compat.js +20 -185
  8. package/compat.js.map +1 -1
  9. package/debug.js +37 -72
  10. package/debug.js.map +1 -1
  11. package/hand.d.ts +38 -0
  12. package/hand.js +69 -0
  13. package/hand.js.map +1 -0
  14. package/hash.d.ts +4 -3
  15. package/hash.js +12 -20
  16. package/hash.js.map +1 -1
  17. package/index.d.ts +13 -10
  18. package/index.js +22 -64
  19. package/index.js.map +1 -1
  20. package/{csa.d.ts → notation/csa/csa.d.ts} +9 -9
  21. package/notation/csa/csa.js +213 -0
  22. package/notation/csa/csa.js.map +1 -0
  23. package/notation/japanese.d.ts +3 -0
  24. package/notation/japanese.js +61 -0
  25. package/notation/japanese.js.map +1 -0
  26. package/{kif.d.ts → notation/kif/kif.d.ts} +10 -9
  27. package/notation/kif/kif.js +232 -0
  28. package/notation/kif/kif.js.map +1 -0
  29. package/{kifHandicaps.d.ts → notation/kif/kifHandicaps.d.ts} +0 -0
  30. package/{kifHandicaps.js → notation/kif/kifHandicaps.js} +7 -7
  31. package/notation/kif/kifHandicaps.js.map +1 -0
  32. package/notation/kitaoKawasaki.d.ts +3 -0
  33. package/notation/kitaoKawasaki.js +26 -0
  34. package/notation/kitaoKawasaki.js.map +1 -0
  35. package/notation/kitaokawasaki.d.ts +0 -0
  36. package/notation/kitaokawasaki.js +2 -0
  37. package/notation/kitaokawasaki.js.map +1 -0
  38. package/notation/notationUtil.d.ts +12 -0
  39. package/{kifUtil.js → notation/notationUtil.js} +39 -40
  40. package/notation/notationUtil.js.map +1 -0
  41. package/notation/western.d.ts +3 -0
  42. package/notation/western.js +23 -0
  43. package/notation/western.js.map +1 -0
  44. package/notation/westernEngine.d.ts +3 -0
  45. package/notation/westernEngine.js +23 -0
  46. package/notation/westernEngine.js.map +1 -0
  47. package/package.json +54 -37
  48. package/setup.d.ts +2 -32
  49. package/setup.js +5 -80
  50. package/setup.js.map +1 -1
  51. package/sfen.d.ts +33 -0
  52. package/sfen.js +188 -0
  53. package/sfen.js.map +1 -0
  54. package/shogi.d.ts +14 -7
  55. package/shogi.js +138 -141
  56. package/shogi.js.map +1 -1
  57. package/squareSet.d.ts +1 -5
  58. package/squareSet.js +1 -18
  59. package/squareSet.js.map +1 -1
  60. package/src/board.ts +34 -0
  61. package/src/compat.ts +18 -197
  62. package/src/debug.ts +26 -56
  63. package/src/hand.ts +94 -0
  64. package/src/hash.ts +8 -7
  65. package/src/index.ts +16 -12
  66. package/src/{csa.ts → notation/csa/csa.ts} +53 -52
  67. package/src/notation/japanese.ts +74 -0
  68. package/src/{kif.ts → notation/kif/kif.ts} +77 -78
  69. package/src/{kifHandicaps.ts → notation/kif/kifHandicaps.ts} +5 -0
  70. package/src/notation/kitaoKawasaki.ts +24 -0
  71. package/src/{kifUtil.ts → notation/notationUtil.ts} +37 -28
  72. package/src/notation/western.ts +21 -0
  73. package/src/notation/westernEngine.ts +21 -0
  74. package/src/setup.ts +4 -91
  75. package/src/sfen.ts +190 -0
  76. package/src/shogi.ts +75 -75
  77. package/src/squareSet.ts +1 -18
  78. package/src/transform.ts +3 -1
  79. package/src/types.ts +13 -16
  80. package/src/util.ts +8 -73
  81. package/src/variant.ts +44 -3
  82. package/src/variantUtil.ts +160 -0
  83. package/transform.js +18 -24
  84. package/transform.js.map +1 -1
  85. package/types.d.ts +3 -7
  86. package/types.js +18 -24
  87. package/types.js.map +1 -1
  88. package/util.d.ts +4 -7
  89. package/util.js +24 -96
  90. package/util.js.map +1 -1
  91. package/variant.d.ts +12 -1
  92. package/variant.js +42 -16
  93. package/variant.js.map +1 -1
  94. package/variantUtil.d.ts +13 -0
  95. package/variantUtil.js +147 -0
  96. package/variantUtil.js.map +1 -0
  97. package/csa.js +0 -229
  98. package/csa.js.map +0 -1
  99. package/csaUtil.d.ts +0 -3
  100. package/csaUtil.js +0 -21
  101. package/csaUtil.js.map +0 -1
  102. package/fen.d.ts +0 -32
  103. package/fen.js +0 -197
  104. package/fen.js.map +0 -1
  105. package/kif.js +0 -247
  106. package/kif.js.map +0 -1
  107. package/kifHandicaps.js.map +0 -1
  108. package/kifUtil.d.ts +0 -9
  109. package/kifUtil.js.map +0 -1
  110. package/san.d.ts +0 -6
  111. package/san.js +0 -135
  112. package/san.js.map +0 -1
  113. package/src/csaUtil.ts +0 -15
  114. package/src/fen.ts +0 -183
  115. package/src/san.ts +0 -136
package/squareSet.js CHANGED
@@ -1,6 +1,3 @@
1
- "use strict";
2
- Object.defineProperty(exports, "__esModule", { value: true });
3
- exports.SquareSet = void 0;
4
1
  function popcnt27(n) {
5
2
  n = trimTo27(n);
6
3
  n = n - ((n >>> 1) & 1431655765);
@@ -22,7 +19,7 @@ function rbit27(n) {
22
19
  function trimTo27(n) {
23
20
  return n & 0x07ffffff;
24
21
  }
25
- class SquareSet {
22
+ export class SquareSet {
26
23
  constructor(lo, mid, hi) {
27
24
  this.lo = lo;
28
25
  this.mid = mid;
@@ -59,19 +56,6 @@ class SquareSet {
59
56
  static corners() {
60
57
  return new SquareSet(0x00000101, 0, 0x04040000);
61
58
  }
62
- static promotionZones() {
63
- // backranks
64
- return new SquareSet(0x07ffffff, 0, 0x07ffffff);
65
- }
66
- static promotionZone(color) {
67
- return color === 'sente' ? new SquareSet(0, 0, 0x07ffffff) : new SquareSet(0x07ffffff, 0, 0);
68
- }
69
- static backrank(color) {
70
- return color === 'sente' ? SquareSet.fromRank(8) : SquareSet.fromRank(0);
71
- }
72
- static backrank2(color) {
73
- return (color === 'sente' ? SquareSet.fromRank(7) : SquareSet.fromRank(1)).union(this.backrank(color));
74
- }
75
59
  complement() {
76
60
  return new SquareSet(~this.lo, ~this.mid, ~this.hi);
77
61
  }
@@ -267,5 +251,4 @@ class SquareSet {
267
251
  }
268
252
  }
269
253
  }
270
- exports.SquareSet = SquareSet;
271
254
  //# sourceMappingURL=squareSet.js.map
package/squareSet.js.map CHANGED
@@ -1 +1 @@
1
- {"version":3,"file":"squareSet.js","sourceRoot":"","sources":["src/squareSet.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"squareSet.js","sourceRoot":"","sources":["src/squareSet.ts"],"names":[],"mappings":"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"}
package/src/board.ts CHANGED
@@ -2,6 +2,9 @@ import { Square, Color, Role, Piece, COLORS, ROLES } from './types';
2
2
  import { SquareSet } from './squareSet';
3
3
 
4
4
  export class Board implements Iterable<[Square, Piece]> {
5
+ numberOfFiles: number;
6
+ numberOfRanks: number;
7
+
5
8
  occupied: SquareSet;
6
9
 
7
10
  gote: SquareSet;
@@ -31,6 +34,8 @@ export class Board implements Iterable<[Square, Piece]> {
31
34
  }
32
35
 
33
36
  reset(): void {
37
+ this.numberOfFiles = 9;
38
+ this.numberOfRanks = 9;
34
39
  this.occupied = new SquareSet(0x7fd05ff, 0x0, 0x7fd05ff);
35
40
  this.sente = new SquareSet(0x7fd05ff, 0x0, 0x0);
36
41
  this.gote = new SquareSet(0x0, 0x0, 0x7fd05ff);
@@ -50,6 +55,30 @@ export class Board implements Iterable<[Square, Piece]> {
50
55
  this.dragon = SquareSet.empty();
51
56
  }
52
57
 
58
+ static minishogi(): Board {
59
+ const board = new Board();
60
+ board.numberOfFiles = 5;
61
+ board.numberOfRanks = 5;
62
+ board.occupied = new SquareSet(0x0, 0x43e000, 0x7c20000);
63
+ board.sente = new SquareSet(0x0, 0x43e000, 0x0);
64
+ board.gote = new SquareSet(0x0, 0x0, 0x7c20000);
65
+ board.pawn = new SquareSet(0x0, 0x400000, 0x20000);
66
+ board.lance = new SquareSet(0x0, 0x0, 0x0);
67
+ board.knight = new SquareSet(0x0, 0x0, 0x0);
68
+ board.silver = new SquareSet(0x0, 0x8000, 0x1000000);
69
+ board.gold = new SquareSet(0x0, 0x4000, 0x2000000);
70
+ board.bishop = new SquareSet(0x0, 0x10000, 0x800000);
71
+ board.rook = new SquareSet(0x0, 0x20000, 0x400000);
72
+ board.tokin = new SquareSet(0x0, 0, 0);
73
+ board.promotedlance = new SquareSet(0x0, 0x0, 0x0);
74
+ board.promotedknight = new SquareSet(0x0, 0x0, 0x0);
75
+ board.promotedsilver = new SquareSet(0x0, 0x0, 0x0);
76
+ board.horse = new SquareSet(0x0, 0x0, 0x0);
77
+ board.dragon = new SquareSet(0x0, 0x0, 0x0);
78
+ board.king = new SquareSet(0x0, 0x2000, 0x4000000);
79
+ return board;
80
+ }
81
+
53
82
  static empty(): Board {
54
83
  const board = new Board();
55
84
  board.clear();
@@ -57,6 +86,8 @@ export class Board implements Iterable<[Square, Piece]> {
57
86
  }
58
87
 
59
88
  clear(): void {
89
+ this.numberOfFiles = 9;
90
+ this.numberOfRanks = 9;
60
91
  this.occupied = SquareSet.empty();
61
92
  for (const color of COLORS) this[color] = SquareSet.empty();
62
93
  for (const role of ROLES) this[role] = SquareSet.empty();
@@ -65,6 +96,8 @@ export class Board implements Iterable<[Square, Piece]> {
65
96
  clone(): Board {
66
97
  const board = new Board();
67
98
  board.occupied = this.occupied;
99
+ board.numberOfFiles = this.numberOfFiles;
100
+ board.numberOfRanks = this.numberOfRanks;
68
101
  for (const color of COLORS) board[color] = this[color];
69
102
  for (const role of ROLES) board[role] = this[role];
70
103
  return board;
@@ -72,6 +105,7 @@ export class Board implements Iterable<[Square, Piece]> {
72
105
 
73
106
  equals(other: Board): boolean {
74
107
  if (!this.gote.equals(other.gote)) return false;
108
+ if (this.numberOfFiles !== other.numberOfFiles || this.numberOfRanks !== other.numberOfRanks) return false;
75
109
  return ROLES.every(role => this[role].equals(other[role]));
76
110
  }
77
111
 
package/src/compat.ts CHANGED
@@ -1,54 +1,32 @@
1
- import { Rules, SquareName, Move, isDrop, Square, Role, PocketRole } from './types';
2
- import { defined, makeSquare, makeUsi, parseSquare, parseUsi, squareFile, squareRank } from './util';
1
+ import { Rules, SquareName, Move, isDrop, Role } from './types';
2
+ import { defined, makeSquare, parseUsi } from './util';
3
3
  import { Position } from './shogi';
4
4
 
5
- export const C_FILE_NAMES = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'] as const;
6
- export type ChessFileName = typeof C_FILE_NAMES[number];
7
-
8
- export const C_RANK_NAMES = ['1', '2', '3', '4', '5', '6', '7', '8', '9'] as const;
9
- export type ChessRankName = typeof C_RANK_NAMES[number];
10
-
11
- export type ChessSquareName = `${ChessFileName}${ChessRankName}`;
12
-
13
- export function makeChessSquare(square: Square): ChessSquareName {
14
- return (C_FILE_NAMES[squareFile(square)] + C_RANK_NAMES[squareRank(square)]) as ChessSquareName;
15
- }
16
-
17
- export function parseChessSquare(str: ChessSquareName): Square;
18
- export function parseChessSquare(str: string): Square | undefined;
19
- export function parseChessSquare(str: string): Square | undefined {
20
- if (str.length !== 2) return;
21
- const file = Math.abs(str.charCodeAt(0) - 'a'.charCodeAt(0));
22
- const rank = Math.abs(str.charCodeAt(1) - '1'.charCodeAt(0));
23
- if (file < 0 || file >= 9 || rank < 0 || rank >= 9) return;
24
- return file + 9 * rank;
25
- }
26
-
27
- export function shogigroundDests(pos: Position): Map<ChessSquareName, ChessSquareName[]> {
5
+ export function shogigroundDests(pos: Position): Map<SquareName, SquareName[]> {
28
6
  const result = new Map();
29
7
  const ctx = pos.ctx();
30
8
  for (const [from, squares] of pos.allDests(ctx)) {
31
9
  if (squares.nonEmpty()) {
32
- const d = Array.from(squares, s => makeChessSquare(s));
33
- result.set(makeChessSquare(from), d);
10
+ const d = Array.from(squares, s => makeSquare(s));
11
+ result.set(makeSquare(from), d);
34
12
  }
35
13
  }
36
14
  return result;
37
15
  }
38
16
 
39
- export function shogigroundDropDests(pos: Position, role?: PocketRole): Map<PocketRole, ChessSquareName[]> {
17
+ export function shogigroundDropDests(pos: Position, role?: Role): Map<Role, SquareName[]> {
40
18
  const result = new Map();
41
19
  if (role) {
42
20
  const squares = pos.dropDests(role);
43
21
  if (squares.nonEmpty()) {
44
- const d = Array.from(squares, s => makeChessSquare(s));
22
+ const d = Array.from(squares, s => makeSquare(s));
45
23
  result.set(role, d);
46
24
  }
47
25
  } else {
48
26
  const ctx = pos.ctx();
49
27
  for (const [r, squares] of pos.allDropDests(ctx)) {
50
28
  if (squares.nonEmpty()) {
51
- const d = Array.from(squares, s => makeChessSquare(s));
29
+ const d = Array.from(squares, s => makeSquare(s));
52
30
  result.set(r, d);
53
31
  }
54
32
  }
@@ -65,177 +43,20 @@ export function scalashogiCharPair(move: Move): string {
65
43
  else return String.fromCharCode(34 + move.from, move.promotion ? 34 + move.to + 128 : 34 + move.to);
66
44
  }
67
45
 
68
- export function shogigroundMove(move: Move): ChessSquareName[] {
69
- return isDrop(move) ? [makeChessSquare(move.to)] : [makeChessSquare(move.from), makeChessSquare(move.to)];
70
- }
71
-
72
- export function lishogiVariantRules(variant: 'standard' | 'fromPosition'): Rules {
73
- switch (variant) {
74
- case 'standard':
75
- case 'fromPosition':
76
- return 'shogi';
77
- }
78
- }
79
-
80
- export function chessCoordToShogiCoord(s: ChessSquareName): SquareName {
81
- return makeSquare(parseChessSquare(s));
82
- }
83
-
84
- export function shogiCoordToChessCord(s: SquareName): ChessSquareName {
85
- return makeChessSquare(parseSquare(s));
46
+ export function usiToSquareNames(usi: string): SquareName[] {
47
+ const move = parseUsi(usi);
48
+ return defined(move) ? moveToSquareNames(move) : [];
86
49
  }
87
50
 
88
- export function chessCoord(str: string): ChessSquareName | undefined {
89
- if (str.match(/^[1-9][a-i]$/)) return shogiCoordToChessCord(str as SquareName);
90
- if (str.match(/^[a-i][1-9]$/)) return str as ChessSquareName;
91
- return undefined;
51
+ export function moveToSquareNames(move: Move): SquareName[] {
52
+ return isDrop(move) ? [makeSquare(move.to)] : [makeSquare(move.from), makeSquare(move.to)];
92
53
  }
93
54
 
94
- export function shogiCoord(str: string): SquareName | undefined {
95
- if (str.match(/^[1-9][a-i]$/)) return str as SquareName;
96
- if (str.match(/^[a-i][1-9]$/)) return chessCoordToShogiCoord(str as ChessSquareName);
97
- else return undefined;
98
- }
99
-
100
- export function roleToLishogiChar(role: Role): string {
101
- switch (role) {
102
- case 'pawn':
103
- return 'p';
104
- case 'lance':
105
- return 'l';
106
- case 'knight':
107
- return 'n';
108
- case 'silver':
109
- return 's';
110
- case 'gold':
111
- return 'g';
112
- case 'bishop':
113
- return 'b';
114
- case 'rook':
115
- return 'r';
116
- case 'tokin':
117
- return 't';
118
- case 'promotedlance':
119
- return 'u';
120
- case 'promotedknight':
121
- return 'm';
122
- case 'promotedsilver':
123
- return 'a';
124
- case 'horse':
125
- return 'h';
126
- case 'dragon':
127
- return 'd';
128
- case 'king':
129
- return 'k';
130
- }
131
- }
132
-
133
- export function lishogiCharToRole(
134
- ch:
135
- | 'p'
136
- | 'l'
137
- | 'n'
138
- | 's'
139
- | 'g'
140
- | 'b'
141
- | 'r'
142
- | 't'
143
- | 'u'
144
- | 'm'
145
- | 'a'
146
- | 'h'
147
- | 'd'
148
- | 'P'
149
- | 'L'
150
- | 'N'
151
- | 'S'
152
- | 'G'
153
- | 'B'
154
- | 'R'
155
- | 'T'
156
- | 'U'
157
- | 'M'
158
- | 'A'
159
- | 'H'
160
- | 'D'
161
- ): Role;
162
- export function lishogiCharToRole(ch: string): Role | undefined;
163
- export function lishogiCharToRole(ch: string): Role | undefined {
164
- switch (ch) {
165
- case 'P':
166
- case 'p':
167
- return 'pawn';
168
- case 'L':
169
- case 'l':
170
- return 'lance';
171
- case 'N':
172
- case 'n':
173
- return 'knight';
174
- case 'S':
175
- case 's':
176
- return 'silver';
177
- case 'G':
178
- case 'g':
179
- return 'gold';
180
- case 'B':
181
- case 'b':
182
- return 'bishop';
183
- case 'R':
184
- case 'r':
185
- return 'rook';
186
- case 'T':
187
- case 't':
188
- return 'tokin';
189
- case 'U':
190
- case 'u':
191
- return 'promotedlance';
192
- case 'M':
193
- case 'm':
194
- return 'promotedknight';
195
- case 'A':
196
- case 'a':
197
- return 'promotedsilver';
198
- case 'H':
199
- case 'h':
200
- return 'horse';
201
- case 'D':
202
- case 'd':
203
- return 'dragon';
204
- case 'K':
205
- case 'k':
206
- return 'king';
55
+ export function lishogiVariantRules(variant: string): Rules {
56
+ switch (variant) {
57
+ case 'minishogi':
58
+ return 'minishogi';
207
59
  default:
208
- return;
209
- }
210
- }
211
-
212
- export function parseLishogiUci(str: string): Move | undefined {
213
- if (str[1] === '*' && str.length === 4) {
214
- const role = lishogiCharToRole(str[0]) as PocketRole;
215
- const to = parseChessSquare(str.slice(2));
216
- if (defined(role) && defined(to)) return { role, to };
217
- } else if (str.length === 4 || str.length === 5) {
218
- const from = parseChessSquare(str.slice(0, 2));
219
- const to = parseChessSquare(str.slice(2, 4));
220
- const promotion = str[4] === '+' ? true : false;
221
- if (defined(from) && defined(to)) return { from, to, promotion };
60
+ return 'shogi';
222
61
  }
223
- return;
224
- }
225
-
226
- export function makeLishogiUci(move: Move): string {
227
- if (isDrop(move)) return `${roleToLishogiChar(move.role).toUpperCase()}*${makeChessSquare(move.to)}`;
228
- return makeChessSquare(move.from) + makeChessSquare(move.to) + (move.promotion ? '+' : '');
229
- }
230
-
231
- export function assureUsi(str: string): string | undefined {
232
- if (str.match(/^([1-9][a-i]|([RBGSNLP]\*))[1-9][a-i](\+|\=)?$/)) return str;
233
- if (str.match(/^([a-i][1-9]|([RBGSNLP]\*))[a-i][1-9](\+|\=)?$/)) return makeUsi(parseLishogiUci(str)!);
234
- return;
235
- }
236
-
237
- export function assureLishogiUci(str: string): string | undefined {
238
- if (str.match(/^([a-i][1-9]|([RBGSNLP]\*))[a-i][1-9](\+|\=)?$/)) return str;
239
- if (str.match(/^([1-9][a-i]|([RBGSNLP]\*))[1-9][a-i](\+|\=)?$/)) return makeLishogiUci(parseUsi(str)!);
240
- return;
241
62
  }
package/src/debug.ts CHANGED
@@ -1,9 +1,10 @@
1
- import { Square, Piece, PROMOTABLE_ROLES } from './types';
1
+ import { Square, Piece } from './types';
2
2
  import { makeSquare, makeUsi } from './util';
3
- import { makePiece } from './fen';
3
+ import { makePiece } from './sfen';
4
4
  import { SquareSet } from './squareSet';
5
5
  import { Board } from './board';
6
6
  import { Position } from './shogi';
7
+ import { pieceCanPromote, pieceInDeadZone } from './variantUtil';
7
8
 
8
9
  export function squareSet(squares: SquareSet): string {
9
10
  const r = [];
@@ -53,66 +54,35 @@ export function perft(pos: Position, depth: number, log = false): number {
53
54
  const ctx = pos.ctx();
54
55
  const dropDests = pos.allDropDests(ctx);
55
56
 
56
- if (!log && depth === 1 && pos.pockets.isEmpty()) {
57
- // Optimization for leaf nodes.
58
- let nodes = 0;
59
- for (const [from, to] of pos.allDests(ctx)) {
60
- nodes += to.size();
61
- const role = pos.board.getRole(from);
62
- if ((PROMOTABLE_ROLES as ReadonlyArray<string>).includes(role!)) {
63
- const promMoves = SquareSet.promotionZone(pos.turn).has(from)
64
- ? to
65
- : to.intersect(SquareSet.promotionZone(pos.turn));
66
- const forceProm =
67
- role === 'pawn' || role === 'lance'
68
- ? SquareSet.backrank(pos.turn)
69
- : role === 'knight'
70
- ? SquareSet.backrank2(pos.turn)
71
- : SquareSet.empty();
72
- nodes += promMoves.diff(forceProm).size();
73
- }
74
- }
75
- return nodes;
76
- } else {
77
- let nodes = 0;
78
- for (const [from, dests] of pos.allDests(ctx)) {
79
- for (const to of dests) {
80
- const promotions: Array<boolean> = [];
81
- const role = pos.board.get(from)!.role;
82
- const canPromote: boolean =
83
- (PROMOTABLE_ROLES as ReadonlyArray<string>).includes(role!) &&
84
- (SquareSet.promotionZone(pos.turn).has(to) || SquareSet.promotionZone(pos.turn).has(from));
85
- if (canPromote) {
86
- promotions.push(true);
87
- if (
88
- !(
89
- ((role === 'pawn' || role === 'lance') && SquareSet.backrank(pos.turn).has(to)) ||
90
- (role === 'knight' && SquareSet.backrank2(pos.turn).has(to))
91
- )
92
- )
93
- promotions.push(false);
94
- } else promotions.push(false);
57
+ let nodes = 0;
58
+ for (const [from, dests] of pos.allDests(ctx)) {
59
+ for (const to of dests) {
60
+ const promotions: Array<boolean> = [];
61
+ const piece = pos.board.get(from)!;
62
+ if (pieceCanPromote(pos.rules)(piece, from, to)) {
63
+ promotions.push(true);
64
+ if (!pieceInDeadZone(pos.rules)(piece, to)) promotions.push(false);
65
+ } else promotions.push(false);
95
66
 
96
- for (const promotion of promotions) {
97
- const child = pos.clone();
98
- const move = { from, to, promotion };
99
- child.play(move);
100
- const children = perft(child, depth - 1, false);
101
- if (log) console.log(makeUsi(move), children);
102
- nodes += children;
103
- }
104
- }
105
- }
106
- for (const [role, dropDestsOfRole] of dropDests) {
107
- for (const to of dropDestsOfRole) {
67
+ for (const promotion of promotions) {
108
68
  const child = pos.clone();
109
- const move = { role, to };
69
+ const move = { from, to, promotion };
110
70
  child.play(move);
111
71
  const children = perft(child, depth - 1, false);
112
- if (log) console.log(makeUsi(move), children);
72
+ if (log) console.log(makeUsi(move), children, '(', depth, ')');
113
73
  nodes += children;
114
74
  }
115
75
  }
116
- return nodes;
117
76
  }
77
+ for (const [role, dropDestsOfRole] of dropDests) {
78
+ for (const to of dropDestsOfRole) {
79
+ const child = pos.clone();
80
+ const move = { role, to };
81
+ child.play(move);
82
+ const children = perft(child, depth - 1, false);
83
+ if (log) console.log(makeUsi(move), children, '(', depth, ')');
84
+ nodes += children;
85
+ }
86
+ }
87
+ return nodes;
118
88
  }
package/src/hand.ts ADDED
@@ -0,0 +1,94 @@
1
+ import { Role, ROLES } from './types';
2
+
3
+ // Hand alone can store anything
4
+ // let the variants decide what to store and what not
5
+ export class Hand {
6
+ pawn: number;
7
+ lance: number;
8
+ knight: number;
9
+ silver: number;
10
+ gold: number;
11
+ bishop: number;
12
+ rook: number;
13
+ tokin: number;
14
+ promotedlance: number;
15
+ promotedknight: number;
16
+ promotedsilver: number;
17
+ horse: number;
18
+ dragon: number;
19
+ king: number;
20
+
21
+ private constructor() {}
22
+
23
+ static empty(): Hand {
24
+ const m = new Hand();
25
+ for (const role of ROLES) m[role] = 0;
26
+ return m;
27
+ }
28
+
29
+ clone(): Hand {
30
+ const m = new Hand();
31
+ for (const role of ROLES) m[role] = this[role];
32
+ return m;
33
+ }
34
+
35
+ equals(other: Hand): boolean {
36
+ return ROLES.every(role => this[role] === other[role]);
37
+ }
38
+
39
+ add(other: Hand): Hand {
40
+ const m = new Hand();
41
+ for (const role of ROLES) m[role] = this[role] + other[role];
42
+ return m;
43
+ }
44
+
45
+ nonEmpty(): boolean {
46
+ return ROLES.some(role => this[role] > 0);
47
+ }
48
+
49
+ isEmpty(): boolean {
50
+ return !this.nonEmpty();
51
+ }
52
+
53
+ count(): number {
54
+ return ROLES.map(role => this[role]).reduce((acc, cur) => acc + cur);
55
+ }
56
+
57
+ *[Symbol.iterator](): Iterator<[Role, number]> {
58
+ for (const role of ROLES.filter(r => this[r] > 0)) {
59
+ yield [role, this[role]];
60
+ }
61
+ }
62
+ }
63
+
64
+ export class Hands {
65
+ constructor(public gote: Hand, public sente: Hand) {}
66
+
67
+ static empty(): Hands {
68
+ return new Hands(Hand.empty(), Hand.empty());
69
+ }
70
+
71
+ clone(): Hands {
72
+ return new Hands(this.gote.clone(), this.sente.clone());
73
+ }
74
+
75
+ equals(other: Hands): boolean {
76
+ return this.gote.equals(other.gote) && this.sente.equals(other.sente);
77
+ }
78
+
79
+ add(other: Hands): Hands {
80
+ return new Hands(this.gote.add(other.gote), this.sente.add(other.sente));
81
+ }
82
+
83
+ count(): number {
84
+ return this.gote.count() + this.sente.count();
85
+ }
86
+
87
+ isEmpty(): boolean {
88
+ return this.gote.isEmpty() && this.sente.isEmpty();
89
+ }
90
+
91
+ nonEmpty(): boolean {
92
+ return !this.isEmpty();
93
+ }
94
+ }
package/src/hash.ts CHANGED
@@ -1,6 +1,7 @@
1
- import { COLORS, POCKET_ROLES, ROLES } from './types';
1
+ import { COLORS, ROLES } from './types';
2
2
  import { Board } from './board';
3
- import { Setup, MaterialSide, Material } from './setup';
3
+ import { Setup } from './setup';
4
+ import { Hand, Hands } from './hand';
4
5
 
5
6
  function rol32(n: number, left: number): number {
6
7
  return (n << left) | (n >>> (32 - left));
@@ -17,19 +18,19 @@ export function hashBoard(board: Board, state = 0): number {
17
18
  return state;
18
19
  }
19
20
 
20
- export function hashMaterialSide(side: MaterialSide, state = 0): number {
21
- for (const role of POCKET_ROLES) state = fxhash32(side[role], state);
21
+ export function hashHand(hand: Hand, state = 0): number {
22
+ for (const role of ROLES) state = fxhash32(hand[role], state);
22
23
  return state;
23
24
  }
24
25
 
25
- export function hashMaterial(material: Material, state = 0): number {
26
- for (const color of COLORS) state = hashMaterialSide(material[color], state);
26
+ export function hashHands(hands: Hands, state = 0): number {
27
+ for (const color of COLORS) state = hashHand(hands[color], state);
27
28
  return state;
28
29
  }
29
30
 
30
31
  export function hashSetup(setup: Setup, state = 0): number {
31
32
  state = hashBoard(setup.board, state);
32
- state = hashMaterial(setup.pockets, state);
33
+ state = hashHands(setup.hands, state);
33
34
  if (setup.turn === 'sente') state = fxhash32(1, state);
34
35
  return state;
35
36
  }