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.
- package/attacks.js +32 -48
- package/attacks.js.map +1 -1
- package/board.d.ts +3 -0
- package/board.js +60 -33
- package/board.js.map +1 -1
- package/compat.d.ts +6 -24
- package/compat.js +20 -185
- package/compat.js.map +1 -1
- package/debug.js +37 -72
- package/debug.js.map +1 -1
- package/hand.d.ts +38 -0
- package/hand.js +69 -0
- package/hand.js.map +1 -0
- package/hash.d.ts +4 -3
- package/hash.js +12 -20
- package/hash.js.map +1 -1
- package/index.d.ts +13 -10
- package/index.js +22 -64
- package/index.js.map +1 -1
- package/{csa.d.ts → notation/csa/csa.d.ts} +9 -9
- package/notation/csa/csa.js +213 -0
- package/notation/csa/csa.js.map +1 -0
- package/notation/japanese.d.ts +3 -0
- package/notation/japanese.js +61 -0
- package/notation/japanese.js.map +1 -0
- package/{kif.d.ts → notation/kif/kif.d.ts} +10 -9
- package/notation/kif/kif.js +232 -0
- 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} +7 -7
- package/notation/kif/kifHandicaps.js.map +1 -0
- package/notation/kitaoKawasaki.d.ts +3 -0
- package/notation/kitaoKawasaki.js +26 -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} +39 -40
- package/notation/notationUtil.js.map +1 -0
- package/notation/western.d.ts +3 -0
- package/notation/western.js +23 -0
- package/notation/western.js.map +1 -0
- package/notation/westernEngine.d.ts +3 -0
- package/notation/westernEngine.js +23 -0
- package/notation/westernEngine.js.map +1 -0
- package/package.json +54 -37
- package/setup.d.ts +2 -32
- package/setup.js +5 -80
- package/setup.js.map +1 -1
- package/sfen.d.ts +33 -0
- package/sfen.js +188 -0
- package/sfen.js.map +1 -0
- package/shogi.d.ts +14 -7
- package/shogi.js +138 -141
- package/shogi.js.map +1 -1
- package/squareSet.d.ts +1 -5
- package/squareSet.js +1 -18
- 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} +53 -52
- 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 +18 -24
- package/transform.js.map +1 -1
- package/types.d.ts +3 -7
- package/types.js +18 -24
- package/types.js.map +1 -1
- package/util.d.ts +4 -7
- package/util.js +24 -96
- package/util.js.map +1 -1
- package/variant.d.ts +12 -1
- package/variant.js +42 -16
- package/variant.js.map +1 -1
- package/variantUtil.d.ts +13 -0
- package/variantUtil.js +147 -0
- package/variantUtil.js.map +1 -0
- package/csa.js +0 -229
- 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 +0 -247
- 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/attacks.js
CHANGED
|
@@ -1,13 +1,10 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
exports.between = exports.ray = exports.attacks = exports.dragonAttacks = exports.horseAttacks = exports.lanceAttacks = exports.rookAttacks = exports.bishopAttacks = exports.pawnAttacks = exports.goldAttacks = exports.silverAttacks = exports.knightAttacks = exports.kingAttacks = void 0;
|
|
4
|
-
const util_1 = require("./util");
|
|
5
|
-
const squareSet_1 = require("./squareSet");
|
|
1
|
+
import { squareFile, squareRank } from './util';
|
|
2
|
+
import { SquareSet } from './squareSet';
|
|
6
3
|
function computeRange(square, deltas) {
|
|
7
|
-
let range =
|
|
4
|
+
let range = SquareSet.empty();
|
|
8
5
|
for (const delta of deltas) {
|
|
9
6
|
const sq = square + delta;
|
|
10
|
-
if (0 <= sq && sq < 81 && Math.abs(
|
|
7
|
+
if (0 <= sq && sq < 81 && Math.abs(squareFile(square) - squareFile(sq)) <= 2) {
|
|
11
8
|
range = range.with(sq);
|
|
12
9
|
}
|
|
13
10
|
}
|
|
@@ -36,38 +33,33 @@ const GOLD_ATTACKS = {
|
|
|
36
33
|
sente: tabulate(sq => computeRange(sq, [-9, -1, 1, 8, 9, 10])),
|
|
37
34
|
gote: tabulate(sq => computeRange(sq, [-10, -9, -8, -1, 1, 9])),
|
|
38
35
|
};
|
|
39
|
-
function kingAttacks(square) {
|
|
36
|
+
export function kingAttacks(square) {
|
|
40
37
|
return KING_ATTACKS[square];
|
|
41
38
|
}
|
|
42
|
-
|
|
43
|
-
function knightAttacks(color, square) {
|
|
39
|
+
export function knightAttacks(color, square) {
|
|
44
40
|
return KNIGHT_ATTACKS[color][square];
|
|
45
41
|
}
|
|
46
|
-
|
|
47
|
-
function silverAttacks(color, square) {
|
|
42
|
+
export function silverAttacks(color, square) {
|
|
48
43
|
return SILVER_ATTACKS[color][square];
|
|
49
44
|
}
|
|
50
|
-
|
|
51
|
-
function goldAttacks(color, square) {
|
|
45
|
+
export function goldAttacks(color, square) {
|
|
52
46
|
return GOLD_ATTACKS[color][square];
|
|
53
47
|
}
|
|
54
|
-
|
|
55
|
-
function pawnAttacks(color, square) {
|
|
48
|
+
export function pawnAttacks(color, square) {
|
|
56
49
|
return PAWN_ATTACKS[color][square];
|
|
57
50
|
}
|
|
58
|
-
|
|
59
|
-
const
|
|
60
|
-
const
|
|
61
|
-
const
|
|
62
|
-
const BACK_RANGE = tabulate(sq => squareSet_1.SquareSet.backwardRanks(util_1.squareRank(sq)).without(sq));
|
|
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.forwardRanks(squareRank(sq)).without(sq));
|
|
54
|
+
const BACK_RANGE = tabulate(sq => SquareSet.backwardRanks(squareRank(sq)).without(sq));
|
|
63
55
|
const DIAG_RANGE = tabulate(sq => {
|
|
64
|
-
const diag = new
|
|
65
|
-
const shift = 9 * (
|
|
56
|
+
const diag = new SquareSet(0x100401, 0x802008, 0x4010040);
|
|
57
|
+
const shift = 9 * (squareRank(sq) - squareFile(sq));
|
|
66
58
|
return (shift >= 0 ? diag.shl81(shift) : diag.shr81(-shift)).without(sq);
|
|
67
59
|
});
|
|
68
60
|
const ANTI_DIAG_RANGE = tabulate(sq => {
|
|
69
|
-
const diag = new
|
|
70
|
-
const shift = 9 * (
|
|
61
|
+
const diag = new SquareSet(0x1010100, 0x202020, 0x40404);
|
|
62
|
+
const shift = 9 * (squareRank(sq) + squareFile(sq) - 8);
|
|
71
63
|
return (shift >= 0 ? diag.shl81(shift) : diag.shr81(-shift)).without(sq);
|
|
72
64
|
});
|
|
73
65
|
function hyperbola(bit, range, occupied) {
|
|
@@ -78,40 +70,35 @@ function hyperbola(bit, range, occupied) {
|
|
|
78
70
|
return forward.xor(reverse.bswap81()).intersect(range);
|
|
79
71
|
}
|
|
80
72
|
function fileAttacks(square, occupied) {
|
|
81
|
-
return hyperbola(
|
|
73
|
+
return hyperbola(SquareSet.fromSquare(square), FILE_RANGE[square], occupied);
|
|
82
74
|
}
|
|
83
75
|
function rankAttacks(square, occupied) {
|
|
84
76
|
const range = RANK_RANGE[square];
|
|
85
77
|
let forward = occupied.intersect(range);
|
|
86
78
|
let reverse = forward.rbit81();
|
|
87
|
-
forward = forward.minus81(
|
|
88
|
-
reverse = reverse.minus81(
|
|
79
|
+
forward = forward.minus81(SquareSet.fromSquare(square));
|
|
80
|
+
reverse = reverse.minus81(SquareSet.fromSquare(80 - square));
|
|
89
81
|
return forward.xor(reverse.rbit81()).intersect(range);
|
|
90
82
|
}
|
|
91
|
-
function bishopAttacks(square, occupied) {
|
|
92
|
-
const bit =
|
|
83
|
+
export function bishopAttacks(square, occupied) {
|
|
84
|
+
const bit = SquareSet.fromSquare(square);
|
|
93
85
|
return hyperbola(bit, DIAG_RANGE[square], occupied).xor(hyperbola(bit, ANTI_DIAG_RANGE[square], occupied));
|
|
94
86
|
}
|
|
95
|
-
|
|
96
|
-
function rookAttacks(square, occupied) {
|
|
87
|
+
export function rookAttacks(square, occupied) {
|
|
97
88
|
return fileAttacks(square, occupied).xor(rankAttacks(square, occupied));
|
|
98
89
|
}
|
|
99
|
-
|
|
100
|
-
function lanceAttacks(color, square, occupied) {
|
|
90
|
+
export function lanceAttacks(color, square, occupied) {
|
|
101
91
|
return color === 'sente'
|
|
102
92
|
? fileAttacks(square, occupied).intersect(FORW_RANGE[square])
|
|
103
93
|
: fileAttacks(square, occupied).intersect(BACK_RANGE[square]);
|
|
104
94
|
}
|
|
105
|
-
|
|
106
|
-
function horseAttacks(square, occupied) {
|
|
95
|
+
export function horseAttacks(square, occupied) {
|
|
107
96
|
return bishopAttacks(square, occupied).union(kingAttacks(square));
|
|
108
97
|
}
|
|
109
|
-
|
|
110
|
-
function dragonAttacks(square, occupied) {
|
|
98
|
+
export function dragonAttacks(square, occupied) {
|
|
111
99
|
return rookAttacks(square, occupied).union(kingAttacks(square));
|
|
112
100
|
}
|
|
113
|
-
|
|
114
|
-
function attacks(piece, square, occupied) {
|
|
101
|
+
export function attacks(piece, square, occupied) {
|
|
115
102
|
switch (piece.role) {
|
|
116
103
|
case 'pawn':
|
|
117
104
|
return pawnAttacks(piece.color, square);
|
|
@@ -139,9 +126,8 @@ function attacks(piece, square, occupied) {
|
|
|
139
126
|
return kingAttacks(square);
|
|
140
127
|
}
|
|
141
128
|
}
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
const other = squareSet_1.SquareSet.fromSquare(b);
|
|
129
|
+
export function ray(a, b) {
|
|
130
|
+
const other = SquareSet.fromSquare(b);
|
|
145
131
|
if (RANK_RANGE[a].intersects(other))
|
|
146
132
|
return RANK_RANGE[a].with(a);
|
|
147
133
|
if (ANTI_DIAG_RANGE[a].intersects(other))
|
|
@@ -150,13 +136,11 @@ function ray(a, b) {
|
|
|
150
136
|
return DIAG_RANGE[a].with(a);
|
|
151
137
|
if (FILE_RANGE[a].intersects(other))
|
|
152
138
|
return FILE_RANGE[a].with(a);
|
|
153
|
-
return
|
|
139
|
+
return SquareSet.empty();
|
|
154
140
|
}
|
|
155
|
-
|
|
156
|
-
function between(a, b) {
|
|
141
|
+
export function between(a, b) {
|
|
157
142
|
return ray(a, b)
|
|
158
|
-
.intersect(
|
|
143
|
+
.intersect(SquareSet.full().shl81(a).xor(SquareSet.full().shl81(b)))
|
|
159
144
|
.withoutFirst();
|
|
160
145
|
}
|
|
161
|
-
exports.between = between;
|
|
162
146
|
//# sourceMappingURL=attacks.js.map
|
package/attacks.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"attacks.js","sourceRoot":"","sources":["src/attacks.ts"],"names":[],"mappings":"
|
|
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
|
@@ -1,9 +1,6 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const types_1 = require("./types");
|
|
5
|
-
const squareSet_1 = require("./squareSet");
|
|
6
|
-
class Board {
|
|
1
|
+
import { COLORS, ROLES } from './types';
|
|
2
|
+
import { SquareSet } from './squareSet';
|
|
3
|
+
export class Board {
|
|
7
4
|
constructor() { }
|
|
8
5
|
static default() {
|
|
9
6
|
const board = new Board();
|
|
@@ -11,23 +8,48 @@ class Board {
|
|
|
11
8
|
return board;
|
|
12
9
|
}
|
|
13
10
|
reset() {
|
|
14
|
-
this.
|
|
15
|
-
this.
|
|
16
|
-
this.
|
|
17
|
-
this.
|
|
18
|
-
this.
|
|
19
|
-
this.
|
|
20
|
-
this.
|
|
21
|
-
this.
|
|
22
|
-
this.
|
|
23
|
-
this.
|
|
24
|
-
this.
|
|
25
|
-
this.
|
|
26
|
-
this.
|
|
27
|
-
this.
|
|
28
|
-
this.
|
|
29
|
-
this.
|
|
30
|
-
this.
|
|
11
|
+
this.numberOfFiles = 9;
|
|
12
|
+
this.numberOfRanks = 9;
|
|
13
|
+
this.occupied = new SquareSet(0x7fd05ff, 0x0, 0x7fd05ff);
|
|
14
|
+
this.sente = new SquareSet(0x7fd05ff, 0x0, 0x0);
|
|
15
|
+
this.gote = new SquareSet(0x0, 0x0, 0x7fd05ff);
|
|
16
|
+
this.pawn = new SquareSet(0x7fc0000, 0x0, 0x1ff);
|
|
17
|
+
this.lance = new SquareSet(0x101, 0x0, 0x4040000);
|
|
18
|
+
this.knight = new SquareSet(0x82, 0x0, 0x2080000);
|
|
19
|
+
this.silver = new SquareSet(0x44, 0x0, 0x1100000);
|
|
20
|
+
this.gold = new SquareSet(0x28, 0x0, 0xa00000);
|
|
21
|
+
this.bishop = new SquareSet(0x400, 0x0, 0x10000);
|
|
22
|
+
this.rook = new SquareSet(0x10000, 0x0, 0x400);
|
|
23
|
+
this.king = new SquareSet(0x10, 0x0, 0x400000);
|
|
24
|
+
this.tokin = SquareSet.empty();
|
|
25
|
+
this.promotedlance = SquareSet.empty();
|
|
26
|
+
this.promotedknight = SquareSet.empty();
|
|
27
|
+
this.promotedsilver = SquareSet.empty();
|
|
28
|
+
this.horse = SquareSet.empty();
|
|
29
|
+
this.dragon = SquareSet.empty();
|
|
30
|
+
}
|
|
31
|
+
static minishogi() {
|
|
32
|
+
const board = new Board();
|
|
33
|
+
board.numberOfFiles = 5;
|
|
34
|
+
board.numberOfRanks = 5;
|
|
35
|
+
board.occupied = new SquareSet(0x0, 0x43e000, 0x7c20000);
|
|
36
|
+
board.sente = new SquareSet(0x0, 0x43e000, 0x0);
|
|
37
|
+
board.gote = new SquareSet(0x0, 0x0, 0x7c20000);
|
|
38
|
+
board.pawn = new SquareSet(0x0, 0x400000, 0x20000);
|
|
39
|
+
board.lance = new SquareSet(0x0, 0x0, 0x0);
|
|
40
|
+
board.knight = new SquareSet(0x0, 0x0, 0x0);
|
|
41
|
+
board.silver = new SquareSet(0x0, 0x8000, 0x1000000);
|
|
42
|
+
board.gold = new SquareSet(0x0, 0x4000, 0x2000000);
|
|
43
|
+
board.bishop = new SquareSet(0x0, 0x10000, 0x800000);
|
|
44
|
+
board.rook = new SquareSet(0x0, 0x20000, 0x400000);
|
|
45
|
+
board.tokin = new SquareSet(0x0, 0, 0);
|
|
46
|
+
board.promotedlance = new SquareSet(0x0, 0x0, 0x0);
|
|
47
|
+
board.promotedknight = new SquareSet(0x0, 0x0, 0x0);
|
|
48
|
+
board.promotedsilver = new SquareSet(0x0, 0x0, 0x0);
|
|
49
|
+
board.horse = new SquareSet(0x0, 0x0, 0x0);
|
|
50
|
+
board.dragon = new SquareSet(0x0, 0x0, 0x0);
|
|
51
|
+
board.king = new SquareSet(0x0, 0x2000, 0x4000000);
|
|
52
|
+
return board;
|
|
31
53
|
}
|
|
32
54
|
static empty() {
|
|
33
55
|
const board = new Board();
|
|
@@ -35,25 +57,31 @@ class Board {
|
|
|
35
57
|
return board;
|
|
36
58
|
}
|
|
37
59
|
clear() {
|
|
38
|
-
this.
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
for (const
|
|
42
|
-
this[
|
|
60
|
+
this.numberOfFiles = 9;
|
|
61
|
+
this.numberOfRanks = 9;
|
|
62
|
+
this.occupied = SquareSet.empty();
|
|
63
|
+
for (const color of COLORS)
|
|
64
|
+
this[color] = SquareSet.empty();
|
|
65
|
+
for (const role of ROLES)
|
|
66
|
+
this[role] = SquareSet.empty();
|
|
43
67
|
}
|
|
44
68
|
clone() {
|
|
45
69
|
const board = new Board();
|
|
46
70
|
board.occupied = this.occupied;
|
|
47
|
-
|
|
71
|
+
board.numberOfFiles = this.numberOfFiles;
|
|
72
|
+
board.numberOfRanks = this.numberOfRanks;
|
|
73
|
+
for (const color of COLORS)
|
|
48
74
|
board[color] = this[color];
|
|
49
|
-
for (const role of
|
|
75
|
+
for (const role of ROLES)
|
|
50
76
|
board[role] = this[role];
|
|
51
77
|
return board;
|
|
52
78
|
}
|
|
53
79
|
equals(other) {
|
|
54
80
|
if (!this.gote.equals(other.gote))
|
|
55
81
|
return false;
|
|
56
|
-
|
|
82
|
+
if (this.numberOfFiles !== other.numberOfFiles || this.numberOfRanks !== other.numberOfRanks)
|
|
83
|
+
return false;
|
|
84
|
+
return ROLES.every(role => this[role].equals(other[role]));
|
|
57
85
|
}
|
|
58
86
|
getColor(square) {
|
|
59
87
|
if (this.sente.has(square))
|
|
@@ -63,7 +91,7 @@ class Board {
|
|
|
63
91
|
return;
|
|
64
92
|
}
|
|
65
93
|
getRole(square) {
|
|
66
|
-
for (const role of
|
|
94
|
+
for (const role of ROLES) {
|
|
67
95
|
if (this[role].has(square))
|
|
68
96
|
return role;
|
|
69
97
|
}
|
|
@@ -107,5 +135,4 @@ class Board {
|
|
|
107
135
|
return this.king.intersect(this[color]).singleSquare();
|
|
108
136
|
}
|
|
109
137
|
}
|
|
110
|
-
exports.Board = Board;
|
|
111
138
|
//# sourceMappingURL=board.js.map
|
package/board.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"board.js","sourceRoot":"","sources":["src/board.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"board.js","sourceRoot":"","sources":["src/board.ts"],"names":[],"mappings":"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"}
|
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,42 +1,22 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const types_1 = require("./types");
|
|
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
|
-
function shogigroundDests(pos) {
|
|
1
|
+
import { isDrop } from './types';
|
|
2
|
+
import { defined, makeSquare, parseUsi } from './util';
|
|
3
|
+
export function shogigroundDests(pos) {
|
|
23
4
|
const result = new Map();
|
|
24
5
|
const ctx = pos.ctx();
|
|
25
6
|
for (const [from, squares] of pos.allDests(ctx)) {
|
|
26
7
|
if (squares.nonEmpty()) {
|
|
27
|
-
const d = Array.from(squares, s =>
|
|
28
|
-
result.set(
|
|
8
|
+
const d = Array.from(squares, s => makeSquare(s));
|
|
9
|
+
result.set(makeSquare(from), d);
|
|
29
10
|
}
|
|
30
11
|
}
|
|
31
12
|
return result;
|
|
32
13
|
}
|
|
33
|
-
|
|
34
|
-
function shogigroundDropDests(pos, role) {
|
|
14
|
+
export function shogigroundDropDests(pos, role) {
|
|
35
15
|
const result = new Map();
|
|
36
16
|
if (role) {
|
|
37
17
|
const squares = pos.dropDests(role);
|
|
38
18
|
if (squares.nonEmpty()) {
|
|
39
|
-
const d = Array.from(squares, s =>
|
|
19
|
+
const d = Array.from(squares, s => makeSquare(s));
|
|
40
20
|
result.set(role, d);
|
|
41
21
|
}
|
|
42
22
|
}
|
|
@@ -44,177 +24,32 @@ function shogigroundDropDests(pos, role) {
|
|
|
44
24
|
const ctx = pos.ctx();
|
|
45
25
|
for (const [r, squares] of pos.allDropDests(ctx)) {
|
|
46
26
|
if (squares.nonEmpty()) {
|
|
47
|
-
const d = Array.from(squares, s =>
|
|
27
|
+
const d = Array.from(squares, s => makeSquare(s));
|
|
48
28
|
result.set(r, d);
|
|
49
29
|
}
|
|
50
30
|
}
|
|
51
31
|
}
|
|
52
32
|
return result;
|
|
53
33
|
}
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
if (types_1.isDrop(move))
|
|
34
|
+
export function scalashogiCharPair(move) {
|
|
35
|
+
if (isDrop(move))
|
|
57
36
|
return String.fromCharCode(34 + move.to, 34 + 81 + 128 + ['rook', 'bishop', 'knight', 'pawn', 'gold', 'silver', 'lance'].indexOf(move.role));
|
|
58
37
|
else
|
|
59
38
|
return String.fromCharCode(34 + move.from, move.promotion ? 34 + move.to + 128 : 34 + move.to);
|
|
60
39
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
return
|
|
64
|
-
}
|
|
65
|
-
exports.shogigroundMove = shogigroundMove;
|
|
66
|
-
function lishogiVariantRules(variant) {
|
|
67
|
-
switch (variant) {
|
|
68
|
-
case 'standard':
|
|
69
|
-
case 'fromPosition':
|
|
70
|
-
return 'shogi';
|
|
71
|
-
}
|
|
72
|
-
}
|
|
73
|
-
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;
|
|
40
|
+
export function usiToSquareNames(usi) {
|
|
41
|
+
const move = parseUsi(usi);
|
|
42
|
+
return defined(move) ? moveToSquareNames(move) : [];
|
|
97
43
|
}
|
|
98
|
-
|
|
99
|
-
|
|
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
|
-
}
|
|
44
|
+
export function moveToSquareNames(move) {
|
|
45
|
+
return isDrop(move) ? [makeSquare(move.to)] : [makeSquare(move.from), makeSquare(move.to)];
|
|
130
46
|
}
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
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';
|
|
47
|
+
export function lishogiVariantRules(variant) {
|
|
48
|
+
switch (variant) {
|
|
49
|
+
case 'minishogi':
|
|
50
|
+
return 'minishogi';
|
|
176
51
|
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 };
|
|
52
|
+
return 'shogi';
|
|
194
53
|
}
|
|
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
54
|
}
|
|
219
|
-
exports.assureLishogiUci = assureLishogiUci;
|
|
220
55
|
//# sourceMappingURL=compat.js.map
|