shogiops 0.2.9 → 0.6.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/README.md +6 -7
- package/attacks.js +7 -7
- package/attacks.js.map +1 -1
- package/board.d.ts +3 -0
- package/board.js +31 -0
- package/board.js.map +1 -1
- package/compat.d.ts +6 -24
- package/compat.js +17 -173
- package/compat.js.map +1 -1
- package/debug.js +30 -56
- package/debug.js.map +1 -1
- package/hand.d.ts +38 -0
- package/hand.js +74 -0
- package/hand.js.map +1 -0
- package/hash.d.ts +4 -3
- package/hash.js +9 -9
- package/hash.js.map +1 -1
- package/index.d.ts +13 -10
- package/index.js +14 -15
- package/index.js.map +1 -1
- package/{csa.d.ts → notation/csa/csa.d.ts} +9 -9
- package/{csa.js → notation/csa/csa.js} +52 -56
- package/notation/csa/csa.js.map +1 -0
- package/notation/japanese.d.ts +3 -0
- package/notation/japanese.js +65 -0
- package/notation/japanese.js.map +1 -0
- package/{kif.d.ts → notation/kif/kif.d.ts} +10 -9
- package/{kif.js → notation/kif/kif.js} +86 -84
- package/notation/kif/kif.js.map +1 -0
- package/{kifHandicaps.d.ts → notation/kif/kifHandicaps.d.ts} +0 -0
- package/{kifHandicaps.js → notation/kif/kifHandicaps.js} +5 -0
- package/notation/kif/kifHandicaps.js.map +1 -0
- package/notation/kitaoKawasaki.d.ts +3 -0
- package/notation/kitaoKawasaki.js +30 -0
- package/notation/kitaoKawasaki.js.map +1 -0
- package/notation/kitaokawasaki.d.ts +0 -0
- package/notation/kitaokawasaki.js +2 -0
- package/notation/kitaokawasaki.js.map +1 -0
- package/notation/notationUtil.d.ts +12 -0
- package/{kifUtil.js → notation/notationUtil.js} +43 -32
- package/notation/notationUtil.js.map +1 -0
- package/notation/western.d.ts +3 -0
- package/notation/western.js +27 -0
- package/notation/western.js.map +1 -0
- package/notation/westernEngine.d.ts +3 -0
- package/notation/westernEngine.js +27 -0
- package/notation/westernEngine.js.map +1 -0
- package/package.json +51 -36
- package/setup.d.ts +2 -32
- package/setup.js +3 -74
- package/setup.js.map +1 -1
- package/sfen.d.ts +33 -0
- package/sfen.js +201 -0
- package/sfen.js.map +1 -0
- package/shogi.d.ts +14 -7
- package/shogi.js +109 -106
- package/shogi.js.map +1 -1
- package/squareSet.d.ts +1 -5
- package/squareSet.js +0 -13
- package/squareSet.js.map +1 -1
- package/src/board.ts +34 -0
- package/src/compat.ts +18 -197
- package/src/debug.ts +26 -56
- package/src/hand.ts +94 -0
- package/src/hash.ts +8 -7
- package/src/index.ts +16 -12
- package/src/{csa.ts → notation/csa/csa.ts} +50 -51
- package/src/notation/japanese.ts +74 -0
- package/src/{kif.ts → notation/kif/kif.ts} +77 -78
- package/src/{kifHandicaps.ts → notation/kif/kifHandicaps.ts} +5 -0
- package/src/notation/kitaoKawasaki.ts +24 -0
- package/src/{kifUtil.ts → notation/notationUtil.ts} +37 -28
- package/src/notation/western.ts +21 -0
- package/src/notation/westernEngine.ts +21 -0
- package/src/setup.ts +4 -91
- package/src/sfen.ts +190 -0
- package/src/shogi.ts +75 -75
- package/src/squareSet.ts +1 -18
- package/src/transform.ts +3 -1
- package/src/types.ts +13 -16
- package/src/util.ts +8 -73
- package/src/variant.ts +44 -3
- package/src/variantUtil.ts +160 -0
- package/transform.js +3 -1
- package/transform.js.map +1 -1
- package/types.d.ts +3 -7
- package/types.js +13 -14
- package/types.js.map +1 -1
- package/util.d.ts +4 -7
- package/util.js +9 -60
- package/util.js.map +1 -1
- package/variant.d.ts +12 -1
- package/variant.js +38 -3
- package/variant.js.map +1 -1
- package/variantUtil.d.ts +13 -0
- package/variantUtil.js +160 -0
- package/variantUtil.js.map +1 -0
- package/csa.js.map +0 -1
- package/csaUtil.d.ts +0 -3
- package/csaUtil.js +0 -21
- package/csaUtil.js.map +0 -1
- package/fen.d.ts +0 -32
- package/fen.js +0 -197
- package/fen.js.map +0 -1
- package/kif.js.map +0 -1
- package/kifHandicaps.js.map +0 -1
- package/kifUtil.d.ts +0 -9
- package/kifUtil.js.map +0 -1
- package/san.d.ts +0 -6
- package/san.js +0 -135
- package/san.js.map +0 -1
- package/src/csaUtil.ts +0 -15
- package/src/fen.ts +0 -183
- package/src/san.ts +0 -136
package/README.md
CHANGED
|
@@ -7,8 +7,7 @@ Shogi and operations in TypeScript forked from [chessops](https://github.com/nik
|
|
|
7
7
|
## Features
|
|
8
8
|
|
|
9
9
|
- Read and write SFEN
|
|
10
|
-
- Vocabulary (Square, SquareSet, Color, Role, Piece, Board,
|
|
11
|
-
Position)
|
|
10
|
+
- Vocabulary (Square, SquareSet, Color, Role, Piece, Board, Setup, Position)
|
|
12
11
|
- Shogi
|
|
13
12
|
- Move making
|
|
14
13
|
- Legal move and drop move generation
|
|
@@ -18,15 +17,15 @@ Shogi and operations in TypeScript forked from [chessops](https://github.com/nik
|
|
|
18
17
|
- Read and write USI move notation
|
|
19
18
|
- Read and write KIF notation
|
|
20
19
|
- Read and write CSA notation
|
|
21
|
-
-
|
|
20
|
+
- Write various move notations
|
|
22
21
|
- [Compatibility with lishogi](https://lishogi.org)
|
|
23
|
-
- [Compatibility with shogiground](https://github.com/WandererXII/shogiground)
|
|
22
|
+
- [Compatibility with shogiground](https://github.com/WandererXII/lishogi/tree/master/ui/shogiground)
|
|
24
23
|
|
|
25
24
|
#### Not yet fully supported:
|
|
26
25
|
|
|
27
26
|
- Position hashing
|
|
28
27
|
|
|
29
|
-
[File an issue](https://github.com/WandererXII/shogiops/issues/new) to request more.
|
|
28
|
+
[File an issue](https://github.com/WandererXII/shogiops/issues/new) to request more or report a bug.
|
|
30
29
|
|
|
31
30
|
## Example
|
|
32
31
|
|
|
@@ -37,8 +36,8 @@ import { parseUsi } from 'shogiops/util';
|
|
|
37
36
|
import { Shogi } from 'shogiops/shogi';
|
|
38
37
|
|
|
39
38
|
const pos = Shogi.default();
|
|
40
|
-
const move = parseUsi('7g7f')
|
|
41
|
-
pos.play(move
|
|
39
|
+
const move = parseUsi('7g7f')!;
|
|
40
|
+
pos.play(move);
|
|
42
41
|
```
|
|
43
42
|
|
|
44
43
|
## License
|
package/attacks.js
CHANGED
|
@@ -7,7 +7,7 @@ function computeRange(square, deltas) {
|
|
|
7
7
|
let range = squareSet_1.SquareSet.empty();
|
|
8
8
|
for (const delta of deltas) {
|
|
9
9
|
const sq = square + delta;
|
|
10
|
-
if (0 <= sq && sq < 81 && Math.abs(util_1.squareFile(square) - util_1.squareFile(sq)) <= 2) {
|
|
10
|
+
if (0 <= sq && sq < 81 && Math.abs((0, util_1.squareFile)(square) - (0, util_1.squareFile)(sq)) <= 2) {
|
|
11
11
|
range = range.with(sq);
|
|
12
12
|
}
|
|
13
13
|
}
|
|
@@ -56,18 +56,18 @@ function pawnAttacks(color, square) {
|
|
|
56
56
|
return PAWN_ATTACKS[color][square];
|
|
57
57
|
}
|
|
58
58
|
exports.pawnAttacks = pawnAttacks;
|
|
59
|
-
const FILE_RANGE = tabulate(sq => squareSet_1.SquareSet.fromFile(util_1.squareFile(sq)).without(sq));
|
|
60
|
-
const RANK_RANGE = tabulate(sq => squareSet_1.SquareSet.fromRank(util_1.squareRank(sq)).without(sq));
|
|
61
|
-
const FORW_RANGE = tabulate(sq => squareSet_1.SquareSet.forwardRanks(util_1.squareRank(sq)).without(sq));
|
|
62
|
-
const BACK_RANGE = tabulate(sq => squareSet_1.SquareSet.backwardRanks(util_1.squareRank(sq)).without(sq));
|
|
59
|
+
const FILE_RANGE = tabulate(sq => squareSet_1.SquareSet.fromFile((0, util_1.squareFile)(sq)).without(sq));
|
|
60
|
+
const RANK_RANGE = tabulate(sq => squareSet_1.SquareSet.fromRank((0, util_1.squareRank)(sq)).without(sq));
|
|
61
|
+
const FORW_RANGE = tabulate(sq => squareSet_1.SquareSet.forwardRanks((0, util_1.squareRank)(sq)).without(sq));
|
|
62
|
+
const BACK_RANGE = tabulate(sq => squareSet_1.SquareSet.backwardRanks((0, util_1.squareRank)(sq)).without(sq));
|
|
63
63
|
const DIAG_RANGE = tabulate(sq => {
|
|
64
64
|
const diag = new squareSet_1.SquareSet(0x100401, 0x802008, 0x4010040);
|
|
65
|
-
const shift = 9 * (util_1.squareRank(sq) - util_1.squareFile(sq));
|
|
65
|
+
const shift = 9 * ((0, util_1.squareRank)(sq) - (0, util_1.squareFile)(sq));
|
|
66
66
|
return (shift >= 0 ? diag.shl81(shift) : diag.shr81(-shift)).without(sq);
|
|
67
67
|
});
|
|
68
68
|
const ANTI_DIAG_RANGE = tabulate(sq => {
|
|
69
69
|
const diag = new squareSet_1.SquareSet(0x1010100, 0x202020, 0x40404);
|
|
70
|
-
const shift = 9 * (util_1.squareRank(sq) + util_1.squareFile(sq) - 8);
|
|
70
|
+
const shift = 9 * ((0, util_1.squareRank)(sq) + (0, util_1.squareFile)(sq) - 8);
|
|
71
71
|
return (shift >= 0 ? diag.shl81(shift) : diag.shr81(-shift)).without(sq);
|
|
72
72
|
});
|
|
73
73
|
function hyperbola(bit, range, occupied) {
|
package/attacks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attacks.js","sourceRoot":"","sources":["src/attacks.ts"],"names":[],"mappings":";;;AAAA,iCAAgD;AAEhD,2CAAwC;AAExC,SAAS,YAAY,CAAC,MAAc,EAAE,MAAgB;IACpD,IAAI,KAAK,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;IAC9B,KAAK,MAAM,KAAK,IAAI,MAAM,EAAE;QAC1B,MAAM,EAAE,GAAG,MAAM,GAAG,KAAK,CAAC;QAC1B,IAAI,CAAC,IAAI,EAAE,IAAI,EAAE,GAAG,EAAE,IAAI,IAAI,CAAC,GAAG,CAAC,iBAAU,
|
|
1
|
+
{"version":3,"file":"attacks.js","sourceRoot":"","sources":["src/attacks.ts"],"names":[],"mappings":"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"}
|
package/board.d.ts
CHANGED
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
import { Square, Color, Role, Piece } from './types';
|
|
2
2
|
import { SquareSet } from './squareSet';
|
|
3
3
|
export declare class Board implements Iterable<[Square, Piece]> {
|
|
4
|
+
numberOfFiles: number;
|
|
5
|
+
numberOfRanks: number;
|
|
4
6
|
occupied: SquareSet;
|
|
5
7
|
gote: SquareSet;
|
|
6
8
|
sente: SquareSet;
|
|
@@ -21,6 +23,7 @@ export declare class Board implements Iterable<[Square, Piece]> {
|
|
|
21
23
|
private constructor();
|
|
22
24
|
static default(): Board;
|
|
23
25
|
reset(): void;
|
|
26
|
+
static minishogi(): Board;
|
|
24
27
|
static empty(): Board;
|
|
25
28
|
clear(): void;
|
|
26
29
|
clone(): Board;
|
package/board.js
CHANGED
|
@@ -11,6 +11,8 @@ class Board {
|
|
|
11
11
|
return board;
|
|
12
12
|
}
|
|
13
13
|
reset() {
|
|
14
|
+
this.numberOfFiles = 9;
|
|
15
|
+
this.numberOfRanks = 9;
|
|
14
16
|
this.occupied = new squareSet_1.SquareSet(0x7fd05ff, 0x0, 0x7fd05ff);
|
|
15
17
|
this.sente = new squareSet_1.SquareSet(0x7fd05ff, 0x0, 0x0);
|
|
16
18
|
this.gote = new squareSet_1.SquareSet(0x0, 0x0, 0x7fd05ff);
|
|
@@ -29,12 +31,37 @@ class Board {
|
|
|
29
31
|
this.horse = squareSet_1.SquareSet.empty();
|
|
30
32
|
this.dragon = squareSet_1.SquareSet.empty();
|
|
31
33
|
}
|
|
34
|
+
static minishogi() {
|
|
35
|
+
const board = new Board();
|
|
36
|
+
board.numberOfFiles = 5;
|
|
37
|
+
board.numberOfRanks = 5;
|
|
38
|
+
board.occupied = new squareSet_1.SquareSet(0x0, 0x43e000, 0x7c20000);
|
|
39
|
+
board.sente = new squareSet_1.SquareSet(0x0, 0x43e000, 0x0);
|
|
40
|
+
board.gote = new squareSet_1.SquareSet(0x0, 0x0, 0x7c20000);
|
|
41
|
+
board.pawn = new squareSet_1.SquareSet(0x0, 0x400000, 0x20000);
|
|
42
|
+
board.lance = new squareSet_1.SquareSet(0x0, 0x0, 0x0);
|
|
43
|
+
board.knight = new squareSet_1.SquareSet(0x0, 0x0, 0x0);
|
|
44
|
+
board.silver = new squareSet_1.SquareSet(0x0, 0x8000, 0x1000000);
|
|
45
|
+
board.gold = new squareSet_1.SquareSet(0x0, 0x4000, 0x2000000);
|
|
46
|
+
board.bishop = new squareSet_1.SquareSet(0x0, 0x10000, 0x800000);
|
|
47
|
+
board.rook = new squareSet_1.SquareSet(0x0, 0x20000, 0x400000);
|
|
48
|
+
board.tokin = new squareSet_1.SquareSet(0x0, 0, 0);
|
|
49
|
+
board.promotedlance = new squareSet_1.SquareSet(0x0, 0x0, 0x0);
|
|
50
|
+
board.promotedknight = new squareSet_1.SquareSet(0x0, 0x0, 0x0);
|
|
51
|
+
board.promotedsilver = new squareSet_1.SquareSet(0x0, 0x0, 0x0);
|
|
52
|
+
board.horse = new squareSet_1.SquareSet(0x0, 0x0, 0x0);
|
|
53
|
+
board.dragon = new squareSet_1.SquareSet(0x0, 0x0, 0x0);
|
|
54
|
+
board.king = new squareSet_1.SquareSet(0x0, 0x2000, 0x4000000);
|
|
55
|
+
return board;
|
|
56
|
+
}
|
|
32
57
|
static empty() {
|
|
33
58
|
const board = new Board();
|
|
34
59
|
board.clear();
|
|
35
60
|
return board;
|
|
36
61
|
}
|
|
37
62
|
clear() {
|
|
63
|
+
this.numberOfFiles = 9;
|
|
64
|
+
this.numberOfRanks = 9;
|
|
38
65
|
this.occupied = squareSet_1.SquareSet.empty();
|
|
39
66
|
for (const color of types_1.COLORS)
|
|
40
67
|
this[color] = squareSet_1.SquareSet.empty();
|
|
@@ -44,6 +71,8 @@ class Board {
|
|
|
44
71
|
clone() {
|
|
45
72
|
const board = new Board();
|
|
46
73
|
board.occupied = this.occupied;
|
|
74
|
+
board.numberOfFiles = this.numberOfFiles;
|
|
75
|
+
board.numberOfRanks = this.numberOfRanks;
|
|
47
76
|
for (const color of types_1.COLORS)
|
|
48
77
|
board[color] = this[color];
|
|
49
78
|
for (const role of types_1.ROLES)
|
|
@@ -53,6 +82,8 @@ class Board {
|
|
|
53
82
|
equals(other) {
|
|
54
83
|
if (!this.gote.equals(other.gote))
|
|
55
84
|
return false;
|
|
85
|
+
if (this.numberOfFiles !== other.numberOfFiles || this.numberOfRanks !== other.numberOfRanks)
|
|
86
|
+
return false;
|
|
56
87
|
return types_1.ROLES.every(role => this[role].equals(other[role]));
|
|
57
88
|
}
|
|
58
89
|
getColor(square) {
|
package/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["src/board.ts"],"names":[],"mappings":";;;AAAA,mCAAoE;AACpE,2CAAwC;AAExC,MAAa,KAAK;
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["src/board.ts"],"names":[],"mappings":";;;AAAA,mCAAoE;AACpE,2CAAwC;AAExC,MAAa,KAAK;IAwBhB,gBAAuB,CAAC;IAExB,MAAM,CAAC,OAAO;QACZ,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QACzD,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAChD,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,SAAS,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QACjD,IAAI,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,KAAK,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,IAAI,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAClD,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,KAAK,EAAE,GAAG,EAAE,OAAO,CAAC,CAAC;QACjD,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,OAAO,EAAE,GAAG,EAAE,KAAK,CAAC,CAAC;QAC/C,IAAI,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,IAAI,EAAE,GAAG,EAAE,QAAQ,CAAC,CAAC;QAC/C,IAAI,CAAC,KAAK,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,aAAa,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;QACvC,IAAI,CAAC,cAAc,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,cAAc,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;QACxC,IAAI,CAAC,KAAK,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;QAC/B,IAAI,CAAC,MAAM,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;IAClC,CAAC;IAED,MAAM,CAAC,SAAS;QACd,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;QACxB,KAAK,CAAC,aAAa,GAAG,CAAC,CAAC;QACxB,KAAK,CAAC,QAAQ,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,SAAS,CAAC,CAAC;QACzD,KAAK,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,GAAG,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,SAAS,CAAC,CAAC;QAChD,KAAK,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,KAAK,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,KAAK,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnD,KAAK,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACrD,KAAK,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,OAAO,EAAE,QAAQ,CAAC,CAAC;QACnD,KAAK,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,CAAC,EAAE,CAAC,CAAC,CAAC;QACvC,KAAK,CAAC,aAAa,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACnD,KAAK,CAAC,cAAc,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,KAAK,CAAC,cAAc,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QACpD,KAAK,CAAC,KAAK,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC3C,KAAK,CAAC,MAAM,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,CAAC;QAC5C,KAAK,CAAC,IAAI,GAAG,IAAI,qBAAS,CAAC,GAAG,EAAE,MAAM,EAAE,SAAS,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAK;QACV,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,KAAK,EAAE,CAAC;QACd,OAAO,KAAK,CAAC;IACf,CAAC;IAED,KAAK;QACH,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,aAAa,GAAG,CAAC,CAAC;QACvB,IAAI,CAAC,QAAQ,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;QAClC,KAAK,MAAM,KAAK,IAAI,cAAM;YAAE,IAAI,CAAC,KAAK,CAAC,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;QAC5D,KAAK,MAAM,IAAI,IAAI,aAAK;YAAE,IAAI,CAAC,IAAI,CAAC,GAAG,qBAAS,CAAC,KAAK,EAAE,CAAC;IAC3D,CAAC;IAED,KAAK;QACH,MAAM,KAAK,GAAG,IAAI,KAAK,EAAE,CAAC;QAC1B,KAAK,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC;QAC/B,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,KAAK,CAAC,aAAa,GAAG,IAAI,CAAC,aAAa,CAAC;QACzC,KAAK,MAAM,KAAK,IAAI,cAAM;YAAE,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,CAAC;QACvD,KAAK,MAAM,IAAI,IAAI,aAAK;YAAE,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,IAAI,CAAC,CAAC;QACnD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,IAAI,CAAC,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC;YAAE,OAAO,KAAK,CAAC;QAChD,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa,IAAI,IAAI,CAAC,aAAa,KAAK,KAAK,CAAC,aAAa;YAAE,OAAO,KAAK,CAAC;QAC3G,OAAO,aAAK,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,MAAM,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAC7D,CAAC;IAED,QAAQ,CAAC,MAAc;QACrB,IAAI,IAAI,CAAC,KAAK,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,OAAO,CAAC;QAC3C,IAAI,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC;YAAE,OAAO,MAAM,CAAC;QACzC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,MAAc;QACpB,KAAK,MAAM,IAAI,IAAI,aAAK,EAAE;YACxB,IAAI,IAAI,CAAC,IAAI,CAAC,CAAC,GAAG,CAAC,MAAM,CAAC;gBAAE,OAAO,IAAI,CAAC;SACzC;QACD,OAAO;IACT,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;QACpC,IAAI,CAAC,KAAK;YAAE,OAAO;QACnB,MAAM,IAAI,GAAG,IAAI,CAAC,OAAO,CAAC,MAAM,CAAE,CAAC;QACnC,OAAO,EAAE,KAAK,EAAE,IAAI,EAAE,CAAC;IACzB,CAAC;IAED,IAAI,CAAC,MAAc;QACjB,MAAM,KAAK,GAAG,IAAI,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;QAC/B,IAAI,KAAK,EAAE;YACT,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YAC9C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;YACtD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,OAAO,CAAC,MAAM,CAAC,CAAC;SACrD;QACD,OAAO,KAAK,CAAC;IACf,CAAC;IAED,GAAG,CAAC,MAAc,EAAE,KAAY;QAC9B,MAAM,GAAG,GAAG,IAAI,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC9B,IAAI,CAAC,QAAQ,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QAC3C,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,KAAK,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACnD,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,GAAG,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAC;QACjD,OAAO,GAAG,CAAC;IACb,CAAC;IAED,GAAG,CAAC,MAAc;QAChB,OAAO,IAAI,CAAC,QAAQ,CAAC,GAAG,CAAC,MAAM,CAAC,CAAC;IACnC,CAAC;IAED,CAAC,CAAC,MAAM,CAAC,QAAQ,CAAC;QAChB,KAAK,MAAM,MAAM,IAAI,IAAI,CAAC,QAAQ,EAAE;YAClC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,GAAG,CAAC,MAAM,CAAE,CAAC,CAAC;SACnC;IACH,CAAC;IAED,MAAM,CAAC,KAAY,EAAE,IAAU;QAC7B,OAAO,IAAI,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,CAAC;IAC3C,CAAC;IAED,MAAM,CAAC,KAAY;QACjB,OAAO,IAAI,CAAC,IAAI,CAAC,SAAS,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,YAAY,EAAE,CAAC;IACzD,CAAC;CACF;AAnKD,sBAmKC"}
|
package/compat.d.ts
CHANGED
|
@@ -1,26 +1,8 @@
|
|
|
1
|
-
import { Rules, SquareName, Move,
|
|
1
|
+
import { Rules, SquareName, Move, Role } from './types';
|
|
2
2
|
import { Position } from './shogi';
|
|
3
|
-
export declare
|
|
4
|
-
export declare
|
|
5
|
-
export declare const C_RANK_NAMES: readonly ["1", "2", "3", "4", "5", "6", "7", "8", "9"];
|
|
6
|
-
export declare type ChessRankName = typeof C_RANK_NAMES[number];
|
|
7
|
-
export declare type ChessSquareName = `${ChessFileName}${ChessRankName}`;
|
|
8
|
-
export declare function makeChessSquare(square: Square): ChessSquareName;
|
|
9
|
-
export declare function parseChessSquare(str: ChessSquareName): Square;
|
|
10
|
-
export declare function parseChessSquare(str: string): Square | undefined;
|
|
11
|
-
export declare function shogigroundDests(pos: Position): Map<ChessSquareName, ChessSquareName[]>;
|
|
12
|
-
export declare function shogigroundDropDests(pos: Position, role?: PocketRole): Map<PocketRole, ChessSquareName[]>;
|
|
3
|
+
export declare function shogigroundDests(pos: Position): Map<SquareName, SquareName[]>;
|
|
4
|
+
export declare function shogigroundDropDests(pos: Position, role?: Role): Map<Role, SquareName[]>;
|
|
13
5
|
export declare function scalashogiCharPair(move: Move): string;
|
|
14
|
-
export declare function
|
|
15
|
-
export declare function
|
|
16
|
-
export declare function
|
|
17
|
-
export declare function shogiCoordToChessCord(s: SquareName): ChessSquareName;
|
|
18
|
-
export declare function chessCoord(str: string): ChessSquareName | undefined;
|
|
19
|
-
export declare function shogiCoord(str: string): SquareName | undefined;
|
|
20
|
-
export declare function roleToLishogiChar(role: Role): string;
|
|
21
|
-
export declare function lishogiCharToRole(ch: 'p' | 'l' | 'n' | 's' | 'g' | 'b' | 'r' | 't' | 'u' | 'm' | 'a' | 'h' | 'd' | 'P' | 'L' | 'N' | 'S' | 'G' | 'B' | 'R' | 'T' | 'U' | 'M' | 'A' | 'H' | 'D'): Role;
|
|
22
|
-
export declare function lishogiCharToRole(ch: string): Role | undefined;
|
|
23
|
-
export declare function parseLishogiUci(str: string): Move | undefined;
|
|
24
|
-
export declare function makeLishogiUci(move: Move): string;
|
|
25
|
-
export declare function assureUsi(str: string): string | undefined;
|
|
26
|
-
export declare function assureLishogiUci(str: string): string | undefined;
|
|
6
|
+
export declare function usiToSquareNames(usi: string): SquareName[];
|
|
7
|
+
export declare function moveToSquareNames(move: Move): SquareName[];
|
|
8
|
+
export declare function lishogiVariantRules(variant: string): Rules;
|
package/compat.js
CHANGED
|
@@ -1,31 +1,15 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
-
exports.
|
|
3
|
+
exports.lishogiVariantRules = exports.moveToSquareNames = exports.usiToSquareNames = exports.scalashogiCharPair = exports.shogigroundDropDests = exports.shogigroundDests = void 0;
|
|
4
4
|
const types_1 = require("./types");
|
|
5
5
|
const util_1 = require("./util");
|
|
6
|
-
exports.C_FILE_NAMES = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i'];
|
|
7
|
-
exports.C_RANK_NAMES = ['1', '2', '3', '4', '5', '6', '7', '8', '9'];
|
|
8
|
-
function makeChessSquare(square) {
|
|
9
|
-
return (exports.C_FILE_NAMES[util_1.squareFile(square)] + exports.C_RANK_NAMES[util_1.squareRank(square)]);
|
|
10
|
-
}
|
|
11
|
-
exports.makeChessSquare = makeChessSquare;
|
|
12
|
-
function parseChessSquare(str) {
|
|
13
|
-
if (str.length !== 2)
|
|
14
|
-
return;
|
|
15
|
-
const file = Math.abs(str.charCodeAt(0) - 'a'.charCodeAt(0));
|
|
16
|
-
const rank = Math.abs(str.charCodeAt(1) - '1'.charCodeAt(0));
|
|
17
|
-
if (file < 0 || file >= 9 || rank < 0 || rank >= 9)
|
|
18
|
-
return;
|
|
19
|
-
return file + 9 * rank;
|
|
20
|
-
}
|
|
21
|
-
exports.parseChessSquare = parseChessSquare;
|
|
22
6
|
function shogigroundDests(pos) {
|
|
23
7
|
const result = new Map();
|
|
24
8
|
const ctx = pos.ctx();
|
|
25
9
|
for (const [from, squares] of pos.allDests(ctx)) {
|
|
26
10
|
if (squares.nonEmpty()) {
|
|
27
|
-
const d = Array.from(squares, s =>
|
|
28
|
-
result.set(
|
|
11
|
+
const d = Array.from(squares, s => (0, util_1.makeSquare)(s));
|
|
12
|
+
result.set((0, util_1.makeSquare)(from), d);
|
|
29
13
|
}
|
|
30
14
|
}
|
|
31
15
|
return result;
|
|
@@ -36,7 +20,7 @@ function shogigroundDropDests(pos, role) {
|
|
|
36
20
|
if (role) {
|
|
37
21
|
const squares = pos.dropDests(role);
|
|
38
22
|
if (squares.nonEmpty()) {
|
|
39
|
-
const d = Array.from(squares, s =>
|
|
23
|
+
const d = Array.from(squares, s => (0, util_1.makeSquare)(s));
|
|
40
24
|
result.set(role, d);
|
|
41
25
|
}
|
|
42
26
|
}
|
|
@@ -44,7 +28,7 @@ function shogigroundDropDests(pos, role) {
|
|
|
44
28
|
const ctx = pos.ctx();
|
|
45
29
|
for (const [r, squares] of pos.allDropDests(ctx)) {
|
|
46
30
|
if (squares.nonEmpty()) {
|
|
47
|
-
const d = Array.from(squares, s =>
|
|
31
|
+
const d = Array.from(squares, s => (0, util_1.makeSquare)(s));
|
|
48
32
|
result.set(r, d);
|
|
49
33
|
}
|
|
50
34
|
}
|
|
@@ -53,168 +37,28 @@ function shogigroundDropDests(pos, role) {
|
|
|
53
37
|
}
|
|
54
38
|
exports.shogigroundDropDests = shogigroundDropDests;
|
|
55
39
|
function scalashogiCharPair(move) {
|
|
56
|
-
if (types_1.isDrop(move))
|
|
40
|
+
if ((0, types_1.isDrop)(move))
|
|
57
41
|
return String.fromCharCode(34 + move.to, 34 + 81 + 128 + ['rook', 'bishop', 'knight', 'pawn', 'gold', 'silver', 'lance'].indexOf(move.role));
|
|
58
42
|
else
|
|
59
43
|
return String.fromCharCode(34 + move.from, move.promotion ? 34 + move.to + 128 : 34 + move.to);
|
|
60
44
|
}
|
|
61
45
|
exports.scalashogiCharPair = scalashogiCharPair;
|
|
62
|
-
function
|
|
63
|
-
|
|
46
|
+
function usiToSquareNames(usi) {
|
|
47
|
+
const move = (0, util_1.parseUsi)(usi);
|
|
48
|
+
return (0, util_1.defined)(move) ? moveToSquareNames(move) : [];
|
|
49
|
+
}
|
|
50
|
+
exports.usiToSquareNames = usiToSquareNames;
|
|
51
|
+
function moveToSquareNames(move) {
|
|
52
|
+
return (0, types_1.isDrop)(move) ? [(0, util_1.makeSquare)(move.to)] : [(0, util_1.makeSquare)(move.from), (0, util_1.makeSquare)(move.to)];
|
|
64
53
|
}
|
|
65
|
-
exports.
|
|
54
|
+
exports.moveToSquareNames = moveToSquareNames;
|
|
66
55
|
function lishogiVariantRules(variant) {
|
|
67
56
|
switch (variant) {
|
|
68
|
-
case '
|
|
69
|
-
|
|
57
|
+
case 'minishogi':
|
|
58
|
+
return 'minishogi';
|
|
59
|
+
default:
|
|
70
60
|
return 'shogi';
|
|
71
61
|
}
|
|
72
62
|
}
|
|
73
63
|
exports.lishogiVariantRules = lishogiVariantRules;
|
|
74
|
-
function chessCoordToShogiCoord(s) {
|
|
75
|
-
return util_1.makeSquare(parseChessSquare(s));
|
|
76
|
-
}
|
|
77
|
-
exports.chessCoordToShogiCoord = chessCoordToShogiCoord;
|
|
78
|
-
function shogiCoordToChessCord(s) {
|
|
79
|
-
return makeChessSquare(util_1.parseSquare(s));
|
|
80
|
-
}
|
|
81
|
-
exports.shogiCoordToChessCord = shogiCoordToChessCord;
|
|
82
|
-
function chessCoord(str) {
|
|
83
|
-
if (str.match(/^[1-9][a-i]$/))
|
|
84
|
-
return shogiCoordToChessCord(str);
|
|
85
|
-
if (str.match(/^[a-i][1-9]$/))
|
|
86
|
-
return str;
|
|
87
|
-
return undefined;
|
|
88
|
-
}
|
|
89
|
-
exports.chessCoord = chessCoord;
|
|
90
|
-
function shogiCoord(str) {
|
|
91
|
-
if (str.match(/^[1-9][a-i]$/))
|
|
92
|
-
return str;
|
|
93
|
-
if (str.match(/^[a-i][1-9]$/))
|
|
94
|
-
return chessCoordToShogiCoord(str);
|
|
95
|
-
else
|
|
96
|
-
return undefined;
|
|
97
|
-
}
|
|
98
|
-
exports.shogiCoord = shogiCoord;
|
|
99
|
-
function roleToLishogiChar(role) {
|
|
100
|
-
switch (role) {
|
|
101
|
-
case 'pawn':
|
|
102
|
-
return 'p';
|
|
103
|
-
case 'lance':
|
|
104
|
-
return 'l';
|
|
105
|
-
case 'knight':
|
|
106
|
-
return 'n';
|
|
107
|
-
case 'silver':
|
|
108
|
-
return 's';
|
|
109
|
-
case 'gold':
|
|
110
|
-
return 'g';
|
|
111
|
-
case 'bishop':
|
|
112
|
-
return 'b';
|
|
113
|
-
case 'rook':
|
|
114
|
-
return 'r';
|
|
115
|
-
case 'tokin':
|
|
116
|
-
return 't';
|
|
117
|
-
case 'promotedlance':
|
|
118
|
-
return 'u';
|
|
119
|
-
case 'promotedknight':
|
|
120
|
-
return 'm';
|
|
121
|
-
case 'promotedsilver':
|
|
122
|
-
return 'a';
|
|
123
|
-
case 'horse':
|
|
124
|
-
return 'h';
|
|
125
|
-
case 'dragon':
|
|
126
|
-
return 'd';
|
|
127
|
-
case 'king':
|
|
128
|
-
return 'k';
|
|
129
|
-
}
|
|
130
|
-
}
|
|
131
|
-
exports.roleToLishogiChar = roleToLishogiChar;
|
|
132
|
-
function lishogiCharToRole(ch) {
|
|
133
|
-
switch (ch) {
|
|
134
|
-
case 'P':
|
|
135
|
-
case 'p':
|
|
136
|
-
return 'pawn';
|
|
137
|
-
case 'L':
|
|
138
|
-
case 'l':
|
|
139
|
-
return 'lance';
|
|
140
|
-
case 'N':
|
|
141
|
-
case 'n':
|
|
142
|
-
return 'knight';
|
|
143
|
-
case 'S':
|
|
144
|
-
case 's':
|
|
145
|
-
return 'silver';
|
|
146
|
-
case 'G':
|
|
147
|
-
case 'g':
|
|
148
|
-
return 'gold';
|
|
149
|
-
case 'B':
|
|
150
|
-
case 'b':
|
|
151
|
-
return 'bishop';
|
|
152
|
-
case 'R':
|
|
153
|
-
case 'r':
|
|
154
|
-
return 'rook';
|
|
155
|
-
case 'T':
|
|
156
|
-
case 't':
|
|
157
|
-
return 'tokin';
|
|
158
|
-
case 'U':
|
|
159
|
-
case 'u':
|
|
160
|
-
return 'promotedlance';
|
|
161
|
-
case 'M':
|
|
162
|
-
case 'm':
|
|
163
|
-
return 'promotedknight';
|
|
164
|
-
case 'A':
|
|
165
|
-
case 'a':
|
|
166
|
-
return 'promotedsilver';
|
|
167
|
-
case 'H':
|
|
168
|
-
case 'h':
|
|
169
|
-
return 'horse';
|
|
170
|
-
case 'D':
|
|
171
|
-
case 'd':
|
|
172
|
-
return 'dragon';
|
|
173
|
-
case 'K':
|
|
174
|
-
case 'k':
|
|
175
|
-
return 'king';
|
|
176
|
-
default:
|
|
177
|
-
return;
|
|
178
|
-
}
|
|
179
|
-
}
|
|
180
|
-
exports.lishogiCharToRole = lishogiCharToRole;
|
|
181
|
-
function parseLishogiUci(str) {
|
|
182
|
-
if (str[1] === '*' && str.length === 4) {
|
|
183
|
-
const role = lishogiCharToRole(str[0]);
|
|
184
|
-
const to = parseChessSquare(str.slice(2));
|
|
185
|
-
if (util_1.defined(role) && util_1.defined(to))
|
|
186
|
-
return { role, to };
|
|
187
|
-
}
|
|
188
|
-
else if (str.length === 4 || str.length === 5) {
|
|
189
|
-
const from = parseChessSquare(str.slice(0, 2));
|
|
190
|
-
const to = parseChessSquare(str.slice(2, 4));
|
|
191
|
-
const promotion = str[4] === '+' ? true : false;
|
|
192
|
-
if (util_1.defined(from) && util_1.defined(to))
|
|
193
|
-
return { from, to, promotion };
|
|
194
|
-
}
|
|
195
|
-
return;
|
|
196
|
-
}
|
|
197
|
-
exports.parseLishogiUci = parseLishogiUci;
|
|
198
|
-
function makeLishogiUci(move) {
|
|
199
|
-
if (types_1.isDrop(move))
|
|
200
|
-
return `${roleToLishogiChar(move.role).toUpperCase()}*${makeChessSquare(move.to)}`;
|
|
201
|
-
return makeChessSquare(move.from) + makeChessSquare(move.to) + (move.promotion ? '+' : '');
|
|
202
|
-
}
|
|
203
|
-
exports.makeLishogiUci = makeLishogiUci;
|
|
204
|
-
function assureUsi(str) {
|
|
205
|
-
if (str.match(/^([1-9][a-i]|([RBGSNLP]\*))[1-9][a-i](\+|\=)?$/))
|
|
206
|
-
return str;
|
|
207
|
-
if (str.match(/^([a-i][1-9]|([RBGSNLP]\*))[a-i][1-9](\+|\=)?$/))
|
|
208
|
-
return util_1.makeUsi(parseLishogiUci(str));
|
|
209
|
-
return;
|
|
210
|
-
}
|
|
211
|
-
exports.assureUsi = assureUsi;
|
|
212
|
-
function assureLishogiUci(str) {
|
|
213
|
-
if (str.match(/^([a-i][1-9]|([RBGSNLP]\*))[a-i][1-9](\+|\=)?$/))
|
|
214
|
-
return str;
|
|
215
|
-
if (str.match(/^([1-9][a-i]|([RBGSNLP]\*))[1-9][a-i](\+|\=)?$/))
|
|
216
|
-
return makeLishogiUci(util_1.parseUsi(str));
|
|
217
|
-
return;
|
|
218
|
-
}
|
|
219
|
-
exports.assureLishogiUci = assureLishogiUci;
|
|
220
64
|
//# sourceMappingURL=compat.js.map
|
package/compat.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"compat.js","sourceRoot":"","sources":["src/compat.ts"],"names":[],"mappings":";;;AAAA,
|
|
1
|
+
{"version":3,"file":"compat.js","sourceRoot":"","sources":["src/compat.ts"],"names":[],"mappings":"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"}
|
package/debug.js
CHANGED
|
@@ -1,10 +1,9 @@
|
|
|
1
1
|
"use strict";
|
|
2
2
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
3
|
exports.perft = exports.dests = exports.square = exports.board = exports.piece = exports.squareSet = void 0;
|
|
4
|
-
const types_1 = require("./types");
|
|
5
4
|
const util_1 = require("./util");
|
|
6
|
-
const
|
|
7
|
-
const
|
|
5
|
+
const sfen_1 = require("./sfen");
|
|
6
|
+
const variantUtil_1 = require("./variantUtil");
|
|
8
7
|
function squareSet(squares) {
|
|
9
8
|
const r = [];
|
|
10
9
|
for (let y = 8; y >= 0; y--) {
|
|
@@ -18,7 +17,7 @@ function squareSet(squares) {
|
|
|
18
17
|
}
|
|
19
18
|
exports.squareSet = squareSet;
|
|
20
19
|
function piece(piece) {
|
|
21
|
-
return
|
|
20
|
+
return (0, sfen_1.makePiece)(piece);
|
|
22
21
|
}
|
|
23
22
|
exports.piece = piece;
|
|
24
23
|
function board(board) {
|
|
@@ -36,13 +35,13 @@ function board(board) {
|
|
|
36
35
|
}
|
|
37
36
|
exports.board = board;
|
|
38
37
|
function square(sq) {
|
|
39
|
-
return util_1.makeSquare(sq);
|
|
38
|
+
return (0, util_1.makeSquare)(sq);
|
|
40
39
|
}
|
|
41
40
|
exports.square = square;
|
|
42
41
|
function dests(dests) {
|
|
43
42
|
const lines = [];
|
|
44
43
|
for (const [from, to] of dests) {
|
|
45
|
-
lines.push(`${util_1.makeSquare(from)}: ${Array.from(to, square).join(' ')}`);
|
|
44
|
+
lines.push(`${(0, util_1.makeSquare)(from)}: ${Array.from(to, square).join(' ')}`);
|
|
46
45
|
}
|
|
47
46
|
return lines.join('\n');
|
|
48
47
|
}
|
|
@@ -52,66 +51,41 @@ function perft(pos, depth, log = false) {
|
|
|
52
51
|
return 1;
|
|
53
52
|
const ctx = pos.ctx();
|
|
54
53
|
const dropDests = pos.allDropDests(ctx);
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
? to
|
|
64
|
-
: to.intersect(squareSet_1.SquareSet.promotionZone(pos.turn));
|
|
65
|
-
const forceProm = role === 'pawn' || role === 'lance'
|
|
66
|
-
? squareSet_1.SquareSet.backrank(pos.turn)
|
|
67
|
-
: role === 'knight'
|
|
68
|
-
? squareSet_1.SquareSet.backrank2(pos.turn)
|
|
69
|
-
: squareSet_1.SquareSet.empty();
|
|
70
|
-
nodes += promMoves.diff(forceProm).size();
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
return nodes;
|
|
74
|
-
}
|
|
75
|
-
else {
|
|
76
|
-
let nodes = 0;
|
|
77
|
-
for (const [from, dests] of pos.allDests(ctx)) {
|
|
78
|
-
for (const to of dests) {
|
|
79
|
-
const promotions = [];
|
|
80
|
-
const role = pos.board.get(from).role;
|
|
81
|
-
const canPromote = types_1.PROMOTABLE_ROLES.includes(role) &&
|
|
82
|
-
(squareSet_1.SquareSet.promotionZone(pos.turn).has(to) || squareSet_1.SquareSet.promotionZone(pos.turn).has(from));
|
|
83
|
-
if (canPromote) {
|
|
84
|
-
promotions.push(true);
|
|
85
|
-
if (!(((role === 'pawn' || role === 'lance') && squareSet_1.SquareSet.backrank(pos.turn).has(to)) ||
|
|
86
|
-
(role === 'knight' && squareSet_1.SquareSet.backrank2(pos.turn).has(to))))
|
|
87
|
-
promotions.push(false);
|
|
88
|
-
}
|
|
89
|
-
else
|
|
54
|
+
let nodes = 0;
|
|
55
|
+
for (const [from, dests] of pos.allDests(ctx)) {
|
|
56
|
+
for (const to of dests) {
|
|
57
|
+
const promotions = [];
|
|
58
|
+
const piece = pos.board.get(from);
|
|
59
|
+
if ((0, variantUtil_1.pieceCanPromote)(pos.rules)(piece, from, to)) {
|
|
60
|
+
promotions.push(true);
|
|
61
|
+
if (!(0, variantUtil_1.pieceInDeadZone)(pos.rules)(piece, to))
|
|
90
62
|
promotions.push(false);
|
|
91
|
-
for (const promotion of promotions) {
|
|
92
|
-
const child = pos.clone();
|
|
93
|
-
const move = { from, to, promotion };
|
|
94
|
-
child.play(move);
|
|
95
|
-
const children = perft(child, depth - 1, false);
|
|
96
|
-
if (log)
|
|
97
|
-
console.log(util_1.makeUsi(move), children);
|
|
98
|
-
nodes += children;
|
|
99
|
-
}
|
|
100
63
|
}
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
for (const
|
|
64
|
+
else
|
|
65
|
+
promotions.push(false);
|
|
66
|
+
for (const promotion of promotions) {
|
|
104
67
|
const child = pos.clone();
|
|
105
|
-
const move = {
|
|
68
|
+
const move = { from, to, promotion };
|
|
106
69
|
child.play(move);
|
|
107
70
|
const children = perft(child, depth - 1, false);
|
|
108
71
|
if (log)
|
|
109
|
-
console.log(util_1.makeUsi(move), children);
|
|
72
|
+
console.log((0, util_1.makeUsi)(move), children, '(', depth, ')');
|
|
110
73
|
nodes += children;
|
|
111
74
|
}
|
|
112
75
|
}
|
|
113
|
-
return nodes;
|
|
114
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)
|
|
84
|
+
console.log((0, util_1.makeUsi)(move), children, '(', depth, ')');
|
|
85
|
+
nodes += children;
|
|
86
|
+
}
|
|
87
|
+
}
|
|
88
|
+
return nodes;
|
|
115
89
|
}
|
|
116
90
|
exports.perft = perft;
|
|
117
91
|
//# sourceMappingURL=debug.js.map
|