diff --git a/day15/main.swift b/day15/main.swift index 976cf3d..996cf28 100644 --- a/day15/main.swift +++ b/day15/main.swift @@ -1,4 +1,36 @@ import Foundation -let input = loadData(day: 15) +let input = [16,1,0,18,12,14,19] + +var memory: [Int: (Int, Int?)] = [:] +var last = -1 + +for (round, num) in input.enumerated() { + memory[num] = (round, nil) + last = num +} + +func lastRound(for num: Int) -> Int? { + guard let (first, second) = memory[num] else { return nil } + if let second = second { return second } + return first +} + +for round in input.count..<30000000 { + let (first, second) = memory[last]! + + if let second = second { + last = second - first + } else { + last = 0 + } + + if let prev = lastRound(for: last) { + memory[last] = (prev, round) + } else { + memory[last] = (round, nil) + } +} + +print(last)