|
1 | 1 | defmodule AdventOfCode.Day06 do |
2 | | - def part1(_args) do |
| 2 | + import AdventOfCode.Parsing |
| 3 | + |
| 4 | + def part1(input) do |
| 5 | + grid = parse_grid(input) |
| 6 | + start = find_start(grid) |
| 7 | + vector = {-1, 0} |
| 8 | + seen = go(grid, start, vector, MapSet.new()) |
| 9 | + Enum.count(seen) |
3 | 10 | end |
4 | 11 |
|
5 | 12 | def part2(_args) do |
6 | 13 | end |
| 14 | + |
| 15 | + defp go(grid, position, vector, seen) do |
| 16 | + seen = MapSet.put(seen, position) |
| 17 | + |
| 18 | + case look(grid, position, vector) do |
| 19 | + {_, nil} -> |
| 20 | + seen |
| 21 | + |
| 22 | + {_new_pos, "#"} -> |
| 23 | + new_vector = turn(vector) |
| 24 | + go(grid, position, new_vector, seen) |
| 25 | + |
| 26 | + {new_pos, _} -> |
| 27 | + go(grid, new_pos, vector, seen) |
| 28 | + end |
| 29 | + end |
| 30 | + |
| 31 | + defp turn({-1, 0}), do: {0, 1} |
| 32 | + defp turn({0, 1}), do: {1, 0} |
| 33 | + defp turn({1, 0}), do: {0, -1} |
| 34 | + defp turn({0, -1}), do: {-1, 0} |
| 35 | + |
| 36 | + defp look(grid, pos, vector) do |
| 37 | + new_pos = calculate_move(pos, vector) |
| 38 | + val = Map.get(grid, new_pos) |
| 39 | + {new_pos, val} |
| 40 | + end |
| 41 | + |
| 42 | + defp calculate_move({row, col}, {row_dir, col_dir}), do: {row + row_dir, col + col_dir} |
| 43 | + |
| 44 | + defp find_start(grid) do |
| 45 | + {key, _val} = Enum.find(grid, fn {_key, val} -> val == "^" end) |
| 46 | + key |
| 47 | + end |
| 48 | + |
| 49 | + def show_grid(grid, label) do |
| 50 | + IO.puts(label) |
| 51 | + keys = Map.keys(grid) |> Enum.sort() |
| 52 | + |
| 53 | + for {_row, col} = k <- keys do |
| 54 | + if col == 0 do |
| 55 | + IO.write("\n") |
| 56 | + end |
| 57 | + |
| 58 | + Map.get(grid, k, "*") |> IO.write() |
| 59 | + end |
| 60 | + |
| 61 | + Enum.reduce(keys, [], fn |
| 62 | + {_row, 0}, acc -> |
| 63 | + Enum.reverse(acc) |> Enum.join("") |> IO.write() |
| 64 | + IO.write("\n") |
| 65 | + [] |
| 66 | + |
| 67 | + k, acc -> |
| 68 | + [Map.get(grid, k, "*") | acc] |
| 69 | + end) |
| 70 | + |
| 71 | + IO.puts("\n") |
| 72 | + grid |
| 73 | + end |
7 | 74 | end |
0 commit comments