aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJ.J <thechairman@thechairman.info>2023-12-04 01:01:18 -0500
committerJ.J <thechairman@thechairman.info>2023-12-04 01:01:18 -0500
commit039df9d6e00dc5a4c8d5b66b28dc216d6ee0a2f5 (patch)
tree0db09d326e030ad912a39f80c719bd6377afa658
parentaa4626c6d3feb825f43ae53f0bed09da249f873b (diff)
downloadgleam_aoc-039df9d6e00dc5a4c8d5b66b28dc216d6ee0a2f5.tar.gz
gleam_aoc-039df9d6e00dc5a4c8d5b66b28dc216d6ee0a2f5.zip
day 4 complete
-rw-r--r--aoc2023/src/day4/solve.gleam16
-rw-r--r--aoc2023/test/day4/day4_test.gleam8
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