@konoui/mjimage 0.0.12 → 0.0.13
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.
|
@@ -1,22 +1,11 @@
|
|
|
1
1
|
import { TYPE, Round, Wind } from "../constants";
|
|
2
2
|
import { Tile, BlockPon, BlockChi, BlockShoKan, BlockAnKan, BlockDaiKan, Type, Block } from "../parser";
|
|
3
|
-
type
|
|
4
|
-
number,
|
|
5
|
-
number,
|
|
6
|
-
number,
|
|
7
|
-
number,
|
|
8
|
-
number,
|
|
9
|
-
number,
|
|
10
|
-
number,
|
|
11
|
-
number,
|
|
12
|
-
number,
|
|
13
|
-
number
|
|
14
|
-
];
|
|
3
|
+
export type TupleOfSize<T, N extends number, R extends unknown[] = []> = R["length"] extends N ? R : TupleOfSize<T, N, [T, ...R]>;
|
|
15
4
|
export interface HandData {
|
|
16
|
-
[TYPE.M]:
|
|
17
|
-
[TYPE.S]:
|
|
18
|
-
[TYPE.P]:
|
|
19
|
-
[TYPE.Z]:
|
|
5
|
+
[TYPE.M]: TupleOfSize<number, 10>;
|
|
6
|
+
[TYPE.S]: TupleOfSize<number, 10>;
|
|
7
|
+
[TYPE.P]: TupleOfSize<number, 10>;
|
|
8
|
+
[TYPE.Z]: TupleOfSize<number, 8>;
|
|
20
9
|
[TYPE.BACK]: [string, number];
|
|
21
10
|
called: (BlockChi | BlockPon | BlockAnKan | BlockDaiKan | BlockShoKan)[];
|
|
22
11
|
tsumo: Tile | null;
|
|
@@ -32,8 +21,8 @@ export declare class Hand {
|
|
|
32
21
|
get reached(): boolean;
|
|
33
22
|
get drawn(): Tile | null;
|
|
34
23
|
get menzen(): boolean;
|
|
35
|
-
getArrayLen(
|
|
36
|
-
sum(
|
|
24
|
+
getArrayLen(t: Type): 2 | 8 | 10;
|
|
25
|
+
sum(t: Type): number;
|
|
37
26
|
get(t: Type, n: number): number;
|
|
38
27
|
inc(tiles: Tile[]): Tile[];
|
|
39
28
|
dec(tiles: Tile[]): Tile[];
|
|
@@ -272,4 +261,3 @@ export declare class DoubleCalculator {
|
|
|
272
261
|
dK13(h: Block[]): never[];
|
|
273
262
|
calcFu(h: Block[]): number;
|
|
274
263
|
}
|
|
275
|
-
export {};
|
|
@@ -65,15 +65,15 @@ var Hand = (function () {
|
|
|
65
65
|
get: function () {
|
|
66
66
|
var tiles = [];
|
|
67
67
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
68
|
-
var
|
|
69
|
-
for (var n = 1; n < this.getArrayLen(
|
|
70
|
-
var count = this.get(
|
|
71
|
-
if (
|
|
72
|
-
count -= this.get(
|
|
73
|
-
tiles.push(new parser_1.Tile(
|
|
68
|
+
var t = _a[_i];
|
|
69
|
+
for (var n = 1; n < this.getArrayLen(t); n++) {
|
|
70
|
+
var count = this.get(t, n);
|
|
71
|
+
if (t != constants_1.TYPE.Z && n == 5 && this.get(t, 0) > 0) {
|
|
72
|
+
count -= this.get(t, 0);
|
|
73
|
+
tiles.push(new parser_1.Tile(t, 0));
|
|
74
74
|
}
|
|
75
75
|
for (var i = 0; i < count; i++) {
|
|
76
|
-
tiles.push(new parser_1.Tile(
|
|
76
|
+
tiles.push(new parser_1.Tile(t, n));
|
|
77
77
|
}
|
|
78
78
|
}
|
|
79
79
|
}
|
|
@@ -126,13 +126,13 @@ var Hand = (function () {
|
|
|
126
126
|
enumerable: false,
|
|
127
127
|
configurable: true
|
|
128
128
|
});
|
|
129
|
-
Hand.prototype.getArrayLen = function (
|
|
130
|
-
return this.data[
|
|
129
|
+
Hand.prototype.getArrayLen = function (t) {
|
|
130
|
+
return this.data[t].length;
|
|
131
131
|
};
|
|
132
|
-
Hand.prototype.sum = function (
|
|
132
|
+
Hand.prototype.sum = function (t) {
|
|
133
133
|
var sum = 0;
|
|
134
|
-
for (var n = 1; n < this.getArrayLen(
|
|
135
|
-
sum += this.get(
|
|
134
|
+
for (var n = 1; n < this.getArrayLen(t); n++)
|
|
135
|
+
sum += this.get(t, n);
|
|
136
136
|
return sum;
|
|
137
137
|
};
|
|
138
138
|
Hand.prototype.get = function (t, n) {
|
|
@@ -144,7 +144,7 @@ var Hand = (function () {
|
|
|
144
144
|
var backup = [];
|
|
145
145
|
for (var _i = 0, tiles_1 = tiles; _i < tiles_1.length; _i++) {
|
|
146
146
|
var t = tiles_1[_i];
|
|
147
|
-
if (t.t != constants_1.TYPE.BACK && this.get(t.t, t.n)
|
|
147
|
+
if (t.t != constants_1.TYPE.BACK && this.get(t.t, t.n) >= 4) {
|
|
148
148
|
this.dec(backup);
|
|
149
149
|
throw new Error("unable to increase ".concat(t, " in ").concat(this.toString()));
|
|
150
150
|
}
|
|
@@ -301,15 +301,15 @@ var ShantenCalculator = (function () {
|
|
|
301
301
|
var nOrphans = 0;
|
|
302
302
|
var nPairs = 0;
|
|
303
303
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
304
|
-
var
|
|
305
|
-
if (
|
|
304
|
+
var t = _a[_i];
|
|
305
|
+
if (t == constants_1.TYPE.BACK)
|
|
306
306
|
continue;
|
|
307
|
-
var nn =
|
|
307
|
+
var nn = t == constants_1.TYPE.Z ? [1, 2, 3, 4, 5, 6, 7] : [1, 9];
|
|
308
308
|
for (var _b = 0, nn_1 = nn; _b < nn_1.length; _b++) {
|
|
309
309
|
var n = nn_1[_b];
|
|
310
|
-
if (this.hand.get(
|
|
310
|
+
if (this.hand.get(t, n) >= 1)
|
|
311
311
|
nOrphans++;
|
|
312
|
-
if (this.hand.get(
|
|
312
|
+
if (this.hand.get(t, n) >= 2)
|
|
313
313
|
nPairs++;
|
|
314
314
|
}
|
|
315
315
|
}
|
|
@@ -361,12 +361,10 @@ var ShantenCalculator = (function () {
|
|
|
361
361
|
};
|
|
362
362
|
var min = calc(false);
|
|
363
363
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
364
|
-
var
|
|
365
|
-
for (var n = 1; n < this.hand.getArrayLen(
|
|
366
|
-
if (
|
|
367
|
-
|
|
368
|
-
if (this.hand.get(k, n) >= 2) {
|
|
369
|
-
var tiles = this.hand.dec([new parser_1.Tile(k, n), new parser_1.Tile(k, n)]);
|
|
364
|
+
var t = _a[_i];
|
|
365
|
+
for (var n = 1; n < this.hand.getArrayLen(t); n++) {
|
|
366
|
+
if (this.hand.get(t, n) >= 2) {
|
|
367
|
+
var tiles = this.hand.dec([new parser_1.Tile(t, n), new parser_1.Tile(t, n)]);
|
|
370
368
|
var r = calc(true);
|
|
371
369
|
this.hand.inc(tiles);
|
|
372
370
|
if (r < min) {
|
|
@@ -377,23 +375,23 @@ var ShantenCalculator = (function () {
|
|
|
377
375
|
}
|
|
378
376
|
return min;
|
|
379
377
|
};
|
|
380
|
-
ShantenCalculator.prototype.commonByType = function (
|
|
378
|
+
ShantenCalculator.prototype.commonByType = function (t, n) {
|
|
381
379
|
if (n === void 0) { n = 1; }
|
|
382
|
-
if (
|
|
383
|
-
throw new Error("expect number type but ".concat(
|
|
380
|
+
if (t == constants_1.TYPE.BACK || t == constants_1.TYPE.Z)
|
|
381
|
+
throw new Error("expect number type but ".concat(t));
|
|
384
382
|
if (n > 9)
|
|
385
|
-
return this.groupRemainingTiles(
|
|
386
|
-
var max = this.commonByType(
|
|
383
|
+
return this.groupRemainingTiles(t);
|
|
384
|
+
var max = this.commonByType(t, n + 1);
|
|
387
385
|
if (n <= 7 &&
|
|
388
|
-
this.hand.get(
|
|
389
|
-
this.hand.get(
|
|
390
|
-
this.hand.get(
|
|
386
|
+
this.hand.get(t, n) > 0 &&
|
|
387
|
+
this.hand.get(t, n + 1) > 0 &&
|
|
388
|
+
this.hand.get(t, n + 2) > 0) {
|
|
391
389
|
var tiles = this.hand.dec([
|
|
392
|
-
new parser_1.Tile(
|
|
393
|
-
new parser_1.Tile(
|
|
394
|
-
new parser_1.Tile(
|
|
390
|
+
new parser_1.Tile(t, n),
|
|
391
|
+
new parser_1.Tile(t, n + 1),
|
|
392
|
+
new parser_1.Tile(t, n + 2),
|
|
395
393
|
]);
|
|
396
|
-
var r = this.commonByType(
|
|
394
|
+
var r = this.commonByType(t, n);
|
|
397
395
|
this.hand.inc(tiles);
|
|
398
396
|
r.patternA[0]++, r.patternB[0]++;
|
|
399
397
|
if (r.patternA[2] < max.patternA[2] ||
|
|
@@ -405,13 +403,13 @@ var ShantenCalculator = (function () {
|
|
|
405
403
|
max.patternB = r.patternB;
|
|
406
404
|
}
|
|
407
405
|
}
|
|
408
|
-
if (this.hand.get(
|
|
406
|
+
if (this.hand.get(t, n) >= 3) {
|
|
409
407
|
var tiles = this.hand.dec([
|
|
410
|
-
new parser_1.Tile(
|
|
411
|
-
new parser_1.Tile(
|
|
412
|
-
new parser_1.Tile(
|
|
408
|
+
new parser_1.Tile(t, n),
|
|
409
|
+
new parser_1.Tile(t, n),
|
|
410
|
+
new parser_1.Tile(t, n),
|
|
413
411
|
]);
|
|
414
|
-
var r = this.commonByType(
|
|
412
|
+
var r = this.commonByType(t, n);
|
|
415
413
|
this.hand.inc(tiles);
|
|
416
414
|
r.patternA[0]++, r.patternB[0]++;
|
|
417
415
|
if (r.patternA[2] < max.patternA[2] ||
|
|
@@ -425,15 +423,15 @@ var ShantenCalculator = (function () {
|
|
|
425
423
|
}
|
|
426
424
|
return max;
|
|
427
425
|
};
|
|
428
|
-
ShantenCalculator.prototype.groupRemainingTiles = function (
|
|
426
|
+
ShantenCalculator.prototype.groupRemainingTiles = function (t) {
|
|
429
427
|
var nSerialPairs = 0;
|
|
430
428
|
var nIsolated = 0;
|
|
431
429
|
var nTiles = 0;
|
|
432
|
-
for (var n = 1; n < this.hand.getArrayLen(
|
|
433
|
-
nTiles += this.hand.get(
|
|
430
|
+
for (var n = 1; n < this.hand.getArrayLen(t); n++) {
|
|
431
|
+
nTiles += this.hand.get(t, n);
|
|
434
432
|
if (n <= 7 &&
|
|
435
|
-
this.hand.get(
|
|
436
|
-
this.hand.get(
|
|
433
|
+
this.hand.get(t, n + 1) == 0 &&
|
|
434
|
+
this.hand.get(t, n + 2) == 0) {
|
|
437
435
|
nSerialPairs += nTiles >> 1;
|
|
438
436
|
nIsolated += nTiles % 2;
|
|
439
437
|
nTiles = 0;
|
|
@@ -518,13 +516,13 @@ var BlockCalculator = (function () {
|
|
|
518
516
|
return [];
|
|
519
517
|
var ret = [];
|
|
520
518
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
521
|
-
var
|
|
522
|
-
if (
|
|
519
|
+
var t = _a[_i];
|
|
520
|
+
if (t == constants_1.TYPE.BACK)
|
|
523
521
|
continue;
|
|
524
|
-
for (var n = 1; n < this.hand.getArrayLen(
|
|
525
|
-
var v = this.hand.get(
|
|
522
|
+
for (var n = 1; n < this.hand.getArrayLen(t); n++) {
|
|
523
|
+
var v = this.hand.get(t, n);
|
|
526
524
|
if (v == 2)
|
|
527
|
-
ret.push(new parser_1.BlockPair(new parser_1.Tile(
|
|
525
|
+
ret.push(new parser_1.BlockPair(new parser_1.Tile(t, n), new parser_1.Tile(t, n)));
|
|
528
526
|
else if (v == 0)
|
|
529
527
|
continue;
|
|
530
528
|
else
|
|
@@ -537,16 +535,16 @@ var BlockCalculator = (function () {
|
|
|
537
535
|
var ret = [];
|
|
538
536
|
var pairs = "";
|
|
539
537
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
540
|
-
var
|
|
541
|
-
if (
|
|
538
|
+
var t = _a[_i];
|
|
539
|
+
if (t == constants_1.TYPE.BACK)
|
|
542
540
|
continue;
|
|
543
|
-
var nn =
|
|
541
|
+
var nn = t == constants_1.TYPE.Z ? [1, 2, 3, 4, 5, 6, 7] : [1, 9];
|
|
544
542
|
for (var _b = 0, nn_2 = nn; _b < nn_2.length; _b++) {
|
|
545
543
|
var n = nn_2[_b];
|
|
546
|
-
if (this.hand.get(
|
|
547
|
-
ret.push(new parser_1.BlockIsolated(new parser_1.Tile(
|
|
548
|
-
else if (this.hand.get(
|
|
549
|
-
ret.unshift(new parser_1.BlockPair(new parser_1.Tile(
|
|
544
|
+
if (this.hand.get(t, n) == 1)
|
|
545
|
+
ret.push(new parser_1.BlockIsolated(new parser_1.Tile(t, n)));
|
|
546
|
+
else if (this.hand.get(t, n) == 2 && pairs == "")
|
|
547
|
+
ret.unshift(new parser_1.BlockPair(new parser_1.Tile(t, n), new parser_1.Tile(t, n)));
|
|
550
548
|
else
|
|
551
549
|
return [];
|
|
552
550
|
}
|
|
@@ -555,25 +553,25 @@ var BlockCalculator = (function () {
|
|
|
555
553
|
};
|
|
556
554
|
BlockCalculator.prototype.nineGates = function () {
|
|
557
555
|
var _this = this;
|
|
558
|
-
var cond = function (
|
|
559
|
-
return want.includes(_this.hand.get(
|
|
556
|
+
var cond = function (t, n, want) {
|
|
557
|
+
return want.includes(_this.hand.get(t, n));
|
|
560
558
|
};
|
|
561
559
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
562
|
-
var
|
|
563
|
-
if (
|
|
560
|
+
var t = _a[_i];
|
|
561
|
+
if (t == constants_1.TYPE.BACK)
|
|
564
562
|
continue;
|
|
565
|
-
if (
|
|
563
|
+
if (t == constants_1.TYPE.Z)
|
|
566
564
|
continue;
|
|
567
|
-
var cond1 = cond(
|
|
568
|
-
cond(
|
|
569
|
-
cond(
|
|
570
|
-
cond(
|
|
571
|
-
cond(
|
|
572
|
-
cond(
|
|
573
|
-
cond(
|
|
574
|
-
cond(
|
|
575
|
-
cond(
|
|
576
|
-
var cond2 = this.hand.sum(
|
|
565
|
+
var cond1 = cond(t, 1, [3, 4]) &&
|
|
566
|
+
cond(t, 9, [3, 4]) &&
|
|
567
|
+
cond(t, 2, [1, 2]) &&
|
|
568
|
+
cond(t, 3, [1, 2]) &&
|
|
569
|
+
cond(t, 4, [1, 2]) &&
|
|
570
|
+
cond(t, 5, [1, 2]) &&
|
|
571
|
+
cond(t, 6, [1, 2]) &&
|
|
572
|
+
cond(t, 7, [1, 2]) &&
|
|
573
|
+
cond(t, 8, [1, 2]);
|
|
574
|
+
var cond2 = this.hand.sum(t) == 14;
|
|
577
575
|
if (cond1 && cond2) {
|
|
578
576
|
return [[new parser_1.Block(this.hand.hands, constants_1.BLOCK.HAND)]];
|
|
579
577
|
}
|
|
@@ -583,12 +581,10 @@ var BlockCalculator = (function () {
|
|
|
583
581
|
BlockCalculator.prototype.fourSetsOnePair = function () {
|
|
584
582
|
var ret = [];
|
|
585
583
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
586
|
-
var
|
|
584
|
+
var t = _a[_i];
|
|
587
585
|
var _loop_1 = function (n) {
|
|
588
|
-
if (
|
|
589
|
-
|
|
590
|
-
if (this_1.hand.get(k, n) >= 2) {
|
|
591
|
-
var tiles_3 = this_1.hand.dec([new parser_1.Tile(k, n), new parser_1.Tile(k, n)]);
|
|
586
|
+
if (this_1.hand.get(t, n) >= 2) {
|
|
587
|
+
var tiles_3 = this_1.hand.dec([new parser_1.Tile(t, n), new parser_1.Tile(t, n)]);
|
|
592
588
|
var v = this_1.commonAll()
|
|
593
589
|
.filter(function (arr) { return arr.length == 4; })
|
|
594
590
|
.map(function (arr) {
|
|
@@ -600,7 +596,7 @@ var BlockCalculator = (function () {
|
|
|
600
596
|
}
|
|
601
597
|
};
|
|
602
598
|
var this_1 = this;
|
|
603
|
-
for (var n = 1; n < this.hand.getArrayLen(
|
|
599
|
+
for (var n = 1; n < this.hand.getArrayLen(t); n++) {
|
|
604
600
|
_loop_1(n);
|
|
605
601
|
}
|
|
606
602
|
}
|
|
@@ -1130,15 +1126,15 @@ var DoubleCalculator = (function () {
|
|
|
1130
1126
|
var cond = !h.some(function (block) { return block.tiles[0].t == constants_1.TYPE.Z; });
|
|
1131
1127
|
if (cond)
|
|
1132
1128
|
return [];
|
|
1133
|
-
var _loop_4 = function (
|
|
1134
|
-
var ok = h.every(function (b) { return b.tiles[0].t == constants_1.TYPE.Z || b.tiles[0].t ==
|
|
1129
|
+
var _loop_4 = function (t) {
|
|
1130
|
+
var ok = h.every(function (b) { return b.tiles[0].t == constants_1.TYPE.Z || b.tiles[0].t == t; });
|
|
1135
1131
|
if (ok)
|
|
1136
1132
|
return { value: [{ name: "混一色", double: 3 - this_3.minus() }] };
|
|
1137
1133
|
};
|
|
1138
1134
|
var this_3 = this;
|
|
1139
1135
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
1140
|
-
var
|
|
1141
|
-
var state_3 = _loop_4(
|
|
1136
|
+
var t = _a[_i];
|
|
1137
|
+
var state_3 = _loop_4(t);
|
|
1142
1138
|
if (typeof state_3 === "object")
|
|
1143
1139
|
return state_3.value;
|
|
1144
1140
|
}
|
|
@@ -1165,17 +1161,17 @@ var DoubleCalculator = (function () {
|
|
|
1165
1161
|
DoubleCalculator.prototype.dA6 = function (h) {
|
|
1166
1162
|
if (h.some(function (block) { return block.tiles[0].t == constants_1.TYPE.Z; }))
|
|
1167
1163
|
return [];
|
|
1168
|
-
var _loop_5 = function (
|
|
1169
|
-
if (
|
|
1164
|
+
var _loop_5 = function (t) {
|
|
1165
|
+
if (t == constants_1.TYPE.Z)
|
|
1170
1166
|
return "continue";
|
|
1171
|
-
var ok = h.every(function (v) { return v.tiles[0].t ==
|
|
1167
|
+
var ok = h.every(function (v) { return v.tiles[0].t == t; });
|
|
1172
1168
|
if (ok)
|
|
1173
1169
|
return { value: [{ name: "清一色", double: 6 - this_4.minus() }] };
|
|
1174
1170
|
};
|
|
1175
1171
|
var this_4 = this;
|
|
1176
1172
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
1177
|
-
var
|
|
1178
|
-
var state_4 = _loop_5(
|
|
1173
|
+
var t = _a[_i];
|
|
1174
|
+
var state_4 = _loop_5(t);
|
|
1179
1175
|
if (typeof state_4 === "object")
|
|
1180
1176
|
return state_4.value;
|
|
1181
1177
|
}
|
|
@@ -1385,6 +1381,6 @@ var countSameBlocks = function (h) {
|
|
|
1385
1381
|
};
|
|
1386
1382
|
var toDora = function (doraMarker) {
|
|
1387
1383
|
var n = doraMarker.isNum() && doraMarker.n == 0 ? 5 : doraMarker.n;
|
|
1388
|
-
var
|
|
1389
|
-
return new parser_1.Tile(
|
|
1384
|
+
var t = doraMarker.t;
|
|
1385
|
+
return new parser_1.Tile(t, (n % 9) + 1);
|
|
1390
1386
|
};
|
|
@@ -43,22 +43,22 @@ var Efficiency = (function () {
|
|
|
43
43
|
var candidates = [];
|
|
44
44
|
var sc = new calculator_1.ShantenCalculator(hand);
|
|
45
45
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
46
|
-
var
|
|
47
|
-
if (
|
|
46
|
+
var t = _a[_i];
|
|
47
|
+
if (t == constants_1.TYPE.BACK)
|
|
48
48
|
continue;
|
|
49
|
-
for (var n = 1; n < hand.getArrayLen(
|
|
50
|
-
if (hand.get(
|
|
49
|
+
for (var n = 1; n < hand.getArrayLen(t); n++) {
|
|
50
|
+
if (hand.get(t, n) >= 4)
|
|
51
51
|
continue;
|
|
52
|
-
var
|
|
53
|
-
var tiles = hand.inc([
|
|
52
|
+
var tile = new parser_1.Tile(t, n);
|
|
53
|
+
var tiles = hand.inc([tile]);
|
|
54
54
|
var s = sc.calc();
|
|
55
55
|
hand.dec(tiles);
|
|
56
56
|
if (s < r) {
|
|
57
57
|
r = s;
|
|
58
|
-
candidates = [
|
|
58
|
+
candidates = [tile];
|
|
59
59
|
}
|
|
60
60
|
else if (s == r)
|
|
61
|
-
candidates.push(
|
|
61
|
+
candidates.push(tile);
|
|
62
62
|
}
|
|
63
63
|
}
|
|
64
64
|
return {
|
|
@@ -73,6 +73,14 @@ var Efficiency = (function () {
|
|
|
73
73
|
.map(function () { return h.inc([new parser_1.Tile(constants_1.TYPE.BACK, 0)]); });
|
|
74
74
|
return Efficiency.candidateTiles(h);
|
|
75
75
|
};
|
|
76
|
+
Efficiency.partialShanten = function (input) {
|
|
77
|
+
var h = new calculator_1.Hand(input, true);
|
|
78
|
+
Array(13 - h.hands.length)
|
|
79
|
+
.fill(undefined)
|
|
80
|
+
.map(function () { return h.inc([new parser_1.Tile(constants_1.TYPE.BACK, 0)]); });
|
|
81
|
+
var sc = new calculator_1.ShantenCalculator(h);
|
|
82
|
+
return sc.calc();
|
|
83
|
+
};
|
|
76
84
|
return Efficiency;
|
|
77
85
|
}());
|
|
78
86
|
exports.Efficiency = Efficiency;
|
package/dist/mjs/lib/parser.js
CHANGED
|
@@ -23,10 +23,14 @@ var __spreadArray = (this && this.__spreadArray) || function (to, from, pack) {
|
|
|
23
23
|
}
|
|
24
24
|
return to.concat(ar || Array.prototype.slice.call(from));
|
|
25
25
|
};
|
|
26
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
27
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
28
|
+
};
|
|
26
29
|
Object.defineProperty(exports, "__esModule", { value: true });
|
|
27
30
|
exports.Parser = exports.blockWrapper = exports.BlockIsolated = exports.BlockRun = exports.BlockThree = exports.BlockPair = exports.BlockShoKan = exports.BlockDaiKan = exports.BlockAnKan = exports.BlockPon = exports.BlockChi = exports.Block = exports.Tile = exports.isType = exports.tileSortFunc = void 0;
|
|
28
31
|
var lexer_1 = require("./lexer");
|
|
29
32
|
var constants_1 = require("./constants");
|
|
33
|
+
var assert_1 = __importDefault(require("assert"));
|
|
30
34
|
var tileSortFunc = function (i, j) {
|
|
31
35
|
var _a;
|
|
32
36
|
if (i.t == j.t) {
|
|
@@ -118,21 +122,20 @@ var Block = (function () {
|
|
|
118
122
|
}
|
|
119
123
|
}
|
|
120
124
|
Block.prototype.toString = function () {
|
|
121
|
-
var
|
|
122
|
-
|
|
123
|
-
}, [true, this.tiles[0]]), sameAll = _a[0], _ = _a[1];
|
|
125
|
+
var _this = this;
|
|
126
|
+
var sameType = this.tiles.every(function (v) { return v.t == _this.tiles[0].t; });
|
|
124
127
|
var ret = "";
|
|
125
|
-
if (
|
|
128
|
+
if (sameType) {
|
|
126
129
|
if (this.tiles[0].t == constants_1.TYPE.BACK)
|
|
127
130
|
return this.tiles.join("");
|
|
128
|
-
for (var _i = 0,
|
|
129
|
-
var v =
|
|
131
|
+
for (var _i = 0, _a = this.tiles; _i < _a.length; _i++) {
|
|
132
|
+
var v = _a[_i];
|
|
130
133
|
ret += v.toString().slice(0, -1);
|
|
131
134
|
}
|
|
132
135
|
return "".concat(ret).concat(this.tiles[0].t);
|
|
133
136
|
}
|
|
134
|
-
for (var
|
|
135
|
-
var t =
|
|
137
|
+
for (var _b = 0, _c = this.tiles; _b < _c.length; _b++) {
|
|
138
|
+
var t = _c[_b];
|
|
136
139
|
ret += t.toString();
|
|
137
140
|
}
|
|
138
141
|
return ret;
|
|
@@ -167,6 +170,7 @@ var Block = (function () {
|
|
|
167
170
|
Block.prototype.minTile = function () {
|
|
168
171
|
if (this.is(constants_1.BLOCK.CHI))
|
|
169
172
|
return this.clone().tiles.sort(exports.tileSortFunc)[0];
|
|
173
|
+
(0, assert_1.default)(!this.is(constants_1.BLOCK.HAND), "mintile() is called with ".concat(this.toString()));
|
|
170
174
|
return this.tiles[0];
|
|
171
175
|
};
|
|
172
176
|
Block.prototype.clone = function () {
|
|
@@ -391,7 +395,7 @@ function detectBlockType(tiles) {
|
|
|
391
395
|
return constants_1.BLOCK.TSUMO;
|
|
392
396
|
return constants_1.BLOCK.HAND;
|
|
393
397
|
}
|
|
394
|
-
var sameAll = tiles.
|
|
398
|
+
var sameAll = tiles.every(function (v) { return v.equals(tiles[0], true); });
|
|
395
399
|
var numOfHorizontals = tiles.filter(function (v) {
|
|
396
400
|
return v.has(constants_1.OPERATOR.HORIZONTAL);
|
|
397
401
|
}).length;
|