Advent of CodeをAlteryxでやってみる2024_6日目

Advent of code

Advent of Codeをデータ分析ツールAlteryxでやってみるシリーズ、2024年6日目です。

※過去記事はこちら。AlteryxユーザーのためのAdvent of Codeの始め方1日目2日目3日目4日目5日目

以下の通り、未解決問題です!

Day07が始まる10分前にクリアできました!

Day 06「Guard Gallivant」

タイトルは「ぶらぶらする警備員」でいいのかしら・・・。

ストーリー的にはよくわかりませんが、とにかく歴史家たちが警備員に見つからないように、警備員のルートを把握したい、ということのようです。

....#.....
.........#
..........
..#.......
.......#..
..........
.#..^.....
........#.
#.........
......#...

まぁ、いつものMAP問題です。警備員のスタート地点は「^」が入っています。#は障害物。#にあたると右に90度向きを変えて進みます。このMAPから警備員が出るまでに通った場所の数を数えるのがPart1です。

Part2では、ルートの途中に障害物を置くと、警備員が無限ループに入ります。おける障害物は1つだけで、どこにおけば無限ループに入るか、場所の数を特定します。

・ネ

・タ

・バ

・レ

Part1,2を解いてみる

ワークフロー全体は以下のようになりました。

Part1は、いつものMAP問題なので、ルール通り動かす繰り返しマクロを作るだけです。シンプルに一歩ずつ歩くマクロです。繰り返し回数が6000回になるため、若干遅いです。

ジャンプするタイプのマクロにもできますが、Part2でこのデータを使うので、ジャンプしないタイプの方が良いですね。

Part2は、Part1の結果を利用して、障害物をおいてみて無限ループになるかどうかを調べれば良いと思われます(未解決でしたが、あっていました)。今のところ、6000歩歩いているので、数時間かけても終わらなさそう、という状況です・・・。果たしてクリアできるのか!(クリアしている人はいます)

Part1の歩行ルートの次のポイントに障害物をおいて、元の障害物と一緒くたにして歩き直してみればいいだけですが、障害物を置く、というところと、無限ループになるかどうかの判定を追加する必要があります。Part1のワークフローが遅いとかなり時間がかかってしまいます・・・。この歩行ワークフローの高速化に非常に手間取った感じです。結局1歩ずつ歩いていると繰り返し回数が増えすぎてしまうので、直線で次にあたるポイントまで1回の繰り返しの中で調べるようなアルゴリズムが必要です。

Partは外側にバッチマクロを使い、Part1の歩行ルート分、歩行ルートの次のポイントに障害物を置くために繰り返しています。

障害物を追加したデータに対して無限ループになるまで歩くマクロは以下の通りの反復マクロです。Part1に比べて直線でいけるところまでいくので複雑になっています。また、終了条件にLoopになったかどうか見ています。これは、過去の通過ポイント(といっても全部のポイントではなく、右にまがったポイントだけです)は反復入力でずっと保持しておく形にしています(その分時間がかかります)。

まとめ

  • よくありがちですが、Part1は最初のポイントを入れ忘れてて最後もたもたデバッグしていました・・・。おかげで、高速化したバージョンができました・・・。30分くらいでマクロは組めたのに、惜しいですね・・・。
  • Part2は、、、いつもの後半戦と同じくらいの難易度です、、、勘弁してほしいなぁ・・・。
  • Part2は、Part1の結果を結果を用いてやるパターンか、というのは比較的早い段階で気づきましたが、Part1マクロの動きが遅すぎてまったく進まない感じでした(約6000回バッチマクロで繰り返さないといけないのですが、全然進まない・・・)。結局、一歩ずつ歩くのではなく、直線でいけるところまでいく形でマクロを作りなおしました。それでも、2.5時間かかるワークフローになってしまいました。
  • 障害物を配置したデータを全パターン作り、並行で動かす、ということもできるのですが、うまくできませんでした・・・こちらは反復回数が200回程度になるので比較的高速に処理ができます(できるはず)。
  • やる時間が全然なくてめちゃくちゃ出遅れました・・・そのためPrivate LeaderboardでPart1は29位。ただPart2完走できている方が少なく、Part2は9位でした(ほぼ丸一日たってできた感じでしたが)。

コメント

タイトルとURLをコピーしました