Move to subdirectory
This commit is contained in:
parent
c4ae807a5f
commit
c7deb3c71d
47 changed files with 1208 additions and 0 deletions
61
2020/day13/main.swift
Normal file
61
2020/day13/main.swift
Normal file
|
@ -0,0 +1,61 @@
|
|||
import Foundation
|
||||
|
||||
let input = loadData(day: 13)
|
||||
|
||||
|
||||
let scanner = Scanner(string: input)
|
||||
|
||||
let startTime = scanner.scanInt()!
|
||||
|
||||
var busLines: [(Int, position: Int)] = []
|
||||
|
||||
var position = 0
|
||||
repeat {
|
||||
if let line = scanner.scanInt() {
|
||||
busLines.append((line, position))
|
||||
} else if scanner.string("x") {
|
||||
// Ignore
|
||||
}
|
||||
position += 1
|
||||
} while scanner.string(",")
|
||||
|
||||
let min = busLines
|
||||
.map { $0.0 }
|
||||
.map { ((startTime / $0) * $0 + $0, $0) }
|
||||
.print()
|
||||
.min(by: { $0.0 < $1.0 })!
|
||||
|
||||
|
||||
print((min.0 - startTime) * min.1)
|
||||
|
||||
let max = busLines.max(by: { $0.0 < $1.0 })!
|
||||
print(max)
|
||||
|
||||
/*
|
||||
brute force - takes too long
|
||||
|
||||
var s = sequence(first: 0, next: { $0 + max.0 })
|
||||
.lazy
|
||||
.filter { t in busLines.allSatisfy { (t - max.position + $0.position).isMultiple(of: $0.0 )} }
|
||||
.makeIterator()
|
||||
|
||||
print(s.next())
|
||||
|
||||
*/
|
||||
|
||||
var step = 0
|
||||
var time = 0
|
||||
|
||||
outer: while true {
|
||||
time += step
|
||||
|
||||
step = 1
|
||||
for (bus, position) in busLines {
|
||||
guard (time + position).isMultiple(of: bus) else { continue outer }
|
||||
step *= bus
|
||||
}
|
||||
|
||||
break
|
||||
}
|
||||
|
||||
print("part2", time)
|
Loading…
Add table
Add a link
Reference in a new issue