Day 1: Historian Hysteria
Megathread guidelines
- Keep top level comments as only solutions, if you want to say something other than a solution put it in a new post. (replies to comments can be whatever)
- You can send code in code blocks by using three backticks, the code, and then three backticks or use something such as https://blocks.programming.dev if you prefer sending it through a URL
FAQ
- What is this?: Here is a post with a large amount of details: https://programming.dev/post/22323136
- Where do I participate?: https://adventofcode.com/
- Is there a leaderboard for the community?: We have a programming.dev leaderboard with the info on how to join in this post: https://programming.dev/post/6631465
Go
package main import ( "bufio" "fmt" "os" "sort" "strconv" "strings" ) func main() { input, _ := os.Open("input.txt") defer input.Close() left, right := []int{}, []int{} scanner := bufio.NewScanner(input) for scanner.Scan() { line := scanner.Text() splitline := strings.Split(line, " ") l, _ := strconv.Atoi(splitline[0]) r, _ := strconv.Atoi(splitline[1]) left, right = append(left, l), append(right, r) } fmt.Printf("part 1 - total diff: %d\n", part1(left, right)) fmt.Printf("part 2 - new total: %d\n", part2(left, right)) } func part1(left, right []int) int { diff := 0 sort.Ints(left) sort.Ints(right) for i, l := range left { if l > right[i] { diff += (l - right[i]) } else { diff += (right[i] - l) } } return diff } func part2(left, right []int) int { newTotal := 0 for _, l := range left { matches := 0 for _, r := range right { if l == r { matches++ } } newTotal += l * matches } return newTotal }