はじめに
Advent of code 2024 Day 1 の Part 1 と Part 2 を解きます
問題文はこちら
実装したノートブックはこちら
セットアップ
Kino AOC をインストールします
Mix.install([
{:kino_aoc, "~> 0.1"}
])
Kino AOC の使い方はこちらを参照
入力の取得
"Advent of Code Helper" スマートセルを追加し、 Day 1 の入力を取得します
私の答え
私の答えです。
折りたたんでおきます。
▶を押して開いてください。
Part 1
回答
まず入力を読み込みます
[[a1, b1], [a2, b2], [a3, b3]]
というような形になっているのを [{a1, b1}, {a2, b2}, {a3, b3}]
に変換してから Enum.unzip
により {[a1, a2, a3], [b1, b2, b3]}
という形に変換しました
{left_list, right_list} =
puzzle_input
|> String.split("\n")
|> Enum.map(fn row ->
row
|> String.split(" ")
|> Enum.filter(&(&1 != ""))
|> Enum.map(&String.to_integer(&1))
end)
|> Enum.map(fn [a, b] -> {a, b} end)
|> Enum.unzip()
これを両者昇順に並び替え、 Enum.zip
で [{a1, b1}, {a2, b2}, {a3, b3}]
という形に戻します
両者の差を abs
で絶対値に変換してから合計しました
Enum.zip(Enum.sort(left_list), Enum.sort(right_list))
|> Enum.map(fn {left, right} -> abs(left - right) end)
|> Enum.sum()
Part 2
回答
問題文の通り、そのままの計算を実施しました
Enum.count
で条件に一致する件数を取得しています
left_list
|> Enum.map(fn left ->
left * Enum.count(right_list, fn right -> left == right end)
end)
|> Enum.sum()
まとめ
問題文から ChatGPT に画像を生成してもらいました
Day 1 なので非常に簡単でした