0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

Ruby 麻雀 配牌のシャンテン数をカウントしたい①

Posted at

現状の課題

麻雀牌全種類から無作為に14枚取り出す構造はできたため、そこから取り出された値を見て
シャンテン数をカウントしたい。
これがいくら考えてもいい方法が思いつかない。。。
ただまずは今の配列データのままでは面子の判断も難しいので、配牌の萬子、筒子、索子、字牌がそれぞれどれくらいあるかのカウンターを作ってこれをもとに判定する機能を設けようかと考えました。

作成コード

pia.rb
def shanten
    mcounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
    scounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
    pcounter = [0, 0, 0, 0, 0, 0, 0, 0, 0]
    zcounter = [0, 0, 0, 0, 0, 0, 0]
    @haipai.each do |pai|
      pai_num = pai.split(/\s*/)
      val = pai_num[1].to_i - 1
      case pai_num[0]
      when "m" then
        mcounter[val] += 1
      when "p" then
        pcounter[val] += 1
      when "s" then
        scounter[val] += 1
      when "z" then
        zcounter[val] += 1
      end
    end
  end

説明

それぞれの種類の牌が何枚あるかをカウントするための格納をする配列を作成します。
@haipaiには["m1", "m1", "m2", "m9", "p5", "p7", "p9", "s4", "s4", "s6", "s6", "s7", "z6", "z7"]見たいな形でデータを入れていますので、
それぞれのデータをsplitで分けて、頭文字がmなら末尾の数字のカウンターを1あげるという
コードにしました。配列は最初が”0”から始まるので、格納先指定には1引いています。

まとめ

ここからどのように面子判断を行うか、、、理屈はわかっていても数学的な要素とプログラム的な要素で
どのように実現するかは難しいですね。

参照

配牌を作成したプログラムはこちらから
・Ruby 麻雀の配牌を作成する
https://qiita.com/tatsuya312/items/66d7036a0d76748efdb8

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?