※過去記事はこちら。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への変換で結構悩みました・・・(その日のうちには解いていますが・・・)。
コメント