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

第六話 「Wait For It」
タイトルは「それを待つ」。ボタンを押す時間のことを言っているようです。
第5話でフェリーに乗り、新たなところに来たようですが、今度はボートレースをするようです。このレースは少し特殊で、決まった時間以内にどれだけ遠くまで行けるか、というルールです。また、既定距離があり、これを超える必要があります。ボタンは1秒押し続けるとその分速度が出ます。例えば1秒押すと速度は1ミリ。2秒押すと2ミリ、と押した秒数分だけ速度が線形にあがります(10秒押せば10ミリ)。ボタンは出発時しか押せないことに注意です。※どうやらボードはおもちゃサイズのようです。
入力としてはかなりシンプルです。
Time: 7 15 30
Distance: 9 40 200
これ、三回分のレースとなっていて、
7秒のレース:既定距離9ミリ
15秒のレース:既定距離40ミリ
30秒のレース:既定距離200ミリ
となっています。
ボタンを押す時間を1秒単位で変えれるとして、既定距離を超えるためにボタンを押す時間は何パターンあるか、というのを調べます。それぞれのレースのパターンを掛け算したものがPart1の答えです。
この最初のレースだと、既定距離は9ミリです。
0秒押す:速度0:移動秒数7:移動距離0:判定 NG
1秒押す:速度1:移動秒数6:移動距離6:判定 NG
2秒押す:速度2:移動秒数5:移動距離10:判定 OK
3秒押す:速度3:移動秒数4:移動距離12:判定 OK
4秒押す:速度4:移動秒数3:移動距離12:判定 OK
5秒押す:速度5:移動秒数2:移動距離10:判定 OK
6秒押す:速度6:移動秒数1:移動距離6:判定 NG
OKは4パターンです。同様に残りのレースも判定すると、8パターンと9パターンとなり、乗算すると288となります。
Part2は、インプットの空白を無視します。つまり1レースだけなのですが、時間は71530で距離は940200です。
・ネ
・
・タ
・
・バ
・
・レ
Part1,2を解いてみる
昨日の難易度に騙される必要はありませんでした。そのまま素直に解きましょう。
まずインプットを整えます。


ここからTimeを使って行生成します。つまりボタンを押す時間を行生成で作ります。

あとは、簡単な計算式で判定すれば完了です。
[Count]*([Time]-[Count])

Part2は、インプットの整形ロジックを少しだけ変更しましょう(むしろPart1より簡単になります)。その後の計算も同じで、今回1レースだけなので乗算せずに単なるカウントを取ったら完了です。

まとめ
- むしろ1日目より簡単でした
- まぁ、Part2でどんなどんでん返しが来るのかビビってたら拍子抜けパターン。
- Part1は9分、Part2は3分、合計12分くらいでした。Private LeaderボードでPart1は最速でしたがPart2は2で総合2でした。惜しくもトップ取れず・・・。全体として、現時点ではトップのままです。
コメント