diff --git a/Sources/aoc2021/02.swift b/Sources/aoc2021/02.swift new file mode 100644 index 0000000..faa54bd --- /dev/null +++ b/Sources/aoc2021/02.swift @@ -0,0 +1,89 @@ +// +// File.swift +// +// +// Created by Max Nuding on 02.12.21. +// + +import Foundation + +enum Direction: String { + case forward + case down + case up + init?(rawValue: String) { + switch rawValue { + case "forward": + self = .forward + case "down": + self = .down + case "up": + self = .up + default: + return nil + } + } +} + +struct MoveCommand { + let direction: Direction + let amount: Int + + init?(line: String) { + guard !line.isEmpty else { + return nil + } + let parts = line.components(separatedBy: .whitespaces) + direction = Direction(rawValue: parts[0])! + amount = Int(parts[1])! + } +} + +struct Day02 { + let inputPath: String + + + func run() { + let input = try! String(contentsOfFile: inputPath) + let commands = input + .components(separatedBy: .newlines) + .compactMap { MoveCommand(line: $0) } + runA(commands: commands) + runB(commands: commands) + } + + func runA(commands: [MoveCommand]) { + var horizontalPos = 0 + var depth = 0 + for command in commands { + switch command.direction { + case .forward: + horizontalPos += command.amount + case .up: + depth -= command.amount + case .down: + depth += command.amount + } + } + print(horizontalPos * depth) + } + + func runB(commands: [MoveCommand]) { + var horizontalPos = 0 + var depth = 0 + var aim = 0 + for command in commands { + switch command.direction { + case .forward: + horizontalPos += command.amount + depth += aim * command.amount + case .up: + aim -= command.amount + case .down: + aim += command.amount + } + } + print(horizontalPos * depth) + } +} + diff --git a/Sources/aoc2021/Resources/input/02.txt b/Sources/aoc2021/Resources/input/02.txt new file mode 100644 index 0000000..ac80dd3 --- /dev/null +++ b/Sources/aoc2021/Resources/input/02.txt @@ -0,0 +1,1000 @@ +forward 9 +down 9 +up 4 +down 5 +down 6 +up 6 +down 7 +down 1 +forward 6 +down 4 +forward 8 +up 5 +forward 9 +down 1 +down 4 +up 4 +up 5 +up 4 +down 1 +forward 8 +down 1 +forward 2 +forward 8 +down 9 +forward 2 +down 6 +down 2 +up 8 +down 6 +forward 9 +forward 7 +down 6 +forward 3 +down 2 +forward 4 +down 5 +up 2 +down 9 +down 8 +up 5 +forward 5 +forward 4 +up 9 +forward 9 +down 8 +forward 8 +forward 2 +up 8 +down 7 +forward 8 +down 3 +forward 6 +up 9 +forward 9 +forward 4 +forward 9 +forward 6 +down 4 +up 2 +forward 4 +up 5 +up 6 +forward 9 +down 3 +forward 4 +forward 9 +down 1 +forward 1 +up 6 +up 4 +forward 7 +up 7 +up 3 +forward 2 +forward 8 +forward 6 +down 4 +forward 2 +forward 3 +down 7 +down 5 +down 8 +down 5 +forward 1 +down 8 +down 2 +down 8 +down 3 +forward 4 +forward 8 +forward 9 +down 1 +forward 8 +down 1 +down 6 +down 7 +down 7 +forward 5 +forward 3 +down 2 +down 1 +forward 2 +forward 1 +down 6 +down 4 +up 5 +up 9 +down 4 +forward 9 +down 2 +down 5 +down 4 +down 2 +forward 2 +forward 4 +forward 6 +forward 6 +forward 3 +down 6 +up 5 +forward 8 +forward 3 +down 9 +down 3 +forward 4 +forward 2 +down 9 +down 8 +down 7 +down 3 +forward 2 +down 7 +down 3 +down 5 +forward 6 +up 9 +up 8 +forward 5 +down 6 +down 1 +down 6 +down 5 +forward 7 +down 2 +forward 8 +forward 7 +forward 2 +forward 8 +up 6 +forward 5 +down 2 +down 5 +up 8 +up 6 +forward 1 +down 4 +up 5 +up 5 +up 5 +forward 4 +up 1 +forward 3 +down 9 +down 6 +up 1 +forward 1 +forward 2 +forward 1 +forward 4 +forward 6 +forward 6 +up 7 +down 7 +down 7 +down 9 +forward 9 +down 1 +down 5 +down 1 +down 7 +down 1 +up 6 +forward 2 +down 4 +up 3 +up 2 +forward 6 +up 4 +down 1 +down 5 +forward 9 +up 4 +up 3 +forward 3 +up 7 +forward 2 +forward 5 +down 9 +forward 7 +forward 4 +down 1 +up 2 +forward 4 +up 4 +down 2 +forward 4 +up 5 +up 1 +down 9 +down 3 +up 6 +forward 7 +up 7 +forward 2 +down 4 +up 3 +up 3 +forward 4 +up 5 +down 3 +up 8 +forward 6 +forward 8 +down 1 +down 9 +down 7 +forward 7 +forward 5 +forward 2 +up 9 +forward 3 +forward 1 +down 7 +down 6 +forward 5 +up 3 +forward 6 +down 4 +forward 9 +down 7 +forward 9 +down 9 +down 5 +down 6 +down 2 +down 2 +down 8 +down 3 +down 9 +forward 5 +up 6 +forward 1 +down 3 +down 2 +up 1 +up 6 +forward 3 +down 6 +down 6 +up 9 +up 8 +forward 2 +down 7 +forward 5 +up 9 +down 7 +down 3 +forward 2 +forward 2 +up 9 +forward 1 +forward 7 +down 9 +forward 6 +forward 7 +up 8 +down 7 +down 5 +down 3 +up 6 +down 5 +forward 6 +down 9 +down 6 +up 9 +down 7 +forward 2 +down 5 +up 4 +down 4 +down 8 +forward 7 +down 9 +forward 8 +forward 6 +down 7 +down 1 +forward 5 +up 6 +forward 4 +up 7 +up 4 +up 5 +forward 9 +forward 5 +forward 4 +down 6 +down 5 +forward 2 +forward 7 +down 8 +forward 3 +up 5 +down 2 +up 3 +forward 4 +up 5 +up 2 +forward 4 +forward 1 +forward 1 +forward 4 +forward 4 +down 2 +forward 1 +forward 1 +up 5 +up 7 +down 8 +down 4 +forward 2 +forward 2 +down 3 +forward 7 +down 8 +up 3 +forward 2 +down 2 +forward 3 +up 2 +forward 3 +up 6 +down 7 +up 7 +down 3 +up 9 +forward 3 +forward 7 +down 7 +up 9 +down 6 +down 2 +forward 8 +forward 8 +up 7 +down 6 +forward 2 +forward 1 +down 4 +up 2 +forward 6 +up 7 +down 5 +up 1 +forward 3 +forward 9 +up 4 +forward 5 +forward 8 +down 3 +up 5 +forward 9 +down 6 +up 9 +forward 5 +down 4 +down 1 +down 6 +up 9 +up 2 +forward 5 +down 1 +up 3 +down 5 +forward 2 +down 4 +forward 5 +down 6 +down 4 +down 4 +forward 1 +down 7 +down 2 +forward 4 +forward 5 +up 9 +down 6 +down 2 +forward 7 +up 8 +down 9 +forward 7 +down 5 +down 2 +down 8 +down 8 +up 4 +up 3 +down 3 +down 7 +forward 4 +forward 6 +down 4 +up 7 +forward 4 +forward 4 +forward 1 +down 3 +down 2 +forward 7 +forward 2 +up 9 +down 7 +up 7 +forward 2 +forward 6 +forward 9 +down 3 +forward 7 +forward 5 +up 5 +up 1 +forward 6 +forward 4 +down 2 +forward 3 +forward 9 +down 1 +forward 6 +forward 7 +forward 1 +up 7 +up 4 +forward 7 +forward 8 +down 7 +down 8 +down 9 +forward 7 +down 9 +up 6 +down 7 +up 3 +down 7 +forward 4 +forward 9 +forward 1 +down 4 +forward 1 +up 4 +up 4 +forward 9 +forward 8 +up 4 +down 2 +forward 4 +forward 2 +forward 8 +down 2 +up 6 +down 4 +forward 6 +forward 5 +down 2 +forward 9 +down 5 +forward 5 +down 3 +down 2 +up 9 +down 3 +forward 6 +forward 6 +up 9 +down 1 +forward 4 +up 3 +forward 1 +forward 3 +forward 3 +down 6 +down 2 +forward 8 +down 4 +forward 8 +forward 8 +forward 5 +up 6 +forward 3 +down 1 +down 8 +forward 3 +forward 4 +down 2 +down 7 +up 8 +forward 3 +forward 8 +up 2 +forward 6 +down 4 +forward 9 +forward 5 +down 1 +forward 6 +forward 2 +down 3 +up 4 +down 7 +down 2 +up 2 +forward 7 +down 6 +down 2 +up 5 +up 5 +down 9 +down 7 +down 3 +down 1 +down 9 +forward 4 +down 4 +forward 7 +forward 8 +forward 4 +up 6 +forward 6 +forward 9 +down 2 +forward 4 +down 8 +down 4 +forward 5 +forward 2 +up 4 +down 3 +up 8 +up 1 +down 1 +forward 9 +up 3 +up 1 +forward 1 +forward 7 +forward 1 +down 7 +forward 7 +forward 7 +down 7 +forward 4 +up 6 +forward 3 +down 1 +up 1 +up 8 +forward 5 +forward 2 +up 4 +forward 7 +down 2 +down 3 +down 8 +up 7 +up 5 +forward 8 +down 5 +down 3 +down 9 +forward 6 +forward 4 +down 9 +up 5 +forward 3 +up 7 +up 9 +up 1 +forward 1 +forward 3 +forward 1 +up 8 +up 4 +down 1 +down 8 +down 3 +down 1 +down 1 +down 9 +forward 4 +down 3 +forward 9 +forward 2 +down 1 +forward 9 +up 7 +forward 6 +up 4 +forward 8 +forward 3 +down 2 +down 2 +down 2 +up 5 +forward 1 +up 1 +forward 7 +down 1 +forward 1 +down 8 +up 4 +up 1 +forward 7 +down 8 +down 9 +forward 2 +forward 1 +up 3 +forward 4 +up 8 +forward 5 +down 2 +forward 6 +forward 8 +up 9 +forward 2 +down 7 +down 4 +up 3 +forward 1 +forward 6 +forward 9 +down 1 +down 8 +down 1 +down 2 +forward 3 +forward 9 +forward 2 +forward 4 +forward 7 +forward 3 +up 8 +up 9 +forward 3 +forward 6 +down 5 +up 6 +down 8 +forward 5 +up 4 +up 9 +forward 6 +forward 3 +up 9 +forward 8 +forward 5 +forward 9 +forward 7 +up 6 +forward 3 +forward 1 +up 4 +forward 9 +forward 8 +up 1 +up 2 +down 3 +down 4 +down 9 +down 4 +down 5 +down 6 +down 2 +down 5 +forward 6 +forward 4 +up 2 +up 7 +down 5 +down 9 +forward 3 +down 5 +forward 6 +down 7 +forward 1 +forward 7 +forward 9 +forward 7 +forward 4 +forward 4 +up 1 +up 4 +down 6 +up 2 +up 1 +down 4 +forward 2 +down 4 +forward 6 +down 3 +up 6 +down 2 +up 3 +forward 1 +forward 9 +forward 3 +up 9 +forward 7 +forward 5 +forward 4 +down 5 +down 9 +forward 6 +forward 7 +up 1 +forward 7 +forward 2 +forward 2 +forward 5 +forward 6 +down 3 +down 7 +down 3 +down 4 +down 6 +down 1 +forward 2 +down 8 +forward 4 +forward 7 +up 1 +down 4 +down 1 +down 2 +down 3 +up 3 +forward 9 +forward 2 +down 8 +up 3 +forward 8 +forward 7 +up 8 +down 8 +forward 2 +down 9 +down 9 +down 5 +forward 1 +forward 3 +forward 6 +up 1 +up 2 +forward 1 +down 3 +up 6 +forward 2 +forward 8 +forward 2 +down 3 +forward 8 +forward 9 +down 7 +down 3 +down 2 +down 9 +down 3 +up 6 +forward 9 +forward 5 +forward 1 +forward 9 +down 9 +up 2 +down 1 +up 6 +forward 6 +down 3 +forward 6 +forward 3 +forward 5 +forward 4 +up 2 +up 4 +up 6 +forward 1 +forward 6 +up 6 +up 4 +up 7 +down 8 +down 5 +up 1 +up 1 +down 5 +forward 5 +down 9 +forward 8 +down 3 +up 4 +down 9 +down 1 +forward 2 +forward 9 +down 3 +down 8 +down 5 +down 6 +forward 7 +forward 1 +down 9 +down 7 +forward 8 +forward 2 +up 1 +up 1 +forward 7 +up 1 +forward 2 +down 9 +up 4 +forward 5 +down 1 +up 1 +down 8 +down 3 +up 1 +down 8 +down 7 +down 2 +forward 9 +down 5 +forward 2 +up 2 +up 6 +up 4 +forward 6 +up 5 +forward 5 +forward 4 +forward 8 +down 8 +down 6 +down 1 +down 3 +down 6 +forward 8 +up 1 +up 5 +down 4 +forward 4 +down 9 +forward 4 +up 6 +down 7 +forward 4 +down 3 +down 4 +forward 1 +forward 3 +down 1 +down 7 +up 8 +down 3 +down 4 +down 3 +forward 3 +down 8 +forward 8 +down 3 +down 7 +forward 2 +up 2 +forward 7 +down 9 +up 7 +forward 5 +down 2 +down 5 +up 4 +up 8 +forward 8 +forward 9 +forward 8 +down 8 +forward 6 +forward 9 +forward 6 +forward 8 +forward 6 +forward 8 +forward 2 +down 7 +down 3 +forward 7 +down 4 +down 5 +up 1 +forward 5 +down 3 +down 7 +up 4 +forward 9 +down 2 +down 3 +forward 1 +up 6 +down 1 +down 9 +forward 8 +forward 9 +forward 2 +down 6 +down 4 +up 3 +up 8 +forward 1 +down 3 +up 8 +up 7 +down 4 +up 3 +down 7 +down 2 +down 5 +down 7 +down 2 +forward 2 +down 3 +up 2 +forward 8 +up 1 +forward 2 +up 4 +forward 1 +forward 8 +forward 6 +forward 2 +down 2 +forward 5 +up 4 +down 9 +down 7 +forward 2 +down 9 +down 9 +forward 6 +down 8 +down 4 +down 7 +down 9 +forward 7 +forward 7 +up 6 +forward 3 +forward 5 +forward 6 +down 8 +up 1 +forward 2 +up 4 +up 2 +down 8 +down 9 +down 1 +down 3 +forward 7 +forward 5 +forward 6 +up 6 +down 7 +up 8 +up 1 +forward 8 +down 5 +up 1 +down 2 +down 5 +forward 6 +down 4 +forward 5 +down 4 +forward 3 +down 5 +up 4 +up 7 +forward 2 +up 2 +down 8 +forward 6 diff --git a/Sources/aoc2021/main.swift b/Sources/aoc2021/main.swift index 7f689a8..8e2ac3f 100644 --- a/Sources/aoc2021/main.swift +++ b/Sources/aoc2021/main.swift @@ -1,5 +1,6 @@ import Foundation +/* print("Starting day 01") let input01 = Bundle.module.path(forResource: "01", ofType: ".txt")! let start = CFAbsoluteTimeGetCurrent() @@ -7,3 +8,12 @@ Day01(inputPath: input01).run() let end = CFAbsoluteTimeGetCurrent() let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 print("Finished in \(execTimeMs)ms") +*/ + +print("Starting day 02") +let input02 = Bundle.module.path(forResource: "02", ofType: ".txt")! +let start = CFAbsoluteTimeGetCurrent() +Day02(inputPath: input02).run() +let end = CFAbsoluteTimeGetCurrent() +let execTimeMs = round((end - start) * 1000.0 * 100.0) / 100.0 +print("Finished in \(execTimeMs)ms")