mj-simulator 0.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 (85) hide show
  1. package/data/honor-table.bin +0 -0
  2. package/data/suit-table.bin +0 -0
  3. package/dist/cli.d.ts +1 -0
  4. package/dist/cli.js +278 -0
  5. package/dist/cli.js.map +1 -0
  6. package/dist/core/constants.d.ts +13 -0
  7. package/dist/core/constants.js +19 -0
  8. package/dist/core/constants.js.map +1 -0
  9. package/dist/core/hand.d.ts +37 -0
  10. package/dist/core/hand.js +105 -0
  11. package/dist/core/hand.js.map +1 -0
  12. package/dist/core/remaining.d.ts +12 -0
  13. package/dist/core/remaining.js +26 -0
  14. package/dist/core/remaining.js.map +1 -0
  15. package/dist/core/tile.d.ts +45 -0
  16. package/dist/core/tile.js +140 -0
  17. package/dist/core/tile.js.map +1 -0
  18. package/dist/ev/ev-calculator.d.ts +10 -0
  19. package/dist/ev/ev-calculator.js +257 -0
  20. package/dist/ev/ev-calculator.js.map +1 -0
  21. package/dist/ev/types.d.ts +16 -0
  22. package/dist/ev/types.js +2 -0
  23. package/dist/ev/types.js.map +1 -0
  24. package/dist/index.d.ts +27 -0
  25. package/dist/index.js +27 -0
  26. package/dist/index.js.map +1 -0
  27. package/dist/init.d.ts +11 -0
  28. package/dist/init.js +24 -0
  29. package/dist/init.js.map +1 -0
  30. package/dist/mc/simulator.d.ts +18 -0
  31. package/dist/mc/simulator.js +11 -0
  32. package/dist/mc/simulator.js.map +1 -0
  33. package/dist/mc/wasm-bridge.d.ts +30 -0
  34. package/dist/mc/wasm-bridge.js +56 -0
  35. package/dist/mc/wasm-bridge.js.map +1 -0
  36. package/dist/models/danger.d.ts +34 -0
  37. package/dist/models/danger.js +147 -0
  38. package/dist/models/danger.js.map +1 -0
  39. package/dist/models/evaluation.d.ts +31 -0
  40. package/dist/models/evaluation.js +46 -0
  41. package/dist/models/evaluation.js.map +1 -0
  42. package/dist/scoring/decomposer.d.ts +7 -0
  43. package/dist/scoring/decomposer.js +106 -0
  44. package/dist/scoring/decomposer.js.map +1 -0
  45. package/dist/scoring/fu.d.ts +5 -0
  46. package/dist/scoring/fu.js +47 -0
  47. package/dist/scoring/fu.js.map +1 -0
  48. package/dist/scoring/score-calculator.d.ts +11 -0
  49. package/dist/scoring/score-calculator.js +164 -0
  50. package/dist/scoring/score-calculator.js.map +1 -0
  51. package/dist/scoring/types.d.ts +38 -0
  52. package/dist/scoring/types.js +2 -0
  53. package/dist/scoring/types.js.map +1 -0
  54. package/dist/scoring/wait-type.d.ts +11 -0
  55. package/dist/scoring/wait-type.js +65 -0
  56. package/dist/scoring/wait-type.js.map +1 -0
  57. package/dist/scoring/yaku.d.ts +7 -0
  58. package/dist/scoring/yaku.js +490 -0
  59. package/dist/scoring/yaku.js.map +1 -0
  60. package/dist/shanten/init.d.ts +9 -0
  61. package/dist/shanten/init.js +26 -0
  62. package/dist/shanten/init.js.map +1 -0
  63. package/dist/shanten/lookup-table.d.ts +37 -0
  64. package/dist/shanten/lookup-table.js +228 -0
  65. package/dist/shanten/lookup-table.js.map +1 -0
  66. package/dist/shanten/shanten-calculator.d.ts +18 -0
  67. package/dist/shanten/shanten-calculator.js +101 -0
  68. package/dist/shanten/shanten-calculator.js.map +1 -0
  69. package/dist/shanten/ukeire.d.ts +35 -0
  70. package/dist/shanten/ukeire.js +103 -0
  71. package/dist/shanten/ukeire.js.map +1 -0
  72. package/dist/types.d.ts +17 -0
  73. package/dist/types.js +2 -0
  74. package/dist/types.js.map +1 -0
  75. package/dist/worker-client.d.ts +42 -0
  76. package/dist/worker-client.js +83 -0
  77. package/dist/worker-client.js.map +1 -0
  78. package/dist/worker.d.ts +1 -0
  79. package/dist/worker.js +67 -0
  80. package/dist/worker.js.map +1 -0
  81. package/node_modules/mj-mc-wasm/mj_mc_wasm.d.ts +57 -0
  82. package/node_modules/mj-mc-wasm/mj_mc_wasm.js +235 -0
  83. package/node_modules/mj-mc-wasm/mj_mc_wasm_bg.wasm +0 -0
  84. package/node_modules/mj-mc-wasm/package.json +15 -0
  85. package/package.json +44 -0
