this repo has no description
at master 1.3 kB view raw
1<!-- vim:set ft=markdown: --> 2 3<!-- livebook:{"persist_outputs":true} --> 4 5# Day 10 6 7```elixir 8input = 9 File.stream!("day10.txt") 10 |> Stream.map(&String.trim/1) 11 12defmodule Day10 do 13 @parens %{?( => ?), ?[ => ?], ?< => ?>, ?{ => ?}} 14 15 def parse(input), do: parse(input, []) 16 17 defp parse(<<c>> <> rest, stack) when c in '([{<', do: parse(rest, [@parens[c] | stack]) 18 defp parse(<<c>> <> rest, [c | stack]), do: parse(rest, stack) 19 defp parse(<<>>, []), do: :ok 20 defp parse(<<>>, rest), do: {:incomplete, rest} 21 defp parse(<<c>> <> _, _), do: {:unexpected, [c]} 22end 23``` 24 25```output 26{:module, Day10, <<70, 79, 82, 49, 0, 0, 7, ...>>, {:parse, 2}} 27``` 28 29## Task 1 30 31```elixir 32points = %{ 33 ?) => 3, 34 ?] => 57, 35 ?} => 1197, 36 ?> => 25137 37} 38 39input 40|> Enum.map(&Day10.parse/1) 41|> Enum.map(fn 42 {:unexpected, [c]} -> points[c] 43 _ -> 0 44end) 45|> Enum.sum() 46``` 47 48```output 49288291 50``` 51 52## Task 2 53 54```elixir 55points = %{ 56 ?) => 1, 57 ?] => 2, 58 ?} => 3, 59 ?> => 4 60} 61 62median = fn list -> 63 sorted = Enum.sort(list) 64 middle = div(length(list), 2) 65 66 Enum.at(sorted, middle) 67end 68 69input 70|> Enum.map(&Day10.parse/1) 71|> Enum.flat_map(fn 72 {:incomplete, rest} -> 73 [ 74 Enum.reduce(rest, 0, fn c, acc -> 75 acc * 5 + points[c] 76 end) 77 ] 78 79 _ -> 80 [] 81end) 82|> median.() 83``` 84 85```output 86820045242 87```