|
1 | 1 | import Foundation
|
2 | 2 |
|
3 | 3 | let brandonShegaClockEntry = CodeChallengeEntry<ClockChallenge>(name: "brandonshega") { input in
|
4 |
| - let df = DateFormatter() |
5 |
| - df.dateFormat = "HH:MM:SS" |
6 |
| - guard let date = df.date(from: input) else { return (0, 0, 0) } |
7 |
| - let dateComps = Calendar.current.dateComponents([.hour, .minute, .second], from: date) |
8 |
| - return dateComps.handsInAngles |
| 4 | + let clock = Clock(for: input) |
| 5 | + return clock.timeInAngles |
9 | 6 | }
|
10 | 7 |
|
11 |
| -fileprivate extension DateComponents { |
12 |
| - var hoursToAngle: Int { |
13 |
| - guard let hour = hour else { return 0 } |
14 |
| - return hour * 30 |
15 |
| - } |
16 |
| - |
17 |
| - var minutesToAngle: Int { |
18 |
| - guard let minute = minute else { return 0 } |
19 |
| - return minute * 6 |
20 |
| - } |
| 8 | +fileprivate struct Clock { |
| 9 | + let hour: Double |
| 10 | + let minute: Double |
| 11 | + let second: Double |
21 | 12 |
|
22 |
| - var secondsToAngle: Int { |
23 |
| - guard let second = second else { return 0 } |
24 |
| - return second * 6 |
| 13 | + init(for date: String) { |
| 14 | + let df = DateFormatter() |
| 15 | + df.dateFormat = "hh:mm:ss" |
| 16 | + guard let date = df.date(from: date) else { fatalError("Bad Time") } |
| 17 | + let dateComps = Calendar.current.dateComponents([.hour, .minute, .second], from: date) |
| 18 | + guard |
| 19 | + let hour = dateComps.hour, |
| 20 | + let minute = dateComps.minute, |
| 21 | + let second = dateComps.second else { fatalError("Bad Time") } |
| 22 | + self.hour = Double(hour) |
| 23 | + self.minute = Double(minute) |
| 24 | + self.second = Double(second) |
25 | 25 | }
|
26 | 26 |
|
27 |
| - var handsInAngles: (Int, Int, Int) { |
| 27 | + var timeInAngles: (Int, Int, Int) { |
| 28 | + let hoursToAngle = Int(hour * 30 + (minute/60 * 30)) |
| 29 | + let minutesToAngle = Int(minute * 6 + (second/60 * 6)) |
| 30 | + let secondsToAngle = Int(second * 6) |
28 | 31 | return (hoursToAngle, minutesToAngle, secondsToAngle)
|
29 | 32 | }
|
| 33 | + |
30 | 34 | }
|
0 commit comments