はじめに
Advent of code 2024 の準備として、過去回の Advent of code 2015 を Livebook で楽しみます
本記事では Day 8 の Part 1 を解きます
問題文はこちら
実装したノートブックはこちら
セットアップ
Kino AOC をインストールします
Mix.install([
{:kino_aoc, "~> 0.1"}
])
Kino AOC の使い方はこちらを参照
入力の取得
"Advent of Code Helper" スマートセルを追加し、 Day 8 の入力を取得します
私の答え
私の答えです。
折りたたんでおきます。
▶を押して開いてください。
回答
問題文で求められている変換は以下の通り
-
\"
->"
-
\\
->\
-
\x27
->'
つまり、文字列を Elixir のコードとして評価すれば良いことになります
Code.eval_string
でその通りのことが可能です
Code.eval_string("\"\"")
を実行すると、実行結果は {"", []}
となります
同様に以下のように変換されます
-
Code.eval_string("\"abc\"")
:"abc"
-
Code.eval_string("\"aaa\\\"aaa\"")
:"aaa\"aaa"
-
Code.eval_string("\"\\x27\"")
:"'"
これをそのまま使えば良いだけです
puzzle_input
|> String.split("\n")
|> Enum.map(fn code ->
code_length =
code
|> Code.eval_string()
|> elem(0)
|> String.length()
String.length(code) - code_length
end)
|> Enum.sum()
まとめ
Day 8 は「何の関数を使えば良いか」というだけの問題ですね
Part 2 はこちら