diff options
Diffstat (limited to 'aoc-2020-gleam/src/days/day15.gleam')
-rw-r--r-- | aoc-2020-gleam/src/days/day15.gleam | 32 |
1 files changed, 15 insertions, 17 deletions
diff --git a/aoc-2020-gleam/src/days/day15.gleam b/aoc-2020-gleam/src/days/day15.gleam index 55ef0b4..83f2bb8 100644 --- a/aoc-2020-gleam/src/days/day15.gleam +++ b/aoc-2020-gleam/src/days/day15.gleam @@ -1,7 +1,7 @@ import gleam/io import gleam/int import gleam/list -import gleam/map +import gleam/dict import gleam/string as str import gleam/function as fun import gleam/iterator as iter @@ -16,25 +16,23 @@ fn solve(input: String, nth: Int) -> Int { let history = starting - |> list.index_map(fn(index, number) { #(number, index + 1) }) - |> map.from_list + |> list.index_map(fn(number, index) { #(number, index + 1) }) + |> dict.from_list let turn = list.length(starting) let assert Ok(last) = list.last(starting) - iterx.unfold_infinitely( - from: #(history, turn, last), - with: fn(state) { - let #(history, turn, last) = state - #( - map.insert(into: history, for: last, insert: turn), - turn + 1, - case map.get(history, last) { - Ok(previous) -> turn - previous - Error(Nil) -> 0 - }, - ) - }, - ) + iterx.unfold_infinitely(from: #(history, turn, last), with: fn(state) { + let #(history, turn, last) = state + #( + dict.insert(into: history, for: last, insert: turn), + turn + + 1, + case dict.get(history, last) { + Ok(previous) -> turn - previous + Error(Nil) -> 0 + }, + ) + }) |> iter.filter(fn(state) { state.1 == nth }) |> iter.map(fn(state) { state.2 }) |> iter.first |