Advent of Codeをデータ分析ツールAlteryxでやってみるシリーズ、2024年25日目です。
※過去記事はこちら。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日目、23日目、24日目。
ちなみに、25日目のPart1をクリアした時のスクショです。

Day16と21がまるっと残ってました。で、最後にクリアしたのがDay16でようやく全クリアです!

Day25「Code Chronicle」
タイトルは「コード年代記」。まぁ、10周年なので年代記なのでしょうか。
ストーリー的には、最後に歴史家たちが歴史家長のオフィスに戻ってきたのですが、ロックがかかっているとのことです。ロックとキーの回路図を用いてこれを解くというのがお題です。
回路図は以下のようになっていて、上段が#で塗りつぶされているものがロック、下段が塗りつぶされているものがキーです。
#####
.####
.####
.####
.#.#.
.#...
.....
#####
##.##
.#.##
...##
...#.
...#.
.....
.....
#....
#....
#...#
#.#.#
#.###
#####
.....
.....
#.#..
###..
###.#
###.#
#####
.....
.....
.....
#....
#.#..
#.#.#
#####
ここで一組に着目すると、こちらはロック。左からピンの高さは「0,5,3,4,3」です。
#####
.####
.####
.####
.#.#.
.#...
.....
一方で、こちらはキー。ピンの高さは左から「5,0,2,1,3」です。
.....
#....
#....
#...#
#.#.#
#.###
#####
一番右側のピンだけ重なってしまうので、これはNGということになります。
キーとロックが合う組み合わせを探すのが今回のお題です。ぴったりと一致しなくてもとりあえず重なる部分がなければオッケーです。
・ネ
・
・タ
・
・バ
・
・レ
Part1を解いてみる
これ、、、一見簡単そうですが、それほどむつかしくないのですが、やってると頭が混乱します。
といっても、入力を変換していって、一文字ずつ比較できるようにしたらオッケーです。そして「#」と「.」どちらをカウントするのか混乱させられますが、いずれかに固めると比較は簡単かと思います。
私はすべて縦持ちにして、KeyとLockを分割、x軸の位置で結合することで、KeyとLockの列の位置のすべてのパターンを生成し、KeyとLockの#のカウントを足して7以下になるものが5つ揃うかどうか、ということで解決しました。ちなみに、ピンの高さを01234みたいな形で結合したものを足し算して77777以下になるか、ということをすると、桁上りであいません(これでハマってました。)。
オリジナルのワークフローは以下のように試行錯誤した結果、冗長になっていました。一度列ごとにくっつけたものを作ってからまた再分解などしていたので・・・。

最終的には以下のように最適化しました。

Part2は、他のすべてのパズルを解いた時にアンロックされます。
まとめ
- 舐めてかかるとハマるというまぁある意味良問?
- Private LeaderboardではPart1が10位、Part2も10位となりました。
- なんとかほかも終わらせて12/29に全クリアということで、なんとか年内に終わらせることができました。2022年が1/8!、2023年が1/2までかかったことを考えるとめちゃくちゃパワーアップできたと思います。来年は25日に完走できるといいですね・・・(またやるの?)
コメント