AoC2020/day10/day10.go

78 lines
1.5 KiB
Go
Raw Normal View History

2020-12-10 19:42:57 +01:00
package main
import (
"AoC2020/helper"
"fmt"
"os"
"sort"
)
func main() {
args := os.Args[1:]
input, err := helper.GetInput(args[0])
if err != nil {
fmt.Println(err)
}
numbers, err := helper.MapToNumber(input)
if err != nil {
fmt.Println(err)
}
part2(numbers)
}
func part2(numbers []int) {
sort.Ints(numbers)
numbers = prependInt(numbers,0)
numbers = append(numbers,numbers[len(numbers)-1]+3)
fmt.Printf("%v \n",numbers)
possibilities := make([][3]int, len(numbers))
possibilities[len(numbers)-1] = [3]int{0,0,1}
for i:= len(numbers)-1; i >= 0; i-- {
diff := 0
j := 1
for diff <= 3 && i+j<len(numbers){
diff = numbers[i+j] - numbers[i]
switch diff {
case 1:
possibilities[i][0] = sum(possibilities[i+j])
case 2:
possibilities[i][1] = sum(possibilities[i+j])
case 3:
possibilities[i][2] = sum(possibilities[i+j])
}
j++
}
}
fmt.Printf("%v \n",possibilities)
fmt.Printf("%d \n",sum(possibilities[0]))
}
func part1(numbers []int) {
sort.Ints(numbers)
diffCounter := make([]int, 3)
numbers = prependInt(numbers,0)
numbers = append(numbers,numbers[len(numbers)-1]+3)
fmt.Printf("%v \n",numbers)
for i:= 0; i < len(numbers)-1; i++ {
diffCounter[numbers[i+1] - numbers[i]-1]++
}
fmt.Printf("%v \n",diffCounter)
fmt.Print(diffCounter[0] * diffCounter[2])
}
func prependInt(x []int, y int) []int {
x = append(x, 0)
copy(x[1:], x)
x[0] = y
return x
}
func sum(array [3]int) int {
result := 0
for _, v := range array {
result += v
}
return result
}