Community Spring Cleaning week is here! Join your fellow Maveryx in digging through your old posts and marking comments on them as solved. Learn more here!
Free Trial

ウィークリーチャレンジ

トップになるためのスキルをお持ちですか? ウィークリーチャレンジを購読しましょう。ベストを尽くして問題を解決し、解決策を共有して、他のユーザーがどのように同じ問題に取り組んだのか確認しましょう。私たちも解答例を共有しています。

チャレンジ #119: 競馬の順位の組み合わせ

SaoriG
Alteryx Alumni (Retired)

先週のチャレンジに対する解答は こちらをご覧ください Source: https://en.wikipedia.org/wiki/Belmont_StakesSource: https://en.wikipedia.org/wiki/Belmont_Stakes

 

今週のチャレンジは@mst3kさんによって提出されました!

 

アメリカの競馬と言えばケンタッキーダービーが最も有名ですが、マンハッタンから車で1時間ほど離れた距離にあるベルモントパークでもベルモントステークス が毎年開催されます。日本のみなさんにはあまり馴染みがないかもしれませんが、これはケンタッキーダービー、プリークネスステークスとともに アメリカクラシック三冠と呼ばれる5月から6月にかけて開催される3歳馬限定の最も有名なレースの一つです。今年のレースは昨日終わってしまいましたが、競走馬の順位の組み合わせを分析するワークフローに挑戦してみましょう!

 

4頭の馬によるレース が行われています。レースの順位について考えられるすべての可能な組み合わせをみつけましょう。レース内にサリーという名前の *異なる* マスタングが 2 頭いることに注意してください。

エクストラクレジット: 馬が 4 頭ではなく 5 頭の場合、可能な結果はいくつありますか?馬の数が n である場合、その数は一般化できますか?

DaisukeTsuchiya
パルサー

この辺の処理は業務でも割とよく使うのですが、馬がN頭の時の全組み合わせを作るのは面倒そうですね。

 

スポイラ

N頭の時は手を抜いて、Nの階乗を求める様にしてみました。英語版でKajitaniさんが実際の組み合わせも求めていたスポイラをちらっと見ましたが、具体的なやり方はイメージが湧いていないので、日本語版の投稿を期待しています。

キャプチャ.JPG

ちなみに数値増減のインターフェイスのDefault値50だと答えが出て来ませんでした。データタイプを調整しても駄目で、調べてみたら
10頭で362万ケース、20頭にすると240京ケースで50頭だと桁数オーバーでした。

仮に20頭の順位を全て当てる20連単の馬券があったら、天文学的金額になるのですね…。絶対に当たりませんが。

キャプチャ2.JPG

AkimasaKajitani
17 - Castor
17 - Castor

できました!

 

 

スポイラ
AkimasaKajitani_1-1623112702663.png

※一旦エキストラクレジットなしにしておきます

 

DaisukeTsuchiya
パルサー

@AkimasaKajitani さん

スポイラにも書きましたが、10頭立てだと5040ケースと出てきますが、10!だと360万ケースになると思います。マクロで組むには難しそうで、ぱっと思いつきませんが…。

AkimasaKajitani
17 - Castor
17 - Castor

@DaisukeTsuchiya さん

 

あ、なんか私誤読してますね・・・。ちょっと直してみます。

 

gawa
15 - Aurora
15 - Aurora
スポイラ
gawa_0-1623121814349.png
階乗も求めるようにしてみました

N頭で一般化できるフローを作れないか考えましたが、早々に諦めました。笑

sanae
ボリード

いつものように力技です。

スポイラ
力技で全組み合わせを出した後、いらないものを引く作戦です。
ただこれだと馬の数が9頭以上になると激重になり、運用には耐えられなさそうです・・・。

challenge_ja_119_start_sanae.png
AkimasaKajitani
17 - Castor
17 - Castor

@DaisukeTsuchiya さん

 

お恥ずかしいところをお見せしましたが、一般化版で全組み合わせ算出できました!

9頭で20秒ちょいですが、10頭になると4分22秒もかかりました・・・(11以上は試してません・・・)。

ちなみに、1の場合は答え出ないので、2頭以上からの対応になっています。

 

スポイラ
AkimasaKajitani_2-1623156109698.png

 

通常マクロ:
AkimasaKajitani_0-1623155935087.png

IterativeMacro(繰り返しマクロ):

AkimasaKajitani_1-1623156056913.png

 

 

まぁ、現実解としてはnPrの公式で出した方が良いですね・・・。

スポイラ
AkimasaKajitani_3-1623156508474.png

 

 

 

DaisukeTsuchiya
パルサー

@AkimasaKajitani さん

さすがですね、うまいこと処理されていますね。勉強になりました。

スポイラ
KajitaniさんのMacroを逆にベタのWorkflowに展開してみて処理がわかりました。
同じ数を含まないものをCountDistinctで抽出するというLogicをうまく利用されていて感動しました。目からウロコで、この処理は色々使える気がしています。
最後のLoop処理後の整形までマクロ内に組み込んでいるのは、これまた、”にくい”ですね。どんな任意の列名が出てきても最後にうまく列名を整えられるようにしているところもいいですね。

DaisukeTsuchiya_0-1623188378318.png

Kajitaniさんのマクロをコピペした上記Workflowを皆さんの参照用として載せておきます。

ntakeda
ボリード

つくりました。一般化できました!

 

スポイラ
ntakeda_1-1623234979560.png

 


ntakeda_0-1623234956731.png