shogiops 0.2.8 → 0.5.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (115) hide show
  1. package/attacks.js +32 -48
  2. package/attacks.js.map +1 -1
  3. package/board.d.ts +3 -0
  4. package/board.js +60 -33
  5. package/board.js.map +1 -1
  6. package/compat.d.ts +6 -24
  7. package/compat.js +20 -185
  8. package/compat.js.map +1 -1
  9. package/debug.js +37 -72
  10. package/debug.js.map +1 -1
  11. package/hand.d.ts +38 -0
  12. package/hand.js +69 -0
  13. package/hand.js.map +1 -0
  14. package/hash.d.ts +4 -3
  15. package/hash.js +12 -20
  16. package/hash.js.map +1 -1
  17. package/index.d.ts +13 -10
  18. package/index.js +22 -64
  19. package/index.js.map +1 -1
  20. package/{csa.d.ts → notation/csa/csa.d.ts} +9 -9
  21. package/notation/csa/csa.js +213 -0
  22. package/notation/csa/csa.js.map +1 -0
  23. package/notation/japanese.d.ts +3 -0
  24. package/notation/japanese.js +61 -0
  25. package/notation/japanese.js.map +1 -0
  26. package/{kif.d.ts → notation/kif/kif.d.ts} +10 -9
  27. package/notation/kif/kif.js +232 -0
  28. package/notation/kif/kif.js.map +1 -0
  29. package/{kifHandicaps.d.ts → notation/kif/kifHandicaps.d.ts} +0 -0
  30. package/{kifHandicaps.js → notation/kif/kifHandicaps.js} +7 -7
  31. package/notation/kif/kifHandicaps.js.map +1 -0
  32. package/notation/kitaoKawasaki.d.ts +3 -0
  33. package/notation/kitaoKawasaki.js +26 -0
  34. package/notation/kitaoKawasaki.js.map +1 -0
  35. package/notation/kitaokawasaki.d.ts +0 -0
  36. package/notation/kitaokawasaki.js +2 -0
  37. package/notation/kitaokawasaki.js.map +1 -0
  38. package/notation/notationUtil.d.ts +12 -0
  39. package/{kifUtil.js → notation/notationUtil.js} +39 -40
  40. package/notation/notationUtil.js.map +1 -0
  41. package/notation/western.d.ts +3 -0
  42. package/notation/western.js +23 -0
  43. package/notation/western.js.map +1 -0
  44. package/notation/westernEngine.d.ts +3 -0
  45. package/notation/westernEngine.js +23 -0
  46. package/notation/westernEngine.js.map +1 -0
  47. package/package.json +54 -37
  48. package/setup.d.ts +2 -32
  49. package/setup.js +5 -80
  50. package/setup.js.map +1 -1
  51. package/sfen.d.ts +33 -0
  52. package/sfen.js +188 -0
  53. package/sfen.js.map +1 -0
  54. package/shogi.d.ts +14 -7
  55. package/shogi.js +138 -141
  56. package/shogi.js.map +1 -1
  57. package/squareSet.d.ts +1 -5
  58. package/squareSet.js +1 -18
  59. package/squareSet.js.map +1 -1
  60. package/src/board.ts +34 -0
  61. package/src/compat.ts +18 -197
  62. package/src/debug.ts +26 -56
  63. package/src/hand.ts +94 -0
  64. package/src/hash.ts +8 -7
  65. package/src/index.ts +16 -12
  66. package/src/{csa.ts → notation/csa/csa.ts} +53 -52
  67. package/src/notation/japanese.ts +74 -0
  68. package/src/{kif.ts → notation/kif/kif.ts} +77 -78
  69. package/src/{kifHandicaps.ts → notation/kif/kifHandicaps.ts} +5 -0
  70. package/src/notation/kitaoKawasaki.ts +24 -0
  71. package/src/{kifUtil.ts → notation/notationUtil.ts} +37 -28
  72. package/src/notation/western.ts +21 -0
  73. package/src/notation/westernEngine.ts +21 -0
  74. package/src/setup.ts +4 -91
  75. package/src/sfen.ts +190 -0
  76. package/src/shogi.ts +75 -75
  77. package/src/squareSet.ts +1 -18
  78. package/src/transform.ts +3 -1
  79. package/src/types.ts +13 -16
  80. package/src/util.ts +8 -73
  81. package/src/variant.ts +44 -3
  82. package/src/variantUtil.ts +160 -0
  83. package/transform.js +18 -24
  84. package/transform.js.map +1 -1
  85. package/types.d.ts +3 -7
  86. package/types.js +18 -24
  87. package/types.js.map +1 -1
  88. package/util.d.ts +4 -7
  89. package/util.js +24 -96
  90. package/util.js.map +1 -1
  91. package/variant.d.ts +12 -1
  92. package/variant.js +42 -16
  93. package/variant.js.map +1 -1
  94. package/variantUtil.d.ts +13 -0
  95. package/variantUtil.js +147 -0
  96. package/variantUtil.js.map +1 -0
  97. package/csa.js +0 -229
  98. package/csa.js.map +0 -1
  99. package/csaUtil.d.ts +0 -3
  100. package/csaUtil.js +0 -21
  101. package/csaUtil.js.map +0 -1
  102. package/fen.d.ts +0 -32
  103. package/fen.js +0 -197
  104. package/fen.js.map +0 -1
  105. package/kif.js +0 -247
  106. package/kif.js.map +0 -1
  107. package/kifHandicaps.js.map +0 -1
  108. package/kifUtil.d.ts +0 -9
  109. package/kifUtil.js.map +0 -1
  110. package/san.d.ts +0 -6
  111. package/san.js +0 -135
  112. package/san.js.map +0 -1
  113. package/src/csaUtil.ts +0 -15
  114. package/src/fen.ts +0 -183
  115. package/src/san.ts +0 -136
