/** * 副露ルートの推定打点計算 * フル面子分解は行わず、翻数カウント + 固定符(30) で推定する */ import type { TileId } from "../core/tile.js"; import type { HandArray } from "../core/hand.js"; import type { GameContext } from "../scoring/types.js"; export interface FuroYakuBreakdown { yakuhai: number; tanyao: number; honitsu: number; chinitsu: number; sanshoku: number; dora: number; redDora: number; totalHan: number; } export interface FuroScoreEstimate { breakdown: FuroYakuBreakdown; fu: number; estimatedPoints: number; } /** * 副露ルートの推定打点を計算する * * @param hand13 打牌後の13枚手牌 * @param context ゲームコンテキスト * @param route 副露ルート情報 * @returns 推定打点 */ export declare function estimateFuroScore(hand13: HandArray, context: GameContext, route: { type: "yakuhai" | "tanyao" | "honitsu" | "chinitsu"; yakuhaiTiles: TileId[]; primarySuit?: number; }, deadTiles?: TileId[]): FuroScoreEstimate; /** * 三色同順のポテンシャルを検出する * 3色すべてに同一数字の順子の塔子(2枚以上)があるかをチェック * @returns 検出された順子の開始位置 (0-6)、未検出なら -1 */ export declare function detectSanshokuPotential(hand13: HandArray): number; /** * 手牌の色別枚数を集計する * @returns [manzu, pinzu, souzu, jihai] の枚数 */ export declare function countBySuit(hand13: HandArray): [number, number, number, number]; /** * 主色(最も枚数が多い数牌の色)を返す * @returns 色インデックス (0=萬子, 1=筒子, 2=索子) */ export declare function getPrimarySuit(hand13: HandArray): number;