mahjong_engine 1.0.16 → 1.1.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 (43) hide show
  1. package/dist/modules/BlockDivider.js +35 -36
  2. package/dist/modules/BlockDivider.js.map +1 -1
  3. package/dist/modules/BlockHais.d.ts +1 -0
  4. package/dist/modules/BlockHais.d.ts.map +1 -1
  5. package/dist/modules/BlockHais.js +5 -0
  6. package/dist/modules/BlockHais.js.map +1 -1
  7. package/dist/modules/MachiCalculator.d.ts +2 -0
  8. package/dist/modules/MachiCalculator.d.ts.map +1 -1
  9. package/dist/modules/MachiCalculator.js +31 -3
  10. package/dist/modules/MachiCalculator.js.map +1 -1
  11. package/dist/modules/MahjongConsts.d.ts +5 -1
  12. package/dist/modules/MahjongConsts.d.ts.map +1 -1
  13. package/dist/modules/MahjongConsts.js +4 -0
  14. package/dist/modules/MahjongConsts.js.map +1 -1
  15. package/dist/modules/ShantenCalculator.d.ts +14 -0
  16. package/dist/modules/ShantenCalculator.d.ts.map +1 -0
  17. package/dist/modules/ShantenCalculator.js +107 -0
  18. package/dist/modules/ShantenCalculator.js.map +1 -0
  19. package/dist/modules/index.d.ts +1 -0
  20. package/dist/modules/index.d.ts.map +1 -1
  21. package/dist/modules/index.js +1 -0
  22. package/dist/modules/index.js.map +1 -1
  23. package/dist/tests/shanten/test1.d.ts +6 -0
  24. package/dist/tests/shanten/test1.d.ts.map +1 -0
  25. package/dist/tests/shanten/test1.js +138 -0
  26. package/dist/tests/shanten/test1.js.map +1 -0
  27. package/dist/tests/shanten.test.d.ts +2 -0
  28. package/dist/tests/shanten.test.d.ts.map +1 -0
  29. package/dist/tests/shanten.test.js +14 -0
  30. package/dist/tests/shanten.test.js.map +1 -0
  31. package/dist/tests/yaku/yakuman.d.ts.map +1 -1
  32. package/dist/tests/yaku/yakuman.js +18 -0
  33. package/dist/tests/yaku/yakuman.js.map +1 -1
  34. package/modules/BlockDivider.ts +41 -41
  35. package/modules/BlockHais.ts +6 -0
  36. package/modules/MachiCalculator.ts +35 -3
  37. package/modules/MahjongConsts.ts +5 -1
  38. package/modules/ShantenCalculator.ts +137 -0
  39. package/modules/index.ts +1 -0
  40. package/package.json +1 -1
  41. package/tests/shanten/test1.ts +137 -0
  42. package/tests/shanten.test.ts +21 -0
  43. package/tests/yaku/yakuman.ts +18 -0
