チャレンジ #119: 競馬の順位の組み合わせ
- RSS フィードを購読する
- トピックを新着としてマーク
- トピックを既読としてマーク
- このトピックを現在のユーザーにフロートします
- ブックマーク
- 購読
- ミュート
- 印刷用ページ
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
先週のチャレンジに対する解答は こちらをご覧ください Source: https://en.wikipedia.org/wiki/Belmont_Stakes
今週のチャレンジは@mst3kさんによって提出されました!
アメリカの競馬と言えばケンタッキーダービーが最も有名ですが、マンハッタンから車で1時間ほど離れた距離にあるベルモントパークでもベルモントステークス が毎年開催されます。日本のみなさんにはあまり馴染みがないかもしれませんが、これはケンタッキーダービー、プリークネスステークスとともに アメリカクラシック三冠と呼ばれる5月から6月にかけて開催される3歳馬限定の最も有名なレースの一つです。今年のレースは昨日終わってしまいましたが、競走馬の順位の組み合わせを分析するワークフローに挑戦してみましょう!
4頭の馬によるレース が行われています。レースの順位について考えられるすべての可能な組み合わせをみつけましょう。レース内にサリーという名前の *異なる* マスタングが 2 頭いることに注意してください。
エクストラクレジット: 馬が 4 頭ではなく 5 頭の場合、可能な結果はいくつありますか?馬の数が n である場合、その数は一般化できますか?
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
この辺の処理は業務でも割とよく使うのですが、馬がN頭の時の全組み合わせを作るのは面倒そうですね。
N頭の時は手を抜いて、Nの階乗を求める様にしてみました。英語版でKajitaniさんが実際の組み合わせも求めていたスポイラをちらっと見ましたが、具体的なやり方はイメージが湧いていないので、日本語版の投稿を期待しています。
ちなみに数値増減のインターフェイスのDefault値50だと答えが出て来ませんでした。データタイプを調整しても駄目で、調べてみたら
10頭で362万ケース、20頭にすると240京ケースで50頭だと桁数オーバーでした。
仮に20頭の順位を全て当てる20連単の馬券があったら、天文学的金額になるのですね…。絶対に当たりませんが。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
@AkimasaKajitani さん
スポイラにも書きましたが、10頭立てだと5040ケースと出てきますが、10!だと360万ケースになると思います。マクロで組むには難しそうで、ぱっと思いつきませんが…。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
階乗も求めるようにしてみました
N頭で一般化できるフローを作れないか考えましたが、早々に諦めました。笑
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
いつものように力技です。
ただこれだと馬の数が9頭以上になると激重になり、運用には耐えられなさそうです・・・。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
お恥ずかしいところをお見せしましたが、一般化版で全組み合わせ算出できました!
9頭で20秒ちょいですが、10頭になると4分22秒もかかりました・・・(11以上は試してません・・・)。
ちなみに、1の場合は答え出ないので、2頭以上からの対応になっています。
通常マクロ:
IterativeMacro(繰り返しマクロ):
まぁ、現実解としてはnPrの公式で出した方が良いですね・・・。
- 新着としてマーク
- ブックマーク
- 購読
- ミュート
- RSS フィードを購読する
- ハイライト
- 印刷
- モデレーターに通知する
@AkimasaKajitani さん
さすがですね、うまいこと処理されていますね。勉強になりました。
同じ数を含まないものをCountDistinctで抽出するというLogicをうまく利用されていて感動しました。目からウロコで、この処理は色々使える気がしています。
最後のLoop処理後の整形までマクロ内に組み込んでいるのは、これまた、”にくい”ですね。どんな任意の列名が出てきても最後にうまく列名を整えられるようにしているところもいいですね。
Kajitaniさんのマクロをコピペした上記Workflowを皆さんの参照用として載せておきます。