aboutsummaryrefslogtreecommitdiff
path: root/aoc2017-gleam/src/aoc_2017/day_12.gleam
diff options
context:
space:
mode:
authorH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
committerH.J <thechairman@thechairman.info>2024-10-09 11:36:55 -0400
commit8777ff071f7bb37631baa7b6717ad29961e50911 (patch)
tree6d59c4ed58e454b960339c3d1151f0a879e8d7cb /aoc2017-gleam/src/aoc_2017/day_12.gleam
parent6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff)
downloadgleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz
gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip
sorting by language
Diffstat (limited to 'aoc2017-gleam/src/aoc_2017/day_12.gleam')
-rw-r--r--aoc2017-gleam/src/aoc_2017/day_12.gleam44
1 files changed, 0 insertions, 44 deletions
diff --git a/aoc2017-gleam/src/aoc_2017/day_12.gleam b/aoc2017-gleam/src/aoc_2017/day_12.gleam
deleted file mode 100644
index a9d73c5..0000000
--- a/aoc2017-gleam/src/aoc_2017/day_12.gleam
+++ /dev/null
@@ -1,44 +0,0 @@
-import gleam/dict
-import gleam/list
-import gleam/set.{type Set}
-import gleam/string
-
-type Pipes =
- dict.Dict(String, List(String))
-
-pub fn parse(input: String) -> Pipes {
- use acc, row <- list.fold(string.split(input, "\n"), dict.new())
- let assert Ok(#(from, to)) = string.split_once(row, " <-> ")
- let to_nodes = string.split(to, ", ")
- dict.insert(acc, from, to_nodes)
-}
-
-pub fn pt_1(input: Pipes) {
- next_nodes("0", input, set.new()) |> set.size()
-}
-
-pub fn pt_2(input: Pipes) {
- count_groups(dict.keys(input), input, 0)
-}
-
-fn next_nodes(current: String, pipes: Pipes, found: Set(String)) {
- let assert Ok(to_nodes) = dict.get(pipes, current)
-
- use acc, node <- list.fold(to_nodes, found)
- case set.contains(found, node) {
- False -> acc |> set.insert(node) |> next_nodes(node, pipes, _)
- True -> acc
- }
-}
-
-fn count_groups(all_nodes: List(String), pipes: Pipes, count: Int) {
- case all_nodes {
- [] -> count
- [first, ..] -> {
- let next_subgraph = next_nodes(first, pipes, set.new())
- let remaining =
- list.filter(all_nodes, fn(n) { !set.contains(next_subgraph, n) })
- count_groups(remaining, pipes, count + 1)
- }
- }
-}