@@ -0,0 +1 @@
1
+ {"version":3,"file":"shanten.test.js","sourceRoot":"","sources":["../../tests/shanten.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,GAAG,EAAE,MAAM,gBAAgB,CAAC;AACrC,OAAO,EAAE,MAAM,EAAE,MAAM,iBAAiB,CAAC;AACzC,OAAO,EAAE,iBAAiB,EAAE,MAAM,8BAA8B,CAAC;AAQjE,MAAM,SAAS,GAA+B,IAAI,GAAG,EAAE,CAAC;AACxD,SAAS,CAAC,GAAG,CAAC,OAAO,EAAE,MAAM,CAAC,CAAC;AAE/B,SAAS,CAAC,OAAO,CAAC,CAAC,KAAK,EAAE,GAAG,EAAE,EAAE;IAC7B,QAAQ,CAAC,GAAG,EAAE,GAAG,EAAE;QACf,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,OAAO,EAAE,CAAC,EAAC,IAAI,EAAE,QAAQ,EAAC,EAAE,EAAE;YAC3C,MAAM,OAAO,GAAG,IAAI,iBAAiB,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,CAAC,IAAI,GAAG,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC,SAAS,EAAE,CAAC;YAC7E,MAAM,CAAC,OAAO,CAAC,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC;QACtC,CAAC,CAAC,CAAC;IACP,CAAC,CAAC,CAAC;AACP,CAAC,CAAC,CAAC"}
@@ -1 +1 @@
1
- {"version":3,"file":"yakuman.d.ts","sourceRoot":"","sources":["../../../tests/yaku/yakuman.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,eAAe,CAAC;AAGpD,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EA2WrE,CAAC"}
1
+ {"version":3,"file":"yakuman.d.ts","sourceRoot":"","sources":["../../../tests/yaku/yakuman.ts"],"names":[],"mappings":"AAAA,OAAO,EAAY,SAAS,EAAE,MAAM,eAAe,CAAC;AAGpD,eAAO,MAAM,YAAY,EAAE,SAAS,CAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,EA6XrE,CAAC"}
@@ -237,6 +237,24 @@ export const casesYakuman = [
237
237
  hais: [1, 9, 10, 18, 19, 27, 28, 28, 29, 30, 31, 32, 33, 34],
238
238
  expected: new Map([[0, new Map([["国士無双13面待ち", 26]])]])
239
239
  },
240
+ {
241
+ name: "kokushi_4",
242
+ desc: "国士無双",
243
+ agariHai: 1,
244
+ isTsumo: true,
245
+ melds: [],
246
+ hais: [1, 8, 9, 10, 18, 19, 27, 28, 29, 30, 31, 32, 33, 34],
247
+ expected: new Map()
248
+ },
249
+ {
250
+ name: "kokushi_5",
251
+ desc: "国士無双",
252
+ agariHai: 1,
253
+ isTsumo: true,
254
+ melds: [],
255
+ hais: [1, 8, 8, 10, 18, 19, 27, 28, 29, 30, 31, 32, 33, 34],
256
+ expected: new Map()
257
+ },
240
258
  {
241
259
  name: "churen_1",
242
260
  desc: "九蓮宝燈",
@@ -1 +1 @@
1
- {"version":3,"file":"yakuman.js","sourceRoot":"","sources":["../../../tests/yaku/yakuman.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"yakuman.js","sourceRoot":"","sources":["../../../tests/yaku/yakuman.ts"],"names":[],"mappings":"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"}
@@ -62,58 +62,58 @@ export class BlockDivider{
62
62
 
63
63
  const dfs = (arr: number[], blocks: BlockHaisList) => {
64
64
  const expectedBlocks = Math.floor(this.hais.length / 3);
65
+
65
66
  if(blocks.length() === expectedBlocks + 1 && blocks.isStandardHand(expectedBlocks)){
66
67
  results.push(blocks.clone());
67
68
  return;
68
69
  }
69
70
 
70
- for(let j = 0; j < counts.length; j++){
71
- const count = arr[j];
72
- const hai = new Hai(j + 1);
73
-
74
- //刻子の処理
75
- if(count >= 3){
76
- let next = [...arr];
77
- next[j] -= 3;
78
-
79
- blocks.push(new BlockHais([hai, hai, hai], BlockType.KOTSU));
80
- dfs(next, blocks);
81
- blocks.pop();
82
- }
83
- //順子の処理
84
- const hasTiles = arr[j] > 0 && arr[j + 1] > 0 && arr[j + 2] > 0;
85
- const isShuntsuCandidate = hai.isNumberHai() && hai.num <= 7;
86
- if(isShuntsuCandidate && hasTiles){
87
- const h2 = new Hai(j + 2);
88
- const h3 = new Hai(j + 3);
89
-
90
- let next = [...arr];
91
- next[j]--;
92
- next[j + 1]--;
93
- next[j + 2]--;
94
-
95
- blocks.push(new BlockHais([hai, h2, h3], BlockType.SHUNTSU));
96
- dfs(next, blocks);
97
- blocks.pop();
98
- }
71
+ const firstIndex = arr.findIndex(count => count > 0);
72
+ if(firstIndex === -1) return;
73
+
74
+ const count = arr[firstIndex];
75
+ const hai = new Hai(firstIndex + 1);
76
+
77
+ //刻子の処理
78
+ if(count >= 3){
79
+ let next = [...arr];
80
+ next[firstIndex] -= 3;
81
+
82
+ blocks.push(new BlockHais([hai, hai, hai], BlockType.KOTSU));
83
+ dfs(next, blocks);
84
+ blocks.pop();
85
+ }
86
+ //順子の処理
87
+ const hasTiles =
88
+ arr[firstIndex + 1] > 0 &&
89
+ arr[firstIndex + 2] > 0;
90
+ const isShuntsuCandidate = hai.isNumberHai() && hai.num <= 7;
91
+ if(isShuntsuCandidate && hasTiles){
92
+ const h2 = new Hai(firstIndex + 2);
93
+ const h3 = new Hai(firstIndex + 3);
94
+
95
+ let next = [...arr];
96
+ next[firstIndex]--;
97
+ next[firstIndex + 1]--;
98
+ next[firstIndex + 2]--;
99
+
100
+ blocks.push(new BlockHais([hai, h2, h3], BlockType.SHUNTSU));
101
+ dfs(next, blocks);
102
+ blocks.pop();
99
103
  }
100
104
  };
101
105
 
102
106
  //通常の面子の組み合わせの判定
103
- for(let i = 0; i < this.hais.length; i++){
104
- const firstid = this.hais[i].getId();
105
-
106
- if(i > 0 && this.hais[i].getId() === this.hais[i - 1].getId()) continue;
107
+ for(let i = 0; i < counts.length; i++){
108
+ if(counts[i] < 2) continue;
107
109
 
108
- //雀頭の処理
109
- if(this.hais.filter(h => h.getId() === firstid).length >= 2){
110
- let next = [...counts];
111
- next[firstid - 1] -= 2;
110
+ const hai = new Hai(i + 1);
111
+ const next = [...counts];
112
+ next[i] -= 2;
112
113
 
113
- blockhaislist.push(new BlockHais([this.hais[i].clone(), this.hais[i].clone()], BlockType.JANTO));
114
- dfs(next, blockhaislist);
115
- blockhaislist.pop();
116
- }
114
+ blockhaislist.push(new BlockHais([hai.clone(), hai.clone()], BlockType.JANTO));
115
+ dfs(next, blockhaislist);
116
+ blockhaislist.pop();
117
117
  }
118
118
 
119
119
  //七対子の判定
@@ -43,6 +43,12 @@ export class BlockHais implements IMentsu {
43
43
  return this.hais.some(h => h.isJihai());
44
44
  }
45
45
 
46
+ isTaatsu(): boolean {
47
+ return this.type === BlockType.TAATSU_RYANMEN ||
48
+ this.type === BlockType.TAATSU_PENCHAN ||
49
+ this.type === BlockType.TAATSU_KANCHAN;
50
+ }
51
+
46
52
  isJanto(): boolean {
47
53
  return this.type === BlockType.JANTO;
48
54
  }
@@ -9,14 +9,46 @@ export class MachiCalculator{
9
9
  this.hais = hais.map(h => h.clone()).sort((a, b) => a.getId() - b.getId());
10
10
  }
11
11
 
12
+ private calcCandidate(hais: Hai[]): number[] {
13
+ const candidate = new Set<number>();
14
+
15
+ for (const hai of hais) {
16
+ const id = hai.getId();
17
+ candidate.add(id);
18
+
19
+ if (hai.isNumberHai()) {
20
+ const num = hai.num;
21
+
22
+ if (num > 1) candidate.add(id - 1);
23
+ if (num < 9) candidate.add(id + 1);
24
+ }
25
+ }
26
+ return [...candidate].sort((a, b) => a - b);
27
+ }
28
+
29
+ private genYaochuCandidate(): number[] {
30
+ const candidate: number[] = [];
31
+
32
+ for(let i = 1; i <= PAI_TYPE_NUM; i++){
33
+ if(new Hai(i).isYaochuHai()) candidate.push(i);
34
+ }
35
+
36
+ return candidate;
37
+ }
38
+
12
39
  calculate(): number[] {
13
40
  const machi: number[] = [];
41
+ const haiNumsSet = [...new Set(this.hais.map(h => h.getId()))];
42
+ const isAllYaochu = this.hais.every(h => h.isYaochuHai());
43
+ // 19字牌を12種類以上持っていれば国士無双のテンパイの可能性
44
+ const isKokushi = isAllYaochu && haiNumsSet.length >= 12;
45
+ const candidate: number[] = isKokushi ? this.genYaochuCandidate() : this.calcCandidate(this.hais);
14
46
 
15
- for(let i = 1; i <= PAI_TYPE_NUM; i++){
16
- const testhais = [...this.hais, new Hai(i)];
47
+ for(const haiId of candidate){
48
+ const testhais = [...this.hais, new Hai(haiId)];
17
49
  const divided = new BlockDivider(testhais).divide();
18
50
  if(divided.length > 0){
19
- machi.push(i);
51
+ machi.push(haiId);
20
52
  }
21
53
  }
22
54
 
@@ -24,7 +24,11 @@ export enum BlockType{
24
24
  KOTSU = "kotsu",
25
25
  SHUNTSU = "shuntsu",
26
26
  CHITOI = "chitoi",
27
- KOKUSHI = "kokushi"
27
+ KOKUSHI = "kokushi",
28
+ TAATSU_RYANMEN = "taatsu_ryanmen",
29
+ TAATSU_KANCHAN = "taatsu_kanchan",
30
+ TAATSU_PENCHAN = "taatsu_penchan",
31
+ SINGLE = "single"
28
32
  }
29
33
  //待ちのタイプ
30
34
  export enum MachiType{
@@ -0,0 +1,137 @@
1
+ import { BlockDivider } from "./BlockDivider.js";
2
+ import { Hai } from "./Hai.js";
3
+ import { MachiCalculator } from "./MachiCalculator.js";
4
+ import { PAI_TYPE_NUM } from "./MahjongConsts.js";
5
+
6
+ export class ShantenCalculator {
7
+ private readonly hais: Hai[];
8
+ private readonly counts: number[];
9
+
10
+ constructor(hais: Hai[]){
11
+ this.hais = hais.map(h => h.clone()).sort((a, b) => a.getId() - b.getId());
12
+ this.counts = new Array(PAI_TYPE_NUM).fill(0);
13
+ this.hais.forEach(h => this.counts[h.getId() - 1]++);
14
+ }
15
+
16
+ calculate(): number {
17
+ const normal = this.calculateNormal();
18
+ const chitoi = this.calculateChitoitsu();
19
+ const kokushi = this.calculateKokushi();
20
+
21
+ return Math.min(normal, chitoi, kokushi);
22
+ }
23
+
24
+ private calculateShanten(
25
+ requiredMentsuCount: number,
26
+ mentsuCount: number,
27
+ taatsuCount: number,
28
+ toitsuCount: number,
29
+ ): number {
30
+ const usableTaatsu = Math.min(taatsuCount, Math.max(0, requiredMentsuCount - mentsuCount));
31
+ const usableJanto = Math.min(toitsuCount, 1);
32
+ return 8 - 2 * (4 - requiredMentsuCount + mentsuCount) - usableTaatsu - usableJanto;
33
+ }
34
+
35
+ private isTenpai(): boolean {
36
+ return new MachiCalculator(this.hais).calculate().length > 0;
37
+ }
38
+
39
+ private isAgari(): boolean {
40
+ return new BlockDivider(this.hais).divide().length > 0;
41
+ }
42
+
43
+ private calculateNormal(): number {
44
+ if(this.isAgari()) return -1;
45
+ if(this.isTenpai()) return 0;
46
+
47
+ let minShanten = 8;
48
+ const requiredMentsuCount = Math.floor(this.hais.length / 3);
49
+ const dfs = (
50
+ arr: number[],
51
+ mentsuCount: number,
52
+ taatsuCount: number,
53
+ toitsuCount: number,
54
+ ) => {
55
+ const firstIndex = arr.findIndex(count => count > 0);
56
+ if(firstIndex === -1) {
57
+ const shanten = this.calculateShanten(
58
+ requiredMentsuCount,
59
+ mentsuCount,
60
+ taatsuCount,
61
+ toitsuCount
62
+ );
63
+ minShanten = Math.min(minShanten, shanten);
64
+ return;
65
+ }
66
+
67
+ const count = arr[firstIndex];
68
+ const hai = new Hai(firstIndex + 1);
69
+
70
+ //雀頭
71
+ if(count >= 2){
72
+ let next = [...arr];
73
+ next[firstIndex] -= 2;
74
+ dfs(next, mentsuCount, taatsuCount, toitsuCount + 1);
75
+ }
76
+ //刻子
77
+ if(count >= 3){
78
+ let next = [...arr];
79
+ next[firstIndex] -= 3;
80
+ dfs(next, mentsuCount + 1, taatsuCount, toitsuCount);
81
+ }
82
+ //順子
83
+ const hasShuntsuTiles =
84
+ arr[firstIndex + 1] > 0 &&
85
+ arr[firstIndex + 2] > 0;
86
+ const isShuntsuCandidate = hai.isNumberHai() && hai.num <= 7;
87
+ if(isShuntsuCandidate && hasShuntsuTiles){
88
+ let next = [...arr];
89
+ next[firstIndex]--;
90
+ next[firstIndex + 1]--;
91
+ next[firstIndex + 2]--;
92
+ dfs(next, mentsuCount + 1, taatsuCount, toitsuCount);
93
+ }
94
+ //両面、辺張ターツ
95
+ const hasRyanmenTiles = arr[firstIndex + 1] > 0;
96
+ const isRyanmenCandidate = hai.isNumberHai() && hai.num <= 8;
97
+ if(isRyanmenCandidate && hasRyanmenTiles){
98
+ let next = [...arr];
99
+ next[firstIndex]--;
100
+ next[firstIndex + 1]--;
101
+
102
+ dfs(next, mentsuCount, taatsuCount + 1, toitsuCount);
103
+ }
104
+ //嵌張ターツ
105
+ const hasKanchanTiles = arr[firstIndex + 2] > 0;
106
+ const isKanchanCandidate = hai.isNumberHai() && hai.num <= 7;
107
+ if(isKanchanCandidate && hasKanchanTiles){
108
+ let next = [...arr];
109
+ next[firstIndex]--;
110
+ next[firstIndex + 2]--;
111
+ dfs(next, mentsuCount, taatsuCount + 1, toitsuCount);
112
+ }
113
+
114
+ //孤立牌
115
+ const next = [...arr];
116
+ next[firstIndex]--;
117
+ dfs(next, mentsuCount, taatsuCount, toitsuCount);
118
+ }
119
+
120
+ dfs(this.counts, 0, 0, 0);
121
+
122
+ return minShanten;
123
+ }
124
+
125
+ private calculateChitoitsu(): number {
126
+ const haiNumsSet = [...new Set(this.hais.map(h => h.getId()))];
127
+ const toitsuCount = haiNumsSet.filter(n => this.counts[n - 1] === 2).length;
128
+ return 6 - toitsuCount;
129
+ }
130
+
131
+ private calculateKokushi(): number {
132
+ const yaochuHais = this.hais.filter(h => h.isYaochuHai());
133
+ const hasToitsu = yaochuHais.some(h => this.counts[h.getId() - 1] >= 2);
134
+ const yaochuCount = [...new Set(yaochuHais.map(h => h.getId()))].length;
135
+ return 13 - yaochuCount - (hasToitsu ? 1 : 0);
136
+ }
137
+ }
package/modules/index.ts CHANGED
@@ -13,5 +13,6 @@ export { TILE } from './tileDefs.js';
13
13
  export { ScoreResult } from './tensuu/ScoreResult.js';
14
14
  export { MachiCalculator } from './MachiCalculator.js';
15
15
  export { BlockHaisList } from './BlockHaisList.js';
16
+ export { ShantenCalculator } from './ShantenCalculator.js';
16
17
  export * from './MahjongConsts.js';
17
18
  export type * from './tileDefs.js';
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "mahjong_engine",
3
- "version": "1.0.16",
3
+ "version": "1.1.0",
4
4
  "description": "mahjong",
5
5
  "homepage": "https://github.com/daicharn/IsTheOrderaMahjong#readme",
6
6
  "bugs": {
@@ -0,0 +1,137 @@
1
+ export const cases1 = [
2
+ {
3
+ name: "naki_1_1",
4
+ hais: [1,2,3,4,5,6,7,8,10,11],
5
+ expected: 1
6
+ },
7
+ {
8
+ name: "naki_1_2",
9
+ hais: [1,2,3,4,5,6,7,8,9,11],
10
+ expected: 0
11
+ },
12
+ {
13
+ name: "naki_2_1",
14
+ hais: [1,2,3,4,5,6,7],
15
+ expected: 0
16
+ },
17
+ {
18
+ name: "naki_2_2",
19
+ hais: [1,2,3,4,5,8,9],
20
+ expected: 1
21
+ },
22
+ {
23
+ name: "naki_3_1",
24
+ hais: [1,2,4,5],
25
+ expected: 1
26
+ },
27
+ {
28
+ name: "naki_3_2",
29
+ hais: [1,2,3,4],
30
+ expected: 0
31
+ },
32
+ {
33
+ name: "naki_4",
34
+ hais: [1],
35
+ expected: 0
36
+ },
37
+ {
38
+ name: "churenagari",
39
+ hais: [1,1,1,1,2,3,4,5,6,7,8,9,9,9],
40
+ expected: -1
41
+ },
42
+ {
43
+ name: "churen9",
44
+ hais: [1,1,1,2,3,4,5,6,7,8,9,9,9],
45
+ expected: 0
46
+ },
47
+ {
48
+ name: "tenpai_1",
49
+ hais: [1,1,1,2,3,4,5,5,6,7,8,8,9],
50
+ expected: 0
51
+ },
52
+ {
53
+ name: "shanten1_1",
54
+ hais: [1,1,1,2,3,4,5,5,5,6,8,8,9],
55
+ expected: 1
56
+ },
57
+ {
58
+ name: "shanten1_2",
59
+ hais: [1,1,1,2,3,3,4,5,5,6,8,8,9],
60
+ expected: 1
61
+ },
62
+ {
63
+ name: "shanten1_3",
64
+ hais: [1,1,1,2,5,12,12,12,13,14,15,17,17],
65
+ expected: 1
66
+ },
67
+ {
68
+ name: "shanten2_1",
69
+ hais: [1,1,1,2,5,11,12,12,13,14,15,17,18],
70
+ expected: 2
71
+ },
72
+ {
73
+ name: "shanten2_2",
74
+ hais: [1,1,1,2,5,11,12,13,14,15,17,18,28],
75
+ expected: 2
76
+ },
77
+ {
78
+ name: "shanten3_1",
79
+ hais: [1,1,1,2,5,12,12,13,14,15,17,28,29],
80
+ expected: 3
81
+ },
82
+ {
83
+ name: "shanten3_2",
84
+ hais: [1,2,4,5,7,8,12,13,15,17,19,19,22],
85
+ expected: 3
86
+ },
87
+ {
88
+ name: "shanten4_1",
89
+ hais: [1,2,3,5,9,11,13,17,20,25,26,31,32],
90
+ expected: 4
91
+ },
92
+ {
93
+ name: "shanten5_1",
94
+ hais: [1,2,3,5,9,11,13,17,20,25,29,31,32],
95
+ expected: 5
96
+ },
97
+ {
98
+ name: "shanten6_1",
99
+ hais: [1,3,5,9,11,13,17,20,25,29,31,32,33],
100
+ expected: 6
101
+ },
102
+ {
103
+ name: "shanten6_3",
104
+ hais: [1,4,8,11,14,17,22,27,28,29,30,32,33],
105
+ expected: 6
106
+ },
107
+ {
108
+ name: "chitoi_1",
109
+ hais: [1,1,4,4,9,9,13,13,17,17,21,21,28,28],
110
+ expected: -1
111
+ },
112
+ {
113
+ name: "chitoi_2",
114
+ hais: [1,1,4,4,9,9,13,13,17,17,21,21,28],
115
+ expected: 0
116
+ },
117
+ {
118
+ name: "kokushi_1",
119
+ hais: [1,9,10,18,19,27,28,29,30,31,32,33,34],
120
+ expected: 0
121
+ },
122
+ {
123
+ name: "kokushi_2",
124
+ hais: [1,9,10,10,19,27,28,29,30,31,32,33,34],
125
+ expected: 0
126
+ },
127
+ {
128
+ name: "kokushi_3",
129
+ hais: [1,9,10,17,19,27,28,29,30,31,32,33,34],
130
+ expected: 1
131
+ },
132
+ {
133
+ name: "kokushi_4",
134
+ hais: [1,9,10,10,10,27,28,29,30,31,32,33,34],
135
+ expected: 1
136
+ },
137
+ ]
@@ -0,0 +1,21 @@
1
+ import { Hai } from '../modules/Hai';
2
+ import { cases1 } from './shanten/test1';
3
+ import { ShantenCalculator } from '../modules/ShantenCalculator';
4
+
5
+ type ShantenCase = {
6
+ name: string,
7
+ hais: number[],
8
+ expected: number
9
+ };
10
+
11
+ const testcases: Map<string, ShantenCase[]> = new Map();
12
+ testcases.set("case1", cases1);
13
+
14
+ testcases.forEach((value, key) => {
15
+ describe(key, () => {
16
+ test.each(value)('$name', ({hais, expected}) => {
17
+ const results = new ShantenCalculator(hais.map(n => new Hai(n))).calculate();
18
+ expect(results).toEqual(expected);
19
+ });
20
+ });
21
+ });
@@ -239,6 +239,24 @@ export const casesYakuman: TehaiCase<Map<number, Map<string, number>>>[] = [
239
239
  hais: [1,9,10,18,19,27,28,28,29,30,31,32,33,34],
240
240
  expected: new Map([[0, new Map([["国士無双13面待ち", 26]])]])
241
241
  },
242
+ {
243
+ name: "kokushi_4",
244
+ desc: "国士無双",
245
+ agariHai: 1,
246
+ isTsumo: true,
247
+ melds: [] as MeldSpec[],
248
+ hais: [1,8,9,10,18,19,27,28,29,30,31,32,33,34],
249
+ expected: new Map()
250
+ },
251
+ {
252
+ name: "kokushi_5",
253
+ desc: "国士無双",
254
+ agariHai: 1,
255
+ isTsumo: true,
256
+ melds: [] as MeldSpec[],
257
+ hais: [1,8,8,10,18,19,27,28,29,30,31,32,33,34],
258
+ expected: new Map()
259
+ },
242
260
  {
243
261
  name: "churen_1",
244
262
  desc: "九蓮宝燈",