@konoui/mjimage 0.0.10 → 0.0.11
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.
|
@@ -17,7 +17,7 @@ export interface HandData {
|
|
|
17
17
|
[TYPE.S]: FixedNumber;
|
|
18
18
|
[TYPE.P]: FixedNumber;
|
|
19
19
|
[TYPE.Z]: [number, number, number, number, number, number, number, number];
|
|
20
|
-
[TYPE.BACK]: [number];
|
|
20
|
+
[TYPE.BACK]: [string, number];
|
|
21
21
|
called: (BlockChi | BlockPon | BlockAnKan | BlockDaiKan | BlockShoKan)[];
|
|
22
22
|
tsumo: Tile | null;
|
|
23
23
|
reached: boolean;
|
|
@@ -32,9 +32,9 @@ export declare class Hand {
|
|
|
32
32
|
get reached(): boolean;
|
|
33
33
|
get drawn(): Tile | null;
|
|
34
34
|
get menzen(): boolean;
|
|
35
|
-
getArrayLen(k: Type):
|
|
35
|
+
getArrayLen(k: Type): 2 | 8 | 10;
|
|
36
36
|
sum(k: Type): number;
|
|
37
|
-
get(
|
|
37
|
+
get(t: Type, n: number): number;
|
|
38
38
|
inc(tiles: Tile[]): Tile[];
|
|
39
39
|
dec(tiles: Tile[]): Tile[];
|
|
40
40
|
draw(t: Tile): void;
|
|
@@ -25,7 +25,7 @@ var Hand = (function () {
|
|
|
25
25
|
_a[constants_1.TYPE.P] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
26
26
|
_a[constants_1.TYPE.S] = [0, 0, 0, 0, 0, 0, 0, 0, 0, 0],
|
|
27
27
|
_a[constants_1.TYPE.Z] = [0, 0, 0, 0, 0, 0, 0, 0],
|
|
28
|
-
_a[constants_1.TYPE.BACK] = [0],
|
|
28
|
+
_a[constants_1.TYPE.BACK] = ["untouchable", 0],
|
|
29
29
|
_a.called = [],
|
|
30
30
|
_a.reached = false,
|
|
31
31
|
_a.tsumo = null,
|
|
@@ -54,7 +54,7 @@ var Hand = (function () {
|
|
|
54
54
|
this.inc(b.tiles);
|
|
55
55
|
continue;
|
|
56
56
|
}
|
|
57
|
-
if (allowBackBlock) {
|
|
57
|
+
else if (allowBackBlock) {
|
|
58
58
|
this.inc(b.tiles);
|
|
59
59
|
continue;
|
|
60
60
|
}
|
|
@@ -66,10 +66,12 @@ var Hand = (function () {
|
|
|
66
66
|
var tiles = [];
|
|
67
67
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
68
68
|
var k = _a[_i];
|
|
69
|
-
for (var n =
|
|
69
|
+
for (var n = 1; n < this.getArrayLen(k); n++) {
|
|
70
70
|
var count = this.get(k, n);
|
|
71
|
-
if (k != constants_1.TYPE.Z && n == 5)
|
|
71
|
+
if (k != constants_1.TYPE.Z && n == 5 && this.get(k, 0) > 0) {
|
|
72
72
|
count -= this.get(k, 0);
|
|
73
|
+
tiles.push(new parser_1.Tile(k, 0));
|
|
74
|
+
}
|
|
73
75
|
for (var i = 0; i < count; i++) {
|
|
74
76
|
tiles.push(new parser_1.Tile(k, n));
|
|
75
77
|
}
|
|
@@ -133,8 +135,10 @@ var Hand = (function () {
|
|
|
133
135
|
sum += this.get(k, n);
|
|
134
136
|
return sum;
|
|
135
137
|
};
|
|
136
|
-
Hand.prototype.get = function (
|
|
137
|
-
|
|
138
|
+
Hand.prototype.get = function (t, n) {
|
|
139
|
+
if (t == constants_1.TYPE.BACK)
|
|
140
|
+
return this.data[t][1];
|
|
141
|
+
return this.data[t][n];
|
|
138
142
|
};
|
|
139
143
|
Hand.prototype.inc = function (tiles) {
|
|
140
144
|
var backup = [];
|
|
@@ -148,7 +152,10 @@ var Hand = (function () {
|
|
|
148
152
|
if (!(t.t == constants_1.TYPE.Z || t.t == constants_1.TYPE.BACK) && t.n == 0) {
|
|
149
153
|
this.data[t.t][5] += 1;
|
|
150
154
|
}
|
|
151
|
-
|
|
155
|
+
if (t.t == constants_1.TYPE.BACK)
|
|
156
|
+
this.data[t.t][1] += 1;
|
|
157
|
+
else
|
|
158
|
+
this.data[t.t][t.n] += 1;
|
|
152
159
|
if (t.t != constants_1.TYPE.Z &&
|
|
153
160
|
t.n == 5 &&
|
|
154
161
|
this.get(t.t, 5) == 4 &&
|
|
@@ -164,7 +171,7 @@ var Hand = (function () {
|
|
|
164
171
|
Hand.prototype.dec = function (tiles) {
|
|
165
172
|
if (this.hands.every(function (t) { return t.t == constants_1.TYPE.BACK; })) {
|
|
166
173
|
var toRemove = tiles.map(function (v) { return new parser_1.Tile(constants_1.TYPE.BACK, 0); });
|
|
167
|
-
this.data[constants_1.TYPE.BACK][
|
|
174
|
+
this.data[constants_1.TYPE.BACK][1] -= tiles.length;
|
|
168
175
|
return toRemove;
|
|
169
176
|
}
|
|
170
177
|
var backup = [];
|
|
@@ -178,7 +185,10 @@ var Hand = (function () {
|
|
|
178
185
|
if (!(t.t == constants_1.TYPE.Z || t.t == constants_1.TYPE.BACK) && t.n == 0) {
|
|
179
186
|
this.data[t.t][5] -= 1;
|
|
180
187
|
}
|
|
181
|
-
|
|
188
|
+
if (t.t == constants_1.TYPE.BACK)
|
|
189
|
+
this.data[t.t][1] -= 1;
|
|
190
|
+
else
|
|
191
|
+
this.data[t.t][t.n] -= 1;
|
|
182
192
|
if (t.t != constants_1.TYPE.Z &&
|
|
183
193
|
t.n == 5 &&
|
|
184
194
|
this.get(t.t, 5) == 0 &&
|
|
@@ -269,11 +279,13 @@ var ShantenCalculator = (function () {
|
|
|
269
279
|
var nPairs = 0;
|
|
270
280
|
var nIsolated = 0;
|
|
271
281
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
272
|
-
var
|
|
273
|
-
|
|
274
|
-
|
|
282
|
+
var t = _a[_i];
|
|
283
|
+
if (t == constants_1.TYPE.BACK)
|
|
284
|
+
continue;
|
|
285
|
+
for (var n = 1; n < this.hand.getArrayLen(t); n++) {
|
|
286
|
+
if (this.hand.get(t, n) == 2)
|
|
275
287
|
nPairs++;
|
|
276
|
-
if (this.hand.get(
|
|
288
|
+
if (this.hand.get(t, n) == 1)
|
|
277
289
|
nIsolated++;
|
|
278
290
|
}
|
|
279
291
|
}
|
|
@@ -319,7 +331,7 @@ var ShantenCalculator = (function () {
|
|
|
319
331
|
var b = [0, 0, 0];
|
|
320
332
|
var bn = _this.hand.get(constants_1.TYPE.BACK, 0);
|
|
321
333
|
var bb = bn % 3;
|
|
322
|
-
b[0] = bn / 3;
|
|
334
|
+
b[0] = Math.floor(bn / 3);
|
|
323
335
|
if (bb == 2)
|
|
324
336
|
b[1] = 1;
|
|
325
337
|
if (bb == 1)
|
|
@@ -351,6 +363,8 @@ var ShantenCalculator = (function () {
|
|
|
351
363
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
352
364
|
var k = _a[_i];
|
|
353
365
|
for (var n = 1; n < this.hand.getArrayLen(k); n++) {
|
|
366
|
+
if (k == constants_1.TYPE.BACK && this.hand.get(k, n) % 3 != 2)
|
|
367
|
+
continue;
|
|
354
368
|
if (this.hand.get(k, n) >= 2) {
|
|
355
369
|
var tiles = this.hand.dec([new parser_1.Tile(k, n), new parser_1.Tile(k, n)]);
|
|
356
370
|
var r = calc(true);
|
|
@@ -365,6 +379,8 @@ var ShantenCalculator = (function () {
|
|
|
365
379
|
};
|
|
366
380
|
ShantenCalculator.prototype.commonByType = function (k, n) {
|
|
367
381
|
if (n === void 0) { n = 1; }
|
|
382
|
+
if (k == constants_1.TYPE.BACK || k == constants_1.TYPE.Z)
|
|
383
|
+
throw new Error("expect number type but ".concat(k));
|
|
368
384
|
if (n > 9)
|
|
369
385
|
return this.groupRemainingTiles(k);
|
|
370
386
|
var max = this.commonByType(k, n + 1);
|
|
@@ -569,6 +585,8 @@ var BlockCalculator = (function () {
|
|
|
569
585
|
for (var _i = 0, _a = Object.values(constants_1.TYPE); _i < _a.length; _i++) {
|
|
570
586
|
var k = _a[_i];
|
|
571
587
|
var _loop_1 = function (n) {
|
|
588
|
+
if (k == constants_1.TYPE.BACK && this_1.hand.get(k, n) % 3 != 2)
|
|
589
|
+
return "continue";
|
|
572
590
|
if (this_1.hand.get(k, n) >= 2) {
|
|
573
591
|
var tiles_3 = this_1.hand.dec([new parser_1.Tile(k, n), new parser_1.Tile(k, n)]);
|
|
574
592
|
var v = this_1.commonAll()
|
|
@@ -606,7 +624,9 @@ var BlockCalculator = (function () {
|
|
|
606
624
|
var b = [];
|
|
607
625
|
var bt = constants_1.TYPE.BACK;
|
|
608
626
|
var sum = _this.hand.get(bt, 0);
|
|
609
|
-
|
|
627
|
+
if (sum < 3)
|
|
628
|
+
return [];
|
|
629
|
+
Array(Math.floor(sum / 3))
|
|
610
630
|
.fill(undefined)
|
|
611
631
|
.map(function (_) {
|
|
612
632
|
b.push(new parser_1.BlockThree([new parser_1.Tile(bt, 0), new parser_1.Tile(bt, 0), new parser_1.Tile(bt, 0)]));
|
|
@@ -66,6 +66,13 @@ var Efficiency = (function () {
|
|
|
66
66
|
candidates: candidates,
|
|
67
67
|
};
|
|
68
68
|
};
|
|
69
|
+
Efficiency.partialCandidateTiles = function (input) {
|
|
70
|
+
var h = new calculator_1.Hand(input, true);
|
|
71
|
+
Array(13 - h.hands.length)
|
|
72
|
+
.fill(undefined)
|
|
73
|
+
.map(function () { return h.inc([new parser_1.Tile(constants_1.TYPE.BACK, 0)]); });
|
|
74
|
+
return Efficiency.candidateTiles(h);
|
|
75
|
+
};
|
|
69
76
|
return Efficiency;
|
|
70
77
|
}());
|
|
71
78
|
exports.Efficiency = Efficiency;
|
package/dist/mjs/lib/parser.js
CHANGED
|
@@ -401,7 +401,7 @@ function detectBlockType(tiles) {
|
|
|
401
401
|
return constants_1.BLOCK.UNKNOWN;
|
|
402
402
|
if (numOfHorizontals == 0 && numOfBackTiles == 0)
|
|
403
403
|
return constants_1.BLOCK.HAND;
|
|
404
|
-
if (tiles.length === 3) {
|
|
404
|
+
if (tiles.length === 3 && numOfBackTiles === 0) {
|
|
405
405
|
if (sameAll)
|
|
406
406
|
return constants_1.BLOCK.PON;
|
|
407
407
|
if (numOfHorizontals == 1 && areConsecutiveTiles(tiles))
|