はじめに
Advent of code 2024 の準備として、過去回の Advent of code 2015 を Livebook で楽しみます
本記事では Day 1 の Part 2 を解きます
問題文はこちら
実装したノートブックはこちら
Part 1 はこちら
セットアップ
Kino AOC をインストールします
Mix.install([
{:kino_aoc, "~> 0.1"}
])
Kino AOC の使い方はこちらを参照
入力の取得
"Advent of Code Helper" スマートセルを追加し、 Day 1 の入力を取得します
私の答え
私の答えです。
折りたたんでおきます。
▶を押して開いてください。
回答
Enum.reduce_while
で (
や )
による上昇下降を順次実行していき、 0 より小さくなったときのインデックスを取得します
Enum.with_index
で初期値 1 を指定することで、インデックス番号を 1 開始にすることができます
puzzle_input
|> String.codepoints()
|> Enum.with_index(1)
|> Enum.reduce_while(0, fn {direction, index}, current ->
current =
case direction do
"(" -> current + 1
_ -> current - 1
end
if current < 0 do
{:halt, index}
else
{:cont, current}
end
end)
まとめ
最初の方は素直に組めばいいだけなので楽ですね