@@ -0,0 +1,490 @@
1
+ import { JIHAI_OFFSET, SUIT_NUM, RED_MANZU_ID, RED_PINZU_ID, RED_SOUZU_ID } from "../core/constants.js";
2
+ import { getSuitIndex, isYaochu, nextTile } from "../core/tile.js";
3
+ const HAKU = 31;
4
+ const HATSU = 32;
5
+ const CHUN = 33;
6
+ // ── ヘルパー関数 ──
7
+ /** 老頭牌(1,9の数牌のみ、字牌含まない) */
8
+ function isTerminal(tile) {
9
+ return tile < JIHAI_OFFSET && (tile % SUIT_NUM === 0 || tile % SUIT_NUM === 8);
10
+ }
11
+ /** 面子が么九牌を含むか */
12
+ function mentsuContainsYaochu(m) {
13
+ if (m.type === "koutsu")
14
+ return isYaochu(m.tile);
15
+ // 順子: 先頭 or 末尾が么九
16
+ return isYaochu(m.tile) || isYaochu(m.tile + 2);
17
+ }
18
+ /** 面子が老頭牌(1,9数牌)を含むか */
19
+ function mentsuContainsTerminal(m) {
20
+ if (m.type === "koutsu")
21
+ return isTerminal(m.tile);
22
+ // 順子: 先頭 or 末尾が老頭
23
+ return isTerminal(m.tile) || isTerminal(m.tile + 2);
24
+ }
25
+ /** 分解で使われている色インデックスのセットを返す (0=m,1=p,2=s,3=z) */
26
+ function getUsedSuits(decomp) {
27
+ const suits = new Set();
28
+ suits.add(getSuitIndex(decomp.jantou));
29
+ for (const m of decomp.mentsu) {
30
+ suits.add(getSuitIndex(m.tile));
31
+ }
32
+ return suits;
33
+ }
34
+ /** 七対子で使われている色インデックスのセットを返す */
35
+ function getUsedSuitsChiitoi(pairs) {
36
+ const suits = new Set();
37
+ for (const t of pairs) {
38
+ suits.add(getSuitIndex(t));
39
+ }
40
+ return suits;
41
+ }
42
+ // ── 役満判定 ──
43
+ function checkYakuman(decomposition, hand, _context) {
44
+ const yakuman = [];
45
+ const mentsu = decomposition.mentsu;
46
+ const jantou = decomposition.jantou;
47
+ // 四暗刻: 刻子が4つ
48
+ if (mentsu.every((m) => m.type === "koutsu")) {
49
+ yakuman.push({ name: "四暗刻", han: 13 });
50
+ }
51
+ // 大三元: 三元牌3つ全ての刻子
52
+ {
53
+ const sangenKoutsu = mentsu.filter((m) => m.type === "koutsu" && (m.tile === HAKU || m.tile === HATSU || m.tile === CHUN));
54
+ if (sangenKoutsu.length === 3) {
55
+ yakuman.push({ name: "大三元", han: 13 });
56
+ }
57
+ }
58
+ // 字一色: 全牌が字牌
59
+ {
60
+ const allJihai = jantou >= JIHAI_OFFSET &&
61
+ mentsu.every((m) => m.tile >= JIHAI_OFFSET);
62
+ if (allJihai) {
63
+ yakuman.push({ name: "字一色", han: 13 });
64
+ }
65
+ }
66
+ // 緑一色: 2s,3s,4s,6s,8s,發のみ
67
+ {
68
+ const greenTiles = new Set([19, 20, 21, 23, 25, HATSU]); // 2s=19, 3s=20, 4s=21, 6s=23, 8s=25
69
+ const allGreen = isAllGreen(mentsu, jantou, greenTiles);
70
+ if (allGreen) {
71
+ yakuman.push({ name: "緑一色", han: 13 });
72
+ }
73
+ }
74
+ // 清老頭: 老頭牌(1,9の数牌)のみで構成
75
+ {
76
+ const allTerminal = isTerminal(jantou) &&
77
+ mentsu.every((m) => m.type === "koutsu" && isTerminal(m.tile));
78
+ if (allTerminal) {
79
+ yakuman.push({ name: "清老頭", han: 13 });
80
+ }
81
+ }
82
+ // 風牌関連
83
+ const windTiles = [27, 28, 29, 30]; // 東南西北
84
+ const windKoutsu = mentsu.filter((m) => m.type === "koutsu" && windTiles.includes(m.tile));
85
+ // 大四喜: 風牌4つ全ての刻子
86
+ if (windKoutsu.length === 4) {
87
+ yakuman.push({ name: "大四喜", han: 13 });
88
+ }
89
+ // 小四喜: 風牌の刻子3つ + 風牌の雀頭
90
+ if (windKoutsu.length === 3 && windTiles.includes(jantou)) {
91
+ yakuman.push({ name: "小四喜", han: 13 });
92
+ }
93
+ // 九蓮宝燈: 同色で1112345678999+任意1枚
94
+ {
95
+ const chuuren = checkChuuren(hand);
96
+ if (chuuren) {
97
+ yakuman.push({ name: "九蓮宝燈", han: 13 });
98
+ }
99
+ }
100
+ return yakuman;
101
+ }
102
+ function isAllGreen(mentsu, jantou, greenTiles) {
103
+ if (!greenTiles.has(jantou))
104
+ return false;
105
+ for (const m of mentsu) {
106
+ if (m.type === "koutsu") {
107
+ if (!greenTiles.has(m.tile))
108
+ return false;
109
+ }
110
+ else {
111
+ // 順子: m.tile, m.tile+1, m.tile+2 全てがgreen
112
+ if (!greenTiles.has(m.tile) || !greenTiles.has(m.tile + 1) || !greenTiles.has(m.tile + 2))
113
+ return false;
114
+ }
115
+ }
116
+ return true;
117
+ }
118
+ function checkChuuren(hand) {
119
+ // 同色で1112345678999+任意1枚 (合計14枚)
120
+ // 3色それぞれ試す
121
+ for (let suit = 0; suit < 3; suit++) {
122
+ const offset = suit * SUIT_NUM;
123
+ // 手牌のこの色の枚数を集計
124
+ let suitCount = 0;
125
+ for (let i = 0; i < SUIT_NUM; i++) {
126
+ suitCount += hand[offset + i] ?? 0;
127
+ }
128
+ // 赤ドラも数える
129
+ if (suit === 0)
130
+ suitCount += hand[RED_MANZU_ID] ?? 0;
131
+ if (suit === 1)
132
+ suitCount += hand[RED_PINZU_ID] ?? 0;
133
+ if (suit === 2)
134
+ suitCount += hand[RED_SOUZU_ID] ?? 0;
135
+ if (suitCount !== 14)
136
+ continue;
137
+ // 1112345678999のベース (各牌最低枚数)
138
+ const base = [3, 1, 1, 1, 1, 1, 1, 1, 3];
139
+ let ok = true;
140
+ for (let i = 0; i < SUIT_NUM; i++) {
141
+ let count = hand[offset + i] ?? 0;
142
+ // 赤ドラ (5の位置 = i===4)
143
+ if (i === 4) {
144
+ if (suit === 0)
145
+ count += hand[RED_MANZU_ID] ?? 0;
146
+ if (suit === 1)
147
+ count += hand[RED_PINZU_ID] ?? 0;
148
+ if (suit === 2)
149
+ count += hand[RED_SOUZU_ID] ?? 0;
150
+ }
151
+ if (count < base[i]) {
152
+ ok = false;
153
+ break;
154
+ }
155
+ }
156
+ if (ok)
157
+ return true;
158
+ }
159
+ return false;
160
+ }
161
+ // ── 2翻役判定 ──
162
+ /** 三色同順: 3色の同番号順子 */
163
+ function isSanshokuDoujun(mentsu) {
164
+ const shuntsuList = mentsu.filter((m) => m.type === "shuntsu");
165
+ // tile % 9 が同じで、色が 0,1,2 の3つ揃う
166
+ for (const s of shuntsuList) {
167
+ const num = s.tile % SUIT_NUM;
168
+ const suits = new Set();
169
+ for (const s2 of shuntsuList) {
170
+ if (s2.tile % SUIT_NUM === num) {
171
+ suits.add(getSuitIndex(s2.tile));
172
+ }
173
+ }
174
+ if (suits.has(0) && suits.has(1) && suits.has(2))
175
+ return true;
176
+ }
177
+ return false;
178
+ }
179
+ /** 一気通貫: 同色で tile%9=0, tile%9=3, tile%9=6 の順子3組 */
180
+ function isIkkitsuu(mentsu) {
181
+ const shuntsuList = mentsu.filter((m) => m.type === "shuntsu");
182
+ for (let suit = 0; suit < 3; suit++) {
183
+ const suitShuntsu = shuntsuList.filter((s) => getSuitIndex(s.tile) === suit);
184
+ const nums = new Set(suitShuntsu.map((s) => s.tile % SUIT_NUM));
185
+ if (nums.has(0) && nums.has(3) && nums.has(6))
186
+ return true;
187
+ }
188
+ return false;
189
+ }
190
+ /** 対々和: 面子4つ全てが刻子 */
191
+ function isToitoi(mentsu) {
192
+ return mentsu.every((m) => m.type === "koutsu");
193
+ }
194
+ /** 三暗刻: 刻子が3つ */
195
+ function isSanankou(mentsu) {
196
+ return mentsu.filter((m) => m.type === "koutsu").length === 3;
197
+ }
198
+ /** 三色同刻: 3色の同番号刻子 */
199
+ function isSanshokuDoukou(mentsu) {
200
+ const koutsuList = mentsu.filter((m) => m.type === "koutsu");
201
+ for (const k of koutsuList) {
202
+ if (k.tile >= JIHAI_OFFSET)
203
+ continue; // 字牌はスキップ
204
+ const num = k.tile % SUIT_NUM;
205
+ const suits = new Set();
206
+ for (const k2 of koutsuList) {
207
+ if (k2.tile < JIHAI_OFFSET && k2.tile % SUIT_NUM === num) {
208
+ suits.add(getSuitIndex(k2.tile));
209
+ }
210
+ }
211
+ if (suits.has(0) && suits.has(1) && suits.has(2))
212
+ return true;
213
+ }
214
+ return false;
215
+ }
216
+ /** 混全帯么九: 全ブロック(面子+雀頭)に么九牌含む + 順子あり */
217
+ function isChanta(decomp) {
218
+ const hasShuntsu = decomp.mentsu.some((m) => m.type === "shuntsu");
219
+ if (!hasShuntsu)
220
+ return false;
221
+ // 雀頭が么九牌
222
+ if (!isYaochu(decomp.jantou))
223
+ return false;
224
+ // 全面子が么九牌を含む
225
+ return decomp.mentsu.every((m) => mentsuContainsYaochu(m));
226
+ }
227
+ /** 純全帯么九: 全ブロックに老頭牌(1,9の数牌)含む + 順子あり + 字牌なし */
228
+ function isJunchan(decomp) {
229
+ const hasShuntsu = decomp.mentsu.some((m) => m.type === "shuntsu");
230
+ if (!hasShuntsu)
231
+ return false;
232
+ // 雀頭が老頭牌
233
+ if (!isTerminal(decomp.jantou))
234
+ return false;
235
+ // 全面子が老頭牌を含む
236
+ if (!decomp.mentsu.every((m) => mentsuContainsTerminal(m)))
237
+ return false;
238
+ // 字牌を含まない
239
+ const suits = getUsedSuits(decomp);
240
+ if (suits.has(3))
241
+ return false;
242
+ return true;
243
+ }
244
+ /** 小三元: 三元牌の刻子2つ + 三元牌の雀頭 */
245
+ function isShousangen(decomp) {
246
+ const sangenTiles = [HAKU, HATSU, CHUN];
247
+ const sangenKoutsu = decomp.mentsu.filter((m) => m.type === "koutsu" && sangenTiles.includes(m.tile)).length;
248
+ const sangenJantou = sangenTiles.includes(decomp.jantou);
249
+ return sangenKoutsu === 2 && sangenJantou;
250
+ }
251
+ /** 混老頭: 么九牌のみ(全面子が刻子+么九、雀頭も么九) */
252
+ function isHonroutou(decomp) {
253
+ if (!isYaochu(decomp.jantou))
254
+ return false;
255
+ return decomp.mentsu.every((m) => m.type === "koutsu" && isYaochu(m.tile));
256
+ }
257
+ // ── 3翻役判定 ──
258
+ /** 二盃口: 同一順子2組 × 2セット */
259
+ function isRyanpeikou(decomp) {
260
+ const shuntsuList = decomp.mentsu.filter((m) => m.type === "shuntsu");
261
+ if (shuntsuList.length !== 4)
262
+ return false;
263
+ // 順子のtileでグループ分け
264
+ const counts = new Map();
265
+ for (const s of shuntsuList) {
266
+ counts.set(s.tile, (counts.get(s.tile) ?? 0) + 1);
267
+ }
268
+ // ちょうど2種類で、それぞれ2組ずつ
269
+ const values = [...counts.values()];
270
+ if (values.length === 2 && values.every((v) => v === 2))
271
+ return true;
272
+ // 4枚同じ順子も二盃口 (例: 1234m×4 的なケースはないが一応)
273
+ if (values.length === 1 && values[0] === 4)
274
+ return true;
275
+ return false;
276
+ }
277
+ /** 混一色: 1色の数牌 + 字牌のみ */
278
+ function isHonitsu(decomp) {
279
+ const suits = getUsedSuits(decomp);
280
+ // 字牌を除いた数牌が1色のみ
281
+ const numSuits = new Set([...suits].filter((s) => s !== 3));
282
+ return numSuits.size === 1 && suits.has(3);
283
+ }
284
+ /** 清一色: 1色の数牌のみ(字牌なし) */
285
+ function isChinitsu(decomp) {
286
+ const suits = getUsedSuits(decomp);
287
+ return suits.size === 1 && !suits.has(3);
288
+ }
289
+ // ── 七対子用 ──
290
+ function isChiitoiHonitsu(pairs) {
291
+ const suits = getUsedSuitsChiitoi(pairs);
292
+ const numSuits = new Set([...suits].filter((s) => s !== 3));
293
+ return numSuits.size === 1 && suits.has(3);
294
+ }
295
+ function isChiitoiChinitsu(pairs) {
296
+ const suits = getUsedSuitsChiitoi(pairs);
297
+ return suits.size === 1 && !suits.has(3);
298
+ }
299
+ function isChiitoiHonroutou(pairs) {
300
+ return pairs.every((t) => isYaochu(t));
301
+ }
302
+ function isChiitoiTsuuiisou(pairs) {
303
+ return pairs.every((t) => t >= JIHAI_OFFSET);
304
+ }
305
+ // ── 既存判定関数 ──
306
+ function isChiitoiTanyao(pairs) {
307
+ return pairs.every((t) => !isYaochu(t));
308
+ }
309
+ function isTanyao(decomposition) {
310
+ if (isYaochu(decomposition.jantou))
311
+ return false;
312
+ for (const m of decomposition.mentsu) {
313
+ if (m.type === "koutsu") {
314
+ if (isYaochu(m.tile))
315
+ return false;
316
+ }
317
+ else {
318
+ if (isYaochu(m.tile) || isYaochu(m.tile + 2))
319
+ return false;
320
+ }
321
+ }
322
+ return true;
323
+ }
324
+ function isPinfu(decomposition, waitType, context) {
325
+ if (!decomposition.mentsu.every((m) => m.type === "shuntsu"))
326
+ return false;
327
+ const j = decomposition.jantou;
328
+ if (j === HAKU || j === HATSU || j === CHUN)
329
+ return false;
330
+ if (j === context.roundWind)
331
+ return false;
332
+ if (j === context.seatWind)
333
+ return false;
334
+ return waitType === "ryanmen";
335
+ }
336
+ function isIipeiko(decomposition) {
337
+ const shuntsuList = decomposition.mentsu.filter((m) => m.type === "shuntsu");
338
+ for (let i = 0; i < shuntsuList.length; i++) {
339
+ for (let j = i + 1; j < shuntsuList.length; j++) {
340
+ if (shuntsuList[i].tile === shuntsuList[j].tile)
341
+ return true;
342
+ }
343
+ }
344
+ return false;
345
+ }
346
+ function hasKoutsu(decomposition, tile) {
347
+ return decomposition.mentsu.some((m) => m.type === "koutsu" && m.tile === tile);
348
+ }
349
+ // ── メイン関数 ──
350
+ /**
351
+ * 役を判定する (ツモ和了・門前専用)
352
+ */
353
+ export function evaluateYaku(decomposition, agariTile, waitType, hand, context) {
354
+ const yaku = [];
355
+ if (decomposition.kind === "chiitoi") {
356
+ // === 七対子 ===
357
+ const pairs = decomposition.pairs;
358
+ // 役満: 字一色
359
+ if (isChiitoiTsuuiisou(pairs)) {
360
+ const yakuman = [{ name: "字一色", han: 13 }];
361
+ return yakuman;
362
+ }
363
+ yaku.push({ name: "七対子", han: 2 });
364
+ // タンヤオ
365
+ if (isChiitoiTanyao(pairs)) {
366
+ yaku.push({ name: "断么九", han: 1 });
367
+ }
368
+ // 混老頭 (么九牌のみのトイツ)
369
+ if (isChiitoiHonroutou(pairs)) {
370
+ yaku.push({ name: "混老頭", han: 2 });
371
+ }
372
+ // 清一色 vs 混一色 (排他)
373
+ if (isChiitoiChinitsu(pairs)) {
374
+ yaku.push({ name: "清一色", han: 6 });
375
+ }
376
+ else if (isChiitoiHonitsu(pairs)) {
377
+ yaku.push({ name: "混一色", han: 3 });
378
+ }
379
+ }
380
+ else {
381
+ // === 通常手 ===
382
+ // 1. 役満判定(先にチェック)
383
+ const yakuman = checkYakuman(decomposition, hand, context);
384
+ if (yakuman.length > 0) {
385
+ return yakuman; // 役満のみ返す
386
+ }
387
+ // 2. 通常役判定
388
+ // 門前清自摸和 (常に成立)
389
+ yaku.push({ name: "門前清自摸和", han: 1 });
390
+ // 立直
391
+ if (context.riichi) {
392
+ yaku.push({ name: "立直", han: 1 });
393
+ }
394
+ // 断么九
395
+ if (isTanyao(decomposition)) {
396
+ yaku.push({ name: "断么九", han: 1 });
397
+ }
398
+ // 平和
399
+ if (isPinfu(decomposition, waitType, context)) {
400
+ yaku.push({ name: "平和", han: 1 });
401
+ }
402
+ // 二盃口 → 一盃口(排他)
403
+ if (isRyanpeikou(decomposition)) {
404
+ yaku.push({ name: "二盃口", han: 3 });
405
+ }
406
+ else if (isIipeiko(decomposition)) {
407
+ yaku.push({ name: "一盃口", han: 1 });
408
+ }
409
+ // 役牌 (三元牌)
410
+ for (const [tile, name] of [[HAKU, "役牌(白)"], [HATSU, "役牌(發)"], [CHUN, "役牌(中)"]]) {
411
+ if (hasKoutsu(decomposition, tile)) {
412
+ yaku.push({ name, han: 1 });
413
+ }
414
+ }
415
+ // 場風牌
416
+ if (hasKoutsu(decomposition, context.roundWind)) {
417
+ yaku.push({ name: "場風牌", han: 1 });
418
+ }
419
+ // 自風牌
420
+ if (hasKoutsu(decomposition, context.seatWind)) {
421
+ yaku.push({ name: "自風牌", han: 1 });
422
+ }
423
+ // 三色同順
424
+ if (isSanshokuDoujun(decomposition.mentsu)) {
425
+ yaku.push({ name: "三色同順", han: 2 });
426
+ }
427
+ // 一気通貫
428
+ if (isIkkitsuu(decomposition.mentsu)) {
429
+ yaku.push({ name: "一気通貫", han: 2 });
430
+ }
431
+ // 対々和
432
+ if (isToitoi(decomposition.mentsu)) {
433
+ yaku.push({ name: "対々和", han: 2 });
434
+ }
435
+ // 三暗刻
436
+ if (isSanankou(decomposition.mentsu)) {
437
+ yaku.push({ name: "三暗刻", han: 2 });
438
+ }
439
+ // 三色同刻
440
+ if (isSanshokuDoukou(decomposition.mentsu)) {
441
+ yaku.push({ name: "三色同刻", han: 2 });
442
+ }
443
+ // 純全帯么九 vs 混全帯么九(排他)
444
+ if (isJunchan(decomposition)) {
445
+ yaku.push({ name: "純全帯么九", han: 3 });
446
+ }
447
+ else if (isChanta(decomposition)) {
448
+ yaku.push({ name: "混全帯么九", han: 2 });
449
+ }
450
+ // 小三元
451
+ if (isShousangen(decomposition)) {
452
+ yaku.push({ name: "小三元", han: 2 });
453
+ }
454
+ // 清一色 vs 混一色(排他)
455
+ if (isChinitsu(decomposition)) {
456
+ yaku.push({ name: "清一色", han: 6 });
457
+ }
458
+ else if (isHonitsu(decomposition)) {
459
+ yaku.push({ name: "混一色", han: 3 });
460
+ }
461
+ // 混老頭 (対々和と複合)
462
+ if (isHonroutou(decomposition)) {
463
+ yaku.push({ name: "混老頭", han: 2 });
464
+ }
465
+ }
466
+ // ドラ (通常手・七対子共通)
467
+ let doraCount = 0;
468
+ for (const indicator of context.doraIndicators) {
469
+ const doraTile = nextTile(indicator);
470
+ doraCount += hand[doraTile] ?? 0;
471
+ if (doraTile === 4)
472
+ doraCount += hand[RED_MANZU_ID] ?? 0;
473
+ if (doraTile === 13)
474
+ doraCount += hand[RED_PINZU_ID] ?? 0;
475
+ if (doraTile === 22)
476
+ doraCount += hand[RED_SOUZU_ID] ?? 0;
477
+ }
478
+ if (doraCount > 0) {
479
+ yaku.push({ name: "ドラ", han: doraCount });
480
+ }
481
+ // 赤ドラ
482
+ if (context.useRedDora) {
483
+ const redCount = (hand[RED_MANZU_ID] ?? 0) + (hand[RED_PINZU_ID] ?? 0) + (hand[RED_SOUZU_ID] ?? 0);
484
+ if (redCount > 0) {
485
+ yaku.push({ name: "赤ドラ", han: redCount });
486
+ }
487
+ }
488
+ return yaku;
489
+ }
490
+ //# sourceMappingURL=yaku.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"yaku.js","sourceRoot":"","sources":["../../src/scoring/yaku.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,9 @@
1
+ /**
2
+ * URLからテーブルバイナリを取得して初期化する(ブラウザ向け)
3
+ *
4
+ * @example
5
+ * ```typescript
6
+ * await initFromUrl("/suit-table.bin", "/honor-table.bin");
7
+ * ```
8
+ */
9
+ export declare function initFromUrl(suitUrl: string, honorUrl: string): Promise<void>;
@@ -0,0 +1,26 @@
1
+ import { setSuitTable, setHonorTable } from "./lookup-table.js";
2
+ /**
3
+ * URLからテーブルバイナリを取得して初期化する(ブラウザ向け)
4
+ *
5
+ * @example
6
+ * ```typescript
7
+ * await initFromUrl("/suit-table.bin", "/honor-table.bin");
8
+ * ```
9
+ */
10
+ export async function initFromUrl(suitUrl, honorUrl) {
11
+ const [suitBuf, honorBuf] = await Promise.all([
12
+ fetch(suitUrl).then((res) => {
13
+ if (!res.ok)
14
+ throw new Error(`Failed to fetch suit table: ${res.status}`);
15
+ return res.arrayBuffer();
16
+ }),
17
+ fetch(honorUrl).then((res) => {
18
+ if (!res.ok)
19
+ throw new Error(`Failed to fetch honor table: ${res.status}`);
20
+ return res.arrayBuffer();
21
+ }),
22
+ ]);
23
+ setSuitTable(new Int8Array(suitBuf));
24
+ setHonorTable(new Int8Array(honorBuf));
25
+ }
26
+ //# sourceMappingURL=init.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"init.js","sourceRoot":"","sources":["../../src/shanten/init.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,YAAY,EAAE,aAAa,EAAE,MAAM,mBAAmB,CAAC;AAEhE;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,WAAW,CAAC,OAAe,EAAE,QAAgB;IACjE,MAAM,CAAC,OAAO,EAAE,QAAQ,CAAC,GAAG,MAAM,OAAO,CAAC,GAAG,CAAC;QAC5C,KAAK,CAAC,OAAO,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAC1B,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,+BAA+B,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC1E,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC;QACF,KAAK,CAAC,QAAQ,CAAC,CAAC,IAAI,CAAC,CAAC,GAAG,EAAE,EAAE;YAC3B,IAAI,CAAC,GAAG,CAAC,EAAE;gBAAE,MAAM,IAAI,KAAK,CAAC,gCAAgC,GAAG,CAAC,MAAM,EAAE,CAAC,CAAC;YAC3E,OAAO,GAAG,CAAC,WAAW,EAAE,CAAC;QAC3B,CAAC,CAAC;KACH,CAAC,CAAC;IAEH,YAAY,CAAC,IAAI,SAAS,CAAC,OAAO,CAAC,CAAC,CAAC;IACrC,aAAa,CAAC,IAAI,SAAS,CAAC,QAAQ,CAAC,CAAC,CAAC;AACzC,CAAC"}
@@ -0,0 +1,37 @@
1
+ /**
2
+ * 数牌用テーブルを取得する(遅延生成)
3
+ */
4
+ export declare function getSuitTable(): Int8Array;
5
+ /**
6
+ * 字牌用テーブルを取得する(遅延生成)
7
+ */
8
+ export declare function getHonorTable(): Int8Array;
9
+ /**
10
+ * 外部から数牌テーブルを注入する(Webアプリ向け)
11
+ */
12
+ export declare function setSuitTable(table: Int8Array): void;
13
+ /**
14
+ * 外部から字牌テーブルを注入する(Webアプリ向け)
15
+ */
16
+ export declare function setHonorTable(table: Int8Array): void;
17
+ /**
18
+ * テーブルが初期化済みかどうかを返す
19
+ */
20
+ export declare function isInitialized(): boolean;
21
+ /**
22
+ * テーブルをリセットする(テスト用)
23
+ * @internal
24
+ */
25
+ export declare function _resetTables(): void;
26
+ /**
27
+ * 牌パターンからテーブルインデックスを計算する
28
+ */
29
+ export declare function toIndex(suitHand: number[]): number;
30
+ /**
31
+ * テーブルから値を参照する
32
+ * @param table テーブル
33
+ * @param index パターンインデックス
34
+ * @param mentsu 面子数 (0-4)
35
+ * @param withJantou 雀頭ありかどうか
36
+ */
37
+ export declare function lookupTable(table: Int8Array, index: number, mentsu: number, withJantou: boolean): number;