【SwiftUI】ダビスタの完璧な配合アプリを作成してみた(面白い配合まで)

 

最近switchのダビスタにはまりました。

 

競馬は馬券を買うことはなかったのですが、よくテレビでみていました。

今回ダビスタの最新作が出るということなので、ダビスタデビューしました!

 

買ってからはもうずっっと、良い配合のことを調べています。

が。。

種付けの作業が面倒臭い。。

 

オスの馬150頭くらいいるので、一つずつ見ていくのが本当に時間がかかる。。

 

最初は楽しかったんですけど、どんどんどうでもよくなってきちゃいました笑

 

このままでは僕の大事な牝馬達に悪い!!とういことで、完璧な配合一覧を取得できるアプリを作成しました。

(そういう風なアプリは探せばあるのかもしれないが、それすら探すのが面倒くさくなってきたので、気合入れるために作ることにしました。。)

 

今回は完璧な配合の馬だけ探してくるアプリです。

完璧な配合の説明はこちらを参考にしました!。

https://www.youtube.com/watch?v=4HCZHn661kg

いろいろなサイトを見たけど、このyoutubeの動画が一番解りやすかったです。

 

つまりオスの馬150頭の中から、一番良い感じになる馬一頭と

自分の牧場の牝馬の組み合わせを選べば良いってことです。

 

f:id:disuke:20201228232852p:plain

例えばこの様な系統の牝馬で完璧な配合を目指すとすると

f:id:disuke:20201228233042p:plain

この様に入力して、左下に小さくある計算するボタンを押すと

f:id:disuke:20201228233259p:plain

この様に完璧な配合となる組み合わせを表示してくれます!

(今回は早くダビスタに戻りたかったので、動けば良いやと思って作りました。。)

 

作り方は、まず全部のオスの馬の系統が書いてあるjsonファイルを作りました。

これが一番辛かったです。。

 

f:id:disuke:20201228233938p:plain

この様な感じで全部。。

faが父

moが毋

fa_faが父の父(父の方のおじいちゃん)

fa_moが父の母(父の方のあばあちゃん)

ma_faが母の父(母の方のおじいちゃん)

という風に3世代まで書きます

 

この次はこのオス馬の中から、面白い配合の馬を見つけます。

面白い配合じゃないと完璧な配合にはなりません。

面白い配合というのは、

おじいちゃんとおばあちゃん達の父と母達の系統が7種類ある状態です。

先ほどの写真で言うと

f:id:disuke:20201228235034p:plain

ここの赤い部分が7種類あれば良いと言うことです。

ちなみにここのNaとかが系統です。

詳しくはこちらを参考にしてください

https://gamerch.com/derby/entry/208599

 

上の写真の場合、ディープインパクトは7種類あるので、面白い配合なのですが、

ロードカナリアの場合6種類しかないので、完璧な配合が作れません。

 

この面白い配合を確認するコードがこちらです

f:id:disuke:20201228235725p:plain

このcalculateOmoshiro関数で面白い配合の馬をチョイスしていきます。

62行目に出てくるformulationsと言うのが先ほどのオス馬のjsonファイルです。

for文で1頭ずつ確認していきます。

84行目で1頭ずつ面白い配合に必要な系統を集めて、

checkOmoshiro関数に渡しています。

checkOmoshiro関数はこんな感じです。

f:id:disuke:20201228235547p:plain

calculateOmoshiro関数から受け取った8個の系統を順番に見ていっています。

受け取った系統をa, b, c, d, e, f, g, aだとすると、

a-b, a-c, a-d, a-e, a-f, a-g, a-a,

b-c, b-d, b-e, b-f, b-g, b-a,

c-d, c-e, c-f, c-g, c-a,

d-e, d-f, d-g, d-a,

e-f, e-g, e-a,

f-g, f-a,

g-a

と言う風に確認して行っています。

そして文字が一緒だったらcheckCountに数字が一つプラスされます。

上記の場合、a-aのパターンしかないのでcheckCountは1です。

このcheckCountが2未満なら面白い配合なのでtrueを返しています。

 

疲れたので今回はここまでにします。。

次に見事な配合をどうやってチェックしたか書こうと思います。

(かなり強引にやりました。なのでめちゃめちゃ処理遅いです。。)