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

Advent of code

※過去記事はこちら。AlteryxユーザーのためのAdvent of Codeの始め方1日目2日目3日目4日目5日目6日目7日目8日目9日目10日目11日目12日目13日目14日目16日目15日目17日目18日目19日目20日目21日目22日目23日目24日目

25日目です。ラスト!!!21のPart2が解けたときの画像を採用しています。

タイトルは、「Full of Hot Air」。熱気で満たされる、ですかね。

今年のラスト問題は、熱気球で戻るために指定した燃料を入れて気球を動かす問題です。規定の燃料の数値をコンソールに入れる必要があるのですが、独自の数値で示されており、これを解読しなければなりません。

サンプルの入力データとしては、以下のようになっています。これは、SNAFUと呼ばれるエルフの謎の数値で書かれています。

1=-0-2
12111
2=0=
21
2=01
111
20012
112
1=-1=
1-12
12
1=
122

これ、いわゆる5進数なのですが、記号混じりの特殊な5進数です。例えば、以下のように対応しています(左側が10進数、右側がエルフの謎のSNAFUと呼ばれる数値)。

1→1
2→2
3→1=
4→1-
5→10
6→11
7→12
8→2=
9→2-
10→20

これ、「=」は-2、「-」は-1を示しているとも言えます。

サンプルデータを変換すると以下のようになります。

1=-0-2→1747
12111 →906
2=0=  →198
21    →11
2=01  →201
111   →31
20012 →1257
112   →32
1=-1= →353
1-12  →107
12    →7
1=    →3
122   →37

この最終問題でやるべきことは、SNAFUという謎のエルフの数値を合計する、というものです。

ちなみに、最終問題にはPart2はありません。Part2のスターはすべての他の問題が解けた時にもらえるボーナススターです。

・ネ

・タ

・バ

・レ

解いてみる

ステップとして、まずSNAFUを10進数に変換し、合計した後にSNAFUに変換する、という方法を取りました。さすがにSNAFU内で計算するのはハードル高いので・・・。

まず、10進数への変換です。これは結構簡単でした。基本的な進数の変換と同じです。ただ、「=」は-2、「-」は-1に変換して進数変換を行いました。

例えば、1桁目は5の0乗、2桁目は5の1乗、3桁目は5の3乗、ということになります。これとそれぞれの桁数の数値をかけ合わせれば10進数に変換できます(これだけでも普通にPart1として問題出してもらってもいいくらいですよね・・・)。

その後、SNAFUにします。これも一般的な進数変換ですが、出てきた数値が3,4の場合、桁上りを起こします(それぞれ1=、1-という数値になるため)。この桁上りをちゃんと処理すればできあがりです。

SNAFUへの変換がちゃんとできているかどうかは、前半でSNAFUからの変換ができているので、検算可能です。

さすがにこの程度であればマクロなしで対応可能でした。

まとめ

  • 25日目は進数変換の問題でした。
  • 難易度的には予想通り軽めでした。Part1解いた人も結構います。
  • 個人タイム:10進数の変換まで行って、一度食事に出てから続きをしたので時間がかかっています。SNAFUへの変換で結構悩みました・・・(その日のうちには解いていますが・・・)。

解答ワークフローダウンロード

コメント

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