Sha256: 930b850a6957c506e2cea0d4ba5afc30ed10598360d52e19ce8b1431becb19a1

Contents?: true

Size: 1.54 KB

Versions: 1

Compression:

Stored size: 1.54 KB

Contents

# frozen-string-literal: true

module Bioshogi
  module Analysis
    concern :StyleAccessor do
      class_methods do
        def style_reject_keys
          # [:"力戦", :"居玉"].to_set
          [].to_set
        end

        def styles_hash
          @styles_hash ||= yield_self do
            list = values.reject { |e| style_reject_keys.include?(e.key) }
            # list = list.take(7)
            list = list.sort_by { |e| -e.frequency }
            backets = Array.new(list.size, StyleInfo.count.pred) # 正確に四分割できないため「変態」で埋める
            step = list.size / StyleInfo.count
            StyleInfo.count.pred.times do |i|
              range = (i * step)...(i.next * step)
              backets.fill(i, range)                # 最初の3区分を 0, 1, 2, で埋める
            end
            list.each_with_object({}).with_index do |(e, m), i|
              m[e.key] = StyleInfo.fetch(backets[i])
            end
          end
        end
      end

      # 王道 or 変態
      # 新しい戦法を追加したばかりのときはテーブルにない場合がある? → 必ずある
      # なぜなら最初に新しい戦法を追加するのは bioshogi 側なため。
      # したがってない場合を心配する必要はない。
      def style_info
        self.class.styles_hash.fetch(key)
      end

      # 使用数
      # これは Frequency にない場合もあるため、ない場合に 0 を返すのは正しい。
      def frequency
        Frequency[key] || 0
      end
    end
  end
end

Version data entries

1 entries across 1 versions & 1 rubygems

Version Path
bioshogi-0.0.14 lib/bioshogi/analysis/style_accessor.rb