※過去記事はこちら。AlteryxユーザーのためのAdvent of Codeの始め方、1日目、2日目、3日目、4日目、5日目、6日目、7日目
8日目です。年末ともなるとやはり飲み会の時期ということで、東京Alteryxユーザー会の幹事メンバーと忘年会してましたら、ブログが遅れてしまいました!
タイトルは、「Treetop Tree House」。木の頂上の木の家、でしょうか。
8日目にもなると大分高難度の問題になってきますね・・・。
入力データとしては、以下のようになっています。
30373
25512
65332
33549
35390
これは、森を示していて、この数字はそれぞれ生えている木の高さを示しています。外から見たときに見える木の本数をカウントする、というのがPart1の問題です(外周は常に見えているということでカウントされます)。
木の方から見たときに外まで見える条件は、自分がいるポジションの木より低いことです。
Part2は、各木の上から、各方向(東西南北)に見える木の本数をかけ合わせた結果、最も高いポイントを求めることです。例えば、北方向に2本、南に2本、東に3本、西に5本であれば、2x2x3x5という計算になります。
・ネ
・
・タ
・
・バ
・
・レ
解いてみる
今回も時間の都合上、ワークフローのみ掲載します(後で時間があるときに詳細記載します)。
マクロを使った初期バージョン
今回はマクロベースで行っています。こういう各ポイントを扱うパターンはロジック組むのが結構時間かかります。マクロで行う場合は結構素直にマクロを作れば解けるパターンが多いのですが、問題はデータ量です。今回はPart1を実行するのに3分23秒、Part2は5分11秒でした。マクロ使わずに作るともっと高速に実行が可能なはずです。
マクロ:Part1用
マクロ:Part2用
まとめ
- 8日目は、Advent of Codeではしばしばあるタイプの問題です。マクロ使わずに解くこともできるのですが、なかなかロジックを組み立てるのが慣れないと大変です。
- 最速の人でも52分。早く解けて1時間程度の問題でした。
- 個人タイム:Part1 45分48秒、Part2 1時間25分44秒(Private Leaderboardで4位)
コメント