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

Advent of code

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

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

Day 07「Bridge Repair」

タイトルは「橋の修理」。

ストーリー的には、川の向こう側にわたりたいのに橋が修理中で渡れないとのこと。キャリブレーションをすれば終わりらしいのですが、その方程式の演算子のみを象が盗んだそうです(どういうこと?)。

入力としては以下のとおりです。

190: 10 19
3267: 81 40 27
83: 17 5
156: 15 6
7290: 6 8 6 15
161011: 16 10 13
192: 17 8 14
21037: 9 7 18 13
292: 11 6 16 20

各行が方程式なのですが、演算子がないため計算方法がわかりません。空白部分に演算子を入れれば方程式が完成するそうです。計算自体は、左から順に行います。演算子を適用したあとの右辺と左辺が合えば、その方程式は有効となります。有効な方程式の左辺の合計値が今回のパズルの答えです。

ちなみに、Part1では、演算子は「+」「*」の2つです。Part2では、さらに「||」という結合演算子が増え、例えば「10 19」であれば、単純に結合するため「1019」となります。

・ネ

・タ

・バ

・レ

Part1,2を解いてみる

正直これまじで楽勝ちゃうの?みたいな感じで半信半疑でしたがちょっと舐めてました。

ワークフローとしては以下の通り、普通に反復マクロを使っています。数字の数もせいぜい10個前後なのと、演算子も3つなので、それほどレコード数が増えないだろうということで、それほど工夫もしていません(工夫できないか・・・)。

マクロの中身は以下のようになります。

Part1マクロ:

Part2マクロ:

今回の入力は、数字の数が不定なので、データを縦持ちにして上から順に演算していくだけです。演算は一気に行うことができるため、Part1と2の違いは「||」オペレータ分のフォーミュラツールが追加されているくらいです。

終了条件として「それぞれの方程式の一番最後のレコード」で左辺と結果が合うとしています。Part1は「最後のレコード」の条件を抜かしていても動いていたのですが、Part2でたまたま計算結果が一致しており、一部の方程式が不正に混入したため、めちゃくちゃこれを発見するのに悩み、、、最終的になんとか条件を追加した、ということです。

まとめ

  • Day06が数時間かかる問題だったので疲れたのですが、今回の問題は10秒程度で結果が出て良かったです・・・。流すのに時間がかかる問題はこりごりです・・・。
  • ひさびさに1時間くらいで解ける問題でうれしいです。ほんとはこれくらいの難易度ですよね・・・。まぁ、Part2を解決するのに80%くらいの時間を使ったのですが・・・。
  • Part1は15分でPrivate Leaderboardでも1位。Part2は1時間15分で4位。たぶんPart2で1時間デバッグで悩んでましたが、5分もかからずPart2のマクロはできています(フォーミュラ1個追加するだけだったので)。結局そこから1時間かけて「AND [IterativeNumber]=[Count]」という条件を付け加えました。実質20分で解けたのにもったいない・・・。
  • ほんとひさびさに1位狙えたのにもったいない・・・(そればっかりですみません)。

コメント

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