LoginSignup
14
1

闘魂Elixir ── Advent of code 2023 Day 1 Part 1 を Livebook で楽しむ

Last updated at Posted at 2023-12-21

$\huge{元氣ですかーーーーッ!!!}$
$\huge{元氣があればなんでもできる!}$

$\huge{闘魂とは己に打ち克つこと。}$
$\huge{そして闘いを通じて己の魂を磨いていく}$
$\huge{ことだと思います}$

はじめに

というわけで @torifukukaiou さんのフォロワーです

パク リスペクトです

Elixir Livebook で Advent of Code 2023 の問題を解いてみます

実装したノートブックはこちら

問題はこちら

セットアップ

Advent of Code 専用の Livebook 用モジュールが存在ます

その名も Kino AOC です

Mix.install([
  {:kino_aoc, "~> 0.1.5"}
])

入力の取得

Kino AOC をインストールすると、 Advent of Code Helper のスマートセルが使えるようになります

スクリーンショット 2023-12-21 17.29.15.png

スマートセルを追加すると以下のようなフォームが表示されます

スクリーンショット 2023-12-21 17.30.48.png

YEAR と DAY をドロップダウンから選択します

SESSION の値は、というと思い切った方法で取得します

Advent of Code のサイトにログインしたあと、開発者ツールで Cookie を参照し、 session に格納されている値をコピーしてください

スクリーンショット 2023-12-21 17.33.10.png

Livebook で SESSION の入力エリアをクリックするとモーダルが開きます

Name に適当な値を入力し、 Value にコピーした値を貼り付けて +Add ボタンをクリックします

スクリーンショット 2023-12-21 17.35.01.png

これで準備完了です

スマートセルの左上 Evaluate をクリックしてください

スクリーンショット 2023-12-21 17.37.33.png

以下のようにパズルの入力が取得できています

スクリーンショット 2023-12-21 17.38.26.png

スマートセルの ASSIGN TO で指定した変数に値が入っています

puzzle_input

実行結果

"9dlvndqbddghpxc\nrtkrbtthree8sixfoureight6...

私の答え

私の答えです。
折りたたんでおきます。
▶を押して開いてください。

details
puzzle_input
|> String.split("\n")
|> Enum.map(fn line ->
  digits = Regex.scan(~r/[0-9]/, line)
  first = digits |> hd() |> hd()
  last = digits |> Enum.reverse() |> hd() |> hd()
  String.to_integer(first <> last)
end)
|> Enum.sum()

正規表現で数字を抜き出し、先頭と末尾を結合しました

まとめ

Advent of Code のためのモジュールまであるとは、さすが Livebook です

Day 1 Part 2 はこちら

14
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
14
1