package/sfen.js ADDED
@@ -0,0 +1,188 @@
1
+ import { Result } from '@badrap/result';
2
+ import { Board } from './board';
3
+ import { defined, roleToString, stringToRole, toBW } from './util';
4
+ import { Hands } from './hand';
5
+ import { ROLES } from './types';
6
+ export const INITIAL_BOARD_SFEN = 'lnsgkgsnl/1r5b1/ppppppppp/9/9/9/PPPPPPPPP/1B5R1/LNSGKGSNL';
7
+ export const INITIAL_EPD = INITIAL_BOARD_SFEN + ' b -';
8
+ export const INITIAL_SFEN = INITIAL_EPD + ' 1';
9
+ export const EMPTY_BOARD_SFEN = '9/9/9/9/9/9/9/9/9';
10
+ export const EMPTY_EPD = EMPTY_BOARD_SFEN + ' b -';
11
+ export const EMPTY_SFEN = EMPTY_EPD + ' 1';
12
+ export var InvalidSfen;
13
+ (function (InvalidSfen) {
14
+ InvalidSfen["Sfen"] = "ERR_SFEN";
15
+ InvalidSfen["Board"] = "ERR_BOARD";
16
+ InvalidSfen["Hands"] = "ERR_HANDS";
17
+ InvalidSfen["Turn"] = "ERR_TURN";
18
+ InvalidSfen["Fullmoves"] = "ERR_FULLMOVES";
19
+ })(InvalidSfen || (InvalidSfen = {}));
20
+ export class SfenError extends Error {
21
+ }
22
+ function parseSmallUint(str) {
23
+ return /^\d{1,4}$/.test(str) ? parseInt(str, 10) : undefined;
24
+ }
25
+ function stringToPiece(s) {
26
+ const role = stringToRole(s);
27
+ return role && { role, color: s.toLowerCase() === s ? 'gote' : 'sente' };
28
+ }
29
+ export function parseBoardSfen(boardPart) {
30
+ const board = Board.empty();
31
+ const ranks = boardPart.split('/');
32
+ board.numberOfRanks = ranks.length;
33
+ // we assume the board is square
34
+ // since that's good enough for now...
35
+ board.numberOfFiles = board.numberOfRanks;
36
+ const offset = 9 - board.numberOfFiles;
37
+ let rank = 8;
38
+ let file = offset;
39
+ for (let i = 0; i < boardPart.length; i++) {
40
+ let c = boardPart[i];
41
+ if (c === '/' && file === 9) {
42
+ file = offset;
43
+ rank--;
44
+ }
45
+ else {
46
+ const step = parseInt(c, 10);
47
+ if (step > 0)
48
+ file += step;
49
+ else {
50
+ if (file >= 9 || rank < 0)
51
+ return Result.err(new SfenError(InvalidSfen.Board));
52
+ if (c === '+' && i + 1 < boardPart.length)
53
+ c += boardPart[++i];
54
+ const square = file + rank * 9;
55
+ const piece = stringToPiece(c);
56
+ if (!piece)
57
+ return Result.err(new SfenError(InvalidSfen.Board));
58
+ board.set(square, piece);
59
+ file++;
60
+ }
61
+ }
62
+ }
63
+ if (rank !== offset || file !== 9)
64
+ return Result.err(new SfenError(InvalidSfen.Board));
65
+ return Result.ok(board);
66
+ }
67
+ export function parseHands(handsPart) {
68
+ const hands = Hands.empty();
69
+ for (let i = 0; i < handsPart.length; i++) {
70
+ if (handsPart[i] === '-')
71
+ break;
72
+ // max 99
73
+ let count;
74
+ if (parseInt(handsPart[i]) >= 0) {
75
+ count = parseInt(handsPart[i++], 10);
76
+ if (parseInt(handsPart[i]) >= 0)
77
+ count = count * 10 + parseInt(handsPart[i++], 10);
78
+ }
79
+ else
80
+ count = 1;
81
+ const piece = stringToPiece(handsPart[i]);
82
+ if (!piece)
83
+ return Result.err(new SfenError(InvalidSfen.Hands));
84
+ hands[piece.color][piece.role] += count;
85
+ }
86
+ return Result.ok(hands);
87
+ }
88
+ export function parseSfen(sfen) {
89
+ const parts = sfen.split(' ');
90
+ // Board
91
+ const boardPart = parts.shift();
92
+ const board = parseBoardSfen(boardPart);
93
+ // Turn
94
+ const turnPart = parts.shift();
95
+ let turn;
96
+ if (!defined(turnPart) || turnPart === 'b')
97
+ turn = 'sente';
98
+ else if (turnPart === 'w')
99
+ turn = 'gote';
100
+ else
101
+ return Result.err(new SfenError(InvalidSfen.Turn));
102
+ // Hands
103
+ const handsPart = parts.shift();
104
+ let hands;
105
+ if (!defined(handsPart))
106
+ hands = Result.ok(Hands.empty());
107
+ else
108
+ hands = parseHands(handsPart);
109
+ // Turn
110
+ const fullmovesPart = parts.shift();
111
+ const fullmoves = defined(fullmovesPart) ? parseSmallUint(fullmovesPart) : 1;
112
+ if (!defined(fullmoves))
113
+ return Result.err(new SfenError(InvalidSfen.Fullmoves));
114
+ if (parts.length > 0)
115
+ return Result.err(new SfenError(InvalidSfen.Sfen));
116
+ return board.chain(board => hands.map(hands => {
117
+ return {
118
+ board,
119
+ hands,
120
+ turn,
121
+ fullmoves: Math.max(1, fullmoves),
122
+ };
123
+ }));
124
+ }
125
+ export function parsePiece(str) {
126
+ if (!str)
127
+ return;
128
+ const piece = stringToPiece(str[0]);
129
+ if (!piece)
130
+ return;
131
+ else if (str.length > 1 && str[1] !== '+')
132
+ return;
133
+ return piece;
134
+ }
135
+ export function makePiece(piece) {
136
+ let r = roleToString(piece.role);
137
+ if (piece.color === 'sente')
138
+ r = r.toUpperCase();
139
+ return r;
140
+ }
141
+ export function makeBoardSfen(board) {
142
+ let sfen = '';
143
+ let empty = 0;
144
+ for (let rank = 8; rank >= 9 - board.numberOfRanks; rank--) {
145
+ for (let file = 9 - board.numberOfFiles; file < 9; file++) {
146
+ const square = file + rank * 9;
147
+ const piece = board.get(square);
148
+ if (!piece)
149
+ empty++;
150
+ else {
151
+ if (empty > 0) {
152
+ sfen += empty;
153
+ empty = 0;
154
+ }
155
+ sfen += makePiece(piece);
156
+ }
157
+ if (file === 8) {
158
+ if (empty > 0) {
159
+ sfen += empty;
160
+ empty = 0;
161
+ }
162
+ if (rank !== 9 - board.numberOfRanks)
163
+ sfen += '/';
164
+ }
165
+ }
166
+ }
167
+ return sfen;
168
+ }
169
+ export function makeHand(hand) {
170
+ return ROLES.map(role => {
171
+ const r = roleToString(role);
172
+ const n = hand[role];
173
+ return n > 1 ? n + r : n === 1 ? r : '';
174
+ }).join('');
175
+ }
176
+ export function makeHands(hands) {
177
+ const handsStr = makeHand(hands.sente).toUpperCase() + makeHand(hands.gote);
178
+ return handsStr === '' ? '-' : handsStr;
179
+ }
180
+ export function makeSfen(setup, opts) {
181
+ return [
182
+ makeBoardSfen(setup.board),
183
+ toBW(setup.turn),
184
+ makeHands(setup.hands),
185
+ ...((opts === null || opts === void 0 ? void 0 : opts.epd) ? [] : [Math.max(1, Math.min(setup.fullmoves, 9999))]),
186
+ ].join(' ');
187
+ }
188
+ //# sourceMappingURL=sfen.js.map
package/sfen.js.map ADDED
@@ -0,0 +1 @@
1
+ {"version":3,"file":"sfen.js","sourceRoot":"","sources":["src/sfen.ts"],"names":[],"mappings":"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"}
package/shogi.d.ts CHANGED
@@ -1,12 +1,15 @@
1
1
  import { Result } from '@badrap/result';
