Advent of Codeをデータ分析ツールAlteryxでやってみるシリーズ、2024年23日目です。
※過去記事はこちら。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日目、22日目。
Day 23「LAN Party」
タイトルは「LANパーティ」。確かにネットワーク図の問題でした。
ストーリー的にはLANパーティのポスターに出会い、ネットワークに繋げることにしたようです。以下は入力データになりますが、2台ごとにのPCの接続状況をリスト化したものです。つまり、一番上の行であれば、khとtcというPCが接続されているということです。
kh-tc
qp-kh
de-cg
ka-co
yn-aq
qp-ub
cg-tb
vc-aq
tb-ka
wh-tc
yn-cg
kh-ub
ta-co
de-co
tc-td
tb-wq
wh-td
ta-ka
td-qp
aq-cg
wq-ub
ub-vc
de-ta
wq-aq
wq-vc
wh-yn
ka-de
kh-ta
co-tc
wh-qp
tb-vc
td-yn
ちなみに、上のリストはある一つのネットワークにつながっています。さらにここから、3台同士がつながっているリストを作ります。
aq,cg,yn
aq,vc,wq
co,de,ka
co,de,ta
co,ka,ta
de,ka,ta
kh,qp,ub
qp,td,wh
tb,vc,wq
tc,td,wh
td,wh,yn
ub,vc,wq
が、セット(相互に接続されている)になっているようです。
Part1では、この3つの相互接続されたリストを求め、tで始まるPCが入った組合せを発見し、その組合せの数を求めます。例えば上のリストは下のように7パターンがある、ということになります。
co,de,ta
co,ka,ta
de,ka,ta
qp,td,wh
tb,vc,wq
tc,td,wh
td,wh,yn
Part2では、実際にネットワークに接続するには、パスワードが必要です。それは、ネットワーク内で相互接続されたPCの数がもっとも多いものを探します。そして、そのPCの名をアルファベット順に並べ、カンマ区切りで結合したものがPart2の答えです。
上のサンプルのネットワークであれば、tを含む相互接続されたPCの数は4台が最大です。その接続は以下のようになっています。
ka-co
ta-co
de-co
ta-ka
de-ta
ka-de
答えは「co,de,ka,ta」になります。
・ネ
・
・タ
・
・バ
・
・レ
Part1,2を解いてみる
比較的落ち着いた難易度の問題かと思いますが、まずこういう問題は問題を可視化してみましょう。Alteryxの場合ネットワークツールが使えます。
うーん、だいぶんいやんな感じですが、いくつかの塊がありそうなことはわかります。
Part1は、とにかく3個が相互接続されているものを探します。Part2ではこの塊を探して、頭文字にtを含むPCのうち、一番PCの数が多いものを探します。
単純に2回結合を繰り返すと全パターンのリストができあがります。
ここで、カラムのnameと3が同じ名前であれば相互接続されている、ということになります。あとはこの中から頭文字にtを含んで、重複を省けばオッケーです。
Part2は、Part1でできた3個の相互接続リストから開始します。このリストに対して接続できそうなノードを一つ追加して、相互接続リスト内のPCと相互接続できるかどうか、というのをチェックします。相互接続できたらそれを含めて新たな相互接続リストとします。これを繰り返して、最終的に、これ以上追加できないところまで来たものが最長のリストになります。だいたい反復回数は10回になりました。
ワークフローは以下のとおりです。
まとめ
- 去年に引き続きグラフ理論的な問題。
- ワークフローは1,2あわせて約4分で回ります。色々聞いていると結構このワークフローは遅いようです。泥臭いことやってますからね・・・。
- 本日もPart1はリアルタイムにいけました。Private Leaderboardでは、Part1は3位、Part2は6位となりました。Part2はデバッグで少々悩みました。
コメント