this repo has no description

ft: add day 02.2022

Changed files
+128 -62
2022
+11 -62
2022/day01.livemd
···
puzzle_input
|> String.split("\n")
|> Enum.chunk_while(
-
[],
+
0,
fn
-
"", acc -> {:cont, Enum.reverse(acc), []}
-
val, acc -> {:cont, [String.to_integer(val) | acc]}
+
"", acc -> {:cont, acc, 0}
+
val, acc -> {:cont, String.to_integer(val) + acc}
end,
fn
-
[] -> {:cont, []}
-
acc -> {:cont, Enum.reverse(acc), []}
+
0 -> {:cont, 0}
+
acc -> {:cont, acc, 0}
end
)
+
|> Enum.sort(:desc)
```
<!-- livebook:{"output":true} -->
```
-
[
-
[5800, 2273, 1315, 5801, 6352, 2649, 4140, 2115, 5298, 4441, 4428, 3773, 1076],
-
[8063, 10386, 5705, 8397, 1084, 7661],
-
[3661, 5756, 3231, 5162, 4930, 4675, 1113, 6795, 6415, 1144, 2900, 5147, 2966],
-
[35187],
-
[12434, 2038, 12435, 8757, 6976, 4532],
-
[4642, 4431, 5126, 4672, 1724, 3012],
-
[3801, 6564, 5401, 3913, 3090, 1484, 6227, 1283, 2501, 4601, 5860, 7036],
-
[19257, 31867],
-
[4292, 4518, 1298, 13147, 7463],
-
[6784, 1065, 4015, 3154, 6429, 5067, 6535, 5731, 1270, 5870, 4934, 2800],
-
[5227, 6294, 6733, 5177, 2773, 6553, 3219, 1446, 7005, 6036, 6872],
-
[1721, 4408, 5577, 2799, 2257, 3149, 2389, 3713, 5588, 2324, 4595, 6018, 4926],
-
[1233, 4799, 3380, 1975, 1924, 1578, 2338, 1546, 3708, 4020, 5872, 2519, 5334, 4416],
-
[18103, 1692, 10497, 6786],
-
[4837, 12315, 6510, 9221, 10023, 5698],
-
[9781, 18818, 19784, 5100],
-
[7596, 14668, 18708],
-
[1932, 18024, 6361],
-
[7302, 5163, 9039, 4774, 8726, 6538, 2054, 7238, 4233],
-
[3375, 6049, 4925, 7129, 6075, 1262, 3836, 5878, 3292, 1316, 3924, 3530],
-
[8653, 21172, 18837],
-
[8052, 1672, 2962, 3270, 8160, 3033, 2004, 7774, 8182, 3047],
-
[7917, 2458, 1040, 7210, 7742, 4296, 2861, 9324, 5721],
-
[17851, 11236, 7107],
-
[6962, 4498, 10042, 4539, 10759, 8378, 5781],
-
[7156, 10063, 5329, 2449, 4749, 6498, 6493, 1924],
-
[2161, 1309, 1770, 3195, 1581, 1194, 1455, 1350, 5298, 5290, 1872, 2155, 3060, 1514, 1872],
-
[9664, 14392, 10201, 12693, 8817],
-
[4960, 2281, 6321, 4953, 1439, 1372, 5253, 2338, 2516, 6332, 2760, 6702, 2354],
-
[1341, 1489, 7110, 2267, 6809, 4198, 1137, 2526, 2087, 3885, 4952, 3056],
-
[6561, 1313, 6624],
-
[11571, 3452, 15300, 1518, 14811],
-
[3421, 5270, 1676, 6712, 6231, 6617, 6775, 5428, 3497, 5598, 3723],
-
[7879, 7984, 2678, 5770, 4217, 5323, 3708, 2799, 5466],
-
[2895, 3934, 4468, 6864, 4531, 5622, 3281, 6518, 4313, 5273, 3945, 5378, 2585],
-
[3486, 6101, 1036, 1079, 3380, 4542, 3617, 4279, 2397, 2172, 3711, 6251, 1219, 6320],
-
[6785, 4840, 4314, 3647, 4660, 5968, 1932, 3144, 2131, 6556, 5107, 2018, 4441],
-
[2958, 2812, 1812, 4047, 4055, 11311, 7254],
-
[2563, 1559, 6369, 4595, 3617, 1979, 1988, 1648, 2520, 5216, 6227, ...],
-
[4417, 5913, 2444, 6808, 4742, 2422, 5153, 6707, 6968, 6663, ...],
-
[9949, 19801, 14001, 15160],
-
[1166, 12942, 15632, 3266, 16053],
-
[7820, 7480, 1377, 4492, 5371, 1411, 2455, ...],
-
[17669, 8092],
-
[8706, 7270, 2362, 3278, 7920, ...],
-
[1300, 5806, 9993, 5891, ...],
-
[6375, 2494, 2291, ...],
-
[6224, 1559, ...],
-
[16526, ...],
-
[...],
-
...
-
]
+
[66616, 66306, 66250, 65758, 65264, 65080, 64911, 64448, 64423, 64338, 63797, 63599, 62203, 61850,
+
61072, 60910, 60591, 60292, 60152, 59794, 59607, 59403, 59135, 59074, 58989, 58949, 58911, 58736,
+
58665, 58474, 58406, 57457, 57335, 56727, 56537, 56224, 56117, 56096, 55767, 55585, 55543, 55409,
+
55193, 55067, 54988, 54977, 54948, 54820, 54813, 54680, ...]
```
## Task 1
```elixir
elves
-
|> Enum.map(&Enum.sum/1)
-
|> Enum.max()
+
|> List.first()
```
<!-- livebook:{"output":true} -->
···
```elixir
elves
-
|> Enum.map(&Enum.sum/1)
-
|> Enum.sort(:desc)
|> Enum.take(3)
|> Enum.sum()
```
+117
2022/day02.livemd
···
+
<!-- livebook:{"persist_outputs":true} -->
+
+
# Day 02
+
+
```elixir
+
Mix.install([
+
{:kino_aoc, git: "https://github.com/ljgago/kino_aoc"}
+
])
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
:ok
+
```
+
+
## Section
+
+
<!-- livebook:{"attrs":{"day":"2","session_secret":"ADVENT_OF_CODE_SESSION","variable":"puzzle_input","year":"2022"},"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} -->
+
+
```elixir
+
{:ok, puzzle_input} =
+
KinoAOC.download_puzzle("2022", "2", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION"))
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
{:ok,
+
"C Z\nC Y\nB X\nA Z\nC Z\nB X\nC Z\nB Z\nA Z\nA Z\nB Z\nB X\nC Z\nC Z\nA Z\nB Y\nB X\nC Y\nB X\nB X\nA Y\nA Z\nA Z\nA Z\nA Z\nC Z\nA Z\nC Z\nB X\nA X\nA Z\nB Y\nB X\nA Z\nB X\nC Z\nA Z\nC Z\nA Z\nA Z\nB X\nC X\nB X\nA X\nB X\nA Z\nA Z\nB X\nB Y\nB Y\nB Y\nC Z\nA Z\nA Z\nC X\nB X\nC Y\nB X\nC Z\nA Z\nC Z\nB X\nB X\nB Z\nB X\nA Z\nC Z\nA Z\nA Z\nA Z\nA Z\nB X\nC Z\nC Y\nA Z\nA Z\nA Z\nA Z\nC Z\nA X\nA Z\nA Z\nC Z\nC Y\nA Z\nC Y\nA Z\nA Z\nC Y\nC Z\nC Z\nA Z\nB Y\nB X\nB Y\nC Z\nA Z\nA Z\nA Z\nB Z\nC Z\nA Z\nB X\nC Y\nA Z\nB X\nA Z\nB Z\nA Z\nB X\nA Z\nB Y\nA Z\nA Z\nC Y\nA Z\nB Z\nA Z\nA Y\nB Y\nC Z\nA Z\nB X\nC Z\nC Z\nB X\nC Z\nC Z\nA Z\nB X\nC Z\nC Z\nA Z\nC Y\nA Z\nA Z\nB Y\nC Y\nA Z\nB X\nB Y\nB X\nB X\nA Z\nC Y\nA Z\nC Y\nA Z\nB Y\nC Z\nA Z\nA Z\nC Y\nA Z\nA Z\nC Z\nA Z\nA Z\nA Z\nC Y\nA Z\nB X\nC Z\nA Z\nC Z\nB Z\nC Z\nA Z\nC Y\nB X\nC Z\nC Z\nA Z\nC Y\nA Z\nB Y\nB X\nA Z\nC Y\nC Z\nB X\nC X\nB X\nC Y\nB X\nB X\nC Z\nB X\nA Z\nC X\nA Z\nC Z\nB X\nC Y\nA Z\nA Z\nC Z\nC Y\nA Z\nA Z\nA Z\nB X\nA Y\nB X\nC X\nC Z\nB X\nC Z\nC X\nA Z\nC Z\nB Z\nA X\nA Z\nC Y\nA Z\nC Z\nC Z\nB X\nC Z\nA X\nC Y\nC Z\nC Z\nC Z\nB Y\nC X\nB X\nA Z\nB Y\nA Z\nA Z\nC Y\nA Z\nB X\nA Y\nA Y\nC Y\nA Z\nA Z\nC Z\nA Z\nA Z\nA Z\nB Y\nB X\nB X\nA Z\nC X\nC Y\nA Z\nC Z\nA Z\nA Z\nA Z\nA Z\nA X\nA Z\nC Z\nA Z\nB Y\nA Y\nA Y\nC Y\nC Y\nB X\nB Y\nA Z\nA Z\nC X\nA Z\nB X\nC Y\nA Y\nA Y\nA Z\nC Y\nC Z\nB X\nA Z\nC Y\nB X\nC Z\nA Z\nB X\nA Z\nC Y\nB X\nC Z\nA Z\nA Z\nA Y\nA Z\nA Z\nC Y\nC Z\nA Z\nB X\nC Z\nC Y\nA Z\nA Z\nC Y\nA Z\nC Z\nB X\nA Z\nC Z\nA Z\nA Z\nA Z\nC Y\nC Y\nB X\nB Z\nB X\nA Z\nB Y\nB Y\nA Z\nA Z\nA Z\nB Y\nB Y\nC Y\nA Y\nA Z\nC X\nB X\nA Y\nB Y\nC Y\nA Z\nB Z\nC Y\nC Z\nB X\nA Z\nA X\nB X\nC Y\nB Z\nA Z\nB Y\nA Z\nB X\nA Z\nB X\nA Z\nC X\nC Y\nC Z\nB X\nC Z\nC Y\nA Z\nC X\nC Z\nA Z\nC Y\nA Y\nC Y\nC Y\nB Y\nA Z\nA Z\nA Y\nA Z\nC Z\nB X\nA Y\nB X\nB Y\nB X\nA Z\nC Z\nC Z\nC Y\nB X\nC Z\nA X\nA Z\nA Z\nA Y\nA Z\nA Z\nA Z\nA Z\nB Z\nB X\nB X\nC Y\nC Z\nC Z\nA Y\nB X\nC Z\nC X\nC Z\nB Y\nA Z\nB X\nB Y\nB X\nA Z\nB X\nB X\nA Z\nA Z\nC X\nB X\nC Z\nC X\nA Z\nA X\nC Z\nA Z\nA Z\nC Z\nB Z\nC Z\nB X\nA Z\nA Z\nC Z\nA Y\nA Z\nA Z\nC Y\nA Z\nB X\nB Y\nA Z\nA Y\nA X\nB X\nA Z\nA Z\nC Y\nC Y\nA Z\nC X\nA Z\nA Y\nA Z\nB Y\nA Z\nA Y\nB X\nC Z\nA Z\nB X\nA Z\nA Z\nB X\nA Z\nA Z\nB X\nA Z\nC Y\nA Z\nC Z\nC Y\nB Y\nB X\nA Z\nB Y\nA Z\nA Z\nB X\nA Z\nA Z\nB X\nC Z\nA Z\nC Z\nB X\nB X\nB Y\nA Y\nC Y\nB X\nA Z\nC Z\nA Z\nA Z\nA Z\nB X\nA Z\nB X\nA Z\nA Z\nA Z\nC Z\nA X\nB X\nB Z\nA Z\nA Z\nC Z\nA Z\nA Z\nA Z\nB Y\nA Y\nC Z\nB X\nB X\nC Y\nA Y\nA Z\nC X\nB Z\nA Z\nA Z\nC Z\nA Z\nA Y\nB Y\nC Z\nB X\nA Z\nA Z\nA Z\nC Z\nA Z\nA Y\nB X\nC Y\nA Z\nA Z\nA Z\nC X\nB X\nA Z\nA Z\nC Z\nB X\nA Z\nA Z\nA Z\nA Z\nA Z\nA Z\nC Y\nA Z\nB X\nA Y\nC Y\nA Z\nA Z\nB X\nA Z\nB Y\nA Y\nB X\nA X\nA Z\nC Z\nC Z\nC Y\nA Z\nB Y\nA Z\nC X\nA Z\nA Z\nB X\nA Z\nA Z\nB Y\nA Y\nA Z\nA Z\nB X\nC Y\nB X\nB Y\nC Y\nC X\nA Z\nA Z\nB Y\nA Z\nB Y\nC Y\nC Y\nA Z\nC Y\nA Z\nC Z\nA Z\nB X\nA Z\nA Z\nA X\nA Z\nA Z\nA Z\nA Z\nB Z\nC X\nB Y\nA Z\nC Z\nA Z\nA Z\nA Z\nC Z\nB X\nA Z\nB X\nC Y\nC Z\nA Z\nA Z\nC Z\nB X\nB X\nA Z\nA Z\nB X\nA Z\nA Z\nC Z\nA Z\nA Z\nA X\nC Z\nC Y\nA Z\nA Z\nA Z\nA Z\nC Z\nA Z\nA Z\nB Z\nA Z\nC Y\nA Z\nA Z\nB Y\nA Z\nA Z\nB X\nA Z\nB X\nA Z\nA Z\nC Y\nA Y\nC Y\nB Z\nB X\nB Y\nA Z\nA Z\nC Y\nA Z\nA Y\nB Z\nA Z\nC Y\nA Z\nA Z\nA X\nA Z\nB Y\nB Y\nA Z\nA Z\nA Z\nC Z\nC Z\nA Y\nC Y\nB X\nA Y\nB X\nB Y\nC X\nC Y\nC Y\nA Z\nC Z\nA Z\nA Z\nA Z\nB X\nA Z\nA Z\nA Z\nA Z\nA Y\nB X\nA Z\nA Z\nB X\nA Z\nA Z\nA Z\nA Z\nA X\nC Y\nB X\nA Z\nA Y\nC Y\nC Y\nA X\nA Z\nC X\nC Z\nA Z\nC X\nA Z\nA Z\nB Y\nA Z\nA Z\nA Z\nB X\nA Z\nA Z\nB X\nB X\nA Z\nA Z\nC Z\nC Z\nA Z\nC Z\nB X\nA Z\nA Z\nB X\nC Z\nC Z\nC Y\nC Z\nA Z\nB X\nA X\nC Z\nA X\nC Z\nA Z\nA Z\nA Z\nA Z\nA Z\nB X\nA Z\nB X\nC Y\nA Z\nA Z\nA Z\nC Z\nA Y\nA Y\nB Y\nA Z\nA Z\nC Y\nC Z\nB X\nB X\nA X\nC Z\nB X\nA Z\nA Z\nA Z\nB Z\nA Z\nC Y\nB X\nA Z\nA Z\nA Y\nB Y\nC Z\nC Z\nA Z\nA Z\nA Z\nB Y\nA Z\nC Y\nB X\nB Z\nC X\nB X\nC Y\nA X\nC Z\nA Z\nB X\nC X\nA Y\nC X\nA Z\nB X\nB X\nA Z\nA Z\nC Z\nB X\nB Z\nC Y\nC Z\nA Z\nB Y\nA Z\nA Z\nB X\nC Y\nA Z\nC Z\nA Z\nB Z\nC Z\nC Z\nA Z\nC Y\nA Z\nA Z\nA Z\nC Z\nC X\nB Y\nC Y\nA Z\nC Y\nC Y\nC X\nC Y\nA Z\nC Y\nC Y\nC X\nC X\nA Z\nB X\nA Z\nC Y\nA Z\nB X\nB X\nB X\nB X\nB X\nB Y\nA Z\nA Z\nC Z\nA Z\nA Z\nA Z\nC Z\nC Z\nC Z\nA Z\nA Z\nA Y\nA Z\nA Z\nA Y\nA X\nC Z\nA Z\nA Z\nC Z\nB X\nC Z\nB Y\nC Z\nA Y\nA Z\nC Y\nB X\nA Z\nC Y\nA Z\nC Z\nC Y\nB X\nA Z\nA Z\nA Z\nA Z\nA Z\nC X\nC Z\nA Z\nA Z\nA Z\nC Z\nA Z\nB X\nA Z\nA X\nA Z\nB X\nA Z\nC Z\nA Z\nA Y\nB X\nB Z\nA Z\nB X\nA Z\nA Z\nB Y\nA Z\nA Z\nC Y\nB Y\nC X\nA Z\nA Z\nA Z\nC Z\nA Z\nA Z\nA Z\nC Z\nA Z\nC Y\nB X\nA Z\nA Z\nC X\nA Z\nC Z\nA Z\nB Y\nA Z\nA Y\nC Z\nC Z\nA Y\nA Y\nA Z\nA X\nA Z\nA Z\nB X\nA Z\nA Z\nB X\nC Z\nA Z\nA Y\nB X\nA Z\nA Z\nC Z\nA Z\nA Z\nB X\nB Z\nA Z\nA X\nB Y\nA Z\nB X\nA Z\nC Z\nB X\nC Y\nA Z\nB X\nA Z\nA Z\nA Z\nB Z\nA Z\nC Z\nA Z\nC Z\nB X\nA Z\nB Z\nA Z\nC Z\nC Z\nB Y\nC Z\nA Z\nA Z\nC Y\nA Z\nA Z\nB X\nB Y\nC Z\nA Z\nC Z\nA Z\nC Z\nA Z\nB X\nA X\nB Y\nA Z\nC Z\nA Z\nC Z\nC Y\nB X\nC Z\nC Z\nB Y\nB X\nC Z\nB X\nC Y\nA Z\nC Y\nC Y\n" <> ...}
+
```
+
+
```elixir
+
translate = %{"A" => :rock, "B" => :paper, "C" => :scissors}
+
points = %{rock: 1, paper: 2, scissors: 3}
+
+
defmodule Day02 do
+
@wins %{paper: :rock, rock: :scissors, scissors: :paper}
+
+
def score(a, a), do: 3
+
def score(a, b) when :erlang.map_get(a, @wins) == b, do: 6
+
def score(_, _), do: 0
+
+
for {a, b} <- @wins do
+
def wins_with(unquote(a)), do: unquote(b)
+
def loses_to(unquote(b)), do: unquote(a)
+
end
+
end
+
+
freqs =
+
puzzle_input
+
|> String.split("\n", trim: true)
+
|> Enum.map(fn <<a, ?\s, b>> -> {translate[<<a>>], <<b>>} end)
+
|> Enum.frequencies()
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
%{
+
{:paper, "X"} => 395,
+
{:paper, "Y"} => 146,
+
{:paper, "Z"} => 65,
+
{:rock, "X"} => 77,
+
{:rock, "Y"} => 113,
+
{:rock, "Z"} => 1011,
+
{:scissors, "X"} => 96,
+
{:scissors, "Y"} => 242,
+
{:scissors, "Z"} => 355
+
}
+
```
+
+
## Task 1
+
+
I really dislike this task, because description of the task suggested that the goal is to find best strategy that do not win all rounds. Instead it is supposed to play strategy using **exact** steps defined in the example.
+
+
Very poor wording.
+
+
```elixir
+
strategy = %{"Y" => :paper, "X" => :rock, "Z" => :scissors}
+
+
freqs
+
|> Enum.reduce(0, fn {{b, c}, v}, acc ->
+
choice = strategy[c]
+
result = Day02.score(choice, b)
+
acc + v * (points[choice] + result)
+
end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
9241
+
```
+
+
## Task 2
+
+
```elixir
+
freqs
+
|> Enum.reduce(0, fn {{b, strategy}, v}, acc ->
+
choice =
+
case strategy do
+
"X" -> Day02.wins_with(b)
+
"Y" -> b
+
"Z" -> Day02.loses_to(b)
+
end
+
+
result = Day02.score(choice, b)
+
acc + v * (points[choice] + result)
+
end)
+
```
+
+
<!-- livebook:{"output":true} -->
+
+
```
+
14610
+
```