Skip to content

Commit 87ef064

Browse files
committed
optimize and cleanup code from previous days
1 parent 282224e commit 87ef064

File tree

8 files changed

+28
-49
lines changed

8 files changed

+28
-49
lines changed

Sources/Data/outputDay2.txt

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1 @@
1+
[true, true, true, true, true, false, false, false, false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false, false, false, false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false, false, false, false, true, false, false, false, false, false, true, false, false, false, false, true, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, true, true, true, true, false, false, true, false, true, false, false, false, false, false, true, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, true, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, false, true, false, false, false, false, true, false, false, false, false, false, false, true, false, false, false, false, false, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true, true]

Sources/Day00.swift

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
import Algorithms
22

33
struct Day00: AdventDay {
4-
// Save your data in a corresponding text file in the `Data` directory.
54
var data: String
65

7-
// add here any computed values useful for the challenge
8-
96
func part1() -> Int {
107
0
118
}

Sources/Day02.swift

Lines changed: 26 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -1,18 +1,5 @@
11
import Algorithms
22

3-
struct Report {
4-
var value: [Int]
5-
}
6-
extension Report {
7-
init(_ data: Substring) {
8-
value = data.split(separator: " ").map { v in Int(v) ?? 0 }
9-
}
10-
}
11-
12-
func spreadsWell(_ value: Int) -> Bool {
13-
abs(value) <= 3 && abs(value) >= 1
14-
}
15-
163
func getPermutationsExcludingOneElement(_ arr: [Int]) -> [[Int]] {
174
var perms = [[Int]]()
185
for idx in 0..<arr.count {
@@ -23,50 +10,45 @@ func getPermutationsExcludingOneElement(_ arr: [Int]) -> [[Int]] {
2310
return perms
2411
}
2512

26-
struct ReportAnalyzer {
27-
28-
func isSafe(report: Report, damped: Bool = false) -> Bool {
29-
// all values are either increasing or decreasing
30-
let diffs = report.value.adjacentPairs().map { (one, two) in
31-
two - one
13+
func isSafe(_ report: [Int], damped: Bool = false) -> Bool {
14+
// all values are either increasing or decreasing
15+
let diffs = report.adjacentPairs().map { $1 - $0 }
16+
let order = diffs.grouped { v in
17+
if v < 0 {
18+
return "desc"
3219
}
33-
let order = diffs.grouped { v in
34-
if v < 0 {
35-
return "desc"
36-
}
37-
if v > 0 {
38-
return "asc"
39-
}
40-
return "none"
20+
if v > 0 {
21+
return "asc"
4122
}
42-
let spread = diffs.filter { spreadsWell($0) }
43-
44-
let isSafe = order.count == 1 && spread.count == diffs.count
45-
if damped && !isSafe {
46-
let reportPermutations = getPermutationsExcludingOneElement(report.value)
47-
let isAnySafe =
48-
reportPermutations.map {
49-
return ReportAnalyzer().isSafe(report: Report(value: Array($0)))
50-
}.filter { $0 }.count >= 1
51-
return isAnySafe
52-
}
53-
return isSafe
23+
return "none"
24+
}
25+
// compute the differences
26+
let acceptableDifferences = diffs.filter { abs($0) <= 3 && abs($0) >= 1 }
27+
let isReportSafe = order.count == 1 && acceptableDifferences.count == diffs.count
28+
29+
if damped && !isReportSafe {
30+
let reportPermutations = getPermutationsExcludingOneElement(report)
31+
let isAnySafe =
32+
reportPermutations.map {
33+
return isSafe($0)
34+
}.filter { $0 }.count >= 1
35+
return isAnySafe
5436
}
37+
return isReportSafe
5538
}
5639

5740
struct Day02: AdventDay {
58-
// Save your data in a corresponding text file in the `Data` directory.
5941
var data: String
6042

61-
var reports: [Report] {
62-
data.split(separator: "\n").map { Report($0) }
43+
var reports: [[Int]] {
44+
data.lines().map { $0.integers() }
6345
}
6446

6547
func part1() -> Int {
66-
reports.map { ReportAnalyzer().isSafe(report: $0) }.filter { $0 }.count
48+
reports.map { isSafe($0) }.count(where: { $0 == true })
6749
}
6850

6951
func part2() -> Int {
70-
reports.map { ReportAnalyzer().isSafe(report: $0, damped: true) }.filter { $0 }.count
52+
reports.map { isSafe($0, damped: true) }.count { $0 == true }
7153
}
7254
}
File renamed without changes.
File renamed without changes.

Tests/Day02.swift

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,7 @@ struct Day02Tests {
1515

1616
@Test("report analyzer")
1717
func name() async throws {
18-
#expect(Report("7 6 4 2 1").value == [7, 6, 4, 2, 1])
19-
#expect(ReportAnalyzer().isSafe(report: Report("7 6 4 2 1")) == true)
18+
#expect(isSafe("7 6 4 2 1".integers()) == true)
2019
}
2120

2221
@Test("part1")
File renamed without changes.
File renamed without changes.

0 commit comments

Comments
 (0)