this repo has no description
at master 7.4 kB view raw
1<!-- livebook:{"persist_outputs":true} --> 2 3# Day 02 4 5```elixir 6Mix.install([ 7 {:kino_aoc, git: "https://github.com/ljgago/kino_aoc"} 8]) 9``` 10 11<!-- livebook:{"output":true} --> 12 13``` 14:ok 15``` 16 17## Section 18 19<!-- livebook:{"attrs":{"day":"2","session_secret":"ADVENT_OF_CODE_SESSION","variable":"puzzle_input","year":"2022"},"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 20 21```elixir 22{:ok, puzzle_input} = 23 KinoAOC.download_puzzle("2022", "2", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 24``` 25 26<!-- livebook:{"output":true} --> 27 28``` 29{:ok, 30 "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" <> ...} 31``` 32 33```elixir 34translate = %{"A" => :rock, "B" => :paper, "C" => :scissors} 35points = %{rock: 1, paper: 2, scissors: 3} 36 37defmodule Day02 do 38 @wins %{paper: :rock, rock: :scissors, scissors: :paper} 39 40 def score(a, a), do: 3 41 def score(a, b) when :erlang.map_get(a, @wins) == b, do: 6 42 def score(_, _), do: 0 43 44 for {a, b} <- @wins do 45 def wins_with(unquote(a)), do: unquote(b) 46 def loses_to(unquote(b)), do: unquote(a) 47 end 48end 49 50freqs = 51 puzzle_input 52 |> String.split("\n", trim: true) 53 |> Enum.map(fn <<a, ?\s, b>> -> {translate[<<a>>], <<b>>} end) 54 |> Enum.frequencies() 55``` 56 57<!-- livebook:{"output":true} --> 58 59``` 60%{ 61 {:paper, "X"} => 395, 62 {:paper, "Y"} => 146, 63 {:paper, "Z"} => 65, 64 {:rock, "X"} => 77, 65 {:rock, "Y"} => 113, 66 {:rock, "Z"} => 1011, 67 {:scissors, "X"} => 96, 68 {:scissors, "Y"} => 242, 69 {:scissors, "Z"} => 355 70} 71``` 72 73## Task 1 74 75I 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. 76 77Very poor wording. 78 79```elixir 80strategy = %{"Y" => :paper, "X" => :rock, "Z" => :scissors} 81 82freqs 83|> Enum.reduce(0, fn {{b, c}, v}, acc -> 84 choice = strategy[c] 85 result = Day02.score(choice, b) 86 acc + v * (points[choice] + result) 87end) 88``` 89 90<!-- livebook:{"output":true} --> 91 92``` 939241 94``` 95 96## Task 2 97 98```elixir 99freqs 100|> Enum.reduce(0, fn {{b, strategy}, v}, acc -> 101 choice = 102 case strategy do 103 "X" -> Day02.wins_with(b) 104 "Y" -> b 105 "Z" -> Day02.loses_to(b) 106 end 107 108 result = Day02.score(choice, b) 109 acc + v * (points[choice] + result) 110end) 111``` 112 113<!-- livebook:{"output":true} --> 114 115``` 11614610 117```