[ create a new paste ] login | about

Link: http://codepad.org/LCTFq4Bi    [ raw code | fork ]

Ruby, pasted on Mar 9:
## 
## 血統支配率を計算するIronRubyスクリプト
## 
## 実行方法
## 1. IronRubyをインストールする
## 2. このスクリプトを文字コードUTF-8で保存する(ファイル名を仮に"hoge.rb"とする)
## 3. hoge.rbをKOEI.WP7_2012.dll、KOEI.WP7_2012.Configuration.V100.dllと同じフォルダに入れる
## 4. コマンドプロンプトを立ち上げる
## 5. コマンドを実行する
##   > ir.exe -Ku hoge.rb
## 
require 'KOEI.WP7_2012'
require 'KOEI.WP7_2012.Configuration.V100'

include KOEI::WP7_2012

## 対象の地域
TARGET_COUNTRY = :JAPAN

def get_country( bokuzyou_num )
    if bokuzyou_num < 214 && bokuzyou_num != 27 && bokuzyou_num != 28 then
        return :JAPAN
    elsif bokuzyou_num < 233 && bokuzyou_num != 28 then
        return :USA
    else
        return :EURO
    end
end

def get_tanetsuke_price( tanetsuke )
    return ( ( tanetsuke >> 1 ) * 100 ) + ( ( tanetsuke & 0x01 ) == 1 ? 50 : 0 )
end

config = Configuration::V100.new
wp = WP7.new( config.ProcessName, config )

family_line_dic = []
tanetsuke_total = 0.0
dam_total = 0.0
sire_total = 0.0
geneki_total = 0.0

wp.HFamilyLineTable.RecordCount.times do |num|
    family_line_dic.push({
        :family_line_num => num,
        :tanetsuke    => 0.0,
        :geneki_len   => 0.0,
        :dam_len      => 0.0,
        :par          => 0.0,
        :sire_len     => 0.0,
    })
end

wp.HSireTable.RecordCount.times do |num|
    data = wp.HSireTable.GetData( num, Datastruct::HSireData.new )

    next if data.intai != 0

    abl_data = wp.HAblTable.GetData( data.abl_num, Datastruct::HAblData.new )
    next if get_country( abl_data.bokuzyou ) != TARGET_COUNTRY
    
    blood_data = wp.HBloodTable.GetData( data.blood_num, Datastruct::HBloodData.new )
    
    next if blood_data.father_num == wp.Config.IgnoreBloodNumber
    
    price = get_tanetsuke_price( data.tanetsuke )
    
    tanetsuke_total += price
    sire_total += 1
    family_line_dic[ blood_data.family_line_num ][ :sire_len ] += 1
    family_line_dic[ blood_data.family_line_num ][ :tanetsuke ] += price
end

wp.HDamTable.RecordCount.times do |num|
    data = wp.HDamTable.GetData( num, Datastruct::HDamData.new )
    
    next if data.intai != 0

    abl_data = wp.HAblTable.GetData( data.abl_num, Datastruct::HAblData.new )
    next if get_country( abl_data.bokuzyou ) != TARGET_COUNTRY
    
    blood_data = wp.HBloodTable.GetData( data.blood_num, Datastruct::HBloodData.new )
    next if blood_data.father_num == wp.Config.IgnoreBloodNumber
    
    dam_total += 1
    family_line_dic[ blood_data.family_line_num ][ :dam_len ] += 1
end

wp.HRaceTable.RecordCount.times do |num|
    data = wp.HRaceTable.GetData( num, Datastruct::HRaceData.new )

    next if data.intai == 1
    
    abl_data = wp.HAblTable.GetData( data.abl_num, Datastruct::HAblData.new )
    next if get_country( abl_data.bokuzyou ) != TARGET_COUNTRY
    
    father = wp.HSireTable.GetData( data.father_num, Datastruct::HSireData.new )
    blood_data = wp.HBloodTable.GetData( father.blood_num, Datastruct::HBloodData.new )
    
    geneki_total += 1
    family_line_dic[ blood_data.family_line_num ][ :geneki_len ] += 1
