$\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 2 の入力を取得します
私の答え
私の答えです。
折りたたんでおきます。
▶を押して開いてください。
details
ゲームのパースは Part 1 と同じです
games =
puzzle_input
|> String.split("\n")
|> Enum.into(%{}, fn line ->
[title, items] = String.split(line, ":")
game_num =
title
|> String.replace("Game ", "")
|> String.to_integer()
game =
items
|> String.split(";")
|> Enum.map(fn subsets ->
subsets
|> String.split(",")
|> Enum.into(%{}, fn subset ->
[_, number, color] = String.split(subset, " ")
{color, String.to_integer(number)}
end)
end)
{game_num, game}
end)
各ゲームについて最低限必要な各色の数を求めるため、色毎に各ゲームでの最大値を取得し、掛け合わせて合計します
games
|> Enum.map(fn {_game_num, game} ->
["red", "green", "blue"]
|> Enum.map(fn color ->
game
|> Enum.map(&Map.get(&1, color, 0))
|> Enum.max()
end)
|> Enum.product()
end)
|> Enum.sum()
まとめ
Part 2 ですが、そんなに意地悪なこともなく解けました