77 lines
1.6 KiB
Go
77 lines
1.6 KiB
Go
package day11
|
|
|
|
import (
|
|
"adventofcode2024/utils"
|
|
"fmt"
|
|
"strconv"
|
|
"strings"
|
|
)
|
|
|
|
func Part1(input string) int {
|
|
stones := strings.Fields(input)
|
|
for i := 0; i < 25; i++ {
|
|
n_stones := []string{}
|
|
for _, stone := range stones {
|
|
switch {
|
|
case stone == "0":
|
|
n_stones = append(n_stones, "1")
|
|
case len(stone)%2 == 0:
|
|
d1 := strconv.Itoa(utils.MustAtoi(stone[0 : len(stone)/2]))
|
|
d2 := strconv.Itoa(utils.MustAtoi(stone[len(stone)/2:]))
|
|
n_stones = append(n_stones, d1)
|
|
n_stones = append(n_stones, d2)
|
|
|
|
default:
|
|
n_stones = append(n_stones, fmt.Sprintf("%d", utils.MustAtoi(stone)*2024))
|
|
}
|
|
}
|
|
stones = n_stones
|
|
}
|
|
return len(stones)
|
|
}
|
|
|
|
func Part2(input string) int {
|
|
stones := strings.Fields(input)
|
|
smap := make(map[string]int)
|
|
smap2 := make(map[string]int)
|
|
|
|
for _, stone := range stones {
|
|
smap[stone] = 1
|
|
}
|
|
for i:=0;i<75;i++ {
|
|
for k, v := range smap {
|
|
switch {
|
|
case k == "0":
|
|
smap2["1"] = smap2["1"] + v
|
|
case len(k)%2 == 0:
|
|
d1 := strconv.Itoa(utils.MustAtoi(k[0 : len(k)/2]))
|
|
d2 := strconv.Itoa(utils.MustAtoi(k[len(k)/2:]))
|
|
smap2[d1] += v
|
|
smap2[d2] += v
|
|
default:
|
|
k2 := fmt.Sprintf("%d", utils.MustAtoi(k)*2024)
|
|
smap2[k2] += v
|
|
}
|
|
}
|
|
smap = CopyMap(smap2)
|
|
smap2 = make(map[string]int)
|
|
}
|
|
count := 0
|
|
for _, v := range smap {
|
|
count += v
|
|
}
|
|
return count
|
|
}
|
|
|
|
func CopyMap(original map[string]int) map[string]int {
|
|
// Create a new map to hold the copy
|
|
copied := make(map[string]int)
|
|
|
|
// Copy each key-value pair from the original map to the new map
|
|
for key, value := range original {
|
|
copied[key] = value
|
|
}
|
|
|
|
return copied
|
|
}
|