バックトラックで麻雀の和了形一覧を求める

麻雀の役を判定をするときには、まず和了形を求める必要がある。

m1m1m1m2m2m2m3m3m3p8p9p9p9 p7

例えば上記の牌姿の場合は、以下の2つの和了形が存在する。

  • p9p9 m1m1m1 m2m2m2 m3m3m3 p7p8p9 (三暗刻)
  • p9p9 m1m2m3 m1m2m3 m1m2m3 p7p8p9 (純全帯幺九+一盃口)

このように和了形が複数あるときは和了点の高い方を採用する*1ので、全ての和了形をもれなく求める必要がある。そのためには バックトラック法 と呼ばれる手法を用いるのが一般的だ。ところがネット上で見かける和了形を求めるアルゴリズムは「アドホックな解法」ばかりでバックトラックを説明したものが見当たらない*2。ならばということで、本稿で説明することにした。

*1:これを高点法と呼ぶ

*2:バックトラックを使っていても説明は省略されている、あるいは誤った手法をバックトラックと称しているなど

続きを読む

Passportで外部認証を実現する

電脳麻将 ver.2.3.0ネット対戦 の機能を追加した。ルーム(対局待ちの状態)や対局画面にプレーヤー名(できればアイコンも)を表示しようとするとプレーヤーの登録が必要になる。電脳麻将では「ゲスト登録」と「外部認証」の2つの方法で、電脳麻将自身ではプレーヤー情報を管理せずプレーヤー名を取得しているので、この方法を説明する。

続きを読む

麻雀サーバーの使い方

電脳麻将 ver.2.3.0ネット対戦 の機能を追加しましたが、麻雀サーバー の使い方を説明していませんでした。README だけでは説明が不十分と思ったので、補足記事を書くことにします。

麻雀サーバーを動作させるには Node.jsnpm が必要なので、あらかじめインストール*1しておいてください。

続きを読む

さくらVPSの初期設定(AlmaLinux編)

CentOS 7 のサポートが2024年7月で終了するということなので、さくらVPSで運用している kobalab.net のOSを AlmaLinux 9 に乗り換えます。ついでにVPSも交換することにしました。メモリ1GのモデルでSSDは100Gに増設します。

も参考に設定していきます。

続きを読む

launchctl でサービスを自動起動する

macOSにはサービスを自動起動するために launchctl という機構があります。10年前にApacheの設定をした ときから気づいてはいたのですが、使ってみることはありませんでした。今回 MacBook でも Nginx を動かそうかと思っているので、その予行演習として、Node製のサービスを自動起動してみます。

続きを読む

Macのターミナルでリモートに直接ログインする

Unix系のリモートサーバでの作業をMacから行う場合、ほとんどの人は「ターミナル」を起動して、そのコマンドラインから ssh コマンドをタイプしてリモートログインしているのではないでしょうか。私もずっとそうでした。ですが、OS X 以前のいわゆる Classic Mac OS の時代は NCSA Telnet のような端末エミュレータで接続先を指定して直接ログイン*1していたはずです。

そんなことを考えながらターミナルの設定を色々いじっていたら、この操作を再現できることが分かったので、方法を紹介します。

*1:端末を立ち上げた瞬間にリモートのログインプロンプトが出る状態

続きを読む