aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorH.J <thechairman@thechairman.info>2024-10-09 11:58:08 -0400
committerH.J <thechairman@thechairman.info>2024-10-09 11:58:08 -0400
commit87be578442d566d31735232ba1473cea38756d54 (patch)
tree900719e5d4a3414bf47fbbafa50afe8c9f5d14a3
parentb1293b0fa652cf1a1dbb18089a35ea4ad92fdf3f (diff)
downloadgleam_aoc-main.tar.gz
gleam_aoc-main.zip
gleam 2015 day 1HEADmain
-rw-r--r--gleam/aoc2015/.gitignore1
-rw-r--r--gleam/aoc2015/src/aoc2015.gleam4
-rw-r--r--gleam/aoc2015/src/aoc_2015/day_1.gleam46
3 files changed, 49 insertions, 2 deletions
diff --git a/gleam/aoc2015/.gitignore b/gleam/aoc2015/.gitignore
index 599be4e..34df305 100644
--- a/gleam/aoc2015/.gitignore
+++ b/gleam/aoc2015/.gitignore
@@ -1,4 +1,5 @@
*.beam
*.ez
/build
+/input
erl_crash.dump
diff --git a/gleam/aoc2015/src/aoc2015.gleam b/gleam/aoc2015/src/aoc2015.gleam
index dae067e..12d05ab 100644
--- a/gleam/aoc2015/src/aoc2015.gleam
+++ b/gleam/aoc2015/src/aoc2015.gleam
@@ -1,5 +1,5 @@
-import gleam/io
+import gladvent
pub fn main() {
- io.println("Hello from aoc2015!")
+ gladvent.run()
}
diff --git a/gleam/aoc2015/src/aoc_2015/day_1.gleam b/gleam/aoc2015/src/aoc_2015/day_1.gleam
new file mode 100644
index 0000000..c398f28
--- /dev/null
+++ b/gleam/aoc2015/src/aoc_2015/day_1.gleam
@@ -0,0 +1,46 @@
+import gleam/bool
+import gleam/list
+import gleam/string
+
+type Direction {
+ Up
+ Down
+}
+
+fn parse(input: String) {
+ use ch <- list.map(string.to_graphemes(input))
+ case ch {
+ "(" -> Up
+ ")" -> Down
+ _ -> panic
+ }
+}
+
+fn traverse(directions: List(Direction), starting_at current_floor: Int) -> Int {
+ case directions {
+ [] -> current_floor
+ [Up, ..rest] -> traverse(rest, current_floor + 1)
+ [Down, ..rest] -> traverse(rest, current_floor - 1)
+ }
+}
+
+pub fn pt_1(input: String) {
+ input |> parse |> traverse(starting_at: 0)
+}
+
+fn find_basement(
+ directions: List(Direction),
+ starting_at current_floor: Int,
+ initial_count count: Int,
+) -> Int {
+ use <- bool.guard(current_floor == -1, count)
+ case directions {
+ [] -> panic
+ [Up, ..rest] -> find_basement(rest, current_floor + 1, count + 1)
+ [Down, ..rest] -> find_basement(rest, current_floor - 1, count + 1)
+ }
+}
+
+pub fn pt_2(input: String) {
+ input |> parse |> find_basement(starting_at: 0, initial_count: 0)
+}