Advent of Codeをデータ分析ツールAlteryxでやってみるシリーズ、2024年22日目です。
※過去記事はこちら。AlteryxユーザーのためのAdvent of Codeの始め方、1日目、2日目、3日目、4日目、5日目、6日目、7日目、8日目、9日目、10日目、11日目、12日目、13日目、14日目、15日目、16日目、17日目、18日目、19日目、20日目、21日目。
![](https://analytics-x.tech/wp-content/uploads/2024/12/AoC_2024_22_01.png)
Day 22「Monkey Market」
タイトルは、「モンキーマーケット」。
ストーリーとしては、猿がデバイスを盗んだのですが、取り返すのにバナナを購入することのようです。多くのバイヤーがバナナを売っていますが、価格設定は疑似ランダムで行われているようで、秘密鍵から金額を生成することができるようです。たとえば、初期の秘密鍵が123であれば、以下のように最初の10個の秘密番号を作ることができます。
15887950
16495136
527345
704524
1553684
12683156
11100544
12249484
7753432
5908254
各バイヤーはそれぞれ異なる秘密鍵を持っており、Part1では2000個の秘密番号を作り、最後の秘密番号の合計を求めます。
Part2では実際にバナナを購入します。まず、価格は生成した秘密番号の下一桁が該当します。以下の表では、一番左の数字が秘密番号、コロンの右側の数字が価格、一番右端のカッコ内の数字は価格の差分です。
123: 3
15887950: 0 (-3)
16495136: 6 (6)
527345: 5 (-1)
704524: 4 (-1)
1553684: 4 (0)
12683156: 6 (2)
11100544: 4 (-2)
12249484: 4 (0)
7753432: 2 (-2)
価格の差分の連続した4つのパターンの最後のところでバナナを買うことができます。もちろんどこでも買うことができるのですが、各バイヤー間では同じパターンでしか購入することができません。この条件でバナナを最も購入できる時の個数(合計しているのは価格な気がしますが・・・)を求めます。
・ネ
・
・タ
・
・バ
・
・レ
Part1、2を解いてみる
Part1は、与えられた秘密鍵生成のロジック通り組んで、2000回反復マクロを回すだけです。
![](https://analytics-x.tech/wp-content/uploads/2024/12/AoC_2024_22_02.png)
Part2やデバッグ用途ですべてを出力しています(A出力)。例えば以下のようになります。
![](https://analytics-x.tech/wp-content/uploads/2024/12/AoC_2024_22_03.png)
Part2は、この結果をそのまま使っていきます。といっても必要なのはInputと書かれているところだけです。ここから下一桁を生成し、前後の価格から差分を作成します。
ポイントは、複数行フォーミュラを使って、現在の行から3つ前までの行を結合し、パターンを作成します。あとは、このパターンごとにバナナの本数が多いものを探します。ちなみに、同じバイヤーで同じパターンを持つ場合はありますが、必ず最初のパターンが一致した時のバナナの数を取る必要があります。
![](https://analytics-x.tech/wp-content/uploads/2024/12/AoC_2024_22_05-1024x303.png)
まとめ
- AI対策で問題がわかりにくくなっているのでしょうか?どちらかというとロジックの難しさではなく問題文の読み取りの難しさがいやらしい感じでした。
- Part1はあっさりと拍子抜けでした。Part2も変にひっかかるポイントはなかったように思います(まぁ、うまく考慮できた、という感じです)。
- これくらいの速度で終わる(1分以内でワークフローがまわる)のはありがたいですね。難易度もちょうどいいくらいでした。
- 久々にリアルタイムで参加でした。Private Leaderboardでは久々のPart1で4位、Part2で3位入賞って感じです。だいたいタイム的には1時間くらいでした。
コメント