···
1
-
import gleam/int.{to_string}
2
-
import gleam/io.{println}
3
-
import gleam/list.{Continue, Stop, fold, fold_until}
4
-
import gleam/result.{unwrap}
5
-
import gleam/string.{split, trim}
6
-
import simplifile.{read}
3
+
import gleam/list.{Continue, Stop, fold}
5
+
import simplifile as file
FloorIndex(floor: Int, index: Int)
13
-
let input = read(from: "../input.txt") |> unwrap("") |> trim() |> split("")
12
+
let assert Ok(input) = file.read(from: "../input.txt")
13
+
let input = input |> string.trim() |> string.split("")
16
+
|> fold(0, fn(fl, cur) {
15
-
// part 1 - get final floor
17
-
fold(input, 0, fn(fl, cur) {
26
+
// part 2 - get first time in the basement
27
+
let FloorIndex(_, index) =
29
+
|> list.fold_until(FloorIndex(0, 1), fn(fi, cur) {
30
+
let new = case cur {
36
+
True -> Stop(FloorIndex(new, fi.index))
37
+
False -> Continue(FloorIndex(new, fi.index + 1))
27
-
// part 2 - get first time in the basement
31
-
|> fold_until(FloorIndex(0, 1), fn(fi, cur) {
32
-
let new = case cur {
38
-
True -> Stop(FloorIndex(new, fi.index))
39
-
False -> Continue(FloorIndex(new, fi.index + 1))