Skip to content

Commit

Permalink
Merge branch 'release/v1.2.0'
Browse files Browse the repository at this point in the history
  • Loading branch information
kobalab committed Nov 27, 2024
2 parents a5598de + d13bb4f commit f510aae
Show file tree
Hide file tree
Showing 24 changed files with 398 additions and 2,088 deletions.
13 changes: 13 additions & 0 deletions ChangeLog.md
Original file line number Diff line number Diff line change
@@ -1,3 +1,16 @@
## v1.2.0 / 2024-11-27

- 牌譜の指定に配列と再帰を使用できるよう修正
- getlogs() の引数を上記に変更
- examples の script も上記に従うよう修正
- examples を追加
- highest_records.js - 最高記録(最大局数、最長の手牌、最長の河など)
- パッケージを最新化
- @kobalab/majiang-core 1.3.0 → 1.3.1
- mocha 10.7.3 → 10.8.2
- 脆弱性警告に対処
- cross-spawn 7.0.3 → 7.0.6

## v1.1.0 / 2024-10-20

- @kobalab/majiang-core 1.1.1 → 1.3.0
Expand Down
9 changes: 7 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,12 @@ this.board には [卓情報](https://github.com/kobalab/majiang-core/wiki/%E5%8

## 起動方法
**static** analyze(_filename_, _argv_) を呼び出すと解析を開始します。
_filename_ は解析対象のファイル名、もしくは牌譜のあるディレクトリ名です。省略時にはカレントディレクトリが指定されたと解釈します。
_filename_ は解析対象のファイル名、もしくは牌譜のあるディレクトリ名、あるいはその両方を含む配列です。省略時にはカレントディレクトリが指定されたと解釈します。
_argv_ には以下の動作を変更するオプションが指定できます。

#### recursive
指定した場合、ディレクトリを再帰的に探索して牌譜を探します。

#### times
指定した場合、これを超える数のログを解析しません。

Expand All @@ -78,9 +81,11 @@ this.board に [卓情報](https://github.com/kobalab/majiang-core/wiki/%E5%8D%9

### getlogs
* **filename** - string
* **recursive** - boolean
* _返り値_ - object

**filename** で指定されたファイルもしくはディレクトリから [牌譜](https://github.com/kobalab/majiang-core/wiki/%E7%89%8C%E8%AD%9C) を1つずつ取り出すイテレータを返します。
**filename** で指定されたファイルもしくはディレクトリ、あるいはそれらを含む配列から [牌譜](https://github.com/kobalab/majiang-core/wiki/%E7%89%8C%E8%AD%9C) を1つずつ取り出すイテレータを返します。
**recursive** に真を設定すると、**filename** 配下を再帰的に探索します。

## ライセンス
[MIT](https://github.com/kobalab/majiang-analog/blob/master/LICENSE)
Expand Down
33 changes: 17 additions & 16 deletions examples/README.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,19 @@
# examples

| プログラム | 機能
|:----------------|:-----------------------------------------------------------
| validate.js | 牌譜の正当性チェック
| summary.js | [基礎情報と和了役・流局理由集計](https://blog.kobalab.net/entry/20180113/1515776231)
| search.js | 和了役と流局理由の検索
| diff.js | 2つの牌譜から差分を抽出する
| diff-strict.js | 2つの牌譜から厳密に差分を抽出する
| xiangting.js | [巡目ごとの向聴数・立直率・和了率](https://blog.kobalab.net/entry/20180118/1516202840)
| dist_pai.js | [局終了時の牌の分布](https://blog.kobalab.net/entry/20180119/1516290844)
| dist_hulepai.js | [和了牌の分布](https://blog.kobalab.net/entry/20180120/1516417938)
| fulou.js | [巡目ごとの副露数・副露時向聴数](https://blog.kobalab.net/entry/20180203/1517667551)
| hule_pattern.js | [リーチに対する待ちの形ごとの危険度](https://blog.kobalab.net/entry/2021/01/22/204805)
| after_lizhi.js | [先制リーチを受けた局の結果と収支](https://blog.kobalab.net/entry/2020/12/21/202933)
| trap_lizhi.js | [モロ引っ掛けの危険度](https://blog.kobalab.net/entry/2021/11/19/201332)
| dist_lizhi.js | [リーチ宣言牌および最初に切った数牌と同種の牌の危険度](https://blog.kobalab.net/entry/2021/11/21/121835)
| double_lizhi.js | [ダブルリーチの好形率・和了率・平均打点](https://blog.kobalab.net/entry/2022/03/19/124607)
| プログラム | 機能
|:-------------------|:-----------------------------------------------------------
| validate.js | 牌譜の正当性チェック
| summary.js | [基礎情報と和了役・流局理由集計](https://blog.kobalab.net/entry/20180113/1515776231)
| search.js | 和了役と流局理由の検索
| diff.js | 2つの牌譜から差分を抽出する
| diff-strict.js | 2つの牌譜から厳密に差分を抽出する
| xiangting.js | [巡目ごとの向聴数・立直率・和了率](https://blog.kobalab.net/entry/20180118/1516202840)
| dist_pai.js | [局終了時の牌の分布](https://blog.kobalab.net/entry/20180119/1516290844)
| dist_hulepai.js | [和了牌の分布](https://blog.kobalab.net/entry/20180120/1516417938)
| fulou.js | [巡目ごとの副露数・副露時向聴数](https://blog.kobalab.net/entry/20180203/1517667551)
| hule_pattern.js | [リーチに対する待ちの形ごとの危険度](https://blog.kobalab.net/entry/2021/01/22/204805)
| after_lizhi.js | [先制リーチを受けた局の結果と収支](https://blog.kobalab.net/entry/2020/12/21/202933)
| trap_lizhi.js | [モロ引っ掛けの危険度](https://blog.kobalab.net/entry/2021/11/19/201332)
| dist_lizhi.js | [リーチ宣言牌および最初に切った数牌と同種の牌の危険度](https://blog.kobalab.net/entry/2021/11/21/121835)
| double_lizhi.js | [ダブルリーチの好形率・和了率・平均打点](https://blog.kobalab.net/entry/2022/03/19/124607)
| highest_records.js | [最高記録(最大局数、最長の手牌、最長の河など)](https://blog.kobalab.net/entry/2024/11/27/034233)
5 changes: 3 additions & 2 deletions examples/after_lizhi.js
Original file line number Diff line number Diff line change
Expand Up @@ -82,14 +82,15 @@ class AnaLog extends require('../').base {

const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir>')
.usage('Usage: $0 <log-dir>...')
.option('recursive', { alias: 'r', boolean: true })
.option('times', { alias: 't' })
.option('viewpoint', { alias: 'v', default: 0 })
.option('player', { alias: 'p' })
.option('silent', { alias: 's', boolean: true })
.demandCommand(1)
.argv;
const filename = argv._[0];
const filename = argv._;

let r = AnaLog.analyze(filename, argv)._result;

Expand Down
5 changes: 3 additions & 2 deletions examples/diff-strict.js
Original file line number Diff line number Diff line change
Expand Up @@ -35,11 +35,12 @@ function diff(p1, p2) {
const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir1> <log-dir2>')
.option('recursive', { alias: 'r', boolean: true })
.option('all', {alias: 'a', boolean: true, description:'差分を全て抽出する'})
.demandCommand(2)
.argv;
const logs1 = getlogs(argv._[0]);
const logs2 = getlogs(argv._[1]);
const logs1 = getlogs(argv._[0], argv.recursive);
const logs2 = getlogs(argv._[1], argv.recursive);

let t = 0;
for (let p1 of logs1) {
Expand Down
5 changes: 3 additions & 2 deletions examples/diff.js
Original file line number Diff line number Diff line change
Expand Up @@ -52,12 +52,13 @@ function diff(p1, p2) {
const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir1> <log-dir2>')
.option('recursive', { alias: 'r', boolean: true })
.option('times', { alias: 't' })
.option('viewpoint', { alias: 'v', default: 0 })
.demandCommand(2)
.argv;
const logs1 = getlogs(argv._[0]);
const logs2 = getlogs(argv._[1]);
const logs1 = getlogs(argv._[0], argv.recursive);
const logs2 = getlogs(argv._[1], argv.recursive);

let t = 0;
for (let p1 of logs1) {
Expand Down
5 changes: 3 additions & 2 deletions examples/dist_hulepai.js
Original file line number Diff line number Diff line change
Expand Up @@ -54,11 +54,12 @@ class AnaLog extends require('../') {

const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir>')
.usage('Usage: $0 <log-dir>...')
.option('recursive', { alias: 'r', boolean: true })
.option('times', { alias: 't' })
.option('silent', { alias: 's', boolean: true })
.demandCommand(1)
.argv;
const filename = argv._[0];
const filename = argv._;

console.log(AnaLog.analyze(filename, argv)._result);
115 changes: 58 additions & 57 deletions examples/dist_lizhi.js
Original file line number Diff line number Diff line change
@@ -1,57 +1,58 @@
/*
* リーチ宣言牌および最初に切った数牌と同種の牌の危険度
*/
"use strict";

const Majiang = require('@kobalab/majiang-core');

class AnaLog extends require('../') {

init() {
this._result = {
first: [], // 最初に打たれた数牌のまわり
last: [], // リーチ宣言牌のまわり
};
for (let n = 0; n < 9; n++) {
this._result.first[n] = [0,0,0,0,0,0,0,0,0,0];
this._result.last[n] = [0,0,0,0,0,0,0,0,0,0];
}
}
qipai(qipai) {
this._first = [];
}
dapai(dapai) {
let s = dapai.p[0], n = +dapai.p[1]||5;
if (! this._first[dapai.l] && s != 'z') this._first[dapai.l] = s+n;
let r = this._result;
if (dapai.p.substr(-1) == '*') {
let tingpai = Majiang.Util.tingpai(this.board.shoupai[dapai.l]);
/* リーチ宣言牌まわりの集計 */
if (s != 'z') {
r.last[n-1][0]++;
for (let i = 1; i <=9; i++) {
if (tingpai.find(p=> p == s+i)) r.last[n-1][i]++;
}
}
/* 最初に打たれた数牌まわりの集計 */
if (this._first[dapai.l]) {
let s = this._first[dapai.l][0], n = +this._first[dapai.l][1];
r.first[n-1][0]++
for (let i = 1; i <=9; i++) {
if (tingpai.find(p=> p == s+i)) r.first[n-1][i]++;
}
}
}
}
}

const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir>')
.option('times', { alias: 't' })
.option('silent', { alias: 's', boolean: true })
.demandCommand(1)
.argv;
const filename = argv._[0];

console.log(AnaLog.analyze(filename, argv)._result);
/*
* リーチ宣言牌および最初に切った数牌と同種の牌の危険度
*/
"use strict";

const Majiang = require('@kobalab/majiang-core');

class AnaLog extends require('../') {

init() {
this._result = {
first: [], // 最初に打たれた数牌のまわり
last: [], // リーチ宣言牌のまわり
};
for (let n = 0; n < 9; n++) {
this._result.first[n] = [0,0,0,0,0,0,0,0,0,0];
this._result.last[n] = [0,0,0,0,0,0,0,0,0,0];
}
}
qipai(qipai) {
this._first = [];
}
dapai(dapai) {
let s = dapai.p[0], n = +dapai.p[1]||5;
if (! this._first[dapai.l] && s != 'z') this._first[dapai.l] = s+n;
let r = this._result;
if (dapai.p.substr(-1) == '*') {
let tingpai = Majiang.Util.tingpai(this.board.shoupai[dapai.l]);
/* リーチ宣言牌まわりの集計 */
if (s != 'z') {
r.last[n-1][0]++;
for (let i = 1; i <=9; i++) {
if (tingpai.find(p=> p == s+i)) r.last[n-1][i]++;
}
}
/* 最初に打たれた数牌まわりの集計 */
if (this._first[dapai.l]) {
let s = this._first[dapai.l][0], n = +this._first[dapai.l][1];
r.first[n-1][0]++
for (let i = 1; i <=9; i++) {
if (tingpai.find(p=> p == s+i)) r.first[n-1][i]++;
}
}
}
}
}

const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir>...')
.option('recursive', { alias: 'r', boolean: true })
.option('times', { alias: 't' })
.option('silent', { alias: 's', boolean: true })
.demandCommand(1)
.argv;
const filename = argv._;

console.log(AnaLog.analyze(filename, argv)._result);
5 changes: 3 additions & 2 deletions examples/dist_pai.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,11 +67,12 @@ class AnaLog extends require('../') {

const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir>')
.usage('Usage: $0 <log-dir>...')
.option('recursive', { alias: 'r', boolean: true })
.option('times', { alias: 't' })
.option('silent', { alias: 's', boolean: true })
.demandCommand(1)
.argv;
const filename = argv._[0];
const filename = argv._;

console.log(AnaLog.analyze(filename, argv)._result);
5 changes: 3 additions & 2 deletions examples/double_lizhi.js
Original file line number Diff line number Diff line change
Expand Up @@ -46,11 +46,12 @@ class AnaLog extends require('../') {

const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir>')
.usage('Usage: $0 <log-dir>...')
.option('recursive', { alias: 'r', boolean: true })
.option('times', { alias: 't' })
.option('silent', { alias: 's', boolean: true })
.demandCommand(1)
.argv;
const filename = argv._[0];
const filename = argv._;

console.log(AnaLog.analyze(filename, argv)._result);
5 changes: 3 additions & 2 deletions examples/fulou.js
Original file line number Diff line number Diff line change
Expand Up @@ -29,11 +29,12 @@ class AnaLog extends require('../') {

const yargs = require('yargs');
const argv = yargs
.usage('Usage: $0 <log-dir>')
.usage('Usage: $0 <log-dir>...')
.option('recursive', { alias: 'r', boolean: true })
.option('times', { alias: 't' })
.option('silent', { alias: 's', boolean: true })
.demandCommand(1)
.argv;
const filename = argv._[0];
const filename = argv._;

console.log(AnaLog.analyze(filename, argv)._result);
Loading

0 comments on commit f510aae

Please sign in to comment.