AoC2021/src/day6/day6.go
2021-12-06 13:43:37 +01:00

61 lines
1.2 KiB
Go

package main
import (
"AOC2021/src/helper"
"fmt"
"os"
"strings"
)
func main() {
args := os.Args[1:]
input, err := helper.GetInput(args[0])
if err != nil {
fmt.Println(err)
}
inputNumbers, _ := helper.MapToNumber(strings.Split(input[0], ","))
fishArray := [9]int{0, 0, 0, 0, 0, 0, 0, 0, 0}
for _, inputNumber := range inputNumbers {
fishArray[inputNumber] += 1
}
fmt.Println(fishArray)
simulateNDays(fishArray, 80)
simulateNDays(fishArray, 256)
}
func simulateNDays(fishArray [9]int, n int) {
i := 0
for i < n {
daysPassed := 0
fishArray, daysPassed = step(fishArray)
i += daysPassed
}
fmt.Println(getSum(fishArray))
}
func step(input [9]int) ([9]int, int) {
newArray := [9]int{0, 0, 0, 0, 0, 0, 0, 0, 0}
lowestTimerIndex := findIndexOfFirstNonzero(input)
amountCreatingFishes ,a1 := input[lowestTimerIndex] , input[lowestTimerIndex+1:]
copy(newArray[:], a1[:8-lowestTimerIndex])
newArray[8] += amountCreatingFishes
newArray[6] += amountCreatingFishes
return newArray, lowestTimerIndex + 1
}
func getSum(input [9]int) int{
sum := 0
for _,number := range input {
sum += number
}
return sum
}
func findIndexOfFirstNonzero(input [9]int) int {
for i, number := range input {
if number != 0 {
return i
}
}
return -1
}