2
- import { Rules, Color, Square, Move, Piece, Outcome, PocketRole } from './types';
2
+ import { Rules, Color, Square, Move, Piece, Outcome, Role } from './types';
3
3
  import { SquareSet } from './squareSet';
4
4
  import { Board } from './board';
5
- import { Setup, Material } from './setup';
5
+ import { Setup } from './setup';
6
+ import { Hands } from './hand';
6
7
  export declare enum IllegalSetup {
7
8
  Empty = "ERR_EMPTY",
8
9
  OppositeCheck = "ERR_OPPOSITE_CHECK",
9
10
  ImpossibleCheck = "ERR_IMPOSSIBLE_CHECK",
11
+ InvalidPieces = "ERR_INVALID_PIECE",
12
+ InvalidPiecesHand = "ERR_INVALID_PIECE_IN_HAND",
10
13
  InvalidPiecesPromotionZone = "ERR_PIECES_MUST_PROMOTE",
11
14
  Kings = "ERR_KINGS",
12
15
  Variant = "ERR_VARIANT"
@@ -23,18 +26,20 @@ export interface Context {
23
26
  export declare abstract class Position {
24
27
  readonly rules: Rules;
25
28
  board: Board;
26
- pockets: Material;
29
+ hands: Hands;
27
30
  turn: Color;
28
31
  fullmoves: number;
29
32
  lastMove: Move | undefined;
30
33
  protected constructor(rules: Rules);
31
- abstract dropDests(role: PocketRole, ctx?: Context): SquareSet;
34
+ abstract dropDests(role: Role, ctx?: Context): SquareSet;
32
35
  abstract dests(square: Square, ctx?: Context): SquareSet;
33
36
  abstract isVariantEnd(): boolean;
34
37
  abstract variantOutcome(ctx?: Context): Outcome | undefined;
35
38
  abstract hasInsufficientMaterial(color: Color): boolean;
36
39
  protected kingAttackers(square: Square, attacker: Color, occupied: SquareSet): SquareSet;
37
- protected playCaptureAt(square: Square, captured: Piece): void;
40
+ abstract numberOfFiles: number;
41
+ abstract numberOfRanks: number;
42
+ protected playCaptureAt(captured: Piece): void;
38
43
  ctx(): Context;
39
44
  clone(): Position;
40
45
  equalsIgnoreMoves(other: Position): boolean;
@@ -49,17 +54,19 @@ export declare abstract class Position {
49
54
  isImpasse(): boolean;
50
55
  outcome(ctx?: Context): Outcome | undefined;
51
56
  allDests(ctx?: Context): Map<Square, SquareSet>;
52
- allDropDests(ctx?: Context): Map<PocketRole, SquareSet>;
57
+ allDropDests(ctx?: Context): Map<Role, SquareSet>;
53
58
  play(move: Move): void;
54
59
  }
55
60
  export declare class Shogi extends Position {
56
61
  protected constructor(rules?: Rules);
62
+ numberOfRanks: number;
63
+ numberOfFiles: number;
57
64
  static default(): Shogi;
58
65
  static fromSetup(setup: Setup, strict?: boolean): Result<Shogi, PositionError>;
59
66
  clone(): Shogi;
60
67
  protected validate(strict: boolean): Result<undefined, PositionError>;
61
68
  protected validateCheckers(): Result<undefined, PositionError>;
62
- dropDests(role: PocketRole, ctx?: Context): SquareSet;
69
+ dropDests(role: Role, ctx?: Context): SquareSet;
63
70
  dests(square: Square, ctx?: Context): SquareSet;
64
71
  isVariantEnd(): boolean;
65
72
  variantOutcome(_ctx?: Context): Outcome | undefined;