Advent of Codeをデータ分析ツールAlteryxでやってみるシリーズ、2025年11日目です。
※過去記事はこちら。AlteryxユーザーのためのAdvent of Codeの始め方、1日目、2日目、3日目、4日目、5日目、6日目、7日目、8日目、9日目、10日目。

Day 11「Reactor」
タイトルは「原子炉」。
工場の床にあるハッチからビープ音が聞こえたので中に入ることになりました。中は、巨大なトロイダル型原子炉なのですが、サーバーラックと原子炉の間の通信がうまくいってないようです。
機器と出力のリストは以下のとおりです。
aaa: you hhh
you: bbb ccc
bbb: ddd eee
ccc: ddd eee fff
ddd: ggg
eee: out
fff: out
ggg: out
hhh: ccc fff iii
iii: out
各行にデバイス名と、その出力が記載されています。「bbb: ddd eee」であれば「bbb」から「ddd」と「eee」に接続されています。
Part1では、「you」から「out」の経路を見つけなければなりません。outに至る経路は、このMAPでは5個あります。この経路数がパズルの答えです。
Part2では、問題を引き起こしている経路が「svr」から「fft」「dac」を両方通り、「out」に出ていくものであることがわかりました。この経路数を特定します。
・ネ
・
・タ
・
・バ
・
・レ
Part1、2を解いてみる
Part1は典型的なグラフ問題のルート検索です。反復マクロでAからBを追っていきます。
まずはネットワーク分析ツールで可視化してみましょう。

スタートは「you」でゴールは「out」です。Alteryxのグラフ図だと向きがよくわからないのがマイナスポイントですかね・・・。

と思ったら、ちゃんと「Edge」タブに「Directed」というオプションが用意されています。

もう少しみやすくしたいところ・・・。
マクロとしては、非常にシンプルです。

上側は繰り返し入力になります。今回はスタートから2方向へいけるようです。

下側はどこからどこへ行くか、というリストを単純に入れています。

繰り返し入力側のOutと下側のInを結合すれば、次にどこに行けばいいかわかります。終了条件は、「out」になったときです。教科書的な反復マクロです。
Part2は、fftとdacを両方通ったパスのカウントを行います。両方通った、ということは全経路を残してルート検索を行うのか?と思うと罠にハマります。計算結果を見ればわかりますが、莫大なルート数のため、このパターンをすべて保存することはできません。
そこで、fftとdacを通ったかどうか、だけを保存しておけば問題ない、ということです。また、スタートからどこかに移動する時、その数は1ですが、行った先ではそのカウントの合計がわかれば、パターン数がわかります。例えば、以下のようにOutからRight_Outに移ったとします。

このとき、dddへ行くルートは2、eeeへも2、fffへは1ということになります。なので、Right_Out側(目的地側)でグループ化して合計を取れば良い、ということになります。今回は途中のルートを保管しないのですが、route項目にはfft、dacのみが格納されるようになっています。
マクロとしては以下のとおりです。

これにより、以下のような結果が得られます。

このうち、fft、dacを両方通るものが答え、ということになります。
ワークフロー全体としては以下の通りとなります。

以下おまけですが、ネットワーク解析ツールで可視化すると以下のようになります。
svrノード:

fftノード:

dacノード

outノード

まとめ
- コツがわかれば意外と簡単という、そのひらめきが得られるかどうか、、、がポイントです。
- 最初難しく考えすぎて無理、ってなってました・・・。
- 今年はまた去年までとガラリと傾向が違うイメージです。
- さて、最終日はどんな問題が出るのでしょうか・・・。そもそも例年通りのPart1で終了なのか(Part2は全クリアボーナスでした)、それとも普通にPart2まであるのか・・・。乞うご期待。

コメント