summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoromagdy <omar.professional8777@gmail.com>2024-12-12 18:31:50 +0200
committeromagdy <omar.professional8777@gmail.com>2024-12-12 18:31:50 +0200
commit0cb12b95ef11fe283731e862e3953f27eeea8757 (patch)
tree66d54e44b821073ddf6381bf9b3d9d55b3d86c31
parent93cc02c058f39d370472dfe7d667ae7a2f6396b3 (diff)
downloadaoc-0cb12b95ef11fe283731e862e3953f27eeea8757.tar.xz
aoc-0cb12b95ef11fe283731e862e3953f27eeea8757.zip
Day 11 done.
-rw-r--r--2024/go/input/day01.prod (renamed from 2024/go/input/day1.prod)0
-rw-r--r--2024/go/input/day01.test (renamed from 2024/go/input/day1.test)0
-rw-r--r--2024/go/input/day01_2.test (renamed from 2024/go/input/day1_2.test)0
-rw-r--r--2024/go/input/day02.prod (renamed from 2024/go/input/day2.prod)0
-rw-r--r--2024/go/input/day02.test (renamed from 2024/go/input/day2.test)0
-rw-r--r--2024/go/input/day03.prod (renamed from 2024/go/input/day3.prod)0
-rw-r--r--2024/go/input/day03.test (renamed from 2024/go/input/day3.test)0
-rw-r--r--2024/go/input/day03_2.test (renamed from 2024/go/input/day3_2.test)0
-rw-r--r--2024/go/input/day04.prod (renamed from 2024/go/input/day4.prod)0
-rw-r--r--2024/go/input/day04.test (renamed from 2024/go/input/day4.test)0
-rw-r--r--2024/go/input/day05.prod (renamed from 2024/go/input/day5.prod)0
-rw-r--r--2024/go/input/day05.test (renamed from 2024/go/input/day5.test)0
-rw-r--r--2024/go/input/day06.prod (renamed from 2024/go/input/day6.prod)0
-rw-r--r--2024/go/input/day06.test (renamed from 2024/go/input/day6.test)0
-rw-r--r--2024/go/input/day07.prod (renamed from 2024/go/input/day7.prod)0
-rw-r--r--2024/go/input/day07.test (renamed from 2024/go/input/day7.test)0
-rw-r--r--2024/go/input/day08.prod (renamed from 2024/go/input/day8.prod)0
-rw-r--r--2024/go/input/day08.test (renamed from 2024/go/input/day8.test)0
-rw-r--r--2024/go/input/day09.prod (renamed from 2024/go/input/day9.prod)0
-rw-r--r--2024/go/input/day09.test (renamed from 2024/go/input/day9.test)0
-rw-r--r--2024/go/input/day11.prod1
-rw-r--r--2024/go/input/day11.test1
-rw-r--r--2024/go/src/day01/main.go (renamed from 2024/go/src/day1/main.go)2
-rw-r--r--2024/go/src/day02/main.go (renamed from 2024/go/src/day2/main.go)4
-rw-r--r--2024/go/src/day03/main.go (renamed from 2024/go/src/day3/main.go)6
-rw-r--r--2024/go/src/day04/main.go (renamed from 2024/go/src/day4/main.go)4
-rw-r--r--2024/go/src/day05/main.go (renamed from 2024/go/src/day5/main.go)4
-rw-r--r--2024/go/src/day06/main.go (renamed from 2024/go/src/day6/main.go)4
-rw-r--r--2024/go/src/day07/main.go (renamed from 2024/go/src/day7/main.go)4
-rw-r--r--2024/go/src/day08/main.go (renamed from 2024/go/src/day8/main.go)4
-rw-r--r--2024/go/src/day09/main.go (renamed from 2024/go/src/day9/main.go)4
-rw-r--r--2024/go/src/day11/main.go107
32 files changed, 127 insertions, 18 deletions
diff --git a/2024/go/input/day1.prod b/2024/go/input/day01.prod
index cb6af3c..cb6af3c 100644
--- a/2024/go/input/day1.prod
+++ b/2024/go/input/day01.prod
diff --git a/2024/go/input/day1.test b/2024/go/input/day01.test
index b8af9ad..b8af9ad 100644
--- a/2024/go/input/day1.test
+++ b/2024/go/input/day01.test
diff --git a/2024/go/input/day1_2.test b/2024/go/input/day01_2.test
index b8af9ad..b8af9ad 100644
--- a/2024/go/input/day1_2.test
+++ b/2024/go/input/day01_2.test
diff --git a/2024/go/input/day2.prod b/2024/go/input/day02.prod
index 2fd095e..2fd095e 100644
--- a/2024/go/input/day2.prod
+++ b/2024/go/input/day02.prod
diff --git a/2024/go/input/day2.test b/2024/go/input/day02.test
index b49c10d..b49c10d 100644
--- a/2024/go/input/day2.test
+++ b/2024/go/input/day02.test
diff --git a/2024/go/input/day3.prod b/2024/go/input/day03.prod
index 1c0f071..1c0f071 100644
--- a/2024/go/input/day3.prod
+++ b/2024/go/input/day03.prod
diff --git a/2024/go/input/day3.test b/2024/go/input/day03.test
index 6a7899d..6a7899d 100644
--- a/2024/go/input/day3.test
+++ b/2024/go/input/day03.test
diff --git a/2024/go/input/day3_2.test b/2024/go/input/day03_2.test
index 30032cb..30032cb 100644
--- a/2024/go/input/day3_2.test
+++ b/2024/go/input/day03_2.test
diff --git a/2024/go/input/day4.prod b/2024/go/input/day04.prod
index a096a8f..a096a8f 100644
--- a/2024/go/input/day4.prod
+++ b/2024/go/input/day04.prod
diff --git a/2024/go/input/day4.test b/2024/go/input/day04.test
index 1f4eda2..1f4eda2 100644
--- a/2024/go/input/day4.test
+++ b/2024/go/input/day04.test
diff --git a/2024/go/input/day5.prod b/2024/go/input/day05.prod
index 0f16ea5..0f16ea5 100644
--- a/2024/go/input/day5.prod
+++ b/2024/go/input/day05.prod
diff --git a/2024/go/input/day5.test b/2024/go/input/day05.test
index 9d146d6..9d146d6 100644
--- a/2024/go/input/day5.test
+++ b/2024/go/input/day05.test
diff --git a/2024/go/input/day6.prod b/2024/go/input/day06.prod
index fb9193b..fb9193b 100644
--- a/2024/go/input/day6.prod
+++ b/2024/go/input/day06.prod
diff --git a/2024/go/input/day6.test b/2024/go/input/day06.test
index a4eb402..a4eb402 100644
--- a/2024/go/input/day6.test
+++ b/2024/go/input/day06.test
diff --git a/2024/go/input/day7.prod b/2024/go/input/day07.prod
index 333492b..333492b 100644
--- a/2024/go/input/day7.prod
+++ b/2024/go/input/day07.prod
diff --git a/2024/go/input/day7.test b/2024/go/input/day07.test
index fc6e099..fc6e099 100644
--- a/2024/go/input/day7.test
+++ b/2024/go/input/day07.test
diff --git a/2024/go/input/day8.prod b/2024/go/input/day08.prod
index 1e7f2b1..1e7f2b1 100644
--- a/2024/go/input/day8.prod
+++ b/2024/go/input/day08.prod
diff --git a/2024/go/input/day8.test b/2024/go/input/day08.test
index 78a1e91..78a1e91 100644
--- a/2024/go/input/day8.test
+++ b/2024/go/input/day08.test
diff --git a/2024/go/input/day9.prod b/2024/go/input/day09.prod
index b632cf8..b632cf8 100644
--- a/2024/go/input/day9.prod
+++ b/2024/go/input/day09.prod
diff --git a/2024/go/input/day9.test b/2024/go/input/day09.test
index f96c390..f96c390 100644
--- a/2024/go/input/day9.test
+++ b/2024/go/input/day09.test
diff --git a/2024/go/input/day11.prod b/2024/go/input/day11.prod
new file mode 100644
index 0000000..e029d56
--- /dev/null
+++ b/2024/go/input/day11.prod
@@ -0,0 +1 @@
+5688 62084 2 3248809 179 79 0 172169
diff --git a/2024/go/input/day11.test b/2024/go/input/day11.test
new file mode 100644
index 0000000..9b26c84
--- /dev/null
+++ b/2024/go/input/day11.test
@@ -0,0 +1 @@
+125 17
diff --git a/2024/go/src/day1/main.go b/2024/go/src/day01/main.go
index 17cfa54..4e52825 100644
--- a/2024/go/src/day1/main.go
+++ b/2024/go/src/day01/main.go
@@ -65,7 +65,7 @@ func solve_part_two(data string) int {
func main() {
test_1, _ := os.ReadFile("../input/day1.test")
test_2, _ := os.ReadFile("../input/day1_2.test")
- prod, _ := os.ReadFile("../input/day_1.prod")
+ prod, _ := os.ReadFile("../input/day01.prod")
content_test_1 := string(test_1)
content_test_2 := string(test_2)
content_prod := string(prod)
diff --git a/2024/go/src/day2/main.go b/2024/go/src/day02/main.go
index b06bed4..2658198 100644
--- a/2024/go/src/day2/main.go
+++ b/2024/go/src/day02/main.go
@@ -89,8 +89,8 @@ func solve_part_two(data string) int {
}
func main() {
- test := FileRead("../input/day2.test")
- prod := FileRead("../input/day2.prod")
+ test := FileRead("../input/day02.test")
+ prod := FileRead("../input/day02.prod")
fmt.Println("Part_1 test: ", solve_part_one(test))
fmt.Println("Part_1 prod: ", solve_part_one(prod))
diff --git a/2024/go/src/day3/main.go b/2024/go/src/day03/main.go
index 661d7aa..11e9f47 100644
--- a/2024/go/src/day3/main.go
+++ b/2024/go/src/day03/main.go
@@ -63,9 +63,9 @@ func solve_part_two(data string) int {
}
func main() {
- test := FileRead("../input/day3.test")
- test_2 := FileRead("../input/day3_2.test")
- prod := FileRead("../input/day3.prod")
+ test := FileRead("../input/day03.test")
+ test_2 := FileRead("../input/day03_2.test")
+ prod := FileRead("../input/day03.prod")
// Define the regex pattern with capture groups
fmt.Println("Part_1 test: ", solve_part_one(test))
diff --git a/2024/go/src/day4/main.go b/2024/go/src/day04/main.go
index ec90ed1..cb33819 100644
--- a/2024/go/src/day4/main.go
+++ b/2024/go/src/day04/main.go
@@ -123,8 +123,8 @@ func solve_part_two(data string) int {
}
func main() {
- test := FileRead("../input/day4.test")
- prod := FileRead("../input/day4.prod")
+ test := FileRead("../input/day04.test")
+ prod := FileRead("../input/day04.prod")
fmt.Println("Part_1 test: ", solve_part_one(test))
fmt.Println("Part_1 prod: ", solve_part_one(prod))
diff --git a/2024/go/src/day5/main.go b/2024/go/src/day05/main.go
index 65900e5..6250ed9 100644
--- a/2024/go/src/day5/main.go
+++ b/2024/go/src/day05/main.go
@@ -169,8 +169,8 @@ func solve_part_two(data string) int {
}
func main() {
- test := FileRead("../input/day5.test")
- prod := FileRead("../input/day5.prod")
+ test := FileRead("../input/day05.test")
+ prod := FileRead("../input/day05.prod")
fmt.Println("Part_1 test: ", solve_part_one(test))
fmt.Println("Part_1 prod: ", solve_part_one(prod))
diff --git a/2024/go/src/day6/main.go b/2024/go/src/day06/main.go
index fd629e6..10c1042 100644
--- a/2024/go/src/day6/main.go
+++ b/2024/go/src/day06/main.go
@@ -179,8 +179,8 @@ func solve_part_two(data string) int {
}
func main() {
- test := FileRead("../input/day6.test")
- prod := FileRead("../input/day6.prod")
+ test := FileRead("../input/day06.test")
+ prod := FileRead("../input/day06.prod")
fmt.Println("Part_1 test: ", solve_part_one(test))
fmt.Println("Part_1 prod: ", solve_part_one(prod))
fmt.Println("Part_2 test: ", solve_part_two(test))
diff --git a/2024/go/src/day7/main.go b/2024/go/src/day07/main.go
index 413086c..06c7438 100644
--- a/2024/go/src/day7/main.go
+++ b/2024/go/src/day07/main.go
@@ -181,8 +181,8 @@ func solve_part_two(data string) int64 {
}
func main() {
- test := FileRead("../input/day7.test")
- prod := FileRead("../input/day7.prod")
+ test := FileRead("../input/day07.test")
+ prod := FileRead("../input/day07.prod")
fmt.Println("Part_1 test: ", solve_part_one(test))
fmt.Println("Part_1 prod: ", solve_part_one(prod))
fmt.Println("Part_2 test: ", solve_part_two(test))
diff --git a/2024/go/src/day8/main.go b/2024/go/src/day08/main.go
index e801340..d3bce0c 100644
--- a/2024/go/src/day8/main.go
+++ b/2024/go/src/day08/main.go
@@ -130,8 +130,8 @@ func solve_part_two(data string) int {
}
func main() {
- test := FileRead("../input/day8.test")
- prod := FileRead("../input/day8.prod")
+ test := FileRead("../input/day08.test")
+ prod := FileRead("../input/day08.prod")
fmt.Println("Part_1 test: ", solve_part_one(test))
fmt.Println("Part_1 prod: ", solve_part_one(prod))
fmt.Println("Part_2 test: ", solve_part_two(test))
diff --git a/2024/go/src/day9/main.go b/2024/go/src/day09/main.go
index 0a9b51b..db2d99a 100644
--- a/2024/go/src/day9/main.go
+++ b/2024/go/src/day09/main.go
@@ -160,8 +160,8 @@ func solve_part_two(data string) int64 {
}
func main() {
- test := FileRead("../input/day9.test")
- prod := FileRead("../input/day9.prod")
+ test := FileRead("../input/day09.test")
+ prod := FileRead("../input/day09.prod")
fmt.Println("Part_1 test: ", solve_part_one(test))
fmt.Println("Part_1 prod: ", solve_part_one(prod))
fmt.Println("Part_2 test: ", solve_part_two(test))
diff --git a/2024/go/src/day11/main.go b/2024/go/src/day11/main.go
new file mode 100644
index 0000000..afe54c9
--- /dev/null
+++ b/2024/go/src/day11/main.go
@@ -0,0 +1,107 @@
+package main
+
+import (
+ "fmt"
+ "math"
+ "os"
+ "strconv"
+ "strings"
+)
+
+func FileRead(path string) string {
+ file, err := os.ReadFile(path)
+ if err != nil {
+ fmt.Println("Couldn't Read file: ", err)
+ }
+ return string(file)
+}
+
+func parseInput(data string) []int {
+ var stones []int
+ for _, x := range strings.Split(data, " ") {
+ x := strings.TrimRight(x, "\n")
+ stone, _ := strconv.Atoi(x)
+ stones = append(stones, stone)
+ }
+ return stones
+}
+
+func insert(slice []int, index int, value int) []int {
+ if index < 0 || index > len(slice) {
+ return slice // Or handle the error as you prefer
+ }
+ return append(slice[:index], append([]int{value}, slice[index:]...)...)
+}
+
+func getNumDigits(digit int) int {
+ cnt := 0
+ for digit != 0 {
+ digit /= 10
+ cnt++
+ }
+ return cnt
+}
+
+func splitNumber(num int) (int, int) {
+ digits := getNumDigits(num)
+ divisor := int(math.Pow10(digits / 2))
+ left := num / divisor
+ right := num % divisor
+ return left, right
+}
+
+func isEvenDigits(digit int) bool {
+ return getNumDigits(digit)%2 == 0
+}
+
+func processStone(cache *map[[2]int]int, stone, blinks int) int {
+ result := 0
+ if blinks == 0 {
+ return 1
+ } else {
+ _, exists := (*cache)[[2]int{stone, blinks}]
+ if !exists {
+ if stone == 0 {
+ result = processStone(cache, 1, blinks-1)
+ } else if isEvenDigits(stone) {
+ left, right := splitNumber(stone)
+ result += processStone(cache, left, blinks-1)
+ result += processStone(cache, right, blinks-1)
+ } else {
+ result = processStone(cache, stone*2024, blinks-1)
+ }
+ (*cache)[[2]int{stone, blinks}] = result
+ }
+ return (*cache)[[2]int{stone, blinks}]
+ }
+}
+func processStones(stones []int, blinks int) int {
+ cache := make(map[[2]int]int)
+ ans := 0
+ n := len(stones)
+ for j := 0; j < n; j++ {
+ ans += processStone(&cache, stones[j], blinks)
+ }
+ return ans
+}
+
+func solve_part_one(data string) int {
+ stones := parseInput(data)
+ ans := processStones(stones, 25)
+ return ans
+}
+
+func solve_part_two(data string) int {
+ stones := parseInput(data)
+ ans := processStones(stones, 75)
+ return ans
+}
+
+func main() {
+ test := FileRead("../input/day11.test")
+ prod := FileRead("../input/day11.prod")
+ fmt.Println("Part_1 test: ", solve_part_one(test))
+ fmt.Println("Part_1 prod: ", solve_part_one(prod))
+ fmt.Println("Part_2 test: ", solve_part_two(test))
+ fmt.Println("Part_2 prod: ", solve_part_two(prod))
+}