$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$
$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$
はじめに
@torifukukaiou さんの パク リスペクト記事です
Elixir Livebook で Advent of Code 2023 の問題を解いてみます
実装したノートブックはこちら
問題はこちら
セットアップ
Kino AOC をインストールします
Mix.install([
{:kino_aoc, "~> 0.1.5"}
])
Kino AOC の使い方はこちらを参照
入力の取得
Day 2 の入力を取得します
私の答え
私の答えです。
折りたたんでおきます。
▶を押して開いてください。
details
まずは入力を使いやすい形にパースします
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)
ゲーム ID をキーとして、それぞれのゲームの内容を配列で持っています
各ゲーム内のサブセットについて、実行可能かどうかのチェック用関数を用意します
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()
まとめ
パターンマッチがいい感じに使えたので満足です
Day2 Part2 はこちら