# 2022 Day 10

Part 1 Problem General solution Solution: Go package main import ( "bufio" "fmt" "os" "strconv" "strings" ) type Instruction struct { name string argument int } func main() { instructions := []Instruction{} scanner := bufio.NewScanner(os.Stdin) for scanner.Scan() { line := strings.TrimSpace(scanner.Text()) if len(line) > 0 { fields := strings.Fields(line) instruction := Instruction{} instruction.name = fields[0] if instruction.name == "addx" { instruction.argument, _ = strconv.Atoi(fields[1]) } instructions = append(instructions, instruction) } } cycles := []int{} cycles = append(cycles, 1) for i := range instructions { switch instructions[i].…

# 2022 Day 9

Part 1 Problem General solution Solution: Go Our first attempt: for mi := range moveInstructions { // Move the head head.x += moveInstructions[mi].DeltaX head.y += moveInstructions[mi].DeltaY // If the distance between the head and the tail is more than 1 // across X or Y, move the tail 1 point in the opposite direction headTailDistanceX := head.x - tail.x headTailDistanceY := head.y - tail.y if headTailDistanceX < -1 { tail.x -= 1 } else if headTailDistanceX > 1 { tail.…

# 2022 Day 8

Part 1 Problem From a grid of trees (with heights), count the trees that are visible from outside the grid. General solution First we need to design our data structures. A grid is perhaps most easily represented as a 2 dimensional array, both from a conceptual perspective and also it is likely to be efficient because requests will have locality of reference (we will often be looking at values near to each other).…

# 2022 Day 7

Part 1 Problem Read in a list of lines which represent one of the following: Command: Starts with a \$. Directory: Starts with dir and is followed by the name. Regular File: Starts with a number (the file size) and is followed by the name. The size of a directory is the sum of the regular files in the directory, plus any directories underneath it. Find the sum of the sizes of all directories with a size less than or equal to 100000.…

# 2022 Day 6

Part 1 Problem Read in a stream of characters and identify the first point at which 4 consecutive characters are unique. General solution This is trivial - we simply read it one line of the file, get the first 4 characters into a queue, and then check whether they are unique. If not, move the start point along by one and check the next four characters. Solution: Go Although we could read in a file character by character, this would potentially cause a lot of read requests.…

# 2022 Day 5

Part 1 Problem The file input includes a number of stacks, their contents (crates), and a series of instructions for moving crates betwene stacks. Process all the instructions and then find the identifier of each crate at the top of each stack. Some stacks may be empty at the beginning or end of the process. General solution This is more difficult than previous days, as our input file now has three different line types:…

# 2022 Day 4

Part 1 Problem Each line in the file represents a pair of assignments. Each assignment is separated by a comma, and the lower and upper bounds of the assignment are separated by a hyphen. Count the pairs where one assignment completely overlaps the other. General solution As all pairs are independent, we can process them as we read the file instead of converting them into a data structure. A pair of assignments completely overlap if and only if:…

# 2022 Day 3

Part 1 Problem Each line in the file represents a rucksack, and each character of the line represents an item. Rucksacks have two compartments, with the items split evenly between them (first n / 2 items go in the first compartment, the rest in the second compartment). General solution Create a nested data structure which comprises of: Rucksacks. Rucksack compartments. Contents of compartments. We also need a list of priorities for each letter a.…