~xenrox/aoc2021

5e5fc243c5b143aeb21496dce324bdeac33b5e84 — Thorben Günther 2 years ago 3c0f1e9
Solve day 2 part 1
6 files changed, 1095 insertions(+), 1 deletions(-)

A data/day02.dat
A data/day02_test.dat
A day02/day02_test.go
A day02/main.go
A day02/utils.go
M main.go
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()
}