aboutsummaryrefslogtreecommitdiff
path: root/aoc2017-gleam/src/aoc_2017/day_13.gleam
diff options
context:
space:
mode:
Diffstat (limited to 'aoc2017-gleam/src/aoc_2017/day_13.gleam')
-rw-r--r--aoc2017-gleam/src/aoc_2017/day_13.gleam58
1 files changed, 0 insertions, 58 deletions
diff --git a/aoc2017-gleam/src/aoc_2017/day_13.gleam b/aoc2017-gleam/src/aoc_2017/day_13.gleam
deleted file mode 100644
index 6b04a77..0000000
--- a/aoc2017-gleam/src/aoc_2017/day_13.gleam
+++ /dev/null
@@ -1,58 +0,0 @@
-import gleam/int
-import gleam/list
-import gleam/option.{Some}
-import gleam/regex.{Match}
-import gleam/string
-
-pub type Layer {
- Layer(depth: Int, cycle: Int)
-}
-
-pub type Status {
- Caught(severity: Int)
- Free
-}
-
-pub fn parse(input: String) {
- let assert Ok(re) = regex.from_string("([0-9]+): ([0-9]+)")
-
- use acc, row <- list.fold(string.split(input, "\n"), [])
- let assert [Match(submatches: [Some(depth), Some(cycle)], ..)] =
- regex.scan(row, with: re)
- let assert Ok(depth) = int.parse(depth)
- let assert Ok(cycle) = int.parse(cycle)
- [Layer(depth, cycle), ..acc]
-}
-
-fn severity(time: Int, depth: Int, cycle: Int) {
- case { time + depth } % { 2 * { cycle - 1 } } {
- 0 -> Caught(cycle * depth)
- _ -> Free
- }
-}
-
-pub fn pt_1(input: List(Layer)) {
- use acc, layer <- list.fold(input, 0)
- case severity(0, layer.depth, layer.cycle) {
- Free -> acc
- Caught(severity) -> acc + severity
- }
-}
-
-pub fn pt_2(input: List(Layer)) {
- find_delay(0, input)
-}
-
-fn find_delay(delay: Int, layers: List(Layer)) {
- let trial_run =
- list.try_fold(layers, Free, fn(_, layer) {
- case severity(delay, layer.depth, layer.cycle) {
- Free -> Ok(Free)
- Caught(_) -> Error(Nil)
- }
- })
- case trial_run {
- Ok(_) -> delay
- _err -> find_delay(delay + 1, layers)
- }
-}