2021 Day 2 Complete
This commit is contained in:
parent
937713f2a5
commit
cd7bb9ff91
1000
2021/day02/input
Normal file
1000
2021/day02/input
Normal file
File diff suppressed because it is too large
Load Diff
126
2021/day02/main.go
Normal file
126
2021/day02/main.go
Normal file
@ -0,0 +1,126 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"fmt"
|
||||
"strings"
|
||||
|
||||
h "git.bullercodeworks.com/brian/adventofcode/helpers"
|
||||
)
|
||||
|
||||
func main() {
|
||||
inp := h.StdinToStringSlice()
|
||||
part1(inp)
|
||||
part2(inp)
|
||||
}
|
||||
|
||||
func part1(inp []string) {
|
||||
s := NewSubMk1(0, 0, 0)
|
||||
s.Follow(inp)
|
||||
fmt.Println(s)
|
||||
}
|
||||
|
||||
func part2(inp []string) {
|
||||
s := NewSubMk2(0, 0, 0)
|
||||
s.Follow(inp)
|
||||
fmt.Println(s)
|
||||
}
|
||||
|
||||
type Sub interface {
|
||||
Follow(inp []string)
|
||||
Forward(d int)
|
||||
Down(d int)
|
||||
Up(d int)
|
||||
}
|
||||
|
||||
type SubMk1 struct {
|
||||
Horizontal, Depth, Aim int
|
||||
}
|
||||
|
||||
func NewSubMk1(horizontal, depth, aim int) Sub {
|
||||
return &SubMk1{
|
||||
Horizontal: horizontal,
|
||||
Depth: depth,
|
||||
Aim: aim,
|
||||
}
|
||||
}
|
||||
|
||||
func (s SubMk1) String() string {
|
||||
return fmt.Sprintf("Horizontal: %d; Depth: %d; Aim: %d; M: %d", s.Horizontal, s.Depth, s.Aim, s.Horizontal*s.Depth)
|
||||
}
|
||||
|
||||
func (s *SubMk1) Follow(inp []string) {
|
||||
for _, v := range inp {
|
||||
pts := strings.Fields(v)
|
||||
if len(pts) < 2 {
|
||||
fmt.Println("Error following instruction:", v)
|
||||
return
|
||||
}
|
||||
switch pts[0] {
|
||||
case "forward":
|
||||
s.Forward(h.Atoi(pts[1]))
|
||||
case "down":
|
||||
s.Down(h.Atoi(pts[1]))
|
||||
case "up":
|
||||
s.Up(h.Atoi(pts[1]))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SubMk1) Forward(d int) {
|
||||
s.Horizontal += d
|
||||
}
|
||||
|
||||
func (s *SubMk1) Down(d int) {
|
||||
s.Depth += d
|
||||
}
|
||||
|
||||
func (s *SubMk1) Up(d int) {
|
||||
s.Depth -= d
|
||||
}
|
||||
|
||||
type SubMk2 struct {
|
||||
Horizontal, Depth, Aim int
|
||||
}
|
||||
|
||||
func NewSubMk2(horizontal, depth, aim int) Sub {
|
||||
return &SubMk2{
|
||||
Horizontal: horizontal,
|
||||
Depth: depth,
|
||||
Aim: aim,
|
||||
}
|
||||
}
|
||||
|
||||
func (s SubMk2) String() string {
|
||||
return fmt.Sprintf("Horizontal: %d; Depth: %d; Aim: %d; M: %d", s.Horizontal, s.Depth, s.Aim, s.Horizontal*s.Depth)
|
||||
}
|
||||
|
||||
func (s *SubMk2) Follow(inp []string) {
|
||||
for _, v := range inp {
|
||||
pts := strings.Fields(v)
|
||||
if len(pts) < 2 {
|
||||
fmt.Println("Error following instruction:", v)
|
||||
return
|
||||
}
|
||||
switch pts[0] {
|
||||
case "forward":
|
||||
s.Forward(h.Atoi(pts[1]))
|
||||
case "down":
|
||||
s.Down(h.Atoi(pts[1]))
|
||||
case "up":
|
||||
s.Up(h.Atoi(pts[1]))
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
func (s *SubMk2) Forward(x int) {
|
||||
s.Horizontal += x
|
||||
s.Depth += s.Aim * x
|
||||
}
|
||||
|
||||
func (s *SubMk2) Down(x int) {
|
||||
s.Aim += x
|
||||
}
|
||||
|
||||
func (s *SubMk2) Up(x int) {
|
||||
s.Aim -= x
|
||||
}
|
6
2021/day02/testinput
Normal file
6
2021/day02/testinput
Normal file
@ -0,0 +1,6 @@
|
||||
forward 5
|
||||
down 5
|
||||
forward 8
|
||||
up 3
|
||||
down 8
|
||||
forward 2
|
Loading…
Reference in New Issue
Block a user