this repo has no description
at master 1.7 kB view raw
1# Day 08 2 3```elixir 4Mix.install([:kino_aoc]) 5``` 6 7## Section 8 9<!-- livebook:{"attrs":{"assign_to":"puzzle_input","day":"8","session_secret":"ADVENT_OF_CODE_SESSION","year":"2023"},"chunks":null,"kind":"Elixir.KinoAOC.HelperCell","livebook_object":"smart_cell"} --> 10 11```elixir 12{:ok, puzzle_input} = 13 KinoAOC.download_puzzle("2023", "8", System.fetch_env!("LB_ADVENT_OF_CODE_SESSION")) 14``` 15 16```elixir 17# puzzle_input = 18""" 19LR 20 2111A = (11B, XXX) 2211B = (XXX, 11Z) 2311Z = (11B, XXX) 2422A = (22B, XXX) 2522B = (22C, 22C) 2622C = (22Z, 22Z) 2722Z = (22B, 22B) 28XXX = (XXX, XXX) 29""" 30``` 31 32```elixir 33defmodule Day08 do 34 def find_path(instructions, pos, map) do 35 Enum.reduce_while(instructions, pos, fn 36 {_, idx}, <<_, _, ?Z>> -> {:halt, idx} 37 {step, _}, pos -> {:cont, elem(Map.fetch!(map, pos), step)} 38 end) 39 end 40end 41 42[instructions | rest] = 43 String.split(puzzle_input, "\n", trim: true) 44 45instructions = 46 Stream.cycle(for <<c <- instructions>>, do: if(c == ?L, do: 0, else: 1)) 47 |> Stream.with_index() 48 49map = 50 Map.new(rest, fn 51 <<src::binary-3>> <> " = (" <> <<left::binary-3>> <> ", " <> <<right::binary-3>> <> ")" -> 52 {src, {left, right}} 53 end) 54``` 55 56## Part 1 57 58```elixir 59Day08.find_path(instructions, "AAA", map) 60``` 61 62## Part 2 63 64```elixir 65starts = map |> Map.keys() |> Enum.filter(&String.ends_with?(&1, "A")) 66 67Task.async_stream(starts, &Day08.find_path(instructions, &1, map), ordered: false) 68|> Enum.reduce(1, fn {:ok, a}, b -> 69 div(a * b, Integer.gcd(a, b)) 70end) 71``` 72 73<!-- livebook:{"offset":1485,"stamp":{"token":"XCP.dP8RakyYvjO2Dt2LfELbhGu7h_AlwhvgijUPOM_xnTL158Wj_I2mpQbyuTUJEnrHmVyOVnplBQcB1UHSBWM-ogSxBCmlsFU8DVr00oukCY_wP9T2YAIinkNIn_0CtZ7tkg","version":2}} -->