tsshogi
Version:
TypeScript library for Shogi (Japanese chess)
60 lines • 4.78 kB
JavaScript
;
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==