diff --git a/day01/Sources/day01/day01.swift b/day01/Sources/day01/day01.swift index ca9520f..d95cde8 100644 --- a/day01/Sources/day01/day01.swift +++ b/day01/Sources/day01/day01.swift @@ -5,31 +5,58 @@ struct day01 { static func parseInput(_ input: String) -> [(Direction, Int)] { return input.split(whereSeparator: \.isNewline) - .map({ line in - return (Direction(line.first!), Int(line.dropFirst())!) - }) - + .map({ line in + return (Direction(line.first!), Int(line.dropFirst())!) + }) } static func part1(_ input: [(Direction, Int)]) { var cur = 50 var count = 0 for (dir, num) in input { - let last = cur cur = switch dir { case .Left: (cur - num) % 100 case .Right: (cur + num) % 100 } if (cur < 0) { cur += 100 } - print(last, cur, dir, num) if (cur == 0) { count += 1 } } print("Part 1: \(count)") } + static func part2(_ input: [(Direction, Int)]) { + var cur = 50 + var count = 0 + for (dir, num) in input { + let start = cur + let fullCycles = num - (num % 100) + count += fullCycles / 100 + + cur = switch dir { + case .Left: (cur - num) % 100 + case .Right: (cur + num) % 100 + } + if (cur < 0) { cur += 100 } + + switch dir { + case .Left: + if (start - (num % 100)) < 0 && start != 0 { + count += 1 + } + case .Right: + if (start + (num % 100)) >= 100 && start != 0 && cur != 0 { + count += 1 + } + } + if (cur == 0) { count += 1 } + } + print("Part 2: \(count)") + } + static func main() { let parsed = parseInput(realInput) part1(parsed) + part2(parsed) } }