File tree 3 files changed +59
-1
lines changed
3 files changed +59
-1
lines changed Original file line number Diff line number Diff line change @@ -6,6 +6,7 @@ import argv
6
6
import simplifile
7
7
8
8
import day1
9
+ import day2
9
10
10
11
pub fn main ( ) {
11
12
case argv . load ( ) . arguments {
@@ -14,7 +15,7 @@ pub fn main() {
14
15
Ok ( n ) -> run ( n )
15
16
Error ( _ ) -> io . println ( "Invalid day: " <> arg )
16
17
}
17
- _ -> list . range ( 1 , 1 ) |> list . each ( fn ( n ) { run ( n ) } )
18
+ _ -> list . range ( 1 , 2 ) |> list . each ( fn ( n ) { run ( n ) } )
18
19
}
19
20
}
20
21
@@ -24,6 +25,7 @@ fn run(n: Int) -> Nil {
24
25
io . print ( output ( "Part 1: " ) )
25
26
io . println ( case n {
26
27
1 -> day1 . part1 ( input ) |> int . to_string
28
+ 2 -> day2 . part1 ( input ) |> int . to_string
27
29
_ -> "(not implemented)"
28
30
} )
29
31
io . print ( output ( "Part 2: " ) )
Original file line number Diff line number Diff line change
1
+ import gleam/int
2
+ import gleam/list
3
+ import gleam/string
4
+
5
+ pub fn part1 ( input : String ) -> Int {
6
+ input |> parse_input |> list . count ( safe )
7
+ }
8
+
9
+ fn safe ( report : List ( Int ) ) -> Bool {
10
+ increasing ( report ) || decreasing ( report )
11
+ }
12
+
13
+ fn increasing ( report : List ( Int ) ) -> Bool {
14
+ case report {
15
+ [ first , second , .. rest ] ->
16
+ second > first && second - first <= 3 && increasing ( [ second , .. rest ] )
17
+ _ -> True
18
+ }
19
+ }
20
+
21
+ fn decreasing ( report : List ( Int ) ) -> Bool {
22
+ case report {
23
+ [ first , second , .. rest ] ->
24
+ second < first && first - second <= 3 && decreasing ( [ second , .. rest ] )
25
+ _ -> True
26
+ }
27
+ }
28
+
29
+ fn parse_input ( input : String ) -> List ( List ( Int ) ) {
30
+ input
31
+ |> string . split ( "\n " )
32
+ |> list . filter ( fn ( line ) { line != "" } )
33
+ |> list . map ( fn ( line ) {
34
+ line |> string . split ( " " ) |> list . filter_map ( fn ( str ) { int . parse ( str ) } )
35
+ } )
36
+ }
Original file line number Diff line number Diff line change
1
+ import gleeunit
2
+ import gleeunit/should
3
+
4
+ import day2
5
+
6
+ pub fn main ( ) {
7
+ gleeunit . main ( )
8
+ }
9
+
10
+ const example1 = "7 6 4 2 1
11
+ 1 2 7 8 9
12
+ 9 7 6 2 1
13
+ 1 3 2 4 5
14
+ 8 6 4 4 1
15
+ 1 3 6 7 9
16
+ "
17
+
18
+ pub fn part1_test ( ) {
19
+ day2 . part1 ( example1 ) |> should . equal ( 2 )
20
+ }
You can’t perform that action at this time.
0 commit comments