main
parent 04476e62c9
commit c0ff89c0fb
3 changed files with 161 additions and 0 deletions
1. 65
2. 1
Day 6/input
3. 95
Day 6/main.go

#### 65 Day 6/README.md Unescape Escape View File

 `@ -0,0 +1,65 @@` `# Day 6: Lanternfish` ``` ``` `The sea floor is getting steeper. Maybe the sleigh keys got carried this way?` ``` ``` `A massive school of glowing [lanternfish](https://en.wikipedia.org/wiki/Lanternfish) swims past. They must spawn quickly to reach such large numbers - maybe **exponentially** quickly? You should model their growth rate to be sure.` ``` ``` `Although you know nothing about this specific species of lanternfish, you make some guesses about their attributes. Surely, each lanternfish creates a new lanternfish once every **7** days.` ``` ``` `However, this process isn't necessarily synchronized between every lanternfish - one lanternfish might have 2 days left until it creates another lanternfish, while another might have 4. So, you can model each fish as a single number that represents **the number of days until it creates a new lanternfish**.` ``` ``` `Furthermore, you reason, a **new** lanternfish would surely need slightly longer before it's capable of producing more lanternfish: two more days for its first cycle.` ``` ``` `So, suppose you have a lanternfish with an internal timer value of `3`:` ``` ``` `- After one day, its internal timer would become `2`.` `- After another day, its internal timer would become `1`.` `- After another day, its internal timer would become `0`.` `- After another day, its internal timer would reset to `6`, and it would create a **new** lanternfish with an internal timer of `8`.` `- After another day, the first lanternfish would have an internal timer of `5`, and the second lanternfish would have an internal timer of `7`.` ``` ``` `A lanternfish that creates a new fish resets its timer to `6`, not `7` (because `0` is included as a valid timer value). The new lanternfish starts with an internal timer of `8` and does not start counting down until the next day.` ``` ``` `Realizing what you're trying to do, the submarine automatically produces a list of the ages of several hundred nearby lanternfish (your puzzle input). For example, suppose you were given the following list:` ``` ``` ````` `3,4,3,1,2` ````` ``` ``` `This list means that the first fish has an internal timer of `3`, the second fish has an internal timer of `4`, and so on until the fifth fish, which has an internal timer of `2`. Simulating these fish over several days would proceed as follows:` ``` ``` ````` `Initial state: 3,4,3,1,2` `After 1 day: 2,3,2,0,1` `After 2 days: 1,2,1,6,0,8` `After 3 days: 0,1,0,5,6,7,8` `After 4 days: 6,0,6,4,5,6,7,8,8` `After 5 days: 5,6,5,3,4,5,6,7,7,8` `After 6 days: 4,5,4,2,3,4,5,6,6,7` `After 7 days: 3,4,3,1,2,3,4,5,5,6` `After 8 days: 2,3,2,0,1,2,3,4,4,5` `After 9 days: 1,2,1,6,0,1,2,3,3,4,8` `After 10 days: 0,1,0,5,6,0,1,2,2,3,7,8` `After 11 days: 6,0,6,4,5,6,0,1,1,2,6,7,8,8,8` `After 12 days: 5,6,5,3,4,5,6,0,0,1,5,6,7,7,7,8,8` `After 13 days: 4,5,4,2,3,4,5,6,6,0,4,5,6,6,6,7,7,8,8` `After 14 days: 3,4,3,1,2,3,4,5,5,6,3,4,5,5,5,6,6,7,7,8` `After 15 days: 2,3,2,0,1,2,3,4,4,5,2,3,4,4,4,5,5,6,6,7` `After 16 days: 1,2,1,6,0,1,2,3,3,4,1,2,3,3,3,4,4,5,5,6,8` `After 17 days: 0,1,0,5,6,0,1,2,2,3,0,1,2,2,2,3,3,4,4,5,7,8` `After 18 days: 6,0,6,4,5,6,0,1,1,2,6,0,1,1,1,2,2,3,3,4,6,7,8,8,8,8` ````` ``` ``` `Each day, a `0` becomes a `6` and adds a new `8` to the end of the list, while each other number decreases by `1` if it was present at the start of the day.` ``` ``` `In this example, after 18 days, there are a total of `26` fish. After 80 days, there would be a total of `5934`.` ``` ``` `Find a way to simulate lanternfish. **How many lanternfish would there be after 80 days?**` ``` ``` `# Part Two` ``` ``` `Suppose the lanternfish live forever and have unlimited food and space. Would they take over the entire ocean?` ``` ``` `After 256 days in the example above, there would be a total of `26984457539` lanternfish!` ``` ``` `**How many lanternfish would there be after 256 days?**`

