mahjong_engine 1.1.3 → 1.1.5
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.
- package/.github/workflows/qlty-coverage.yml +2 -2
- package/dist/BlockDivider.d.ts +11 -0
- package/dist/BlockDivider.d.ts.map +1 -0
- package/dist/BlockDivider.js +109 -0
- package/dist/BlockDivider.js.map +1 -0
- package/dist/BlockHais.d.ts +27 -0
- package/dist/BlockHais.d.ts.map +1 -0
- package/dist/BlockHais.js +78 -0
- package/dist/BlockHais.js.map +1 -0
- package/dist/BlockHaisList.d.ts +19 -0
- package/dist/BlockHaisList.d.ts.map +1 -0
- package/dist/BlockHaisList.js +81 -0
- package/dist/BlockHaisList.js.map +1 -0
- package/dist/Hai.d.ts +16 -0
- package/dist/Hai.d.ts.map +1 -0
- package/dist/Hai.js +67 -0
- package/dist/Hai.js.map +1 -0
- package/dist/Hais.d.ts +15 -0
- package/dist/Hais.d.ts.map +1 -0
- package/dist/Hais.js +40 -0
- package/dist/Hais.js.map +1 -0
- package/dist/IMentsu.d.ts +20 -0
- package/dist/IMentsu.d.ts.map +1 -0
- package/dist/IMentsu.js +2 -0
- package/dist/IMentsu.js.map +1 -0
- package/dist/MachiCalculator.d.ts +9 -0
- package/dist/MachiCalculator.d.ts.map +1 -0
- package/dist/MachiCalculator.js +49 -0
- package/dist/MachiCalculator.js.map +1 -0
- package/dist/MahjongConsts.d.ts +43 -0
- package/dist/MahjongConsts.d.ts.map +1 -0
- package/dist/MahjongConsts.js +55 -0
- package/dist/MahjongConsts.js.map +1 -0
- package/dist/Meld.d.ts +26 -0
- package/dist/Meld.d.ts.map +1 -0
- package/dist/Meld.js +71 -0
- package/dist/Meld.js.map +1 -0
- package/dist/Melds.d.ts +9 -0
- package/dist/Melds.d.ts.map +1 -0
- package/dist/Melds.js +14 -0
- package/dist/Melds.js.map +1 -0
- package/dist/MentsuAnalyzer.d.ts +11 -0
- package/dist/MentsuAnalyzer.d.ts.map +1 -0
- package/dist/MentsuAnalyzer.js +19 -0
- package/dist/MentsuAnalyzer.js.map +1 -0
- package/dist/PlayerContext.d.ts +30 -0
- package/dist/PlayerContext.d.ts.map +1 -0
- package/dist/PlayerContext.js +26 -0
- package/dist/PlayerContext.js.map +1 -0
- package/dist/PlayerHand.d.ts +12 -0
- package/dist/PlayerHand.d.ts.map +1 -0
- package/dist/PlayerHand.js +24 -0
- package/dist/PlayerHand.js.map +1 -0
- package/dist/ShantenCalculator.d.ts +14 -0
- package/dist/ShantenCalculator.d.ts.map +1 -0
- package/dist/ShantenCalculator.js +108 -0
- package/dist/ShantenCalculator.js.map +1 -0
- package/dist/index.d.ts +19 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +18 -0
- package/dist/index.js.map +1 -0
- package/dist/modules/ShantenCalculator.d.ts +3 -3
- package/dist/modules/ShantenCalculator.d.ts.map +1 -1
- package/dist/modules/ShantenCalculator.js +2 -2
- package/dist/modules/ShantenCalculator.js.map +1 -1
- package/dist/modules/tensuu/FuCalculator.d.ts +2 -1
- package/dist/modules/tensuu/FuCalculator.d.ts.map +1 -1
- package/dist/modules/tensuu/FuCalculator.js.map +1 -1
- package/dist/modules/tensuu/ScoreResolver.d.ts +3 -3
- package/dist/modules/tensuu/ScoreResolver.d.ts.map +1 -1
- package/dist/modules/tensuu/ScoreResolver.js +18 -11
- package/dist/modules/tensuu/ScoreResolver.js.map +1 -1
- package/dist/modules/tensuu/ScoreResult.d.ts +10 -1
- package/dist/modules/tensuu/ScoreResult.d.ts.map +1 -1
- package/dist/modules/tensuu/ScoreResult.js +7 -7
- package/dist/modules/tensuu/ScoreResult.js.map +1 -1
- package/dist/modules/tensuu/TensuuCalculator.d.ts +7 -2
- package/dist/modules/tensuu/TensuuCalculator.d.ts.map +1 -1
- package/dist/modules/tensuu/TensuuCalculator.js +8 -4
- package/dist/modules/tensuu/TensuuCalculator.js.map +1 -1
- package/dist/modules/yaku/NormalYakuChecker.d.ts +2 -1
- package/dist/modules/yaku/NormalYakuChecker.d.ts.map +1 -1
- package/dist/modules/yaku/NormalYakuChecker.js +10 -9
- package/dist/modules/yaku/NormalYakuChecker.js.map +1 -1
- package/dist/modules/yaku/YakuChecker.d.ts +2 -1
- package/dist/modules/yaku/YakuChecker.d.ts.map +1 -1
- package/dist/modules/yaku/YakuChecker.js +5 -4
- package/dist/modules/yaku/YakuChecker.js.map +1 -1
- package/dist/modules/yaku/YakuDetail.d.ts +7 -0
- package/dist/modules/yaku/YakuDetail.d.ts.map +1 -0
- package/dist/modules/yaku/YakuDetail.js +11 -0
- package/dist/modules/yaku/YakuDetail.js.map +1 -0
- package/dist/modules/yaku/YakuDetails.d.ts +13 -0
- package/dist/modules/yaku/YakuDetails.d.ts.map +1 -0
- package/dist/modules/yaku/YakuDetails.js +32 -0
- package/dist/modules/yaku/YakuDetails.js.map +1 -0
- package/dist/modules/yaku/YakumanChecker.d.ts +2 -1
- package/dist/modules/yaku/YakumanChecker.d.ts.map +1 -1
- package/dist/modules/yaku/YakumanChecker.js +8 -7
- package/dist/modules/yaku/YakumanChecker.js.map +1 -1
- package/dist/tensuu/FuCalculator.d.ts +15 -0
- package/dist/tensuu/FuCalculator.d.ts.map +1 -0
- package/dist/tensuu/FuCalculator.js +105 -0
- package/dist/tensuu/FuCalculator.js.map +1 -0
- package/dist/tensuu/FuDetail.d.ts +10 -0
- package/dist/tensuu/FuDetail.d.ts.map +1 -0
- package/dist/tensuu/FuDetail.js +13 -0
- package/dist/tensuu/FuDetail.js.map +1 -0
- package/dist/tensuu/ScoreResolver.d.ts +14 -0
- package/dist/tensuu/ScoreResolver.d.ts.map +1 -0
- package/dist/tensuu/ScoreResolver.js +40 -0
- package/dist/tensuu/ScoreResolver.js.map +1 -0
- package/dist/tensuu/ScoreResult.d.ts +12 -0
- package/dist/tensuu/ScoreResult.d.ts.map +1 -0
- package/dist/tensuu/ScoreResult.js +17 -0
- package/dist/tensuu/ScoreResult.js.map +1 -0
- package/dist/tensuu/TensuuCalculator.d.ts +14 -0
- package/dist/tensuu/TensuuCalculator.d.ts.map +1 -0
- package/dist/tensuu/TensuuCalculator.js +39 -0
- package/dist/tensuu/TensuuCalculator.js.map +1 -0
- package/dist/tensuu/TensuuResult.d.ts +15 -0
- package/dist/tensuu/TensuuResult.d.ts.map +1 -0
- package/dist/tensuu/TensuuResult.js +15 -0
- package/dist/tensuu/TensuuResult.js.map +1 -0
- package/dist/tests/hanName.test.js +2 -1
- package/dist/tests/hanName.test.js.map +1 -1
- package/dist/tests/shanten/chitoitsu.d.ts +6 -0
- package/dist/tests/shanten/chitoitsu.d.ts.map +1 -0
- package/dist/tests/shanten/chitoitsu.js +43 -0
- package/dist/tests/shanten/chitoitsu.js.map +1 -0
- package/dist/tests/shanten/kokushi.d.ts +6 -0
- package/dist/tests/shanten/kokushi.d.ts.map +1 -0
- package/dist/tests/shanten/kokushi.js +23 -0
- package/dist/tests/shanten/kokushi.js.map +1 -0
- package/dist/tests/shanten/normal.d.ts +6 -0
- package/dist/tests/shanten/normal.d.ts.map +1 -0
- package/dist/tests/shanten/normal.js +118 -0
- package/dist/tests/shanten/normal.js.map +1 -0
- package/dist/tests/shanten.test.js +6 -2
- package/dist/tests/shanten.test.js.map +1 -1
- package/dist/tests/tensuu/fu.d.ts.map +1 -1
- package/dist/tests/tensuu/fu.js +2 -22
- package/dist/tests/tensuu/fu.js.map +1 -1
- package/dist/tests/tensuu/hanName.d.ts.map +1 -1
- package/dist/tests/tensuu/hanName.js +33 -0
- package/dist/tests/tensuu/hanName.js.map +1 -1
- package/dist/tests/tensuu/tensuuNum.d.ts.map +1 -1
- package/dist/tests/tensuu/tensuuNum.js +20 -0
- package/dist/tests/tensuu/tensuuNum.js.map +1 -1
- package/dist/tests/tensuuFromNum.test.js +1 -1
- package/dist/tests/tensuuFromNum.test.js.map +1 -1
- package/dist/tests/testConsts.d.ts +2 -0
- package/dist/tests/testConsts.d.ts.map +1 -1
- package/dist/tests/yaku.test.js +3 -3
- package/dist/tests/yaku.test.js.map +1 -1
- package/dist/tileDefs.d.ts +42 -0
- package/dist/tileDefs.d.ts.map +1 -0
- package/dist/tileDefs.js +20 -0
- package/dist/tileDefs.js.map +1 -0
- package/dist/yaku/NormalYakuChecker.d.ts +7 -0
- package/dist/yaku/NormalYakuChecker.d.ts.map +1 -0
- package/dist/yaku/NormalYakuChecker.js +30 -0
- package/dist/yaku/NormalYakuChecker.js.map +1 -0
- package/dist/yaku/YakuChecker.d.ts +7 -0
- package/dist/yaku/YakuChecker.d.ts.map +1 -0
- package/dist/yaku/YakuChecker.js +23 -0
- package/dist/yaku/YakuChecker.js.map +1 -0
- package/dist/yaku/YakuCheckerBase.d.ts +33 -0
- package/dist/yaku/YakuCheckerBase.d.ts.map +1 -0
- package/dist/yaku/YakuCheckerBase.js +150 -0
- package/dist/yaku/YakuCheckerBase.js.map +1 -0
- package/dist/yaku/YakuContext.d.ts +14 -0
- package/dist/yaku/YakuContext.d.ts.map +1 -0
- package/dist/yaku/YakuContext.js +17 -0
- package/dist/yaku/YakuContext.js.map +1 -0
- package/dist/yaku/YakumanChecker.d.ts +7 -0
- package/dist/yaku/YakumanChecker.d.ts.map +1 -0
- package/dist/yaku/YakumanChecker.js +32 -0
- package/dist/yaku/YakumanChecker.js.map +1 -0
- package/dist/yaku/index.d.ts +6 -0
- package/dist/yaku/index.d.ts.map +1 -0
- package/dist/yaku/index.js +82 -0
- package/dist/yaku/index.js.map +1 -0
- package/dist/yaku/normal/ChinitsuChecker.d.ts +9 -0
- package/dist/yaku/normal/ChinitsuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/ChinitsuChecker.js +20 -0
- package/dist/yaku/normal/ChinitsuChecker.js.map +1 -0
- package/dist/yaku/normal/ChitoitsuChecker.d.ts +8 -0
- package/dist/yaku/normal/ChitoitsuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/ChitoitsuChecker.js +16 -0
- package/dist/yaku/normal/ChitoitsuChecker.js.map +1 -0
- package/dist/yaku/normal/DaburiiChecker.d.ts +8 -0
- package/dist/yaku/normal/DaburiiChecker.d.ts.map +1 -0
- package/dist/yaku/normal/DaburiiChecker.js +14 -0
- package/dist/yaku/normal/DaburiiChecker.js.map +1 -0
- package/dist/yaku/normal/DoukouChecker.d.ts +8 -0
- package/dist/yaku/normal/DoukouChecker.d.ts.map +1 -0
- package/dist/yaku/normal/DoukouChecker.js +13 -0
- package/dist/yaku/normal/DoukouChecker.js.map +1 -0
- package/dist/yaku/normal/HonchanChecker.d.ts +8 -0
- package/dist/yaku/normal/HonchanChecker.d.ts.map +1 -0
- package/dist/yaku/normal/HonchanChecker.js +18 -0
- package/dist/yaku/normal/HonchanChecker.js.map +1 -0
- package/dist/yaku/normal/HonitsuChecker.d.ts +8 -0
- package/dist/yaku/normal/HonitsuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/HonitsuChecker.js +16 -0
- package/dist/yaku/normal/HonitsuChecker.js.map +1 -0
- package/dist/yaku/normal/HonrotoChecker.d.ts +8 -0
- package/dist/yaku/normal/HonrotoChecker.d.ts.map +1 -0
- package/dist/yaku/normal/HonrotoChecker.js +17 -0
- package/dist/yaku/normal/HonrotoChecker.js.map +1 -0
- package/dist/yaku/normal/IipekoChecker.d.ts +8 -0
- package/dist/yaku/normal/IipekoChecker.d.ts.map +1 -0
- package/dist/yaku/normal/IipekoChecker.js +14 -0
- package/dist/yaku/normal/IipekoChecker.js.map +1 -0
- package/dist/yaku/normal/IppatsuChecker.d.ts +8 -0
- package/dist/yaku/normal/IppatsuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/IppatsuChecker.js +12 -0
- package/dist/yaku/normal/IppatsuChecker.js.map +1 -0
- package/dist/yaku/normal/IttsuuChecker.d.ts +8 -0
- package/dist/yaku/normal/IttsuuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/IttsuuChecker.js +21 -0
- package/dist/yaku/normal/IttsuuChecker.js.map +1 -0
- package/dist/yaku/normal/JunchanChecker.d.ts +8 -0
- package/dist/yaku/normal/JunchanChecker.d.ts.map +1 -0
- package/dist/yaku/normal/JunchanChecker.js +15 -0
- package/dist/yaku/normal/JunchanChecker.js.map +1 -0
- package/dist/yaku/normal/KazehaiChecker.d.ts +11 -0
- package/dist/yaku/normal/KazehaiChecker.d.ts.map +1 -0
- package/dist/yaku/normal/KazehaiChecker.js +20 -0
- package/dist/yaku/normal/KazehaiChecker.js.map +1 -0
- package/dist/yaku/normal/MenzenTsumoChecker.d.ts +8 -0
- package/dist/yaku/normal/MenzenTsumoChecker.d.ts.map +1 -0
- package/dist/yaku/normal/MenzenTsumoChecker.js +12 -0
- package/dist/yaku/normal/MenzenTsumoChecker.js.map +1 -0
- package/dist/yaku/normal/PinfuChecker.d.ts +8 -0
- package/dist/yaku/normal/PinfuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/PinfuChecker.js +26 -0
- package/dist/yaku/normal/PinfuChecker.js.map +1 -0
- package/dist/yaku/normal/RenpuuhaiChecker.d.ts +8 -0
- package/dist/yaku/normal/RenpuuhaiChecker.d.ts.map +1 -0
- package/dist/yaku/normal/RenpuuhaiChecker.js +18 -0
- package/dist/yaku/normal/RenpuuhaiChecker.js.map +1 -0
- package/dist/yaku/normal/RiichiChecker.d.ts +8 -0
- package/dist/yaku/normal/RiichiChecker.d.ts.map +1 -0
- package/dist/yaku/normal/RiichiChecker.js +14 -0
- package/dist/yaku/normal/RiichiChecker.js.map +1 -0
- package/dist/yaku/normal/RyanpekoChecker.d.ts +8 -0
- package/dist/yaku/normal/RyanpekoChecker.d.ts.map +1 -0
- package/dist/yaku/normal/RyanpekoChecker.js +14 -0
- package/dist/yaku/normal/RyanpekoChecker.js.map +1 -0
- package/dist/yaku/normal/SanankoChecker.d.ts +8 -0
- package/dist/yaku/normal/SanankoChecker.d.ts.map +1 -0
- package/dist/yaku/normal/SanankoChecker.js +13 -0
- package/dist/yaku/normal/SanankoChecker.js.map +1 -0
- package/dist/yaku/normal/SankantsuChecker.d.ts +8 -0
- package/dist/yaku/normal/SankantsuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/SankantsuChecker.js +13 -0
- package/dist/yaku/normal/SankantsuChecker.js.map +1 -0
- package/dist/yaku/normal/SanshokuChecker.d.ts +8 -0
- package/dist/yaku/normal/SanshokuChecker.d.ts.map +1 -0
- package/dist/yaku/normal/SanshokuChecker.js +13 -0
- package/dist/yaku/normal/SanshokuChecker.js.map +1 -0
- package/dist/yaku/normal/ShosangenChecker.d.ts +8 -0
- package/dist/yaku/normal/ShosangenChecker.d.ts.map +1 -0
- package/dist/yaku/normal/ShosangenChecker.js +16 -0
- package/dist/yaku/normal/ShosangenChecker.js.map +1 -0
- package/dist/yaku/normal/TanyaoChecker.d.ts +8 -0
- package/dist/yaku/normal/TanyaoChecker.d.ts.map +1 -0
- package/dist/yaku/normal/TanyaoChecker.js +14 -0
- package/dist/yaku/normal/TanyaoChecker.js.map +1 -0
- package/dist/yaku/normal/ToitoiChecker.d.ts +8 -0
- package/dist/yaku/normal/ToitoiChecker.d.ts.map +1 -0
- package/dist/yaku/normal/ToitoiChecker.js +13 -0
- package/dist/yaku/normal/ToitoiChecker.js.map +1 -0
- package/dist/yaku/normal/YakuhaiChecker.d.ts +9 -0
- package/dist/yaku/normal/YakuhaiChecker.d.ts.map +1 -0
- package/dist/yaku/normal/YakuhaiChecker.js +18 -0
- package/dist/yaku/normal/YakuhaiChecker.js.map +1 -0
- package/dist/yaku/yakuman/ChinrotoChecker.d.ts +6 -0
- package/dist/yaku/yakuman/ChinrotoChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/ChinrotoChecker.js +9 -0
- package/dist/yaku/yakuman/ChinrotoChecker.js.map +1 -0
- package/dist/yaku/yakuman/Churen9Checker.d.ts +10 -0
- package/dist/yaku/yakuman/Churen9Checker.d.ts.map +1 -0
- package/dist/yaku/yakuman/Churen9Checker.js +13 -0
- package/dist/yaku/yakuman/Churen9Checker.js.map +1 -0
- package/dist/yaku/yakuman/ChurenChecker.d.ts +7 -0
- package/dist/yaku/yakuman/ChurenChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/ChurenChecker.js +29 -0
- package/dist/yaku/yakuman/ChurenChecker.js.map +1 -0
- package/dist/yaku/yakuman/DaisangenChecker.d.ts +6 -0
- package/dist/yaku/yakuman/DaisangenChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/DaisangenChecker.js +11 -0
- package/dist/yaku/yakuman/DaisangenChecker.js.map +1 -0
- package/dist/yaku/yakuman/DaisushiChecker.d.ts +8 -0
- package/dist/yaku/yakuman/DaisushiChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/DaisushiChecker.js +16 -0
- package/dist/yaku/yakuman/DaisushiChecker.js.map +1 -0
- package/dist/yaku/yakuman/ExtendedYakumanChecker.d.ts +9 -0
- package/dist/yaku/yakuman/ExtendedYakumanChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/ExtendedYakumanChecker.js +14 -0
- package/dist/yaku/yakuman/ExtendedYakumanChecker.js.map +1 -0
- package/dist/yaku/yakuman/Kokushi13Checker.d.ts +10 -0
- package/dist/yaku/yakuman/Kokushi13Checker.d.ts.map +1 -0
- package/dist/yaku/yakuman/Kokushi13Checker.js +13 -0
- package/dist/yaku/yakuman/Kokushi13Checker.js.map +1 -0
- package/dist/yaku/yakuman/KokushiChecker.d.ts +7 -0
- package/dist/yaku/yakuman/KokushiChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/KokushiChecker.js +14 -0
- package/dist/yaku/yakuman/KokushiChecker.js.map +1 -0
- package/dist/yaku/yakuman/RyuisoChecker.d.ts +6 -0
- package/dist/yaku/yakuman/RyuisoChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/RyuisoChecker.js +13 -0
- package/dist/yaku/yakuman/RyuisoChecker.js.map +1 -0
- package/dist/yaku/yakuman/ShosushiChecker.d.ts +6 -0
- package/dist/yaku/yakuman/ShosushiChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/ShosushiChecker.js +11 -0
- package/dist/yaku/yakuman/ShosushiChecker.js.map +1 -0
- package/dist/yaku/yakuman/SuankoChecker.d.ts +7 -0
- package/dist/yaku/yakuman/SuankoChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/SuankoChecker.js +13 -0
- package/dist/yaku/yakuman/SuankoChecker.js.map +1 -0
- package/dist/yaku/yakuman/SuankoTankiChecker.d.ts +8 -0
- package/dist/yaku/yakuman/SuankoTankiChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/SuankoTankiChecker.js +24 -0
- package/dist/yaku/yakuman/SuankoTankiChecker.js.map +1 -0
- package/dist/yaku/yakuman/SukantsuChecker.d.ts +6 -0
- package/dist/yaku/yakuman/SukantsuChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/SukantsuChecker.js +8 -0
- package/dist/yaku/yakuman/SukantsuChecker.js.map +1 -0
- package/dist/yaku/yakuman/TsuisoChecker.d.ts +6 -0
- package/dist/yaku/yakuman/TsuisoChecker.d.ts.map +1 -0
- package/dist/yaku/yakuman/TsuisoChecker.js +9 -0
- package/dist/yaku/yakuman/TsuisoChecker.js.map +1 -0
- package/modules/ShantenCalculator.ts +5 -5
- package/modules/tensuu/FuCalculator.ts +3 -2
- package/modules/tensuu/ScoreResolver.ts +21 -14
- package/modules/tensuu/ScoreResult.ts +17 -14
- package/modules/tensuu/TensuuCalculator.ts +10 -5
- package/modules/yaku/NormalYakuChecker.ts +11 -10
- package/modules/yaku/YakuChecker.ts +6 -5
- package/modules/yaku/YakuDetail.ts +11 -0
- package/modules/yaku/YakuDetails.ts +42 -0
- package/modules/yaku/YakumanChecker.ts +9 -7
- package/package.json +1 -1
- package/tests/hanName.test.ts +2 -1
- package/tests/shanten/chitoitsu.ts +42 -0
- package/tests/shanten/kokushi.ts +23 -0
- package/tests/shanten/{test1.ts → normal.ts} +7 -32
- package/tests/shanten.test.ts +6 -2
- package/tests/tensuu/fu.ts +2 -22
- package/tests/tensuu/hanName.ts +33 -0
- package/tests/tensuu/tensuuNum.ts +20 -0
- package/tests/tensuuFromNum.test.ts +1 -1
- package/tests/testConsts.ts +3 -1
- package/tests/yaku.test.ts +7 -5
|
@@ -1,6 +1,15 @@
|
|
|
1
1
|
import { FuDetail } from "./FuDetail.js";
|
|
2
2
|
import { TensuuResult } from "./TensuuResult.js";
|
|
3
3
|
|
|
4
|
+
interface ScoreDetails {
|
|
5
|
+
han: number,
|
|
6
|
+
fuBasic: number,
|
|
7
|
+
fuCeiled: number,
|
|
8
|
+
tensuu: TensuuResult,
|
|
9
|
+
hanName: string,
|
|
10
|
+
fuDetail: FuDetail[]
|
|
11
|
+
}
|
|
12
|
+
|
|
4
13
|
export class ScoreResult{
|
|
5
14
|
public readonly han: number;
|
|
6
15
|
public readonly fuBasic: number;
|
|
@@ -9,19 +18,13 @@ export class ScoreResult{
|
|
|
9
18
|
public readonly hanName: string;
|
|
10
19
|
public readonly fuDetail: FuDetail[];
|
|
11
20
|
|
|
12
|
-
constructor(
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
this.han = han;
|
|
21
|
-
this.fuBasic = fuBasic;
|
|
22
|
-
this.fuCeiled = fuCeiled;
|
|
23
|
-
this.tensuu = tensuu;
|
|
24
|
-
this.hanName = hanName;
|
|
25
|
-
this.fuDetail = fuDetail;
|
|
21
|
+
constructor(details: ScoreDetails)
|
|
22
|
+
{
|
|
23
|
+
this.han = details.han;
|
|
24
|
+
this.fuBasic = details.fuBasic;
|
|
25
|
+
this.fuCeiled = details.fuCeiled;
|
|
26
|
+
this.tensuu = details.tensuu;
|
|
27
|
+
this.hanName = details.hanName;
|
|
28
|
+
this.fuDetail = details.fuDetail;
|
|
26
29
|
}
|
|
27
30
|
}
|
|
@@ -1,18 +1,22 @@
|
|
|
1
1
|
import { TensuuResult } from './TensuuResult.js';
|
|
2
2
|
|
|
3
3
|
export class TensuuCalculator{
|
|
4
|
-
static readonly
|
|
4
|
+
static readonly BASE_LIMITS_YAKUMAN = [
|
|
5
5
|
{han: 78, base: 48000, name: "六倍役満"},
|
|
6
6
|
{han: 65, base: 40000, name: "五倍役満"},
|
|
7
7
|
{han: 52, base: 32000, name: "四倍役満"},
|
|
8
8
|
{han: 39, base: 24000, name: "三倍役満"},
|
|
9
9
|
{han: 26, base: 16000, name: "二倍役満"},
|
|
10
|
-
{han: 13, base: 8000, name: "役満"}
|
|
10
|
+
{han: 13, base: 8000, name: "役満"}
|
|
11
|
+
];
|
|
12
|
+
static readonly BASE_LIMITS_NORMAL = [
|
|
13
|
+
{han: 13, base: 8000, name: "数え役満"},
|
|
11
14
|
{han: 11, base: 6000, name: "三倍満"},
|
|
12
15
|
{han: 8, base: 4000, name: "倍満"},
|
|
13
16
|
{han: 6, base: 3000, name: "跳満"},
|
|
14
17
|
{han: 5, base: 2000, name: "満貫"},
|
|
15
|
-
]
|
|
18
|
+
]
|
|
19
|
+
|
|
16
20
|
|
|
17
21
|
static calcBaseTensuu(han: number, fu: number): number{
|
|
18
22
|
return Math.min(fu * Math.pow(2, han + 2), 2000);
|
|
@@ -35,8 +39,9 @@ export class TensuuCalculator{
|
|
|
35
39
|
return new TensuuResult(base, ronOya, ronKo, tsumoOya, tsumoKo);
|
|
36
40
|
}
|
|
37
41
|
|
|
38
|
-
static calcTensuu(han: number, fu: number): TensuuResult{
|
|
39
|
-
|
|
42
|
+
static calcTensuu(han: number, fu: number, isYakuman: boolean): TensuuResult{
|
|
43
|
+
const limits = isYakuman ? this.BASE_LIMITS_YAKUMAN : this.BASE_LIMITS_NORMAL;
|
|
44
|
+
for(const limit of limits){
|
|
40
45
|
if(han >= limit.han) return this.calcTensuuFromBase(limit.base);
|
|
41
46
|
}
|
|
42
47
|
return this.calcTensuuFromBase(this.calcBaseTensuu(han, fu));
|
|
@@ -1,5 +1,6 @@
|
|
|
1
1
|
import { WinEvent } from '../MahjongConsts.js';
|
|
2
2
|
import { YakuContext } from './YakuContext.js';
|
|
3
|
+
import { YakuDetails } from './YakuDetails.js';
|
|
3
4
|
import { NormalYakuCheckers } from './index.js';
|
|
4
5
|
|
|
5
6
|
export class NormalYakuChecker{
|
|
@@ -10,22 +11,22 @@ export class NormalYakuChecker{
|
|
|
10
11
|
}
|
|
11
12
|
|
|
12
13
|
//役判定
|
|
13
|
-
check():
|
|
14
|
-
const
|
|
14
|
+
check(): YakuDetails {
|
|
15
|
+
const yakuDetails: YakuDetails = new YakuDetails();
|
|
15
16
|
for(const Checker of NormalYakuCheckers) {
|
|
16
17
|
const checker = Checker(this.context);
|
|
17
|
-
if(checker.check())
|
|
18
|
+
if(checker.check()) yakuDetails.add(checker.getName(), checker.getHan());
|
|
18
19
|
}
|
|
19
20
|
|
|
20
|
-
if(this.context.ctx.event === WinEvent.RINSHAN)
|
|
21
|
-
if(this.context.ctx.event === WinEvent.CHANKAN)
|
|
22
|
-
if(this.context.ctx.event === WinEvent.HAITEI)
|
|
23
|
-
if(this.context.ctx.event === WinEvent.HOUTEI)
|
|
21
|
+
if(this.context.ctx.event === WinEvent.RINSHAN) yakuDetails.add("嶺上開花", 1);
|
|
22
|
+
if(this.context.ctx.event === WinEvent.CHANKAN) yakuDetails.add("槍槓", 1);
|
|
23
|
+
if(this.context.ctx.event === WinEvent.HAITEI) yakuDetails.add("海底摸月", 1);
|
|
24
|
+
if(this.context.ctx.event === WinEvent.HOUTEI) yakuDetails.add("河底撈魚", 1);
|
|
24
25
|
|
|
25
|
-
if(
|
|
26
|
-
|
|
26
|
+
if(yakuDetails.length > 0 && this.context.ctx.dora > 0){
|
|
27
|
+
yakuDetails.add("ドラ", this.context.ctx.dora);
|
|
27
28
|
}
|
|
28
29
|
|
|
29
|
-
return
|
|
30
|
+
return yakuDetails;
|
|
30
31
|
}
|
|
31
32
|
}
|
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { YakumanChecker } from './YakumanChecker.js';
|
|
2
2
|
import { YakuContext } from './YakuContext.js';
|
|
3
3
|
import { NormalYakuChecker } from './NormalYakuChecker.js';
|
|
4
|
+
import { YakuDetails } from './YakuDetails.js';
|
|
4
5
|
|
|
5
6
|
export class YakuChecker {
|
|
6
7
|
private context: YakuContext
|
|
@@ -9,18 +10,18 @@ export class YakuChecker {
|
|
|
9
10
|
this.context = context;
|
|
10
11
|
}
|
|
11
12
|
|
|
12
|
-
check():
|
|
13
|
+
check(): YakuDetails {
|
|
13
14
|
//手牌と鳴き(カンを考慮して鳴き一つを3と数える)が計14枚かどうか確認する
|
|
14
15
|
const tehai_num = this.context.hais.length;
|
|
15
16
|
const furo_num = this.context.melds.length;
|
|
16
|
-
if(tehai_num + furo_num * 3 !== 14) return new
|
|
17
|
+
if(tehai_num + furo_num * 3 !== 14) return new YakuDetails();
|
|
17
18
|
|
|
18
|
-
const
|
|
19
|
-
if(
|
|
19
|
+
const yakumanDetails: YakuDetails = new YakumanChecker(this.context).check();
|
|
20
|
+
if(yakumanDetails.length === 0){
|
|
20
21
|
return new NormalYakuChecker(this.context).check();
|
|
21
22
|
}
|
|
22
23
|
else{
|
|
23
|
-
return
|
|
24
|
+
return yakumanDetails;
|
|
24
25
|
}
|
|
25
26
|
}
|
|
26
27
|
}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
export class YakuDetail{
|
|
2
|
+
readonly yakuName: string;
|
|
3
|
+
readonly han: number;
|
|
4
|
+
readonly isYakuman: boolean;
|
|
5
|
+
|
|
6
|
+
constructor(yakuName: string, han: number, isYakuman?: boolean){
|
|
7
|
+
this.yakuName = yakuName;
|
|
8
|
+
this.han = han;
|
|
9
|
+
this.isYakuman = isYakuman ?? false;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
import { YakuDetail } from "./YakuDetail";
|
|
2
|
+
|
|
3
|
+
export class YakuDetails{
|
|
4
|
+
private details: YakuDetail[];
|
|
5
|
+
|
|
6
|
+
constructor(details: YakuDetail[] = []) {
|
|
7
|
+
this.details = details;
|
|
8
|
+
}
|
|
9
|
+
|
|
10
|
+
add(yakuName: string, han: number, isYakuman?: boolean){
|
|
11
|
+
this.details.push(new YakuDetail(yakuName, han, isYakuman ?? false));
|
|
12
|
+
}
|
|
13
|
+
|
|
14
|
+
has(yakuName: string){
|
|
15
|
+
return this.details.some(detail => detail.yakuName === yakuName);
|
|
16
|
+
}
|
|
17
|
+
|
|
18
|
+
delete(yakuName: string){
|
|
19
|
+
this.details = this.details.filter(detail => detail.yakuName !== yakuName);
|
|
20
|
+
}
|
|
21
|
+
|
|
22
|
+
calcHonsuu(){
|
|
23
|
+
return this.details.reduce((sum, val) => sum + val.han, 0);
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
isIncludeYakuman(){
|
|
27
|
+
return this.details.some(detail => detail.isYakuman);
|
|
28
|
+
}
|
|
29
|
+
|
|
30
|
+
toMap(){
|
|
31
|
+
return new Map(
|
|
32
|
+
this.details.map(detail => [
|
|
33
|
+
detail.yakuName,
|
|
34
|
+
detail.han
|
|
35
|
+
])
|
|
36
|
+
);
|
|
37
|
+
}
|
|
38
|
+
|
|
39
|
+
get length(){
|
|
40
|
+
return this.details.length;
|
|
41
|
+
}
|
|
42
|
+
}
|
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { WinEvent } from '../MahjongConsts.js';
|
|
2
2
|
import { YakuContext } from './YakuContext.js';
|
|
3
|
+
import { YakuDetail } from './YakuDetail.js';
|
|
4
|
+
import { YakuDetails } from './YakuDetails.js';
|
|
3
5
|
import { YakumanCheckers } from './index.js';
|
|
4
6
|
|
|
5
7
|
export class YakumanChecker{
|
|
@@ -10,25 +12,25 @@ export class YakumanChecker{
|
|
|
10
12
|
}
|
|
11
13
|
|
|
12
14
|
//役判定
|
|
13
|
-
check():
|
|
15
|
+
check(): YakuDetails {
|
|
14
16
|
const excludes = [
|
|
15
17
|
{ main: "純正九蓮宝燈", sub: "九蓮宝燈"},
|
|
16
18
|
{ main: "四暗刻単騎", sub: "四暗刻"},
|
|
17
19
|
{ main: "国士無双13面待ち", sub: "国士無双"},
|
|
18
20
|
];
|
|
19
|
-
const
|
|
20
|
-
if(this.context.ctx.event === WinEvent.TENHO)
|
|
21
|
-
if(this.context.ctx.event === WinEvent.CHIHO)
|
|
21
|
+
const yakuDetails: YakuDetails = new YakuDetails();
|
|
22
|
+
if(this.context.ctx.event === WinEvent.TENHO) yakuDetails.add("天和", 13, true);
|
|
23
|
+
if(this.context.ctx.event === WinEvent.CHIHO) yakuDetails.add("地和", 13, true);
|
|
22
24
|
|
|
23
25
|
for(const Checker of YakumanCheckers) {
|
|
24
26
|
const checker = Checker(this.context);
|
|
25
|
-
if(checker.check())
|
|
27
|
+
if(checker.check()) yakuDetails.add(checker.getName(), checker.getHan(), true);
|
|
26
28
|
}
|
|
27
29
|
|
|
28
30
|
for(const { main, sub } of excludes) {
|
|
29
|
-
if(
|
|
31
|
+
if(yakuDetails.has(main)) yakuDetails.delete(sub);
|
|
30
32
|
}
|
|
31
33
|
|
|
32
|
-
return
|
|
34
|
+
return yakuDetails;
|
|
33
35
|
}
|
|
34
36
|
}
|
package/package.json
CHANGED
package/tests/hanName.test.ts
CHANGED
|
@@ -1,6 +1,7 @@
|
|
|
1
1
|
import { hanNameCase } from "./testConsts";
|
|
2
2
|
import { casesHanName } from './tensuu/hanName';
|
|
3
3
|
import { BlockHaisList, Hai, PlayerContext, PlayerHand, ScoreResolver, TILE, YakuContext } from "../modules";
|
|
4
|
+
import { YakuDetails } from "../modules/yaku/YakuDetails";
|
|
4
5
|
|
|
5
6
|
const testcases: hanNameCase[] = casesHanName;
|
|
6
7
|
|
|
@@ -11,7 +12,7 @@ testcases.forEach(testcase => {
|
|
|
11
12
|
new PlayerHand([], []),
|
|
12
13
|
new PlayerContext({agariHai: new Hai(TILE.BACK), isTsumo: false, playerWind: TILE.WIND.EAST, roundWind: TILE.WIND.EAST}),
|
|
13
14
|
new BlockHaisList());
|
|
14
|
-
const result = new ScoreResolver(contextStub, new
|
|
15
|
+
const result = new ScoreResolver(contextStub, new YakuDetails()).hanName(testcase.han, testcase.isYakuman);
|
|
15
16
|
expect(result).toEqual(testcase.expected);
|
|
16
17
|
});
|
|
17
18
|
});
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
export const casesChitoi = [
|
|
2
|
+
{
|
|
3
|
+
name: "chitoi_1",
|
|
4
|
+
hais: [1,1,4,4,9,9,13,13,17,17,21,21,28,28],
|
|
5
|
+
expected: -1
|
|
6
|
+
},
|
|
7
|
+
{
|
|
8
|
+
name: "chitoi_2",
|
|
9
|
+
hais: [1,1,4,4,9,9,13,13,17,17,21,21,28],
|
|
10
|
+
expected: 0
|
|
11
|
+
},
|
|
12
|
+
{
|
|
13
|
+
name: "chitoi_3",
|
|
14
|
+
hais: [2,2,2,6,6,9,9,14,14,19,19,21,21],
|
|
15
|
+
expected: 1
|
|
16
|
+
},
|
|
17
|
+
{
|
|
18
|
+
name: "chitoi_4",
|
|
19
|
+
hais: [2,2,2,5,7,9,9,14,14,19,19,21,21],
|
|
20
|
+
expected: 1
|
|
21
|
+
},
|
|
22
|
+
{
|
|
23
|
+
name: "chitoi_5",
|
|
24
|
+
hais: [1,1,1,5,5,9,9,13,13,18,18,23,23],
|
|
25
|
+
expected: 1
|
|
26
|
+
},
|
|
27
|
+
{
|
|
28
|
+
name: "chitoi_6",
|
|
29
|
+
hais: [2,2,2,2,7,9,9,14,14,19,19,21,21],
|
|
30
|
+
expected: 2
|
|
31
|
+
},
|
|
32
|
+
{
|
|
33
|
+
name: "chitoi_7",
|
|
34
|
+
hais: [2,2,2,2,7,9,11,14,14,19,19,21,21],
|
|
35
|
+
expected: 2
|
|
36
|
+
},
|
|
37
|
+
{
|
|
38
|
+
name: "chitoi_8",
|
|
39
|
+
hais: [1,4,9,11,14,19,21,23,24,28,29,30,31],
|
|
40
|
+
expected: 6
|
|
41
|
+
},
|
|
42
|
+
]
|
|
@@ -0,0 +1,23 @@
|
|
|
1
|
+
|
|
2
|
+
export const casesKokushi = [
|
|
3
|
+
{
|
|
4
|
+
name: "kokushi_1",
|
|
5
|
+
hais: [1,9,10,18,19,27,28,29,30,31,32,33,34],
|
|
6
|
+
expected: 0
|
|
7
|
+
},
|
|
8
|
+
{
|
|
9
|
+
name: "kokushi_2",
|
|
10
|
+
hais: [1,9,10,10,19,27,28,29,30,31,32,33,34],
|
|
11
|
+
expected: 0
|
|
12
|
+
},
|
|
13
|
+
{
|
|
14
|
+
name: "kokushi_3",
|
|
15
|
+
hais: [1,9,10,17,19,27,28,29,30,31,32,33,34],
|
|
16
|
+
expected: 1
|
|
17
|
+
},
|
|
18
|
+
{
|
|
19
|
+
name: "kokushi_4",
|
|
20
|
+
hais: [1,9,10,10,10,27,28,29,30,31,32,33,34],
|
|
21
|
+
expected: 1
|
|
22
|
+
},
|
|
23
|
+
]
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
export const
|
|
1
|
+
export const casesNormal = [
|
|
2
2
|
{
|
|
3
3
|
name: "naki_1_1",
|
|
4
4
|
hais: [1,2,3,4,5,6,7,8,10,11],
|
|
@@ -69,6 +69,11 @@ export const cases1 = [
|
|
|
69
69
|
hais: [1,2,3,4,5,6,7,28,28,31,31,32,32],
|
|
70
70
|
expected: 1
|
|
71
71
|
},
|
|
72
|
+
{
|
|
73
|
+
name: "shanten1_5",
|
|
74
|
+
hais: [1,1,1,1,4,4,4,4,7,7,7,7,9],
|
|
75
|
+
expected: 1
|
|
76
|
+
},
|
|
72
77
|
{
|
|
73
78
|
name: "shanten2_1",
|
|
74
79
|
hais: [1,1,1,2,5,11,12,12,13,14,15,17,18],
|
|
@@ -108,35 +113,5 @@ export const cases1 = [
|
|
|
108
113
|
name: "shanten6_3",
|
|
109
114
|
hais: [1,4,8,11,14,17,22,27,28,29,30,32,33],
|
|
110
115
|
expected: 6
|
|
111
|
-
}
|
|
112
|
-
{
|
|
113
|
-
name: "chitoi_1",
|
|
114
|
-
hais: [1,1,4,4,9,9,13,13,17,17,21,21,28,28],
|
|
115
|
-
expected: -1
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
name: "chitoi_2",
|
|
119
|
-
hais: [1,1,4,4,9,9,13,13,17,17,21,21,28],
|
|
120
|
-
expected: 0
|
|
121
|
-
},
|
|
122
|
-
{
|
|
123
|
-
name: "kokushi_1",
|
|
124
|
-
hais: [1,9,10,18,19,27,28,29,30,31,32,33,34],
|
|
125
|
-
expected: 0
|
|
126
|
-
},
|
|
127
|
-
{
|
|
128
|
-
name: "kokushi_2",
|
|
129
|
-
hais: [1,9,10,10,19,27,28,29,30,31,32,33,34],
|
|
130
|
-
expected: 0
|
|
131
|
-
},
|
|
132
|
-
{
|
|
133
|
-
name: "kokushi_3",
|
|
134
|
-
hais: [1,9,10,17,19,27,28,29,30,31,32,33,34],
|
|
135
|
-
expected: 1
|
|
136
|
-
},
|
|
137
|
-
{
|
|
138
|
-
name: "kokushi_4",
|
|
139
|
-
hais: [1,9,10,10,10,27,28,29,30,31,32,33,34],
|
|
140
|
-
expected: 1
|
|
141
|
-
},
|
|
116
|
+
}
|
|
142
117
|
]
|
package/tests/shanten.test.ts
CHANGED
|
@@ -1,5 +1,7 @@
|
|
|
1
1
|
import { Hai } from '../modules/Hai';
|
|
2
|
-
import {
|
|
2
|
+
import { casesNormal } from './shanten/normal';
|
|
3
|
+
import { casesChitoi } from './shanten/chitoitsu';
|
|
4
|
+
import { casesKokushi } from './shanten/kokushi';
|
|
3
5
|
import { ShantenCalculator } from '../modules/ShantenCalculator';
|
|
4
6
|
|
|
5
7
|
type ShantenCase = {
|
|
@@ -9,7 +11,9 @@ type ShantenCase = {
|
|
|
9
11
|
};
|
|
10
12
|
|
|
11
13
|
const testcases: Map<string, ShantenCase[]> = new Map();
|
|
12
|
-
testcases.set("
|
|
14
|
+
testcases.set("normal", casesNormal);
|
|
15
|
+
testcases.set("chitoitsu", casesChitoi);
|
|
16
|
+
testcases.set("kokushi", casesKokushi);
|
|
13
17
|
|
|
14
18
|
testcases.forEach((value, key) => {
|
|
15
19
|
describe(key, () => {
|
package/tests/tensuu/fu.ts
CHANGED
|
@@ -61,10 +61,8 @@ export const caseFu: TehaiCase<FuSpec[][]>[] = [
|
|
|
61
61
|
kuitan: true,
|
|
62
62
|
melds: [
|
|
63
63
|
{hai: 2, type: MeldType.CHI},
|
|
64
|
-
{hai: 4, type: MeldType.CHI},
|
|
65
|
-
{hai: 6, type: MeldType.CHI},
|
|
66
64
|
] as MeldSpec[],
|
|
67
|
-
hais: [12,13,14,16,16],
|
|
65
|
+
hais: [4,5,6,7,8,9,12,13,14,16,16],
|
|
68
66
|
expected: [
|
|
69
67
|
[{name: "喰い平和", fu: 30}]
|
|
70
68
|
] as FuSpec[][]
|
|
@@ -77,26 +75,8 @@ export const caseFu: TehaiCase<FuSpec[][]>[] = [
|
|
|
77
75
|
kuitan: true,
|
|
78
76
|
melds: [
|
|
79
77
|
{hai: 1, type: MeldType.CHI},
|
|
80
|
-
{hai: 7, type: MeldType.CHI},
|
|
81
|
-
{hai: 10, type: MeldType.CHI},
|
|
82
|
-
] as MeldSpec[],
|
|
83
|
-
hais: [16,17,18,27,27],
|
|
84
|
-
expected: [
|
|
85
|
-
[{name: "喰い平和", fu: 30}]
|
|
86
|
-
] as FuSpec[][]
|
|
87
|
-
},
|
|
88
|
-
{
|
|
89
|
-
name: "kuipinfu_4",
|
|
90
|
-
desc: "喰い平和",
|
|
91
|
-
agariHai: 18,
|
|
92
|
-
isTsumo: false,
|
|
93
|
-
kuitan: true,
|
|
94
|
-
melds: [
|
|
95
|
-
{hai: 1, type: MeldType.CHI},
|
|
96
|
-
{hai: 7, type: MeldType.CHI},
|
|
97
|
-
{hai: 10, type: MeldType.CHI},
|
|
98
78
|
] as MeldSpec[],
|
|
99
|
-
hais: [16,17,18,
|
|
79
|
+
hais: [7,8,9,10,11,12,16,17,18,27,27],
|
|
100
80
|
expected: [
|
|
101
81
|
[{name: "喰い平和", fu: 30}]
|
|
102
82
|
] as FuSpec[][]
|
package/tests/tensuu/hanName.ts
CHANGED
|
@@ -5,114 +5,147 @@ export const casesHanName: hanNameCase[] = [
|
|
|
5
5
|
name: "hon1",
|
|
6
6
|
desc: "なし",
|
|
7
7
|
han: 1,
|
|
8
|
+
isYakuman: false,
|
|
8
9
|
expected: ""
|
|
9
10
|
},
|
|
10
11
|
{
|
|
11
12
|
name: "hon2",
|
|
12
13
|
desc: "なし",
|
|
13
14
|
han: 2,
|
|
15
|
+
isYakuman: false,
|
|
14
16
|
expected: ""
|
|
15
17
|
},
|
|
16
18
|
{
|
|
17
19
|
name: "hon3",
|
|
18
20
|
desc: "なし",
|
|
19
21
|
han: 3,
|
|
22
|
+
isYakuman: false,
|
|
20
23
|
expected: ""
|
|
21
24
|
},
|
|
22
25
|
{
|
|
23
26
|
name: "hon4",
|
|
24
27
|
desc: "なし",
|
|
25
28
|
han: 4,
|
|
29
|
+
isYakuman: false,
|
|
26
30
|
expected: ""
|
|
27
31
|
},
|
|
28
32
|
{
|
|
29
33
|
name: "hon5",
|
|
30
34
|
desc: "満貫",
|
|
31
35
|
han: 5,
|
|
36
|
+
isYakuman: false,
|
|
32
37
|
expected: "満貫"
|
|
33
38
|
},
|
|
34
39
|
{
|
|
35
40
|
name: "hon6",
|
|
36
41
|
desc: "跳満",
|
|
37
42
|
han: 6,
|
|
43
|
+
isYakuman: false,
|
|
38
44
|
expected: "跳満"
|
|
39
45
|
},
|
|
40
46
|
{
|
|
41
47
|
name: "hon7",
|
|
42
48
|
desc: "跳満",
|
|
43
49
|
han: 7,
|
|
50
|
+
isYakuman: false,
|
|
44
51
|
expected: "跳満"
|
|
45
52
|
},
|
|
46
53
|
{
|
|
47
54
|
name: "hon8",
|
|
48
55
|
desc: "跳満",
|
|
49
56
|
han: 8,
|
|
57
|
+
isYakuman: false,
|
|
50
58
|
expected: "倍満"
|
|
51
59
|
},
|
|
52
60
|
{
|
|
53
61
|
name: "hon9",
|
|
54
62
|
desc: "倍満",
|
|
55
63
|
han: 9,
|
|
64
|
+
isYakuman: false,
|
|
56
65
|
expected: "倍満"
|
|
57
66
|
},
|
|
58
67
|
{
|
|
59
68
|
name: "hon10",
|
|
60
69
|
desc: "倍満",
|
|
61
70
|
han: 10,
|
|
71
|
+
isYakuman: false,
|
|
62
72
|
expected: "倍満"
|
|
63
73
|
},
|
|
64
74
|
{
|
|
65
75
|
name: "hon11",
|
|
66
76
|
desc: "三倍満",
|
|
67
77
|
han: 11,
|
|
78
|
+
isYakuman: false,
|
|
68
79
|
expected: "三倍満"
|
|
69
80
|
},
|
|
70
81
|
{
|
|
71
82
|
name: "hon12",
|
|
72
83
|
desc: "三倍満",
|
|
73
84
|
han: 12,
|
|
85
|
+
isYakuman: false,
|
|
74
86
|
expected: "三倍満"
|
|
75
87
|
},
|
|
76
88
|
{
|
|
77
89
|
name: "hon13",
|
|
78
90
|
desc: "役満以上",
|
|
79
91
|
han: 13,
|
|
92
|
+
isYakuman: false,
|
|
93
|
+
expected: "数え役満"
|
|
94
|
+
},
|
|
95
|
+
{
|
|
96
|
+
name: "hon13",
|
|
97
|
+
desc: "役満以上",
|
|
98
|
+
han: 13,
|
|
99
|
+
isYakuman: true,
|
|
80
100
|
expected: "役満"
|
|
81
101
|
},
|
|
82
102
|
{
|
|
83
103
|
name: "hon26",
|
|
84
104
|
desc: "役満以上",
|
|
85
105
|
han: 26,
|
|
106
|
+
isYakuman: false,
|
|
107
|
+
expected: "数え役満"
|
|
108
|
+
},
|
|
109
|
+
{
|
|
110
|
+
name: "hon26",
|
|
111
|
+
desc: "役満以上",
|
|
112
|
+
han: 26,
|
|
113
|
+
isYakuman: true,
|
|
86
114
|
expected: "二倍役満"
|
|
87
115
|
},
|
|
88
116
|
{
|
|
89
117
|
name: "hon39",
|
|
90
118
|
desc: "役満以上",
|
|
91
119
|
han: 39,
|
|
120
|
+
isYakuman: true,
|
|
92
121
|
expected: "三倍役満"
|
|
93
122
|
},
|
|
94
123
|
{
|
|
95
124
|
name: "hon52",
|
|
96
125
|
desc: "役満以上",
|
|
97
126
|
han: 52,
|
|
127
|
+
isYakuman: true,
|
|
98
128
|
expected: "四倍役満"
|
|
99
129
|
},
|
|
100
130
|
{
|
|
101
131
|
name: "hon65",
|
|
102
132
|
desc: "役満以上",
|
|
103
133
|
han: 65,
|
|
134
|
+
isYakuman: true,
|
|
104
135
|
expected: "五倍役満"
|
|
105
136
|
},
|
|
106
137
|
{
|
|
107
138
|
name: "hon78",
|
|
108
139
|
desc: "役満以上",
|
|
109
140
|
han: 78,
|
|
141
|
+
isYakuman: true,
|
|
110
142
|
expected: "六倍役満"
|
|
111
143
|
},
|
|
112
144
|
{
|
|
113
145
|
name: "hon79",
|
|
114
146
|
desc: "役満以上",
|
|
115
147
|
han: 79,
|
|
148
|
+
isYakuman: true,
|
|
116
149
|
expected: "六倍役満"
|
|
117
150
|
},
|
|
118
151
|
]
|
|
@@ -282,11 +282,27 @@ export const caseNum: TensuuNumCase[] = [
|
|
|
282
282
|
fusuu: 20,
|
|
283
283
|
expected: new TensuuResult(8000, 48000, 32000, 16000, {oya:16000, ko:8000})
|
|
284
284
|
},
|
|
285
|
+
{
|
|
286
|
+
name: "hon13",
|
|
287
|
+
desc: "13翻",
|
|
288
|
+
honsuu: 13,
|
|
289
|
+
fusuu: 20,
|
|
290
|
+
isYakuman: true,
|
|
291
|
+
expected: new TensuuResult(8000, 48000, 32000, 16000, {oya:16000, ko:8000})
|
|
292
|
+
},
|
|
293
|
+
{
|
|
294
|
+
name: "hon26",
|
|
295
|
+
desc: "26翻",
|
|
296
|
+
honsuu: 26,
|
|
297
|
+
fusuu: 20,
|
|
298
|
+
expected: new TensuuResult(8000, 48000, 32000, 16000, {oya:16000, ko:8000})
|
|
299
|
+
},
|
|
285
300
|
{
|
|
286
301
|
name: "hon26",
|
|
287
302
|
desc: "26翻",
|
|
288
303
|
honsuu: 26,
|
|
289
304
|
fusuu: 20,
|
|
305
|
+
isYakuman: true,
|
|
290
306
|
expected: new TensuuResult(16000, 96000, 64000, 32000, {oya:32000, ko:16000})
|
|
291
307
|
},
|
|
292
308
|
{
|
|
@@ -294,6 +310,7 @@ export const caseNum: TensuuNumCase[] = [
|
|
|
294
310
|
desc: "39翻",
|
|
295
311
|
honsuu: 39,
|
|
296
312
|
fusuu: 20,
|
|
313
|
+
isYakuman: true,
|
|
297
314
|
expected: new TensuuResult(24000, 144000, 96000, 48000, {oya:48000, ko:24000})
|
|
298
315
|
},
|
|
299
316
|
{
|
|
@@ -301,6 +318,7 @@ export const caseNum: TensuuNumCase[] = [
|
|
|
301
318
|
desc: "52翻",
|
|
302
319
|
honsuu: 52,
|
|
303
320
|
fusuu: 20,
|
|
321
|
+
isYakuman: true,
|
|
304
322
|
expected: new TensuuResult(32000, 192000, 128000, 64000, {oya:64000, ko:32000})
|
|
305
323
|
},
|
|
306
324
|
{
|
|
@@ -308,6 +326,7 @@ export const caseNum: TensuuNumCase[] = [
|
|
|
308
326
|
desc: "65翻",
|
|
309
327
|
honsuu: 65,
|
|
310
328
|
fusuu: 20,
|
|
329
|
+
isYakuman: true,
|
|
311
330
|
expected: new TensuuResult(40000, 240000, 160000, 80000, {oya:80000, ko:40000})
|
|
312
331
|
},
|
|
313
332
|
{
|
|
@@ -315,6 +334,7 @@ export const caseNum: TensuuNumCase[] = [
|
|
|
315
334
|
desc: "78翻",
|
|
316
335
|
honsuu: 78,
|
|
317
336
|
fusuu: 20,
|
|
337
|
+
isYakuman: true,
|
|
318
338
|
expected: new TensuuResult(48000, 288000, 192000, 96000, {oya:96000, ko:48000})
|
|
319
339
|
},
|
|
320
340
|
];
|
|
@@ -8,7 +8,7 @@ caseNum.forEach(casenum => testcases.push(casenum));
|
|
|
8
8
|
testcases.forEach(testcase => {
|
|
9
9
|
describe(testcase.desc, () => {
|
|
10
10
|
test(testcase.name, () => {
|
|
11
|
-
const expected = TensuuCalculator.calcTensuu(testcase.honsuu, testcase.fusuu);
|
|
11
|
+
const expected = TensuuCalculator.calcTensuu(testcase.honsuu, testcase.fusuu, testcase.isYakuman ?? false);
|
|
12
12
|
expect(testcase.expected).toEqual(expected);
|
|
13
13
|
});
|
|
14
14
|
});
|