diff options
author | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
---|---|---|
committer | H.J <thechairman@thechairman.info> | 2024-10-09 11:36:55 -0400 |
commit | 8777ff071f7bb37631baa7b6717ad29961e50911 (patch) | |
tree | 6d59c4ed58e454b960339c3d1151f0a879e8d7cb /codingquest2024/src/day1 | |
parent | 6156a9ef7be4012063a042aafb4e9b0d7eadde8e (diff) | |
download | gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.tar.gz gleam_aoc-8777ff071f7bb37631baa7b6717ad29961e50911.zip |
sorting by language
Diffstat (limited to 'codingquest2024/src/day1')
-rw-r--r-- | codingquest2024/src/day1/solution.gleam | 55 |
1 files changed, 0 insertions, 55 deletions
diff --git a/codingquest2024/src/day1/solution.gleam b/codingquest2024/src/day1/solution.gleam deleted file mode 100644 index abef2eb..0000000 --- a/codingquest2024/src/day1/solution.gleam +++ /dev/null @@ -1,55 +0,0 @@ -import gleam/dict.{type Dict} -import gleam/int -import gleam/io -import gleam/list -import gleam/option.{None, Some} -import gleam/regex -import gleam/result -import gleam/string -import simplifile - -pub type Adjustment { - Adjustment(spaceliner: String, value: Int) -} - -pub fn main() { - let assert Ok(data) = simplifile.read(from: "./src/day1/data.txt") - - let raw_adjustments = string.split(data, "\n") - - raw_adjustments - |> collate_adjustments - |> dict.values - |> list.reduce(with: int.min) - |> result.unwrap(0) - |> int.to_string() - |> io.println() -} - -fn parse_line(line: String) -> Adjustment { - let assert Ok(re) = regex.from_string("[\\s:]+") - - let assert [spaceliner, kind, raw_value] = - regex.split(with: re, content: line) - - let assert Ok(value) = int.parse(raw_value) - Adjustment(spaceliner, classify_adjustment(kind) * value) -} - -fn classify_adjustment(name: String) -> Int { - case name { - "Seat" | "Meals" | "Luggage" | "Fee" | "Tax" -> 1 - "Discount" | "Rebate" -> -1 - _ -> panic as "unknown adjustment kind" - } -} - -fn collate_adjustments(raw_adjustments: List(String)) -> Dict(String, Int) { - use acc, this <- list.fold(over: raw_adjustments, from: dict.new()) - let adjustment = parse_line(this) - use maybe_v <- dict.update(in: acc, update: adjustment.spaceliner) - case maybe_v { - None -> adjustment.value - Some(v) -> v + adjustment.value - } -} |