UNPKG

tsshogi

Version:

TypeScript library for Shogi (Japanese chess)

60 lines 4.78 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.RecordFormatType = void 0; exports.detectRecordFormat = detectRecordFormat; const position_1 = require("./position.cjs"); var RecordFormatType; (function (RecordFormatType) { RecordFormatType[RecordFormatType["USI"] = 0] = "USI"; RecordFormatType[RecordFormatType["SFEN"] = 1] = "SFEN"; RecordFormatType[RecordFormatType["KIF"] = 2] = "KIF"; RecordFormatType[RecordFormatType["KI2"] = 3] = "KI2"; RecordFormatType[RecordFormatType["CSA"] = 4] = "CSA"; RecordFormatType[RecordFormatType["JKF"] = 5] = "JKF"; RecordFormatType[RecordFormatType["USEN"] = 6] = "USEN"; })(RecordFormatType || (exports.RecordFormatType = RecordFormatType = {})); /** * 文字列から棋譜形式を推定します。 * 一部の文字の並びや出現頻度による簡易的な判定であり、判定結果のフォーマットに準拠していることを保証するものではありません。 * @param data */ function detectRecordFormat(data) { // USI if (data === "position startpos" || data === "startpos" || data.startsWith("position sfen ") || data.startsWith("position startpos ") || data.startsWith("sfen ") || data.startsWith("startpos ") || data.startsWith("moves ")) { return RecordFormatType.USI; } // SFEN if (position_1.Position.isValidSFEN(data)) { return RecordFormatType.SFEN; } // JKF if (/^[\s\r\n]*{/.test(data) && /}[\s\r\n]*$/.test(data)) { return RecordFormatType.JKF; } // USEN if (/^[-_.A-Za-z0-9]*~[0-9]*\.[0-9A-Za-z]*\.[a-z]?(~|$)/.test(data)) { return RecordFormatType.USEN; } // KIF vs KI2 vs CSA: 行頭の文字の出現頻度を比較する。 const pattKIF = /(^|\n)[ \u3000]*[#0-9開終棋手戦表持秒記消場掲備先後作発出完分受]/g; const pattKI2 = /(^|\n)[ \u3000]*[#▲△▼▽☗☖開終棋手戦表持秒記消場掲備先後作発出完分受]/g; const pattCSA = /(^|,|\n)[-+$%'VNPT]/g; const matchedKIF = data.match(pattKIF); const matchedKI2 = data.match(pattKI2); const matchedCSA = data.match(pattCSA); const evalKIF = matchedKIF?.length || 0; const evalKI2 = matchedKI2?.length || 0; const evalCSA = matchedCSA?.length || 0; return evalKIF >= evalCSA && evalKIF >= evalKI2 ? RecordFormatType.KIF : evalKI2 >= evalCSA ? RecordFormatType.KI2 : RecordFormatType.CSA; } //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiZGV0ZWN0LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vc3JjL2RldGVjdC50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiOzs7QUFpQkEsZ0RBNENDO0FBN0RELHlDQUFzQztBQUV0QyxJQUFZLGdCQVFYO0FBUkQsV0FBWSxnQkFBZ0I7SUFDMUIscURBQUcsQ0FBQTtJQUNILHVEQUFJLENBQUE7SUFDSixxREFBRyxDQUFBO0lBQ0gscURBQUcsQ0FBQTtJQUNILHFEQUFHLENBQUE7SUFDSCxxREFBRyxDQUFBO0lBQ0gsdURBQUksQ0FBQTtBQUNOLENBQUMsRUFSVyxnQkFBZ0IsZ0NBQWhCLGdCQUFnQixRQVEzQjtBQUVEOzs7O0dBSUc7QUFDSCxTQUFnQixrQkFBa0IsQ0FBQyxJQUFZO0lBQzdDLE1BQU07SUFDTixJQUNFLElBQUksS0FBSyxtQkFBbUI7UUFDNUIsSUFBSSxLQUFLLFVBQVU7UUFDbkIsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQztRQUNqQyxJQUFJLENBQUMsVUFBVSxDQUFDLG9CQUFvQixDQUFDO1FBQ3JDLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDO1FBQ3hCLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDO1FBQzVCLElBQUksQ0FBQyxVQUFVLENBQUMsUUFBUSxDQUFDLEVBQ3pCLENBQUM7UUFDRCxPQUFPLGdCQUFnQixDQUFDLEdBQUcsQ0FBQztJQUM5QixDQUFDO0lBRUQsT0FBTztJQUNQLElBQUksbUJBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQztRQUMvQixPQUFPLGdCQUFnQixDQUFDLElBQUksQ0FBQztJQUMvQixDQUFDO0lBRUQsTUFBTTtJQUNOLElBQUksYUFBYSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxhQUFhLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUM7UUFDekQsT0FBTyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUM7SUFDOUIsQ0FBQztJQUVELE9BQU87SUFDUCxJQUFJLG9EQUFvRCxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDO1FBQ3BFLE9BQU8sZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0lBQy9CLENBQUM7SUFFRCxzQ0FBc0M7SUFDdEMsTUFBTSxPQUFPLEdBQUcsOENBQThDLENBQUM7SUFDL0QsTUFBTSxPQUFPLEdBQUcsaURBQWlELENBQUM7SUFDbEUsTUFBTSxPQUFPLEdBQUcsc0JBQXNCLENBQUM7SUFDdkMsTUFBTSxVQUFVLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQztJQUN2QyxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0lBQ3ZDLE1BQU0sVUFBVSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsT0FBTyxDQUFDLENBQUM7SUFDdkMsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDeEMsTUFBTSxPQUFPLEdBQUcsVUFBVSxFQUFFLE1BQU0sSUFBSSxDQUFDLENBQUM7SUFDeEMsT0FBTyxPQUFPLElBQUksT0FBTyxJQUFJLE9BQU8sSUFBSSxPQUFPO1FBQzdDLENBQUMsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHO1FBQ3RCLENBQUMsQ0FBQyxPQUFPLElBQUksT0FBTztZQUNsQixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRztZQUN0QixDQUFDLENBQUMsZ0JBQWdCLENBQUMsR0FBRyxDQUFDO0FBQzdCLENBQUMifQ==