Kaynağa Gözat

Solved part2

Piotr Czajkowski 3 yıl önce
ebeveyn
işleme
67ac518807
1 değiştirilmiş dosya ile 21 ekleme ve 11 silme
  1. 21 11
      06/code.go

+ 21 - 11
06/code.go

@@ -9,21 +9,21 @@ import (
 	"strings"
 )
 
-func readInput(file string) []int {
+func readInput(file string) map[int]int {
 	content, err := ioutil.ReadFile(file)
 	if err != nil {
 		log.Fatal(err)
 	}
 
 	fishStrings := strings.Split(string(content), ",")
-	var input []int
+	input := make(map[int]int)
 	for _, fishString := range fishStrings {
 		if fishString == "" {
 			continue
 		}
 
 		if number, err := strconv.Atoi(fishString); err == nil {
-			input = append(input, number)
+			input[number]++
 		} else {
 			log.Fatal(err)
 		}
@@ -32,19 +32,28 @@ func readInput(file string) []int {
 	return input
 }
 
-func part1(fish []int, days int) int {
+func part1(fish map[int]int, days int) int {
 	for d := 0; d < days; d++ {
-		max := len(fish)
-		for i := 0; i < max; i++ {
-			fish[i]--
-			if fish[i] < 0 {
-				fish[i] = 6
-				fish = append(fish, 8)
+		newFish := make(map[int]int)
+		for k, v := range fish {
+			if k == 0 {
+				newFish[8] = v
+				newFish[6] += v
+				continue
 			}
+
+			newFish[k-1] += v
 		}
+
+		fish = newFish
+	}
+
+	sum := 0
+	for _, v := range fish {
+		sum += v
 	}
 
-	return len(fish)
+	return sum
 }
 
 func main() {
@@ -54,4 +63,5 @@ func main() {
 
 	input := readInput(os.Args[1])
 	fmt.Println("Part 1:", part1(input, 80))
+	fmt.Println("Part 2:", part1(input, 256))
 }