@@ -3,18 +3,22 @@ defmodule AdventOfCode.Y2020.Day03 do
3
3
--- Day 3: Toboggan Trajectory ---
4
4
Problem Link: https://adventofcode.com/2020/day/3
5
5
"""
6
- use AdventOfCode.Helpers.InputReader , year: 2020 , day: 3
7
-
8
- alias AdventOfCode.Helpers.Transformers
6
+ alias AdventOfCode.Helpers . { InputReader , Transformers }
9
7
10
8
@ default_slope { 3 , 1 }
11
9
@ slopes [ { 1 , 1 } , { 3 , 1 } , { 5 , 1 } , { 7 , 1 } , { 1 , 2 } ]
12
10
13
- def run_1 , do: input! ( ) |> parse ( ) |> traverse ( )
11
+ def input , do: InputReader . read_from_file ( 2020 , 3 )
12
+
13
+ def run ( input \\ input ( ) ) do
14
+ input = parse ( input )
15
+ { run_1 ( input ) , run_2 ( input ) }
16
+ end
17
+
18
+ def run_1 ( input ) , do: traverse ( input )
14
19
15
- def run_2 do
16
- for result <- Enum . map ( @ slopes , & traverse ( parse ( input! ( ) ) , & 1 ) ) ,
17
- reduce: 1 do
20
+ def run_2 ( input ) do
21
+ for result <- Enum . map ( @ slopes , & traverse ( input , & 1 ) ) , reduce: 1 do
18
22
acc -> acc * result
19
23
end
20
24
end
@@ -27,30 +31,9 @@ defmodule AdventOfCode.Y2020.Day03 do
27
31
end
28
32
29
33
defp traverse ( xy , slope \\ @ default_slope ) , do: traverse ( xy , 0 , 0 , 0 , slope )
34
+ defp traverse ( { _ , _ , cols } , r , _ , res , _ ) when r > cols , do: res
30
35
31
- defp traverse (
32
- { _ , _ , col_size } ,
33
- row ,
34
- _ ,
35
- result ,
36
- _
37
- )
38
- when row > col_size ,
39
- do: result
40
-
41
- defp traverse (
42
- { xy , row_size , _ } = world ,
43
- row ,
44
- col ,
45
- result ,
46
- { right , down } = slope
47
- ) do
48
- traverse (
49
- world ,
50
- row + down ,
51
- rem ( col + right , row_size ) ,
52
- result + ( ( xy [ { row , col } ] == "#" && 1 ) || 0 ) ,
53
- slope
54
- )
36
+ defp traverse ( { yx , rows , _ } = world , y , x , res , { right , down } = slope ) do
37
+ traverse ( world , y + down , rem ( x + right , rows ) , res + ( ( yx [ { y , x } ] == "#" && 1 ) || 0 ) , slope )
55
38
end
56
39
end
0 commit comments