Day 02
This commit is contained in:
parent
ad70f3e86b
commit
0d8a41e58c
File diff suppressed because it is too large
Load Diff
|
@ -0,0 +1,66 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"log"
|
||||||
|
"os"
|
||||||
|
"strconv"
|
||||||
|
"strings"
|
||||||
|
)
|
||||||
|
|
||||||
|
func main() {
|
||||||
|
inputBytes, _ := os.ReadFile("input.txt")
|
||||||
|
inputs := strings.Split(string(inputBytes), "\n")
|
||||||
|
|
||||||
|
log.Println("Puzzle 1:", puzzle1(inputs))
|
||||||
|
log.Println("Puzzle 2:", puzzle2(inputs))
|
||||||
|
}
|
||||||
|
|
||||||
|
func puzzle1(input []string) int {
|
||||||
|
// "forward X" increases the horizontal position by X units.
|
||||||
|
// "down X" increases the depth by X units.
|
||||||
|
// "up X" decreases the depth by X units.
|
||||||
|
horizontal := 0
|
||||||
|
depth := 0
|
||||||
|
for _, instruction := range input {
|
||||||
|
instructionParts := strings.Split(instruction, " ")
|
||||||
|
direction := instructionParts[0]
|
||||||
|
distance, _ := strconv.Atoi(instructionParts[1])
|
||||||
|
switch direction {
|
||||||
|
case "forward":
|
||||||
|
horizontal += distance
|
||||||
|
case "down":
|
||||||
|
depth += distance
|
||||||
|
case "up":
|
||||||
|
depth -= distance
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Multiply horizontal position and depth together to get the final answer.
|
||||||
|
return horizontal * depth
|
||||||
|
}
|
||||||
|
|
||||||
|
func puzzle2(input []string) int {
|
||||||
|
// down X increases your aim by X units.
|
||||||
|
// up X decreases your aim by X units.
|
||||||
|
// forward X does two things:
|
||||||
|
// - It increases your horizontal position by X units.
|
||||||
|
// - It increases your depth by your aim multiplied by X.
|
||||||
|
horizontal := 0
|
||||||
|
depth := 0
|
||||||
|
aim := 0
|
||||||
|
for _, instruction := range input {
|
||||||
|
instructionParts := strings.Split(instruction, " ")
|
||||||
|
direction := instructionParts[0]
|
||||||
|
distance, _ := strconv.Atoi(instructionParts[1])
|
||||||
|
switch direction {
|
||||||
|
case "down":
|
||||||
|
aim += distance
|
||||||
|
case "up":
|
||||||
|
aim -= distance
|
||||||
|
case "forward":
|
||||||
|
horizontal += distance
|
||||||
|
depth += aim * distance
|
||||||
|
}
|
||||||
|
}
|
||||||
|
// Multiply horizontal position and depth together to get the final answer.
|
||||||
|
return horizontal * depth
|
||||||
|
}
|
|
@ -0,0 +1,14 @@
|
||||||
|
package main
|
||||||
|
|
||||||
|
import (
|
||||||
|
"strings"
|
||||||
|
"testing"
|
||||||
|
|
||||||
|
"github.com/stretchr/testify/assert"
|
||||||
|
)
|
||||||
|
|
||||||
|
func Test(t *testing.T) {
|
||||||
|
input := `forward 5,down 5,forward 8,up 3,down 8,forward 2`
|
||||||
|
assert.Equal(t, 150, puzzle1(strings.Split(input, ",")))
|
||||||
|
assert.Equal(t, 900, puzzle2(strings.Split(input, ",")))
|
||||||
|
}
|
Reference in New Issue