diff options
author | J.J <thechairman@thechairman.info> | 2023-12-04 01:01:18 -0500 |
---|---|---|
committer | J.J <thechairman@thechairman.info> | 2023-12-04 01:01:18 -0500 |
commit | 039df9d6e00dc5a4c8d5b66b28dc216d6ee0a2f5 (patch) | |
tree | 0db09d326e030ad912a39f80c719bd6377afa658 /aoc2023 | |
parent | aa4626c6d3feb825f43ae53f0bed09da249f873b (diff) | |
download | gleam_aoc-039df9d6e00dc5a4c8d5b66b28dc216d6ee0a2f5.tar.gz gleam_aoc-039df9d6e00dc5a4c8d5b66b28dc216d6ee0a2f5.zip |
day 4 complete
Diffstat (limited to 'aoc2023')
-rw-r--r-- | aoc2023/src/day4/solve.gleam | 16 | ||||
-rw-r--r-- | aoc2023/test/day4/day4_test.gleam | 8 |
2 files changed, 11 insertions, 13 deletions
diff --git a/aoc2023/src/day4/solve.gleam b/aoc2023/src/day4/solve.gleam index 426922c..98b4d82 100644 --- a/aoc2023/src/day4/solve.gleam +++ b/aoc2023/src/day4/solve.gleam @@ -18,7 +18,7 @@ fn numbers_to_list(str: String) -> List(Int) { |> result.values() } -fn parse_card(card: String) { +fn parse_card(card: String) -> Card { let assert Ok(#("Card" <> n_str, rest)) = string.split_once(card, ": ") let assert Ok(#(winning_str, has_str)) = string.split_once(rest, " | ") let assert Ok(n) = @@ -32,11 +32,11 @@ fn parse_card(card: String) { Card(number: n, winning: winning, has: has) } -fn double_up(n) { +fn win_points(n) { case n { 0 -> 0 1 -> 1 - n -> 2 * double_up(n - 1) + n -> 2 * win_points(n - 1) } } @@ -62,20 +62,20 @@ pub fn part1(input: String) { c |> parse_card |> count_wins - |> double_up + |> win_points |> int.add(acc) }, ) - |> string.inspect } -fn win_more_cards(cards: List(Card), card_count: dict.Dict(Int, Int)) { +fn win_more_cards(cards: List(String), card_count: dict.Dict(Int, Int)) { case cards { [] -> card_count |> dict.values |> int.sum - [card, ..rest] -> { + [raw_card, ..rest] -> { + let card = parse_card(raw_card) let wins = count_wins(card) case wins { 0 -> win_more_cards(rest, card_count) @@ -108,9 +108,7 @@ pub fn part2(input: String) { |> dict.from_list() raw_cards - |> list.map(parse_card) |> win_more_cards(card_count) - |> string.inspect } pub fn main() { diff --git a/aoc2023/test/day4/day4_test.gleam b/aoc2023/test/day4/day4_test.gleam index 7ca20fa..9fc4bf7 100644 --- a/aoc2023/test/day4/day4_test.gleam +++ b/aoc2023/test/day4/day4_test.gleam @@ -4,10 +4,10 @@ import adglent.{type Example, Example} import day4/solve type Problem1AnswerType = - String + Int type Problem2AnswerType = - String + Int /// Add examples for part 1 here: /// ```gleam @@ -18,7 +18,7 @@ Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 -Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11", "13")] +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11", 13)] /// Add examples for part 2 here: /// ```gleam @@ -29,7 +29,7 @@ Card 2: 13 32 20 16 61 | 61 30 68 82 17 32 24 19 Card 3: 1 21 53 59 44 | 69 82 63 72 16 21 14 1 Card 4: 41 92 73 84 69 | 59 84 76 51 58 5 54 83 Card 5: 87 83 26 28 32 | 88 30 70 12 93 22 82 36 -Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11", "30")] +Card 6: 31 18 13 56 72 | 74 77 10 23 35 67 36 11", 30)] pub fn part1_test() { part1_examples |