Skip to content

Commit 50b6d36

Browse files
committed
day 6 part 1 elixir
1 parent f9b5c02 commit 50b6d36

2 files changed

Lines changed: 81 additions & 6 deletions

File tree

Lines changed: 68 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,74 @@
11
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)
310
end
411

512
def part2(_args) do
613
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
774
end

elixir/2024/test/advent_of_code/day_06_test.exs

Lines changed: 13 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,12 +3,20 @@ defmodule AdventOfCode.Day06Test do
33

44
import AdventOfCode.Day06
55

6-
@tag :skip
76
test "part1" do
8-
input = nil
9-
result = part1(input)
10-
11-
assert result
7+
input = """
8+
....#.....
9+
.........#
10+
..........
11+
..#.......
12+
.......#..
13+
..........
14+
.#..^.....
15+
........#.
16+
#.........
17+
......#...
18+
"""
19+
41 = part1(input)
1220
end
1321

1422
@tag :skip

0 commit comments

Comments
 (0)