「清一研究基礎」の編集履歴(バックアップ)一覧に戻る
清一研究基礎 - (2008/06/28 (土) 00:05:27) のソース
*清一解析の基礎 **概要 清一の全聴牌型について、その結果が掲載されているサイトは簡単に見つけることが出来るが、その求め方等、基礎的な部分について記述されているサイトが少なかったのでこのページを作成した。 **牌式 牌式とは一見してわかりにくい手牌を、わかりやすく表現するために草鹿三郎氏が考えた清一手牌の表現方法である。ただ、草鹿三郎氏が考えた方式には弱点があったので、それを浅見了氏が改良した。改良した牌式を、浅見牌式と呼ぶことにする。詳しくは[[麻雀祭都 研究室 牌式>http://www.asamiryo.jp/res2.html]]を参照のこと。 清一解析の基礎データとして浅見牌式を拡張した以下の書式で作成することにする。拡張した牌式を、デジタル牌式と呼ぶことにする。 牌式 , 待ち牌 , 面張数 , 手牌枚数 純正九連宝燈をあらわしたデジタル牌式は、以下のようになる。 311111113,123456789,9,13 **デジタル牌式の作成 ***作成手順 +すべての和了型を挙列 +その和了型から1枚引いたものがテンパイ型 +同一のテンパイ型とその和了牌(引いた1枚が和了牌になる)をまとめる +和了牌の枚数と、手牌が何枚であったかを付加する 9種類ある純正九連宝燈を参考に、上記手順を追ってみる。 すべての和了型を挙列するとこうなる。牌式とそれに対応した牌姿である。 411111113 11112345678999 321111113 11122345678999 312111113 11123345678999 311211113 11123445678999 311121113 11123455678999 311112113 11123456678999 311111213 11123456778999 311111123 11123456788999 311111114 11123456789999 和了型から1枚引いたらテンパイ型。カンマ(,)の後ろが引いた牌である。 311111113,1 311111113,2 311111113,3 311111113,4 311111113,5 311111113,6 311111113,7 311111113,8 311111113,9 それらをまとめる。 311111113,123456789 和了牌の枚数と、手牌の枚数を付加する 311111113,123456789,9,13 **1.すべての和了型を求める ご存知のように、清一における麻雀の和了型は4面子1雀頭、あるいは7対子となる。また、雀頭と刻子は9種類、順子は7種類ある。それらを組み合わせることで、すべての和了型は求まる。 ここからはプログラミングの話になるのだが、ご了承願いたい。 雀頭を1から9まで繰り返す 各面子は1から9までの暗刻と、123から789までの順子の繰り返し C言語風に記述すればこうなる。 暗刻は1~9とし、順子は123が10、234が11、・・・、678が15、789が16とする。 for( head = 1; head <= 9; head++ ) { for( m1 = 1; m1 <= 16; m1++ ) { for( m2 = 1; m2 <= 16; m2++ ) { for( m3 = 1; m3 <= 16; m3++ ) { for( m4 = 1; m4 <= 16; m4++ ) { 手牌は 雀頭 head + 面子1~4; } } } } } これで、清一におけるすべての牌の組み合わせが求まるの。しかしこのままだと、ある牌が5枚以上存在になったりするので、それは取り除く必要がある。 ここで牌式を有効に使うことができる。すなわち、9個の要素を持つ配列を用意し、それを牌の持つ値と組み合わせて使うのである。 int tehai[9]; 純正九連宝燈は 1112345678999 であるが、これを 1が3枚 2~8はそれぞれ1枚 9は3枚とすると tehai[0] = 3; tehai[1] = 1; tehai[2] = 1 ; ・・・ ; tehai[7] = 1; tehai[8] = 3; と表現するのである。 まず手牌を構成する牌を配列に格納する。その後、先の判断をすれば不正な組み合わせは取り除かれる。 ある牌が5枚以上なら和了型から取り除く for( i = 0; i <= 8 ; i++ ) { if( 5 <= tehai[i] ) { ある種の牌が5枚以上あるので不正 } } このようにして、不正な組み合わせを見つけ出し除外した結果が、清一のすべての和了型である。