My code for Advent of Code 2020 in Go
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 

57 lines
938 B

package main
import (
"bufio"
"fmt"
"os"
"sort"
"strconv"
)
func main() {
// Part 1
joltages := []int{}
file, _ := os.Open("input.txt")
defer file.Close()
for scanner := bufio.NewScanner(file); scanner.Scan(); {
joltage, _ := strconv.Atoi(scanner.Text())
joltages = append(joltages, joltage)
}
sort.Ints(joltages)
jolts := map[int]int{}
currentJolt := 0
for _, j := range joltages {
jolts[j-currentJolt]++
currentJolt = j
}
// Device itself
jolts[3]++
fmt.Println("Part 1:", jolts[1]*jolts[3])
// Part 2
fmt.Println("Part 2:", countPaths(0, joltages, map[int]int{}))
}
func countPaths(current int, joltages []int, memory map[int]int) (total int) {
if len(joltages) == 0 {
return 1
}
for _, next := range joltages {
if next-current > 3 {
break
}
if _, exists := memory[next]; !exists {
memory[next] = countPaths(next, joltages[1:], memory)
}
total += memory[next]
}
return
}