main.go (894B)
1 package main 2 3 import ( 4 "bufio" 5 "fmt" 6 "os" 7 "sort" 8 "strconv" 9 ) 10 11 func readInput(filename string) (res []int) { 12 file, _ := os.Open(filename) 13 defer file.Close() 14 15 scanner := bufio.NewScanner(file) 16 for scanner.Scan() { 17 num, _ := strconv.Atoi(scanner.Text()) 18 res = append(res, num) 19 } 20 res = append(res, 0) 21 sort.Ints(res) 22 res = append(res, res[len(res)-1]+3) 23 return 24 } 25 26 func main() { 27 input := readInput("./input.txt") 28 // 1885 29 fmt.Println(part1(input)) 30 // 2024782584832 31 fmt.Println(part2(input)) 32 } 33 34 func part1(input []int) int { 35 diffCount := make(map[int]int) 36 for i := 1; i < len(input); i = i + 1 { 37 diffCount[input[i]-input[i-1]] += 1 38 } 39 return diffCount[1] * diffCount[3] 40 } 41 42 func part2(input []int) int64 { 43 arrCount := map[int]int64{0: 1} 44 for _, v := range input[1:] { 45 arrCount[v] = arrCount[v-1] + arrCount[v-2] + arrCount[v-3] 46 } 47 return arrCount[input[len(input)-1]] 48 }