From e2c23709f62eae8bae1e5a8aae2649d040dc1639 Mon Sep 17 00:00:00 2001 From: sgf Date: Fri, 4 Feb 2022 21:54:48 +0300 Subject: [PATCH] Working tree version --- day6/main.go | 65 +++++++++++++++++++++++++++++----------------------- main.go | 2 +- main_test.go | 19 +++++++++++++++ 3 files changed, 56 insertions(+), 30 deletions(-) create mode 100644 main_test.go diff --git a/day6/main.go b/day6/main.go index 627e2fe..606fe82 100644 --- a/day6/main.go +++ b/day6/main.go @@ -63,9 +63,9 @@ func oneDay(ages []BirthTimer) ([]BirthTimer) { return ages } -func RunF1(input string) { +func RunF1Days(input string, days int) int { h0, err := os.Open(filepath.Join("day6", input)) - if err != nil { return } + if err != nil { return 0 } defer h0.Close() ages, err := readInput(h0) @@ -74,12 +74,18 @@ func RunF1(input string) { ages = oneDay(ages) fmt.Printf("Day %v: %v\n", d, ages) }*/ - for d := 0; d < 80; d++ { + //for d := 0; d < 80; d++ { + for d := 0; d < days; d++ { ages = oneDay(ages) //fmt.Printf("Day %v: %v\n", d, ages) } - fmt.Printf("Answer1: %v\n", len(ages)) + return len(ages) +} + +func RunF1 (input string) { + n := RunF1Days(input, 80) + fmt.Printf("Answer1: %v\n", n) } type Fish struct { @@ -101,53 +107,54 @@ func readInput2(r io.Reader) (fishes []Fish, err error) { } func live(fish *Fish) { - if fish.age < 8 { + if fish.age < 9 { return } - fmt.Printf(" Fish: %v\n", fish) - fish.age -= 1 + //fmt.Printf(" Fish: %v\n", fish) + fish.age -= 2 for fish.age >= 7 { fish.age -= 7 fish.childs = append(fish.childs, Fish{age: fish.age}) - fmt.Printf(" Fish child: %v\n", fish) + //fmt.Printf(" Fish child: %v\n", fish) } } func liveDescendants(fish *Fish) { live(fish) - fmt.Printf("Fish lived: %v\n", fish) + //fmt.Printf("Fish lived: %v\n", fish) for i := 0; i < len(fish.childs); i++ { - fmt.Printf("Living descendant %d\n", i) + //fmt.Printf("Living descendant %d\n", i) liveDescendants(&fish.childs[i]) } } -func calculateAge(bt BirthTimer, days int) int { - return 8 - int(bt) + days +func countNodes(fish Fish) int { + n := 1 + for i := range fish.childs { + n += countNodes(fish.childs[i]) + } + return n } -func RunF2(input string) { +func RunF2Days(input string, days int) int { h0, err := os.Open(filepath.Join("day6", input)) - if err != nil { return } + if err != nil { return 0 } defer h0.Close() fishes, err := readInput2(h0) - fmt.Printf("Starting with fishes: %v\n", fishes) - for _, x := range fishes[:1] { - fmt.Printf("### Live top-level fish %v\n", x) - x.age = x.age + 9 + //fmt.Printf("Starting with fishes: %v\n", fishes) + n := 0 + for _, x := range fishes { + //fmt.Printf("### Live top-level fish %v\n", x) + x.age = x.age + days liveDescendants(&x) + n += countNodes(x) } - /* - for d := 0; d < 18; d++ { - ages = oneDay(ages) - fmt.Printf("Day %v: %v\n", d, ages) - }*/ - /* - for d := 0; d < 18; d++ { - ages = oneDay(ages) - //fmt.Printf("Day %v: %v\n", d, ages) - }*/ + //fmt.Printf("Nodes: %v\n", n) + return n +} - //fmt.Printf("Answer2: %v\n", len(ages)) +func RunF2(input string) { + n := RunF2Days(input, 80) + fmt.Printf("Nodes: %v\n", n) } diff --git a/main.go b/main.go index 10ffe7f..9b97a09 100644 --- a/main.go +++ b/main.go @@ -14,6 +14,6 @@ func main() { //day1.RunF1("day1/input.txt") //day1.RunF2("day1/input.txt") - day6.RunF1("in.txt") + //day6.RunF1("in.txt") day6.RunF2("in.txt") } diff --git a/main_test.go b/main_test.go new file mode 100644 index 0000000..be4881a --- /dev/null +++ b/main_test.go @@ -0,0 +1,19 @@ + +package main + +import ( + "testing" + "sgf-dma/aoc-2021/day6" +) + +func BenchmarkRunF1Days(b *testing.B) { + for i := 0; i < b.N; i++ { + day6.RunF1Days("in.txt", 100) + } +} + +func BenchmarkRunF2Days(b *testing.B) { + for i := 0; i < b.N; i++ { + day6.RunF2Days("in.txt", 100) + } +} -- 2.20.1