#### 1 Day 6/input Unescape Escape View File

 `@ -0,0 +1 @@` `4,1,3,2,4,3,1,4,4,1,1,1,5,2,4,4,2,1,2,3,4,1,2,4,3,4,5,1,1,3,1,2,1,4,1,1,3,4,1,2,5,1,4,2,2,1,1,1,3,1,5,3,1,2,1,1,1,1,4,1,1,1,2,2,1,3,1,3,1,3,4,5,1,2,2,1,1,1,4,1,5,1,3,1,3,4,1,3,2,3,4,4,4,3,4,5,1,3,1,3,5,1,1,1,1,1,2,4,1,2,1,1,1,5,1,1,2,1,3,1,4,2,3,4,4,3,1,1,3,5,3,1,1,5,2,4,1,1,3,5,1,4,3,1,1,4,2,1,1,1,1,1,1,3,1,1,1,1,1,4,5,1,2,5,3,1,1,3,1,1,1,1,5,1,2,5,1,1,1,1,1,1,3,5,1,3,2,1,1,1,1,1,1,1,4,5,1,1,3,1,5,1,1,1,1,3,3,1,1,1,4,4,1,1,4,1,2,1,4,4,1,1,3,4,3,5,4,1,1,4,1,3,1,1,5,5,1,2,1,2,1,2,3,1,1,3,1,1,2,1,1,3,4,3,1,1,3,3,5,1,2,1,4,1,1,2,1,3,1,1,1,1,1,1,1,4,5,5,1,1,1,4,1,1,1,2,1,2,1,3,1,3,1,1,1,1,1,1,1,5`

#### 95 Day 6/main.go Unescape Escape View File

 `@ -0,0 +1,95 @@` `package main` ``` ``` `import (` ` "bufio"` ` "fmt"` ` "os"` ` "strconv"` ` "strings"` `)` ``` ``` `func partOne(lanternfishes []uint8, numberOfDays int) {` ` for i := 0; i < numberOfDays; i++ {` ` newLanternFishes := []uint8{}` ``` ``` ` for lanternfishIndex := range lanternfishes {` ` if lanternfishes[lanternfishIndex] == 0 {` ` lanternfishes[lanternfishIndex] = 6` ` newLanternFishes = append(newLanternFishes, uint8(8))` ` } else {` ` lanternfishes[lanternfishIndex] -= 1` ` }` ` }` ``` ``` ` lanternfishes = append(lanternfishes, newLanternFishes[:]...)` ` }` ``` ``` ` fmt.Printf("Part One Answer: %d\n", len(lanternfishes))` `}` ``` ``` `func partTwo(lanternfishes []uint8, numberOfDays int) {` ` days := [9]uint64{}` ``` ``` ` for _, lanternfish := range lanternfishes {` ` days[lanternfish] += 1` ` }` ``` ``` ` totalFish := uint64(0)` ` for i := 0; i < numberOfDays; i++ {` ` newDays := [9]uint64{}` ``` ``` ` for day, numberOfFish := range days {` ` if i == numberOfDays - 1 {` ` if day == 0 {` ` totalFish += numberOfFish * 2` ` } else {` ` totalFish += numberOfFish` ` }` ` } else {` ` if day == 0 {` ` newDays[8] += numberOfFish` ` newDays[6] += numberOfFish` ` } else {` ` newDays[day - 1] += numberOfFish` ` }` ` }` ` }` ``` ``` ` days = newDays` ` }` ``` ``` ` fmt.Printf("Part Two Answer: %d\n", totalFish)` `}` ``` ``` `func main() {` ` file, err := os.Open("./input")` ` if err != nil {` ` fmt.Printf("[Error] Unable to open file")` ` os.Exit(1)` ` }` ` defer file.Close()` ``` ``` ` partOneLanternfishes := []uint8{}` ` partTwoLanternfishes := []uint8{}` ``` ``` ` scanner := bufio.NewScanner(file)` ` scanner.Scan()` ` lanternfishesStrings := strings.Split(scanner.Text(), ",")` ` if len(lanternfishesStrings) <= 1 {` ` fmt.Printf("[Error] Invalid lanternfish list parsed\n")` ` }` ``` ``` ` for _, lanternfishesString := range lanternfishesStrings {` ` lanternfish, err := strconv.Atoi(lanternfishesString)` ` if err != nil {` ` fmt.Printf("[Error] Invalid lanternfish parsed\n")` ` continue` ` }` ``` ``` ` partOneLanternfishes = append(partOneLanternfishes, uint8(lanternfish))` ` partTwoLanternfishes = append(partTwoLanternfishes, uint8(lanternfish))` ` }` ``` ``` ` partOne(partOneLanternfishes, 80)` ` partTwo(partTwoLanternfishes, 256)` `}`