end

# 605 名前:名無しさんの野望[sage] 投稿日:2012/03/03(土) 04:53:28.53 ID:A7TqSQY6 [3/3]
# ウイポスカウター使って確立したい種牡馬の支配率計算したくて、
# あれ? そもそも2010あたりからの系統支配率ってどういう計算してるのかな?、
# と思っていろいろ計算してみた。(既出だったらスマンw)
# 
# おそらく、
#   系統支配率 = (種付け料割合 + 種牡馬数割合 + 繁殖牝馬数割合 + 現役競走馬数割合) / 4
# に近い式になってると思う。
# 
# 「近い」というのは、↑で計算すると近くはなるんだが誤差が少々…何だろな…。
# 
family_line_dic.each_with_index do |row|
    par = 0.0
    par += row[:tanetsuke] / tanetsuke_total
    par += row[:sire_len] / sire_total 
    par += row[:dam_len] / dam_total
    par += row[:geneki_len] / geneki_total
    par /= 4.0
    row[:par] = par
end

family_line_dic.sort{|a,b| b[:par]<=>a[:par]}.each_with_index do |row|
    data = wp.HFamilyLineTable.GetData( row[:family_line_num], Datastruct::HFamilyLineData.new )
    name = ""
    next if data.name_1 == 0
    (1..14).each do |n|
        break if (s = eval("data.name_#{n}")) == 0
        name += Helper::KoeiCode.ToString(s)
    end
    puts sprintf( "%6.1f%% | %s系", row[:par] * 100, name )
end


__END__
実行結果

2013年スタート 2013年1月1週 日本の支配率

  24.9% | サンデーサイレンス系
  13.4% | ミスタープロスペクター系
   8.9% | ノーザンダンサー系
   5.9% | ヘイルトゥリーズン系
   3.5% | ダンジグ系
   3.3% | ニジンスキー系
   3.2% | リファール系
   3.2% | グレイソヴリン系
   3.0% | ブライアンズタイム系
   2.4% | ブラッシンググルーム系
   2.0% | サドラーズウェルズ系
   2.0% | パーソロン系
   1.8% | ネヴァーベンド系
   1.8% | プリンスローズ系
   1.7% | ニアークティック系
   1.6% | ストームキャット系
   1.6% | プリンスリーギフト系
   1.6% | ヌレイエフ系
   1.5% | ボールドルーラー系
   1.4% | ヒンドスタン系
   1.3% | リボー系
   1.3% | カロ系
   1.2% | ダマスカス系
   1.0% | マンノウォー系
   1.0% | ブランドフォード系
   1.0% | ノーザンテースト系
   0.9% | サーゲイロード系
   0.8% | ダンテ系
   0.8% | オーエンテューダー系
   0.7% | トムフール系
   0.6% | レイズアネイティヴ系
   0.5% | ヒムヤー系
   0.1% | トウルビヨン系
   0.1% | ファイントップ系
   0.1% | ハンプトン系
   0.1% | ネイティヴダンサー系
   0.0% | ハイペリオン系
   0.0% | リュティエ系
   0.0% | エタン系
   0.0% | エルバジェ系
   0.0% | ナスルーラ系
   0.0% | ロイヤルチャージャー系
   0.0% | ヘロド系
   0.0% | レッドゴッド系
   0.0% | ザボス系
   0.0% | モスボロー系
   0.0% | セントサイモン系
   0.0% | オリオール系
   0.0% | ネアルコ系
   0.0% | フェアウェイ系
   0.0% | スインフォード系
   0.0% | テディ系
   0.0% | ボワルセル系
   0.0% | カーレッド系
   0.0% | ロックフェラ系
   0.0% | ゲインズボロー系
   0.0% | ザテトラーク系
   0.0% | エクリプス系
   0.0% | マッチェム系
   0.0% | ベンドア系


Create a new paste based on this one


Comments: