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
|
@@ -0,0 +1,26 @@
|
|
|
1
|
+
import { roleTo2Kanji } from '../util';
|
|
2
|
+
import { isDrop } from '../types';
|
|
3
|
+
import { pieceCanPromote } from '../variantUtil';
|
|
4
|
+
import { makeNumberSquare, piecesAiming } from './notationUtil';
|
|
5
|
+
// 歩-76
|
|
6
|
+
export function makeKitaoKawasakiMove(pos, move, lastDest) {
|
|
7
|
+
if (isDrop(move)) {
|
|
8
|
+
return roleTo2Kanji(move.role).toUpperCase() + '*' + makeNumberSquare(move.to);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
const piece = pos.board.get(move.from);
|
|
12
|
+
if (piece) {
|
|
13
|
+
const roleStr = roleTo2Kanji(piece.role).toUpperCase();
|
|
14
|
+
const ambStr = piecesAiming(pos, piece, move.to).without(move.from).isEmpty()
|
|
15
|
+
? ''
|
|
16
|
+
: `(${makeNumberSquare(move.from)})`;
|
|
17
|
+
const actionStr = pos.board.has(move.to) ? 'x' : '-';
|
|
18
|
+
const destStr = lastDest === move.to ? '' : makeNumberSquare(move.to);
|
|
19
|
+
const promStr = move.promotion ? '+' : pieceCanPromote(pos.rules)(piece, move.from, move.to) ? '=' : '';
|
|
20
|
+
return `${roleStr}${ambStr}${actionStr}${destStr}${promStr}`;
|
|
21
|
+
}
|
|
22
|
+
else
|
|
23
|
+
return undefined;
|
|
24
|
+
}
|
|
25
|
+
}
|
|
26
|
+
//# sourceMappingURL=kitaoKawasaki.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kitaoKawasaki.js","sourceRoot":"","sources":["../src/notation/kitaoKawasaki.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAQ,MAAM,EAAU,MAAM,UAAU,CAAC;AAChD,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO;AACP,MAAM,UAAU,qBAAqB,CAAC,GAAa,EAAE,IAAU,EAAE,QAAiB;IAChF,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;QAChB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChF;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE;gBAC3E,CAAC,CAAC,EAAE;gBACJ,CAAC,CAAC,IAAI,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,CAAC;YACvC,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,QAAQ,KAAK,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;YACtE,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,OAAO,GAAG,OAAO,EAAE,CAAC;SAC9D;;YAAM,OAAO,SAAS,CAAC;KACzB;AACH,CAAC"}
|
|
File without changes
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"kitaokawasaki.js","sourceRoot":"","sources":["../src/notation/kitaokawasaki.ts"],"names":[],"mappings":""}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { Position } from '../shogi';
|
|
2
|
+
import { Piece, Square } from '../types';
|
|
3
|
+
import { SquareSet } from '../squareSet';
|
|
4
|
+
export declare function piecesAiming(pos: Position, piece: Piece, to: Square): SquareSet;
|
|
5
|
+
export declare function makeNumberSquare(sq: Square): string;
|
|
6
|
+
export declare function parseNumberSquare(str: string): Square | undefined;
|
|
7
|
+
export declare function makeJapaneseSquare(sq: Square): string;
|
|
8
|
+
export declare function parseJapaneseSquare(str: string): Square | undefined;
|
|
9
|
+
export declare function toKanjiDigit(str: string): string;
|
|
10
|
+
export declare function fromKanjiDigit(str: string): number;
|
|
11
|
+
export declare function numberToKanji(n: number): string;
|
|
12
|
+
export declare function kanjiToNumber(str: string): number;
|
|
@@ -1,25 +1,37 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
1
|
+
import { parseSquare, squareFile, squareRank } from '../util';
|
|
2
|
+
import { SquareSet } from '../squareSet';
|
|
3
|
+
export function piecesAiming(pos, piece, to) {
|
|
4
|
+
// Disambiguation
|
|
5
|
+
let pieces = SquareSet.empty();
|
|
6
|
+
for (const s of pos.board.pieces(pos.turn, piece.role))
|
|
7
|
+
if (pos.dests(s).has(to))
|
|
8
|
+
pieces = pieces.union(SquareSet.fromSquare(s));
|
|
9
|
+
return pieces;
|
|
10
|
+
}
|
|
11
|
+
export function makeNumberSquare(sq) {
|
|
12
|
+
return (9 - squareFile(sq)).toString() + (9 - squareRank(sq));
|
|
13
|
+
}
|
|
14
|
+
export function parseNumberSquare(str) {
|
|
6
15
|
if (str.length !== 2)
|
|
7
16
|
return;
|
|
8
|
-
const file = str
|
|
9
|
-
const rank =
|
|
10
|
-
|
|
17
|
+
const file = Math.abs(str.charCodeAt(0) - '9'.charCodeAt(0));
|
|
18
|
+
const rank = Math.abs(str.charCodeAt(1) - '9'.charCodeAt(0));
|
|
19
|
+
if (file < 0 || file >= 9 || rank < 0 || rank >= 9)
|
|
20
|
+
return;
|
|
21
|
+
return file + 9 * rank;
|
|
11
22
|
}
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
toKanjiDigit((9 - util_1.squareRank(sq)).toString()));
|
|
23
|
+
export function makeJapaneseSquare(sq) {
|
|
24
|
+
return (String.fromCharCode((9 - squareFile(sq)).toString().charCodeAt(0) + 0xfee0) +
|
|
25
|
+
toKanjiDigit((9 - squareRank(sq)).toString()));
|
|
16
26
|
}
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
27
|
+
export function parseJapaneseSquare(str) {
|
|
28
|
+
if (str.length !== 2)
|
|
29
|
+
return;
|
|
30
|
+
const file = str[0].charCodeAt(0) >= 65297 ? String.fromCharCode(str[0].charCodeAt(0) - 65248) : str[0];
|
|
31
|
+
const rank = String.fromCharCode(('一二三四五六七八九'.includes(str[1]) ? fromKanjiDigit(str[1]).toString() : str[1]).charCodeAt(0) + 48);
|
|
32
|
+
return parseSquare(file + rank);
|
|
20
33
|
}
|
|
21
|
-
|
|
22
|
-
function toKanjiDigit(str) {
|
|
34
|
+
export function toKanjiDigit(str) {
|
|
23
35
|
switch (str) {
|
|
24
36
|
case '1':
|
|
25
37
|
return '一';
|
|
@@ -45,15 +57,7 @@ function toKanjiDigit(str) {
|
|
|
45
57
|
return '';
|
|
46
58
|
}
|
|
47
59
|
}
|
|
48
|
-
|
|
49
|
-
// max 99, meant for pieces in hand, you don't need more than 99 pieces...
|
|
50
|
-
function numberToKanji(n) {
|
|
51
|
-
n = Math.max(0, Math.min(n, 99));
|
|
52
|
-
const res = n >= 20 ? toKanjiDigit(Math.floor(n / 10).toString()) + '十' : n >= 10 ? '十' : '';
|
|
53
|
-
return res + toKanjiDigit(Math.floor(n % 10).toString());
|
|
54
|
-
}
|
|
55
|
-
exports.numberToKanji = numberToKanji;
|
|
56
|
-
function fromKanjiDigit(str) {
|
|
60
|
+
export function fromKanjiDigit(str) {
|
|
57
61
|
switch (str) {
|
|
58
62
|
case '一':
|
|
59
63
|
return 1;
|
|
@@ -79,9 +83,14 @@ function fromKanjiDigit(str) {
|
|
|
79
83
|
return 0;
|
|
80
84
|
}
|
|
81
85
|
}
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
86
|
+
// max 99
|
|
87
|
+
export function numberToKanji(n) {
|
|
88
|
+
n = Math.max(0, Math.min(n, 99));
|
|
89
|
+
const res = n >= 20 ? toKanjiDigit(Math.floor(n / 10).toString()) + '十' : n >= 10 ? '十' : '';
|
|
90
|
+
return res + toKanjiDigit(Math.floor(n % 10).toString());
|
|
91
|
+
}
|
|
92
|
+
// max 99
|
|
93
|
+
export function kanjiToNumber(str) {
|
|
85
94
|
let res = str.startsWith('十') ? 1 : 0;
|
|
86
95
|
for (const s of str) {
|
|
87
96
|
if (s === '十')
|
|
@@ -91,14 +100,4 @@ function kanjiToNumber(str) {
|
|
|
91
100
|
}
|
|
92
101
|
return Math.max(0, Math.min(res, 99));
|
|
93
102
|
}
|
|
94
|
-
|
|
95
|
-
function normalizedKifLines(kif) {
|
|
96
|
-
return kif
|
|
97
|
-
.replace(/:/g, ':')
|
|
98
|
-
.replace(/ /g, ' ') // full-width space to normal space
|
|
99
|
-
.split(/[\r\n]+/)
|
|
100
|
-
.map(l => l.trim())
|
|
101
|
-
.filter(l => l);
|
|
102
|
-
}
|
|
103
|
-
exports.normalizedKifLines = normalizedKifLines;
|
|
104
|
-
//# sourceMappingURL=kifUtil.js.map
|
|
103
|
+
//# sourceMappingURL=notationUtil.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"notationUtil.js","sourceRoot":"","sources":["../src/notation/notationUtil.ts"],"names":[],"mappings":"AAEA,OAAO,EAAE,WAAW,EAAE,UAAU,EAAE,UAAU,EAAE,MAAM,SAAS,CAAC;AAC9D,OAAO,EAAE,SAAS,EAAE,MAAM,cAAc,CAAC;AAEzC,MAAM,UAAU,YAAY,CAAC,GAAa,EAAE,KAAY,EAAE,EAAU;IAClE,iBAAiB;IACjB,IAAI,MAAM,GAAG,SAAS,CAAC,KAAK,EAAE,CAAC;IAC/B,KAAK,MAAM,CAAC,IAAI,GAAG,CAAC,KAAK,CAAC,MAAM,CAAC,GAAG,CAAC,IAAI,EAAE,KAAK,CAAC,IAAI,CAAC;QACpD,IAAI,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,EAAE,CAAC;YAAE,MAAM,GAAG,MAAM,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC3E,OAAO,MAAM,CAAC;AAChB,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU;IACzC,OAAO,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,GAAG,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC;AAChE,CAAC;AAED,MAAM,UAAU,iBAAiB,CAAC,GAAW;IAC3C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC7B,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,MAAM,IAAI,GAAG,IAAI,CAAC,GAAG,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC,CAAC;IAC7D,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC,IAAI,IAAI,GAAG,CAAC,IAAI,IAAI,IAAI,CAAC;QAAE,OAAO;IAC3D,OAAO,IAAI,GAAG,CAAC,GAAG,IAAI,CAAC;AACzB,CAAC;AAED,MAAM,UAAU,kBAAkB,CAAC,EAAU;IAC3C,OAAO,CACL,MAAM,CAAC,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC;QAC3E,YAAY,CAAC,CAAC,CAAC,GAAG,UAAU,CAAC,EAAE,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAC9C,CAAC;AACJ,CAAC;AAED,MAAM,UAAU,mBAAmB,CAAC,GAAW;IAC7C,IAAI,GAAG,CAAC,MAAM,KAAK,CAAC;QAAE,OAAO;IAC7B,MAAM,IAAI,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,IAAI,KAAK,CAAC,CAAC,CAAC,MAAM,CAAC,YAAY,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,KAAK,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC;IACxG,MAAM,IAAI,GAAG,MAAM,CAAC,YAAY,CAC9B,CAAC,WAAW,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,cAAc,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,GAAG,EAAE,CAC/F,CAAC;IACF,OAAO,WAAW,CAAC,IAAI,GAAG,IAAI,CAAC,CAAC;AAClC,CAAC;AAED,MAAM,UAAU,YAAY,CAAC,GAAW;IACtC,QAAQ,GAAG,EAAE;QACX,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,GAAG;YACN,OAAO,GAAG,CAAC;QACb,KAAK,IAAI;YACP,OAAO,GAAG,CAAC;QACb;YACE,OAAO,EAAE,CAAC;KACb;AACH,CAAC;AAED,MAAM,UAAU,cAAc,CAAC,GAAW;IACxC,QAAQ,GAAG,EAAE;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,CAAC,CAAC;QACX,KAAK,GAAG;YACN,OAAO,EAAE,CAAC;QACZ;YACE,OAAO,CAAC,CAAC;KACZ;AACH,CAAC;AAED,SAAS;AACT,MAAM,UAAU,aAAa,CAAC,CAAS;IACrC,CAAC,GAAG,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;IACjC,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;IAC7F,OAAO,GAAG,GAAG,YAAY,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,GAAG,EAAE,CAAC,CAAC,QAAQ,EAAE,CAAC,CAAC;AAC3D,CAAC;AAED,SAAS;AACT,MAAM,UAAU,aAAa,CAAC,GAAW;IACvC,IAAI,GAAG,GAAG,GAAG,CAAC,UAAU,CAAC,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;IACtC,KAAK,MAAM,CAAC,IAAI,GAAG,EAAE;QACnB,IAAI,CAAC,KAAK,GAAG;YAAE,GAAG,IAAI,EAAE,CAAC;;YACpB,GAAG,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;KAC/B;IACD,OAAO,IAAI,CAAC,GAAG,CAAC,CAAC,EAAE,IAAI,CAAC,GAAG,CAAC,GAAG,EAAE,EAAE,CAAC,CAAC,CAAC;AACxC,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { roleToString } from '../util';
|
|
2
|
+
import { isDrop } from '../types';
|
|
3
|
+
import { pieceCanPromote } from '../variantUtil';
|
|
4
|
+
import { makeNumberSquare, piecesAiming } from './notationUtil';
|
|
5
|
+
// P-76
|
|
6
|
+
export function makeWesternMove(pos, move) {
|
|
7
|
+
if (isDrop(move)) {
|
|
8
|
+
return roleToString(move.role).toUpperCase() + '*' + makeNumberSquare(move.to);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
const piece = pos.board.get(move.from);
|
|
12
|
+
if (piece) {
|
|
13
|
+
const roleStr = roleToString(piece.role).toUpperCase();
|
|
14
|
+
const ambStr = piecesAiming(pos, piece, move.to).without(move.from).isEmpty() ? '' : makeNumberSquare(move.from);
|
|
15
|
+
const actionStr = pos.board.has(move.to) ? 'x' : '-';
|
|
16
|
+
const promStr = move.promotion ? '+' : pieceCanPromote(pos.rules)(piece, move.from, move.to) ? '=' : '';
|
|
17
|
+
return `${roleStr}${ambStr}${actionStr}${makeNumberSquare(move.to)}${promStr}`;
|
|
18
|
+
}
|
|
19
|
+
else
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=western.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"western.js","sourceRoot":"","sources":["../src/notation/western.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEvC,OAAO,EAAQ,MAAM,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,gBAAgB,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAEhE,OAAO;AACP,MAAM,UAAU,eAAe,CAAC,GAAa,EAAE,IAAU;IACvD,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;QAChB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAChF;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,gBAAgB,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YACjH,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,gBAAgB,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC;SAChF;;YAAM,OAAO,SAAS,CAAC;KACzB;AACH,CAAC"}
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
import { makeSquare, roleToString } from '../util';
|
|
2
|
+
import { isDrop } from '../types';
|
|
3
|
+
import { pieceCanPromote } from '../variantUtil';
|
|
4
|
+
import { piecesAiming } from './notationUtil';
|
|
5
|
+
// P-7f
|
|
6
|
+
export function makeWesternEngineMove(pos, move) {
|
|
7
|
+
if (isDrop(move)) {
|
|
8
|
+
return roleToString(move.role).toUpperCase() + '*' + makeSquare(move.to);
|
|
9
|
+
}
|
|
10
|
+
else {
|
|
11
|
+
const piece = pos.board.get(move.from);
|
|
12
|
+
if (piece) {
|
|
13
|
+
const roleStr = roleToString(piece.role).toUpperCase();
|
|
14
|
+
const ambStr = piecesAiming(pos, piece, move.to).without(move.from).isEmpty() ? '' : makeSquare(move.from);
|
|
15
|
+
const actionStr = pos.board.has(move.to) ? 'x' : '-';
|
|
16
|
+
const promStr = move.promotion ? '+' : pieceCanPromote(pos.rules)(piece, move.from, move.to) ? '=' : '';
|
|
17
|
+
return `${roleStr}${ambStr}${actionStr}${makeSquare(move.to)}${promStr}`;
|
|
18
|
+
}
|
|
19
|
+
else
|
|
20
|
+
return undefined;
|
|
21
|
+
}
|
|
22
|
+
}
|
|
23
|
+
//# sourceMappingURL=westernEngine.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"westernEngine.js","sourceRoot":"","sources":["../src/notation/westernEngine.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,UAAU,EAAE,YAAY,EAAE,MAAM,SAAS,CAAC;AAEnD,OAAO,EAAQ,MAAM,EAAE,MAAM,UAAU,CAAC;AACxC,OAAO,EAAE,eAAe,EAAE,MAAM,gBAAgB,CAAC;AACjD,OAAO,EAAE,YAAY,EAAE,MAAM,gBAAgB,CAAC;AAE9C,OAAO;AACP,MAAM,UAAU,qBAAqB,CAAC,GAAa,EAAE,IAAU;IAC7D,IAAI,MAAM,CAAC,IAAI,CAAC,EAAE;QAChB,OAAO,YAAY,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,GAAG,GAAG,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC;KAC1E;SAAM;QACL,MAAM,KAAK,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;QACvC,IAAI,KAAK,EAAE;YACT,MAAM,OAAO,GAAG,YAAY,CAAC,KAAK,CAAC,IAAI,CAAC,CAAC,WAAW,EAAE,CAAC;YACvD,MAAM,MAAM,GAAG,YAAY,CAAC,GAAG,EAAE,KAAK,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,OAAO,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,UAAU,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC;YAC3G,MAAM,SAAS,GAAG,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,GAAG,CAAC;YACrD,MAAM,OAAO,GAAG,IAAI,CAAC,SAAS,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,eAAe,CAAC,GAAG,CAAC,KAAK,CAAC,CAAC,KAAK,EAAE,IAAI,CAAC,IAAI,EAAE,IAAI,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC;YACxG,OAAO,GAAG,OAAO,GAAG,MAAM,GAAG,SAAS,GAAG,UAAU,CAAC,IAAI,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC;SAC1E;;YAAM,OAAO,SAAS,CAAC;KACzB;AACH,CAAC"}
|
package/package.json
CHANGED
|
@@ -1,32 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "shogiops",
|
|
3
|
-
"version": "0.
|
|
3
|
+
"version": "0.5.0",
|
|
4
4
|
"description": "Shogi rules and operations",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"shogi",
|
|
7
7
|
"lishogi",
|
|
8
|
-
"fen",
|
|
9
8
|
"sfen",
|
|
10
9
|
"usi",
|
|
11
|
-
"uci",
|
|
12
10
|
"typescript"
|
|
13
11
|
],
|
|
14
12
|
"repository": "https://github.com/WandererXII/shogiops",
|
|
15
13
|
"author": "Niklas Fiekas <niklas.fiekas@backscattering.de>(chessops), WandererXII(shogiops)",
|
|
16
14
|
"license": "GPL-3.0-or-later",
|
|
17
|
-
"
|
|
15
|
+
"module": "index.js",
|
|
16
|
+
"types": "index.d.ts",
|
|
17
|
+
"type": "module",
|
|
18
|
+
"sideEffects": false,
|
|
18
19
|
"dependencies": {
|
|
19
|
-
"@badrap/result": "^0.2
|
|
20
|
+
"@badrap/result": "^0.2"
|
|
20
21
|
},
|
|
21
22
|
"devDependencies": {
|
|
22
23
|
"@types/jest": "^27",
|
|
23
|
-
"@typescript-eslint/eslint-plugin": "^
|
|
24
|
-
"@typescript-eslint/parser": "^
|
|
25
|
-
"eslint": "^
|
|
24
|
+
"@typescript-eslint/eslint-plugin": "^5",
|
|
25
|
+
"@typescript-eslint/parser": "^5.9.0",
|
|
26
|
+
"eslint": "^8",
|
|
26
27
|
"jest": "^27",
|
|
27
28
|
"prettier": "^2",
|
|
28
29
|
"ts-jest": "^27",
|
|
29
|
-
"typedoc": "^0.
|
|
30
|
+
"typedoc": "^0.22",
|
|
30
31
|
"typescript": "^4"
|
|
31
32
|
},
|
|
32
33
|
"scripts": {
|
|
@@ -43,80 +44,96 @@
|
|
|
43
44
|
"shogi.js",
|
|
44
45
|
"compat.js",
|
|
45
46
|
"variant.js",
|
|
47
|
+
"variantUtil.js",
|
|
46
48
|
"transform.js",
|
|
47
49
|
"setup.js",
|
|
48
50
|
"squareSet.js",
|
|
49
51
|
"types.js",
|
|
50
52
|
"util.js",
|
|
51
53
|
"debug.js",
|
|
52
|
-
"
|
|
53
|
-
"
|
|
54
|
+
"sfen.js",
|
|
55
|
+
"hand.js",
|
|
54
56
|
"hash.js",
|
|
55
|
-
"kifHandicaps.js",
|
|
56
|
-
"kif.js",
|
|
57
|
-
"
|
|
58
|
-
"
|
|
59
|
-
"
|
|
57
|
+
"notation/kif/kifHandicaps.js",
|
|
58
|
+
"notation/kif/kif.js",
|
|
59
|
+
"notation/csa/csa.js",
|
|
60
|
+
"notation/japanese.js",
|
|
61
|
+
"notation/kitaoKawasaki.js",
|
|
62
|
+
"notation/notationUtil.js",
|
|
63
|
+
"notation/western.js",
|
|
64
|
+
"notation/westernEngine.js",
|
|
60
65
|
"index.js",
|
|
61
66
|
"attacks.d.ts",
|
|
62
67
|
"board.d.ts",
|
|
63
68
|
"shogi.d.ts",
|
|
64
69
|
"compat.d.ts",
|
|
65
70
|
"variant.d.ts",
|
|
71
|
+
"variantUtil.d.ts",
|
|
66
72
|
"transform.d.ts",
|
|
67
73
|
"setup.d.ts",
|
|
68
74
|
"squareSet.d.ts",
|
|
69
75
|
"types.d.ts",
|
|
70
76
|
"util.d.ts",
|
|
71
77
|
"debug.d.ts",
|
|
72
|
-
"
|
|
73
|
-
"
|
|
78
|
+
"sfen.d.ts",
|
|
79
|
+
"hand.d.ts",
|
|
74
80
|
"hash.d.ts",
|
|
75
|
-
"kifHandicaps.d.ts",
|
|
76
|
-
"kif.d.ts",
|
|
77
|
-
"
|
|
78
|
-
"
|
|
79
|
-
"
|
|
81
|
+
"notation/kif/kifHandicaps.d.ts",
|
|
82
|
+
"notation/kif/kif.d.ts",
|
|
83
|
+
"notation/csa/csa.d.ts",
|
|
84
|
+
"notation/japanese.d.ts",
|
|
85
|
+
"notation/kitaoKawasaki.d.ts",
|
|
86
|
+
"notation/notationUtil.d.ts",
|
|
87
|
+
"notation/western.d.ts",
|
|
88
|
+
"notation/westernEngine.d.ts",
|
|
80
89
|
"index.d.ts",
|
|
81
90
|
"attacks.js.map",
|
|
82
91
|
"board.js.map",
|
|
83
92
|
"shogi.js.map",
|
|
84
93
|
"compat.js.map",
|
|
85
94
|
"variant.js.map",
|
|
95
|
+
"variantUtil.js.map",
|
|
86
96
|
"transform.js.map",
|
|
87
97
|
"setup.js.map",
|
|
88
98
|
"squareSet.js.map",
|
|
89
99
|
"types.js.map",
|
|
90
100
|
"util.js.map",
|
|
91
101
|
"debug.js.map",
|
|
92
|
-
"
|
|
93
|
-
"
|
|
102
|
+
"sfen.js.map",
|
|
103
|
+
"hand.js.map",
|
|
94
104
|
"hash.js.map",
|
|
95
|
-
"kifHandicaps.js.map",
|
|
96
|
-
"kif.js.map",
|
|
97
|
-
"
|
|
98
|
-
"
|
|
99
|
-
"
|
|
105
|
+
"notation/kif/kifHandicaps.js.map",
|
|
106
|
+
"notation/kif/kif.js.map",
|
|
107
|
+
"notation/csa/csa.js.map",
|
|
108
|
+
"notation/japanese.js.map",
|
|
109
|
+
"notation/kitaoKawasaki.js.map",
|
|
110
|
+
"notation/notationUtil.js.map",
|
|
111
|
+
"notation/western.js.map",
|
|
112
|
+
"notation/westernEngine.js.map",
|
|
100
113
|
"index.js.map",
|
|
101
114
|
"src/attacks.ts",
|
|
102
115
|
"src/board.ts",
|
|
103
116
|
"src/shogi.ts",
|
|
104
117
|
"src/compat.ts",
|
|
105
118
|
"src/variant.ts",
|
|
119
|
+
"src/variantUtil.ts",
|
|
106
120
|
"src/transform.ts",
|
|
107
121
|
"src/setup.ts",
|
|
108
122
|
"src/squareSet.ts",
|
|
109
123
|
"src/types.ts",
|
|
110
124
|
"src/util.ts",
|
|
111
125
|
"src/debug.ts",
|
|
112
|
-
"src/
|
|
113
|
-
"src/
|
|
126
|
+
"src/sfen.ts",
|
|
127
|
+
"src/hand.ts",
|
|
114
128
|
"src/hash.ts",
|
|
115
|
-
"src/kifHandicaps.ts",
|
|
116
|
-
"src/kif.ts",
|
|
117
|
-
"src/
|
|
118
|
-
"src/
|
|
119
|
-
"src/
|
|
129
|
+
"src/notation/kif/kifHandicaps.ts",
|
|
130
|
+
"src/notation/kif/kif.ts",
|
|
131
|
+
"src/notation/csa/csa.ts",
|
|
132
|
+
"src/notation/japanese.ts",
|
|
133
|
+
"src/notation/kitaoKawasaki.ts",
|
|
134
|
+
"src/notation/notationUtil.ts",
|
|
135
|
+
"src/notation/western.ts",
|
|
136
|
+
"src/notation/westernEngine.ts",
|
|
120
137
|
"src/index.ts"
|
|
121
138
|
],
|
|
122
139
|
"jest": {
|
package/setup.d.ts
CHANGED
|
@@ -1,39 +1,9 @@
|
|
|
1
1
|
import { Color } from './types';
|
|
2
2
|
import { Board } from './board';
|
|
3
|
-
|
|
4
|
-
pawn: number;
|
|
5
|
-
lance: number;
|
|
6
|
-
knight: number;
|
|
7
|
-
silver: number;
|
|
8
|
-
gold: number;
|
|
9
|
-
bishop: number;
|
|
10
|
-
rook: number;
|
|
11
|
-
private constructor();
|
|
12
|
-
static empty(): MaterialSide;
|
|
13
|
-
static fromBoard(board: Board, color: Color): MaterialSide;
|
|
14
|
-
clone(): MaterialSide;
|
|
15
|
-
equals(other: MaterialSide): boolean;
|
|
16
|
-
add(other: MaterialSide): MaterialSide;
|
|
17
|
-
nonEmpty(): boolean;
|
|
18
|
-
isEmpty(): boolean;
|
|
19
|
-
count(): number;
|
|
20
|
-
}
|
|
21
|
-
export declare class Material {
|
|
22
|
-
gote: MaterialSide;
|
|
23
|
-
sente: MaterialSide;
|
|
24
|
-
constructor(gote: MaterialSide, sente: MaterialSide);
|
|
25
|
-
static empty(): Material;
|
|
26
|
-
static fromBoard(board: Board): Material;
|
|
27
|
-
clone(): Material;
|
|
28
|
-
equals(other: Material): boolean;
|
|
29
|
-
add(other: Material): Material;
|
|
30
|
-
count(): number;
|
|
31
|
-
isEmpty(): boolean;
|
|
32
|
-
nonEmpty(): boolean;
|
|
33
|
-
}
|
|
3
|
+
import { Hands } from './hand';
|
|
34
4
|
export interface Setup {
|
|
35
5
|
board: Board;
|
|
36
|
-
|
|
6
|
+
hands: Hands;
|
|
37
7
|
turn: Color;
|
|
38
8
|
fullmoves: number;
|
|
39
9
|
}
|
package/setup.js
CHANGED
|
@@ -1,86 +1,11 @@
|
|
|
1
|
-
|
|
2
|
-
|
|
3
|
-
|
|
4
|
-
const types_1 = require("./types");
|
|
5
|
-
const board_1 = require("./board");
|
|
6
|
-
class MaterialSide {
|
|
7
|
-
constructor() { }
|
|
8
|
-
static empty() {
|
|
9
|
-
const m = new MaterialSide();
|
|
10
|
-
for (const role of types_1.POCKET_ROLES)
|
|
11
|
-
m[role] = 0;
|
|
12
|
-
return m;
|
|
13
|
-
}
|
|
14
|
-
static fromBoard(board, color) {
|
|
15
|
-
const m = new MaterialSide();
|
|
16
|
-
for (const role of types_1.POCKET_ROLES)
|
|
17
|
-
m[role] = board.pieces(color, role).size();
|
|
18
|
-
return m;
|
|
19
|
-
}
|
|
20
|
-
clone() {
|
|
21
|
-
const m = new MaterialSide();
|
|
22
|
-
for (const role of types_1.POCKET_ROLES)
|
|
23
|
-
m[role] = this[role];
|
|
24
|
-
return m;
|
|
25
|
-
}
|
|
26
|
-
equals(other) {
|
|
27
|
-
return types_1.POCKET_ROLES.every(role => this[role] === other[role]);
|
|
28
|
-
}
|
|
29
|
-
add(other) {
|
|
30
|
-
const m = new MaterialSide();
|
|
31
|
-
for (const role of types_1.POCKET_ROLES)
|
|
32
|
-
m[role] = this[role] + other[role];
|
|
33
|
-
return m;
|
|
34
|
-
}
|
|
35
|
-
nonEmpty() {
|
|
36
|
-
return types_1.POCKET_ROLES.some(role => this[role] > 0);
|
|
37
|
-
}
|
|
38
|
-
isEmpty() {
|
|
39
|
-
return !this.nonEmpty();
|
|
40
|
-
}
|
|
41
|
-
count() {
|
|
42
|
-
return this.pawn + this.lance + this.knight + this.silver + this.gold + this.bishop + this.rook;
|
|
43
|
-
}
|
|
44
|
-
}
|
|
45
|
-
exports.MaterialSide = MaterialSide;
|
|
46
|
-
class Material {
|
|
47
|
-
constructor(gote, sente) {
|
|
48
|
-
this.gote = gote;
|
|
49
|
-
this.sente = sente;
|
|
50
|
-
}
|
|
51
|
-
static empty() {
|
|
52
|
-
return new Material(MaterialSide.empty(), MaterialSide.empty());
|
|
53
|
-
}
|
|
54
|
-
static fromBoard(board) {
|
|
55
|
-
return new Material(MaterialSide.fromBoard(board, 'gote'), MaterialSide.fromBoard(board, 'sente'));
|
|
56
|
-
}
|
|
57
|
-
clone() {
|
|
58
|
-
return new Material(this.gote.clone(), this.sente.clone());
|
|
59
|
-
}
|
|
60
|
-
equals(other) {
|
|
61
|
-
return this.gote.equals(other.gote) && this.sente.equals(other.sente);
|
|
62
|
-
}
|
|
63
|
-
add(other) {
|
|
64
|
-
return new Material(this.gote.add(other.gote), this.sente.add(other.sente));
|
|
65
|
-
}
|
|
66
|
-
count() {
|
|
67
|
-
return this.gote.count() + this.sente.count();
|
|
68
|
-
}
|
|
69
|
-
isEmpty() {
|
|
70
|
-
return this.gote.isEmpty() && this.sente.isEmpty();
|
|
71
|
-
}
|
|
72
|
-
nonEmpty() {
|
|
73
|
-
return !this.isEmpty();
|
|
74
|
-
}
|
|
75
|
-
}
|
|
76
|
-
exports.Material = Material;
|
|
77
|
-
function defaultSetup() {
|
|
1
|
+
import { Board } from './board';
|
|
2
|
+
import { Hands } from './hand';
|
|
3
|
+
export function defaultSetup() {
|
|
78
4
|
return {
|
|
79
|
-
board:
|
|
80
|
-
|
|
5
|
+
board: Board.default(),
|
|
6
|
+
hands: Hands.empty(),
|
|
81
7
|
turn: 'sente',
|
|
82
8
|
fullmoves: 1,
|
|
83
9
|
};
|
|
84
10
|
}
|
|
85
|
-
exports.defaultSetup = defaultSetup;
|
|
86
11
|
//# sourceMappingURL=setup.js.map
|
package/setup.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"setup.js","sourceRoot":"","sources":["src/setup.ts"],"names":[],"mappings":"
|
|
1
|
+
{"version":3,"file":"setup.js","sourceRoot":"","sources":["src/setup.ts"],"names":[],"mappings":"AACA,OAAO,EAAE,KAAK,EAAE,MAAM,SAAS,CAAC;AAChC,OAAO,EAAE,KAAK,EAAE,MAAM,QAAQ,CAAC;AAS/B,MAAM,UAAU,YAAY;IAC1B,OAAO;QACL,KAAK,EAAE,KAAK,CAAC,OAAO,EAAE;QACtB,KAAK,EAAE,KAAK,CAAC,KAAK,EAAE;QACpB,IAAI,EAAE,OAAO;QACb,SAAS,EAAE,CAAC;KACb,CAAC;AACJ,CAAC"}
|
package/sfen.d.ts
ADDED
|
@@ -0,0 +1,33 @@
|
|
|
1
|
+
import { Result } from '@badrap/result';
|
|
2
|
+
import { Piece } from './types';
|
|
3
|
+
import { Board } from './board';
|
|
4
|
+
import { Setup } from './setup';
|
|
5
|
+
import { Hand, Hands } from './hand';
|
|
6
|
+
export declare const INITIAL_BOARD_SFEN = "lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL";
|
|
7
|
+
export declare const INITIAL_EPD: string;
|
|
8
|
+
export declare const INITIAL_SFEN: string;
|
|
9
|
+
export declare const EMPTY_BOARD_SFEN = "9/9/9/9/9/9/9/9/9";
|
|
10
|
+
export declare const EMPTY_EPD: string;
|
|
11
|
+
export declare const EMPTY_SFEN: string;
|
|
12
|
+
export declare enum InvalidSfen {
|
|
13
|
+
Sfen = "ERR_SFEN",
|
|
14
|
+
Board = "ERR_BOARD",
|
|
15
|
+
Hands = "ERR_HANDS",
|
|
16
|
+
Turn = "ERR_TURN",
|
|
17
|
+
Fullmoves = "ERR_FULLMOVES"
|
|
18
|
+
}
|
|
19
|
+
export declare class SfenError extends Error {
|
|
20
|
+
}
|
|
21
|
+
export declare function parseBoardSfen(boardPart: string): Result<Board, SfenError>;
|
|
22
|
+
export declare function parseHands(handsPart: string): Result<Hands, SfenError>;
|
|
23
|
+
export declare function parseSfen(sfen: string): Result<Setup, SfenError>;
|
|
24
|
+
interface SfenOpts {
|
|
25
|
+
epd?: boolean;
|
|
26
|
+
}
|
|
27
|
+
export declare function parsePiece(str: string): Piece | undefined;
|
|
28
|
+
export declare function makePiece(piece: Piece): string;
|
|
29
|
+
export declare function makeBoardSfen(board: Board): string;
|
|
30
|
+
export declare function makeHand(hand: Hand): string;
|
|
31
|
+
export declare function makeHands(hands: Hands): string;
|
|
32
|
+
export declare function makeSfen(setup: Setup, opts?: SfenOpts): string;
|
|
33
|
+
export {};
|