From 3402ca1c90e7becc9b71207cc0ac76cbddcb9f7a Mon Sep 17 00:00:00 2001 From: Rolf Schmidt Date: Wed, 11 Dec 2024 15:26:36 +0100 Subject: [PATCH 1/3] Add 2024 day 11 --- 2024/11/rolfschmidt.v | 47 +++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 2024/11/rolfschmidt.v diff --git a/2024/11/rolfschmidt.v b/2024/11/rolfschmidt.v new file mode 100644 index 0000000..4444c2b --- /dev/null +++ b/2024/11/rolfschmidt.v @@ -0,0 +1,47 @@ +import arrays +import os + +fn halve_string(s string) []i64 { + half_len := s.len / 2 + return [s[..half_len].i64(), s[half_len..].i64()] +} + +fn run(rounds i64) i64 { + mut check := map[i64]i64{} + + for num in os.read_file('stones.input')!.split(' ') { + check[num.i64()] = 1 + } + + for _ in 0 .. rounds { + mut cloned := map[i64]i64{} + for key, value in check { + cloned[key] = value + } + + for num, count in cloned { + new_values := if num == 0 { + [i64(1)] + } else if num.str().len % 2 == 0 { + halve_string(num.str()) + } else { + [num * i64(2024)] + } + + check[num] -= count + for new_value in new_values { + if new_value !in check { + check[new_value] = 0 + } + check[new_value] += count + } + } + } + + return arrays.sum(check.values()) or { 0 } +} + +fn main() { + println(run(25)) + println(run(75)) +} \ No newline at end of file From d6324985913b95f9e45b59efe8ee01db87cc0268 Mon Sep 17 00:00:00 2001 From: Rolf Schmidt Date: Wed, 11 Dec 2024 14:34:28 +0000 Subject: [PATCH 2/3] add output --- 2024/11/rolfschmidt.v | 7 ++++--- known/2024/11/rolfschmidt.out | 2 ++ 2 files changed, 6 insertions(+), 3 deletions(-) create mode 100644 known/2024/11/rolfschmidt.out diff --git a/2024/11/rolfschmidt.v b/2024/11/rolfschmidt.v index 4444c2b..a909c6a 100644 --- a/2024/11/rolfschmidt.v +++ b/2024/11/rolfschmidt.v @@ -9,7 +9,8 @@ fn halve_string(s string) []i64 { fn run(rounds i64) i64 { mut check := map[i64]i64{} - for num in os.read_file('stones.input')!.split(' ') { + input := os.read_file('stones.input') or { '' } + for num in input.split(' ') { check[num.i64()] = 1 } @@ -42,6 +43,6 @@ fn run(rounds i64) i64 { } fn main() { - println(run(25)) + println(run(25)) println(run(75)) -} \ No newline at end of file +} diff --git a/known/2024/11/rolfschmidt.out b/known/2024/11/rolfschmidt.out new file mode 100644 index 0000000..da9c394 --- /dev/null +++ b/known/2024/11/rolfschmidt.out @@ -0,0 +1,2 @@ +55312 +65601038650482 From f960a4b14482a3d475dcfb4697dca3621c0717c9 Mon Sep 17 00:00:00 2001 From: Rolf Schmidt Date: Wed, 11 Dec 2024 14:51:41 +0000 Subject: [PATCH 3/3] tidy --- 2024/11/rolfschmidt.v | 96 +++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 48 deletions(-) diff --git a/2024/11/rolfschmidt.v b/2024/11/rolfschmidt.v index a909c6a..d5909c0 100644 --- a/2024/11/rolfschmidt.v +++ b/2024/11/rolfschmidt.v @@ -1,48 +1,48 @@ -import arrays -import os - -fn halve_string(s string) []i64 { - half_len := s.len / 2 - return [s[..half_len].i64(), s[half_len..].i64()] -} - -fn run(rounds i64) i64 { - mut check := map[i64]i64{} - - input := os.read_file('stones.input') or { '' } - for num in input.split(' ') { - check[num.i64()] = 1 - } - - for _ in 0 .. rounds { - mut cloned := map[i64]i64{} - for key, value in check { - cloned[key] = value - } - - for num, count in cloned { - new_values := if num == 0 { - [i64(1)] - } else if num.str().len % 2 == 0 { - halve_string(num.str()) - } else { - [num * i64(2024)] - } - - check[num] -= count - for new_value in new_values { - if new_value !in check { - check[new_value] = 0 - } - check[new_value] += count - } - } - } - - return arrays.sum(check.values()) or { 0 } -} - -fn main() { - println(run(25)) - println(run(75)) -} +import arrays +import os + +fn halve_string(s string) []i64 { + half_len := s.len / 2 + return [s[..half_len].i64(), s[half_len..].i64()] +} + +fn run(rounds i64) i64 { + mut check := map[i64]i64{} + + input := os.read_file('stones.input') or { '' } + for num in input.split(' ') { + check[num.i64()] = 1 + } + + for _ in 0 .. rounds { + mut cloned := map[i64]i64{} + for key, value in check { + cloned[key] = value + } + + for num, count in cloned { + new_values := if num == 0 { + [i64(1)] + } else if num.str().len % 2 == 0 { + halve_string(num.str()) + } else { + [num * i64(2024)] + } + + check[num] -= count + for new_value in new_values { + if new_value !in check { + check[new_value] = 0 + } + check[new_value] += count + } + } + } + + return arrays.sum(check.values()) or { 0 } +} + +fn main() { + println(run(25)) + println(run(75)) +}