diff --git a/10/input.txt b/10/input.txt new file mode 100644 index 0000000..670b218 --- /dev/null +++ b/10/input.txt @@ -0,0 +1,96 @@ +70 +102 +148 +9 +99 +63 +40 +52 +91 +39 +55 +28 +54 +22 +95 +61 +118 +35 +14 +21 +129 +82 +137 +45 +7 +87 +81 +25 +3 +108 +41 +11 +145 +18 +65 +80 +115 +29 +136 +42 +97 +104 +117 +141 +62 +121 +23 +96 +24 +128 +48 +1 +112 +8 +34 +144 +134 +116 +58 +147 +51 +84 +17 +126 +64 +68 +135 +10 +77 +105 +127 +73 +111 +90 +16 +103 +109 +98 +146 +123 +130 +69 +133 +110 +30 +122 +15 +74 +33 +38 +83 +92 +2 +53 +140 +4 \ No newline at end of file diff --git a/10/main.go b/10/main.go new file mode 100644 index 0000000..a85e598 --- /dev/null +++ b/10/main.go @@ -0,0 +1,57 @@ +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 +}