A data/day02.dat => data/day02.dat +1000 -0
@@ 0,0 1,1000 @@
+forward 4
+down 7
+down 4
+forward 2
+down 4
+down 9
+down 1
+forward 1
+down 4
+up 5
+forward 5
+down 3
+forward 5
+forward 6
+down 5
+down 3
+forward 8
+up 7
+forward 1
+forward 5
+forward 7
+up 2
+up 7
+down 1
+down 6
+forward 7
+forward 6
+down 7
+up 9
+down 8
+down 3
+down 1
+down 4
+down 3
+forward 7
+down 1
+forward 6
+down 3
+forward 3
+down 6
+forward 5
+down 7
+up 5
+forward 7
+forward 9
+up 1
+forward 5
+down 5
+down 2
+forward 1
+up 7
+down 8
+down 2
+forward 8
+forward 1
+up 1
+up 5
+forward 9
+up 9
+down 5
+down 5
+forward 6
+forward 1
+down 1
+down 3
+up 6
+up 9
+down 6
+down 1
+forward 1
+down 8
+down 3
+down 8
+up 6
+forward 2
+up 8
+down 2
+down 6
+forward 1
+down 2
+down 1
+down 5
+down 8
+forward 8
+down 8
+down 2
+up 1
+up 3
+forward 1
+down 6
+up 5
+forward 5
+up 7
+forward 3
+forward 3
+down 9
+forward 1
+forward 7
+down 1
+down 1
+down 3
+forward 4
+down 4
+forward 2
+up 8
+forward 2
+down 4
+down 2
+up 1
+forward 6
+forward 6
+down 9
+forward 5
+down 3
+forward 5
+down 6
+down 9
+forward 9
+up 6
+down 8
+up 5
+up 2
+forward 5
+down 4
+forward 8
+up 1
+forward 2
+down 9
+down 4
+up 7
+down 1
+down 6
+down 7
+down 7
+down 2
+down 2
+up 7
+down 1
+up 7
+up 4
+forward 9
+down 6
+up 3
+down 5
+forward 8
+up 4
+forward 5
+forward 8
+forward 4
+forward 7
+forward 2
+down 3
+up 4
+forward 7
+forward 3
+down 7
+up 4
+forward 8
+forward 9
+forward 9
+up 6
+up 5
+forward 7
+down 7
+up 5
+down 9
+down 8
+forward 5
+forward 2
+down 1
+down 2
+down 9
+up 5
+down 3
+down 8
+up 6
+forward 9
+down 9
+up 3
+up 9
+forward 3
+forward 9
+down 5
+up 3
+down 6
+forward 5
+down 6
+down 9
+forward 3
+down 7
+down 5
+down 9
+forward 8
+down 8
+forward 8
+forward 2
+up 6
+down 9
+down 7
+down 4
+down 2
+down 9
+forward 7
+up 1
+forward 6
+forward 7
+down 3
+down 5
+down 3
+forward 4
+down 9
+forward 2
+down 1
+forward 4
+up 9
+down 8
+down 9
+forward 5
+up 2
+down 7
+down 2
+down 7
+forward 8
+up 8
+forward 9
+up 8
+down 3
+down 8
+forward 2
+up 7
+forward 4
+up 8
+forward 6
+forward 6
+forward 4
+forward 3
+down 4
+up 7
+down 8
+forward 1
+forward 9
+forward 8
+forward 8
+down 6
+down 6
+down 4
+down 8
+forward 9
+down 8
+down 4
+forward 2
+forward 7
+down 4
+up 1
+down 4
+down 5
+up 5
+up 9
+down 5
+up 5
+forward 2
+down 8
+forward 7
+forward 2
+up 4
+forward 8
+up 7
+down 5
+forward 5
+down 5
+down 6
+down 7
+forward 1
+down 8
+up 8
+up 9
+up 6
+forward 2
+forward 7
+forward 4
+down 6
+up 4
+up 3
+down 3
+forward 7
+up 9
+down 9
+up 5
+forward 1
+up 7
+down 7
+down 7
+up 8
+down 3
+forward 6
+down 6
+down 7
+down 2
+forward 5
+up 8
+up 5
+up 1
+down 5
+forward 9
+forward 9
+forward 2
+forward 6
+up 8
+forward 8
+down 1
+forward 6
+up 7
+up 3
+forward 3
+up 5
+down 8
+forward 2
+down 5
+down 5
+forward 8
+forward 8
+forward 6
+up 7
+up 1
+forward 1
+down 7
+down 1
+up 9
+forward 7
+up 6
+down 2
+down 5
+forward 1
+down 1
+up 1
+forward 7
+forward 7
+forward 1
+up 2
+forward 2
+down 9
+down 8
+forward 9
+forward 8
+up 9
+down 1
+down 3
+up 1
+down 3
+up 9
+down 7
+up 6
+down 1
+down 2
+down 2
+down 4
+forward 4
+forward 3
+down 7
+forward 9
+forward 1
+down 2
+down 2
+down 4
+down 7
+up 7
+forward 6
+forward 2
+down 6
+down 3
+down 3
+down 8
+up 8
+forward 6
+down 8
+down 3
+forward 7
+down 4
+down 4
+up 1
+up 8
+forward 5
+forward 6
+down 8
+down 9
+up 7
+forward 2
+forward 4
+down 4
+forward 6
+forward 5
+down 4
+up 5
+down 5
+forward 1
+down 2
+up 9
+forward 9
+forward 6
+forward 8
+down 2
+down 9
+up 1
+forward 6
+down 3
+forward 6
+forward 7
+down 9
+forward 1
+forward 1
+forward 5
+up 5
+up 6
+forward 8
+forward 6
+forward 6
+forward 8
+down 6
+down 8
+forward 5
+forward 7
+forward 3
+forward 3
+up 5
+forward 8
+up 3
+forward 6
+forward 4
+forward 3
+up 8
+down 1
+down 3
+down 7
+up 8
+forward 5
+down 9
+up 7
+down 2
+down 4
+down 5
+down 2
+up 3
+down 4
+down 4
+forward 4
+forward 6
+up 4
+forward 5
+forward 3
+up 2
+up 3
+down 4
+down 7
+forward 7
+forward 2
+down 2
+forward 5
+up 4
+forward 2
+down 8
+up 5
+up 6
+forward 2
+forward 3
+up 3
+down 2
+forward 7
+down 6
+forward 3
+forward 6
+up 9
+forward 7
+up 1
+forward 1
+forward 2
+down 3
+forward 9
+down 1
+up 5
+up 7
+up 8
+down 5
+up 4
+down 9
+forward 4
+up 8
+forward 3
+forward 7
+down 7
+down 9
+down 5
+up 4
+down 2
+up 5
+down 4
+forward 3
+down 7
+up 5
+forward 9
+forward 9
+forward 7
+up 5
+forward 7
+up 3
+forward 8
+down 1
+down 5
+up 5
+forward 4
+forward 9
+forward 9
+up 5
+down 9
+up 7
+up 3
+forward 5
+down 4
+down 7
+forward 9
+down 9
+up 3
+forward 4
+forward 7
+down 9
+forward 2
+down 2
+forward 1
+down 2
+up 7
+down 6
+forward 9
+forward 1
+down 5
+forward 9
+forward 7
+up 4
+forward 9
+forward 7
+up 4
+down 1
+down 3
+down 3
+down 1
+down 9
+forward 3
+forward 5
+forward 2
+down 1
+forward 9
+down 6
+up 6
+down 7
+down 1
+down 1
+up 1
+up 8
+down 6
+down 3
+down 9
+forward 3
+forward 9
+down 4
+forward 6
+forward 7
+down 3
+forward 5
+up 8
+up 6
+forward 3
+forward 2
+down 6
+up 7
+forward 3
+forward 1
+down 8
+down 1
+forward 1
+forward 2
+up 7
+down 3
+forward 9
+forward 6
+up 8
+forward 3
+down 3
+down 9
+down 3
+down 6
+down 6
+down 2
+forward 8
+down 3
+forward 2
+up 8
+forward 5
+up 6
+down 7
+down 4
+down 2
+up 9
+down 4
+down 9
+down 4
+down 9
+forward 2
+down 5
+down 5
+forward 7
+up 2
+forward 5
+forward 1
+down 4
+forward 6
+forward 9
+down 1
+down 2
+down 6
+forward 5
+up 9
+up 1
+up 9
+up 4
+down 1
+up 3
+down 5
+forward 4
+forward 3
+forward 1
+down 9
+down 9
+down 6
+forward 4
+forward 4
+forward 1
+down 9
+down 8
+down 7
+forward 2
+forward 7
+forward 1
+down 7
+forward 8
+forward 7
+up 4
+down 4
+forward 8
+forward 6
+down 6
+forward 9
+down 2
+forward 7
+forward 1
+down 5
+down 5
+down 3
+down 7
+forward 9
+down 2
+forward 3
+forward 6
+up 4
+up 9
+forward 6
+up 8
+up 2
+forward 9
+forward 3
+forward 9
+down 4
+down 8
+down 1
+down 1
+forward 4
+up 3
+forward 1
+forward 5
+down 5
+down 6
+down 7
+forward 5
+down 3
+up 9
+forward 5
+down 4
+up 9
+forward 1
+down 3
+down 5
+forward 2
+down 7
+up 7
+down 2
+forward 2
+down 2
+down 4
+down 3
+forward 6
+down 7
+down 2
+down 1
+forward 7
+forward 9
+forward 8
+up 8
+forward 5
+down 8
+forward 9
+forward 9
+up 5
+forward 9
+up 8
+up 6
+up 5
+up 3
+down 2
+down 8
+down 4
+up 3
+down 4
+up 8
+down 3
+up 1
+down 4
+down 7
+down 4
+up 7
+down 3
+up 3
+up 8
+forward 3
+down 2
+forward 7
+up 9
+forward 2
+down 1
+down 1
+forward 2
+forward 9
+up 6
+forward 3
+forward 2
+down 1
+down 3
+down 6
+forward 7
+down 4
+forward 2
+down 6
+up 3
+up 5
+forward 6
+up 7
+down 5
+up 5
+forward 5
+down 6
+forward 7
+up 2
+forward 3
+forward 4
+forward 9
+down 4
+down 5
+up 7
+up 1
+down 1
+down 5
+forward 4
+down 2
+down 8
+down 6
+down 3
+down 1
+down 9
+forward 5
+forward 7
+down 5
+forward 7
+down 6
+up 8
+up 9
+down 4
+forward 7
+up 1
+up 5
+down 8
+forward 5
+up 8
+forward 1
+forward 7
+forward 5
+forward 8
+forward 8
+up 1
+down 4
+up 6
+down 1
+down 4
+up 9
+forward 4
+forward 1
+forward 5
+up 7
+forward 5
+forward 7
+up 3
+up 6
+up 3
+forward 4
+down 5
+down 4
+down 2
+down 4
+forward 7
+down 5
+forward 9
+forward 2
+down 3
+up 7
+forward 9
+forward 3
+down 9
+up 8
+forward 1
+forward 3
+up 8
+down 3
+up 9
+down 4
+forward 6
+forward 8
+down 4
+forward 9
+up 1
+forward 3
+forward 1
+up 3
+down 3
+forward 1
+forward 2
+forward 8
+up 3
+down 9
+forward 1
+up 1
+forward 2
+down 4
+forward 7
+up 9
+forward 2
+down 6
+down 8
+up 1
+forward 1
+forward 7
+down 8
+forward 7
+up 9
+up 5
+down 6
+down 2
+down 9
+down 9
+down 7
+down 4
+forward 4
+up 2
+up 8
+forward 5
+down 9
+down 7
+forward 3
+forward 1
+down 3
+down 1
+forward 5
+up 2
+up 9
+up 2
+forward 4
+forward 3
+forward 8
+up 9
+up 6
+up 3
+forward 7
+forward 8
+forward 8
+forward 1
+forward 1
+forward 2
+down 2
+down 7
+forward 4
+up 2
+down 4
+forward 5
+down 3
+forward 1
+down 3
+up 2
+forward 9
+forward 7
+forward 5
+forward 1
+forward 6
+forward 9
+up 3
+down 8
+down 8
+forward 3
+up 4
+up 1
+down 4
+forward 8
+up 9
+down 4
+down 5
+forward 1
+forward 7
+up 2
+down 2
+down 2
+down 1
+up 6
+forward 7
+forward 7
+down 7
+down 8
+forward 1
+forward 8
+down 3
+up 5
+up 9
+down 2
+down 9
+forward 3
+up 8
+up 9
+up 3
+up 3
+forward 9
+up 6
+up 7
+down 6
+down 8
+forward 4
+down 8
+forward 4
+forward 9
+down 9
+forward 4
+up 6
+up 5
+down 2
+forward 6
+down 2
+up 2
+up 4
+forward 4
+forward 6
+down 7
+up 4
+down 8
+forward 1
+down 5
+forward 4
+down 3
+forward 3
+down 5
+forward 7
+down 8
+up 7
+down 7
+forward 1
+forward 6
+up 7
+up 8
+up 2
+forward 1
+forward 1
+down 5
+down 9
+forward 7
+forward 5
+down 7
+up 1
+forward 6
+forward 6
+down 6
+forward 1
+down 1
+down 2
+down 4
+forward 5
+up 7
+up 7
+forward 6
+down 1
+forward 7
A data/day02_test.dat => data/day02_test.dat +6 -0
@@ 0,0 1,6 @@
+forward 5
+down 5
+forward 8
+up 3
+down 8
+forward 2
A day02/day02_test.go => day02/day02_test.go +14 -0
@@ 0,0 1,14 @@
+package day02
+
+import "testing"
+
+func Test1(t *testing.T) {
+ res, err := calc1("../data/day02_test.dat")
+ if err != nil {
+ t.Errorf("error calculating: %v", err)
+ }
+
+ if res != 150 {
+ t.Errorf("wrong result, expected %d, got %d", 150, res)
+ }
+}
A day02/main.go => day02/main.go +45 -0
@@ 0,0 1,45 @@
+package day02
+
+import (
+ "errors"
+ "fmt"
+ "log"
+ "strconv"
+)
+
+func Run() {
+ res, err := calc1("data/day02.dat")
+ if err != nil {
+ log.Fatal(err)
+ }
+
+ fmt.Printf("Part 1: %d\n", res)
+}
+
+func calc1(path string) (int, error) {
+ lines, err := readFile(path)
+ if err != nil {
+ return 0, err
+ }
+
+ var hor, depth int
+ for i := 0; i < len(lines); i++ {
+ v, err := strconv.Atoi(lines[i][1])
+ if err != nil {
+ return 0, err
+ }
+
+ switch lines[i][0] {
+ case "forward":
+ hor += v
+ case "down":
+ depth += v
+ case "up":
+ depth -= v
+ default:
+ return 0, errors.New("illegal direction command")
+ }
+ }
+
+ return depth * hor, nil
+}
A day02/utils.go => day02/utils.go +25 -0
@@ 0,0 1,25 @@
+package day02
+
+import (
+ "bufio"
+ "os"
+ "strings"
+)
+
+func readFile(path string) ([][]string, error) {
+ var lines [][]string
+
+ f, err := os.Open(path)
+ if err != nil {
+ return lines, err
+ }
+ defer f.Close()
+
+ scanner := bufio.NewScanner(f)
+ for scanner.Scan() {
+ line := strings.Split(scanner.Text(), " ")
+ lines = append(lines, line)
+ }
+
+ return lines, nil
+}
M main.go => main.go +5 -1
@@ 1,7 1,11 @@
package main
-import "git.xenrox.net/~xenrox/aoc2021/day01"
+import (
+ "git.xenrox.net/~xenrox/aoc2021/day01"
+ "git.xenrox.net/~xenrox/aoc2021/day02"
+)
func main() {
day01.Run()
+ day02.Run()
}