Skip to content

Commit 9b9de1e

Browse files
committed
More idiomatic elixir
1 parent c6cc88f commit 9b9de1e

1 file changed

Lines changed: 22 additions & 36 deletions

File tree

2025/lib/day01/day01.ex

Lines changed: 22 additions & 36 deletions
Original file line numberDiff line numberDiff line change
@@ -39,47 +39,17 @@ defmodule Day01 do
3939
d_cycles = div(distance, 100)
4040
d_offset = rem(distance, 100)
4141

42-
new_pos =
43-
case dir do
44-
:L -> cur_pos - d_offset
45-
:R -> cur_pos + d_offset
46-
end
47-
42+
new_pos = move(cur_pos, dir, d_offset)
4843
# IO.puts("New Pos A: #{new_pos}")
4944

5045
# if I end up on zero or 100 add one
51-
end_on_zero =
52-
if rem(new_pos, 100) == 0 do
53-
1
54-
else
55-
0
56-
end
46+
end_on_zero = if rem(new_pos, 100) == 0, do: 1, else: 0
5747

58-
# If I crossed from positive to negative or vice versa
59-
# Or we cross from 95 to 105
60-
crossed_zero =
61-
if (cur_pos < 0 && new_pos > 0) || (new_pos < 0 && cur_pos > 0) ||
62-
(cur_pos < 100 && new_pos > 100) do
63-
1
64-
else
65-
0
66-
end
48+
# If I crossed from positive to negative or vice versa or we cross from 95 to 105
49+
crossed_zero = crossed_zero?(cur_pos, new_pos)
6750

68-
# Ensure we're always working with a positive number
69-
new_pos =
70-
if new_pos < 0 do
71-
new_pos + 100
72-
else
73-
new_pos
74-
end
75-
76-
# Ensure we're working with numbers < 100
77-
new_pos =
78-
if new_pos >= 100 do
79-
rem(new_pos, 100)
80-
else
81-
new_pos
82-
end
51+
# Ensure we're working with numbers < 100 and > 0
52+
new_pos = wrap(new_pos)
8353

8454
cycles = d_cycles + crossed_zero + end_on_zero
8555

@@ -94,6 +64,22 @@ defmodule Day01 do
9464
Enum.sum(rotation_list)
9565
end
9666

67+
defp move(pos, :L, offset), do: pos - offset
68+
defp move(pos, :R, offset), do: pos + offset
69+
70+
defp wrap(pos) when pos < 0, do: pos + 100
71+
defp wrap(pos) when pos >= 100, do: rem(pos, 100)
72+
defp wrap(pos), do: pos
73+
74+
defp crossed_zero?(old, new) do
75+
cond do
76+
old < 0 and new > 0 -> 1
77+
old > 0 and new < 0 -> 1
78+
old < 100 and new > 100 -> 1
79+
true -> 0
80+
end
81+
end
82+
9783
def main do
9884
input_path = "lib/day01/input.txt"
9985
answer = part1(input_path)

0 commit comments

Comments
 (0)