day1 part2
This commit is contained in:
@@ -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)
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user