Advent of CodeをAlteryxでやってみる2023_11日目

Advent of code

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

第拾壱話 「Cosmic Expansion」

タイトルは「宇宙の膨張」。

前回くらいから温泉に向けて移動していたようですが、途中にある展望台に舞台が移ります。ここにいる研究者を手伝うことになったのですが、どうやら宇宙を研究しているようです。

データとしては以下のようなものになっており(今回のインプットデータ)、ドットは宇宙、#は銀河です。

...#......
.......#..
#.........
..........
......#...
.#........
.........#
..........
.......#..
#...#.....

この空間のうち、行、列で一列何もない場合は宇宙空間が膨張します。すなわち、上から4行目と8行目、左から3列目、6列目、9列目は銀河がない空間のため、膨張して倍になります。すなわち以下のとおりです。

....#........
.........#...
#............
.............
.............
........#....
.#...........
............#
.............
.............
.........#...
#....#.......

その上で、それぞれの銀河間の距離を出します(マンハッタン距離)。その合計が今回のクイズの解答です。

Part2は、膨張するときに倍ではなく、100万倍になります。

・ネ

・タ

・バ

・レ

Part1、2を解いてみる

久々にマクロを使わず解ける問題です。とりあえず、膨張する部分をどう作るか、というのが一番のポイントです。その上で距離を出すのはそれほど難しい問題ではありません。ただ、各銀河の組み合わせを出すのに少し工夫が必要なくらいでしょうか。これは、、、一週目に出てもおかしくない問題かと思います。

膨張する宇宙を表現するには、行単位で見るのが簡単かと思います。行単位であれば単純にContain関数で「#」が入っているかどうかを調べるだけです。また、入っていないものを抽出し、元のデータにそのままユニオンしています。最初に行方向に見たあと、バラバラに分解し、縦横入れ替えて縦方向にも同じことを行えば、膨張した宇宙が再現できます。

ここから各銀河に絞り込みます。

これをクロスジョイン(フィールド付加ツール)し、以下のような計算式で距離を出します。

ABS([x]-[Source_x])+ABS([y]-[Source_y])

もう一つ面倒な作業が残っています。クロスジョインすると1と5、5と1という逆の組み合わせも出てくるので、これを片方のみに残す必要があります。以下のような計算式でキーをソートして格納するような項目を作成し、これらの項目をユニーク取って処理しました(以前のWeekly Challengeのポケモンでも同じような処理をしました)。

膨張した宇宙のあとは以下のようなワークフローとなりました。

最終的なPart1のワークフローは以下のとおりです。

Part2です。Part2は、最初膨張する宇宙を行生成で100万倍作ってみましたが、こういうブルートフォースアタックは無理でした・・・。ということで、数値で表現することにしました。つまり、y方向の膨張した宇宙は以下のようになります。

x方向も同じように作ります。ここまでで以下のようなワークフローになります。

さらに銀河のクロスジョインを作っておきます。Part1のユニークツールのあとからがPart2の本番です。距離を出すのに、経路が分からなければいけないのですが、経路は出していません。ただ、水平方向と垂直方向の距離をそのまま合計するだけなのですが、その経路上に膨張した宇宙が含まれています。

今回は、水平方向、垂直方向でそれぞれクロスジョイン(フィールド付加ツール)して、惑星間にハマる点だけ抜き出して最終的にすべての合計を取りました(Between関数が役に立ちました)。ただし、銀河間一つについて-2する必要があります。

最終形は以下のとおりです。

まとめ

  • 今日のはオアシス問題でしたね・・・。とはいえど、速度的に押し負けている感じです。
  • 最終的にはかなりすっきりさせることができましたが、最初できたときは結構とっちらかったワークフローになっていました。
  • Private LeaderボードでPart1は4位(24分)、Part2では6位でした(1時間10分程度)。Part2の処理に手間取った感じです。最速の人でPart1は21分、Part2総合で39分。
  • Designer Cloudでもできました!

コメント

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