working part 1
authorsgf <sgf.dma@gmail.com>
Tue, 18 Jan 2022 20:55:44 +0000 (23:55 +0300)
committersgf <sgf.dma@gmail.com>
Thu, 27 Jan 2022 20:07:35 +0000 (23:07 +0300)
day6/in.txt [new file with mode: 0644]
day6/input.txt [new file with mode: 0644]
day6/main.go [new file with mode: 0644]
main.go

diff --git a/day6/in.txt b/day6/in.txt
new file mode 100644 (file)
index 0000000..55129f1
--- /dev/null
@@ -0,0 +1 @@
+3,4,3,1,2
diff --git a/day6/input.txt b/day6/input.txt
new file mode 100644 (file)
index 0000000..afcd5e5
--- /dev/null
@@ -0,0 +1 @@
+2,1,1,4,4,1,3,4,2,4,2,1,1,4,3,5,1,1,5,1,1,5,4,5,4,1,5,1,3,1,4,2,3,2,1,2,5,5,2,3,1,2,3,3,1,4,3,1,1,1,1,5,2,1,1,1,5,3,3,2,1,4,1,1,1,3,1,1,5,5,1,4,4,4,4,5,1,5,1,1,5,5,2,2,5,4,1,5,4,1,4,1,1,1,1,5,3,2,4,1,1,1,4,4,1,2,1,1,5,2,1,1,1,4,4,4,4,3,3,1,1,5,1,5,2,1,4,1,2,4,4,4,4,2,2,2,4,4,4,2,1,5,5,2,1,1,1,4,4,1,4,2,3,3,3,3,3,5,4,1,5,1,4,5,5,1,1,1,4,1,2,4,4,1,2,3,3,3,3,5,1,4,2,5,5,2,1,1,1,1,3,3,1,1,2,3,2,5,4,2,1,1,2,2,2,1,3,1,5,4,1,1,5,3,3,2,2,3,1,1,1,1,2,4,2,2,5,1,2,4,2,1,1,3,2,5,5,3,1,3,3,1,4,1,1,5,5,1,5,4,1,1,1,1,2,3,3,1,2,3,1,5,1,3,1,1,3,1,1,1,1,1,1,5,1,1,5,5,2,1,1,5,2,4,5,5,1,1,5,1,5,5,1,1,3,3,1,1,3,1
diff --git a/day6/main.go b/day6/main.go
new file mode 100644 (file)
index 0000000..944e968
--- /dev/null
@@ -0,0 +1,83 @@
+
+package day6
+
+import (
+    "fmt"
+    "os"
+    "strconv"
+    "io"
+    "path/filepath"
+    "bufio"
+)
+
+type Age int
+
+func SplitComma(data []byte, atEOF bool) (advance int, token []byte, err error) {
+    token = make([]byte, 0)
+    i := 0
+    var c rune
+    //fmt.Printf("data: %q, %v\n", data, atEOF)
+    out:
+    for i, c = range string(data) {
+        //fmt.Printf("get %q at %v\n", c, i)
+        switch c {
+            case ',', '\n': break out
+            default: token = append(token, data[i])
+        }
+    }
+    advance = i + 1
+    //fmt.Printf("Return %q, %v\n", string(token), advance)
+    return
+}
+
+func readInput(r io.Reader) (ages []Age, err error) {
+    s := bufio.NewScanner(r)
+
+    s.Split(SplitComma)
+    ages = make([]Age, 0, 12)
+    for s.Scan() {
+        x, err := strconv.Atoi(s.Text())
+        if err != nil { return nil, err }
+        ages = append(ages, Age(x))
+    }
+    return ages, err
+}
+
+func oneDay(ages []Age) ([]Age) {
+    n := 0
+    for i := 0; i < len(ages); i++ {
+        if ages[i] == 0 {
+            n++
+            ages[i] = 6
+        } else {
+            ages[i]--
+        }
+    }
+
+
+    childs := make([]Age, n)
+    for j := 0; j < len(childs); j++ {
+        childs[j] = 8
+    }
+    ages = append(ages, childs...)
+    return ages
+}
+
+func RunF1(input string) {
+    h0, err := os.Open(filepath.Join("day6", input))
+    if err != nil { return }
+    defer h0.Close()
+
+    ages, err := readInput(h0)
+    /*
+    for d := 0; d < 18; d++ {
+        ages = oneDay(ages)
+        fmt.Printf("Day %v: %v\n", d, ages)
+    }*/
+    for d := 0; d < 200; d++ {
+        ages = oneDay(ages)
+        //fmt.Printf("Day %v: %v\n", d, ages)
+    }
+
+    fmt.Printf("Answer1: %v\n", len(ages))
+}
diff --git a/main.go b/main.go
index a98cca9..616ae90 100644 (file)
--- a/main.go
+++ b/main.go
@@ -6,10 +6,13 @@ import (
     //"sgf-dma/aoc-2021/day2"
     //"sgf-dma/aoc-2021/day3"
     //"sgf-dma/aoc-2021/day4"
-    "sgf-dma/aoc-2021/day5"
+    //"sgf-dma/aoc-2021/day5"
+    "sgf-dma/aoc-2021/day6"
 )
 
 func main() {
-    day5.RunF1("day5/in.txt")
-    day5.RunF2("day5/in.txt")
+    //day1.RunF1("day1/input.txt")
+    //day1.RunF2("day1/input.txt")
+
+    day6.RunF1("input.txt")
 }