$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$
はじめに
@torifukukaiou さんの パク リスペクト記事です
Elixir Livebook で Advent of Code 2023 の問題を解いてみます
実装したノートブックはこちら
問題はこちら
Part 1 はこちら
セットアップ
Kino AOC をインストールします
Mix.install([
{:kino_aoc, "~> 0.1.5"}
])
Kino AOC の使い方はこちらを参照
入力の取得
Day 1 の入力を取得します
私の答え
私の答えです。
折りたたんでおきます。
▶を押して開いてください。
details
英単語の数を数字に置き換えるマップを用意します
例にある zoneight234
のような one
と eight
で e
が重なっているとき、片方だけが置換されることがないよう、前後の一文字は残しておきます
digits_map = %{
"one" => "o1e",
"two" => "t2o",
"three" => "t3e",
"four" => "f4r",
"five" => "f5e",
"six" => "s6x",
"seven" => "s7n",
"eight" => "e8t",
"nine" => "n9e"
}
各行について全ての数を数字に置き換えます
あとは Part 1 のときと同じです
puzzle_input
|> String.split("\n")
|> Enum.map(fn line ->
digits =
digits_map
|> Enum.reduce(line, fn {word, num}, acc ->
String.replace(acc, word, num)
end)
|> then(&Regex.scan(~r/[0-9]/, &1))
first = digits |> hd() |> hd()
last = digits |> Enum.reverse() |> hd() |> hd()
String.to_integer(first <> last)
end)
|> Enum.sum()
まとめ
oneight
は意地悪ですね