Skip to content

Commit f253249

Browse files
committed
Add last days, finish up 2020, move everything to classes
1 parent 9ad7616 commit f253249

127 files changed

Lines changed: 2788 additions & 2533 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

readme.md

Lines changed: 92 additions & 64 deletions
Original file line numberDiff line numberDiff line change
@@ -1,149 +1,177 @@
11
## day1 ##
2-
Part 1: :heavy_check_mark:744475 (47.76ms)
2+
Part 1: :heavy_check_mark:744475 (1.131ms)
33

4-
Part 2: :heavy_check_mark:70276940 (4.99ms)
4+
Part 2: :heavy_check_mark:70276940 (1.478ms)
55

6-
Total time: 53.67ms
6+
Total time: 3.452ms
77

88
## day2 ##
9-
Part 1: :heavy_check_mark:564 (15.826ms)
9+
Part 1: :heavy_check_mark:564 (6.633ms)
1010

11-
Part 2: :heavy_check_mark:325 (14.925ms)
11+
Part 2: :heavy_check_mark:325 (6.545ms)
1212

13-
Total time: 30.802ms
13+
Total time: 13.234ms
1414

1515
## day3 ##
16-
Part 1: :heavy_check_mark:230 (5.811ms)
16+
Part 1: :heavy_check_mark:230 (2.624ms)
1717

18-
Part 2: :heavy_check_mark:9533698720 (3.138ms)
18+
Part 2: :heavy_check_mark:9533698720 (1.814ms)
1919

20-
Total time: 8.998ms
20+
Total time: 4.499ms
2121

2222
## day4 ##
23-
Part 1: :heavy_check_mark:219 (28.784ms)
23+
Part 1: :heavy_check_mark:219 (8.743ms)
2424

25-
Part 2: :heavy_check_mark:127 (35.811ms)
25+
Part 2: :heavy_check_mark:127 (39.117ms)
2626

27-
Total time: 64.973ms
27+
Total time: 47.923ms
2828

2929
## day5 ##
30-
Part 1: :heavy_check_mark:861 (3.53ms)
30+
Part 1: :heavy_check_mark:861 (10.011ms)
3131

32-
Part 2: :heavy_check_mark:633 (13.82ms)
32+
Part 2: :heavy_check_mark:633 (12.033ms)
3333

34-
Total time: 17.43ms
34+
Total time: 22.1ms
3535

3636
## day6 ##
37-
Part 1: :heavy_check_mark:6382 (85.423ms)
37+
Part 1: :heavy_check_mark:6382 (84.05ms)
3838

39-
Part 2: :heavy_check_mark:3197 (19.835ms)
39+
Part 2: :heavy_check_mark:3197 (22.319ms)
4040

41-
Total time: 105.303ms
41+
Total time: 106.431ms
4242

4343
## day7 ##
44-
Part 1: :heavy_check_mark:222 (48.75ms)
44+
Part 1: :heavy_check_mark:222 (29.002ms)
4545

46-
Part 2: :heavy_check_mark:13264 (26.925ms)
46+
Part 2: :heavy_check_mark:13264 (0.276ms)
4747

48-
Total time: 75.737ms
48+
Total time: 29.365ms
4949

5050
## day8 ##
51-
Part 1: :heavy_check_mark:2025 (4.135ms)
51+
Part 1: :heavy_check_mark:2025 (1.061ms)
5252

53-
Part 2: :heavy_check_mark:2001 (7.261ms)
53+
Part 2: :heavy_check_mark:2001 (11.067ms)
5454

55-
Total time: 11.447ms
55+
Total time: 12.181ms
5656

5757
## day9 ##
58-
Part 1: :heavy_check_mark:375054920 (9.46ms)
58+
Part 1: :heavy_check_mark:375054920 (21.079ms)
5959

60-
Part 2: :heavy_check_mark:54142584 (1.403s)
60+
Part 2: :heavy_check_mark:54142584 (1.654s)
6161

62-
Total time: 1.413s
62+
Total time: 1.675s
6363

6464
## day10 ##
65-
Part 1: :heavy_check_mark:2376 (2.321ms)
65+
Part 1: :heavy_check_mark:2376 (1.078ms)
6666

67-
Part 2: :heavy_check_mark:129586085429248 (3.949ms)
67+
Part 2: :heavy_check_mark:129586085429248 (7.751ms)
6868

69-
Total time: 6.315ms
69+
Total time: 8.876ms
7070

7171
## day11 ##
72-
Part 1: :heavy_check_mark:2164 (253.833ms)
72+
Part 1: :heavy_check_mark:2164 (236.352ms)
7373

74-
Part 2: :heavy_check_mark:1974 (343.406ms)
74+
Part 2: :heavy_check_mark:1974 (365.645ms)
7575

76-
Total time: 597.295ms
76+
Total time: 602.174ms
7777

7878
## day12 ##
79-
Part 1: :heavy_check_mark:2879 (1.833ms)
79+
Part 1: :heavy_check_mark:2879 (1.005ms)
8080

81-
Part 2: :heavy_check_mark:178986 (1.629ms)
81+
Part 2: :heavy_check_mark:178986 (0.53ms)
8282

83-
Total time: 3.498ms
83+
Total time: 1.567ms
8484

8585
## day13 ##
86-
Part 1: :heavy_check_mark:115 (1.11ms)
86+
Part 1: :heavy_check_mark:115 (0.922ms)
8787

88-
Part 2: :heavy_check_mark:756261495958122 (4.557ms)
88+
Part 2: :heavy_check_mark:756261495958122 (4.179ms)
8989

90-
Total time: 5.702ms
90+
Total time: 5.162ms
9191

9292
## day14 ##
93-
Part 1: :heavy_check_mark:9967721333886 (5.192ms)
93+
Part 1: :heavy_check_mark:9967721333886 (18.254ms)
9494

95-
Part 2: :heavy_check_mark:4355897790573 (72.65ms)
95+
Part 2: :heavy_check_mark:4355897790573 (104.004ms)
9696

97-
Total time: 77.893ms
97+
Total time: 122.333ms
9898

9999
## day15 ##
100-
Part 1: :heavy_check_mark:206 (3.232ms)
100+
Part 1: :heavy_check_mark:206 (0.591ms)
101101

102-
Part 2: :heavy_check_mark:955 (3.825s)
102+
Part 2: :heavy_check_mark:955 (4.106s)
103103

104-
Total time: 3.828s
104+
Total time: 4.106s
105105

106106
## day16 ##
107-
Part 1: :heavy_check_mark:23044 (35.006ms)
107+
Part 1: :heavy_check_mark:23044 (49.816ms)
108108

109-
Part 2: :heavy_check_mark:3765150732757 (59.526ms)
109+
Part 2: :heavy_check_mark:3765150732757 (60.492ms)
110110

111-
Total time: 94.588ms
111+
Total time: 110.36ms
112112

113113
## day17 ##
114-
Part 1: :heavy_check_mark:306 (81.154ms)
114+
Part 1: :heavy_check_mark:306 (79.803ms)
115115

116-
Part 2: :heavy_check_mark:2572 (636.537ms)
116+
Part 2: :heavy_check_mark:2572 (612.25ms)
117117

118-
Total time: 717.75ms
118+
Total time: 692.116ms
119119

120120
## day18 ##
121-
Part 1: :heavy_check_mark:12956356593940 (8.962ms)
121+
Part 1: :heavy_check_mark:12956356593940 (7.983ms)
122122

123-
Part 2: :heavy_check_mark:94240043727614 (10.666ms)
123+
Part 2: :heavy_check_mark:94240043727614 (8.405ms)
124124

125-
Total time: 19.691ms
125+
Total time: 16.443ms
126126

127127
## day19 ##
128-
Part 1: :heavy_check_mark:124 (153.392ms)
128+
Part 1: :heavy_check_mark:124 (56.53ms)
129129

130-
Part 2: :heavy_check_mark:228 (181.62ms)
130+
Part 2: :heavy_check_mark:228 (268.046ms)
131131

132-
Total time: 335.084ms
132+
Total time: 324.632ms
133133

134134
## day20 ##
135-
Part 1: :heavy_check_mark:14129524957217 (121.985ms)
135+
Part 1: :heavy_check_mark:14129524957217 (141.877ms)
136136

137-
Part 2: :heavy_check_mark:1649 (64.47ms)
137+
Part 2: :heavy_check_mark:1649 (10.807ms)
138138

139-
Total time: 186.51ms
139+
Total time: 152.73ms
140140

141141
## day21 ##
142-
Part 1: :heavy_check_mark:2428 (3.436ms)
142+
Part 1: :heavy_check_mark:2428 (1.044ms)
143143

144-
Part 2: :heavy_check_mark:bjq,jznhvh,klplr,dtvhzt,sbzd,tlgjzx,ctmbr,kqms (5.517ms)
144+
Part 2: :heavy_check_mark:bjq,jznhvh,klplr,dtvhzt,sbzd,tlgjzx,ctmbr,kqms (2.026ms)
145145

146-
Total time: 8.998ms
146+
Total time: 3.113ms
147+
148+
## day22 ##
149+
Part 1: :heavy_check_mark:35370 (1.51ms)
150+
151+
Part 2: :heavy_check_mark:36246 (552.683ms)
152+
153+
Total time: 554.252ms
154+
155+
## day23 ##
156+
Part 1: :heavy_check_mark:74698532 (0.879ms)
157+
158+
Part 2: :heavy_check_mark:286194102744 (1.612s)
159+
160+
Total time: 1.613s
161+
162+
## day24 ##
163+
Part 1: :heavy_check_mark:307 (0.509ms)
164+
165+
Part 2: :heavy_check_mark:3787 (1.886s)
166+
167+
Total time: 1.887s
168+
169+
## day25 ##
170+
Part 1: :heavy_check_mark:18608573 (14.727ms)
171+
172+
Part 2: :heavy_check_mark:Free! (0.003ms)
173+
174+
Total time: 14.774ms
147175

148176
## Summary ##
149-
All days total: 7.735s
177+
All days total: 12.462s

src/AoCDay.kt

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
2+
interface AoCDay {
3+
fun part1(): String
4+
fun part2(): String
5+
}

src/aoc2020/common.kt

Lines changed: 130 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,130 @@
1+
package aoc2020
2+
3+
import AoCDay
4+
import aoc2020.day1.*
5+
import aoc2020.day2.*
6+
import aoc2020.day3.*
7+
import aoc2020.day4.*
8+
import aoc2020.day5.*
9+
import aoc2020.day6.*
10+
import aoc2020.day7.*
11+
import aoc2020.day8.*
12+
import aoc2020.day9.*
13+
import aoc2020.day10.*
14+
import aoc2020.day11.*
15+
import aoc2020.day12.*
16+
import aoc2020.day13.*
17+
import aoc2020.day14.*
18+
import aoc2020.day15.*
19+
import aoc2020.day16.*
20+
import aoc2020.day17.*
21+
import aoc2020.day18.*
22+
import aoc2020.day19.*
23+
import aoc2020.day20.*
24+
import aoc2020.day21.*
25+
import aoc2020.day22.*
26+
import aoc2020.day23.*
27+
import aoc2020.day24.*
28+
import aoc2020.day25.*
29+
import aoc2020.helpers.Companion.testSymbol
30+
import java.io.File
31+
32+
class helpers {
33+
companion object {
34+
var testSymbol: (Boolean) -> String = {bool ->
35+
if(bool) "✔️" else ""
36+
}
37+
}
38+
}
39+
40+
fun readFromFile(day: String): List<String> {
41+
return File("./src/aoc2020/$day/in.txt")
42+
.readLines()
43+
.map(String::trim)
44+
}
45+
46+
fun readAnswers(day: String): Pair<String, String> {
47+
val answers = File("./src/aoc2020/$day/out.txt")
48+
.readLines()
49+
.map(String::trim)
50+
return Pair(answers[0], answers[1])
51+
}
52+
53+
fun runTests() {
54+
val beginAllDays = System.nanoTime()
55+
runDay("day1", ReportRepair())
56+
runDay("day2", PasswordPhilosophy())
57+
runDay("day3", TobogganTrajectory())
58+
runDay("day4", PassportProcessing())
59+
runDay("day5", BinaryBoarding())
60+
runDay("day6", CustomCustoms())
61+
runDay("day7", HandyHaversacks())
62+
runDay("day8", HandheldHalting())
63+
runDay("day9", EncodingError())
64+
runDay("day10", AdapterArray())
65+
runDay("day11", SeatingSystem())
66+
runDay("day12", RainRisk())
67+
runDay("day13", ShuttleSearch())
68+
runDay("day14", DockingData())
69+
runDay("day15", RambunctiousRecitation())
70+
runDay("day16", TicketTranslation())
71+
runDay("day17", ConwayCubes())
72+
runDay("day18", OperationOrder())
73+
runDay("day19", MonsterMessages())
74+
runDay("day20", JurassicJigsaw())
75+
runDay("day21", AllergenAssessment())
76+
runDay("day22", CrabCombat2())
77+
runDay("day23", CrabCups())
78+
runDay("day24", LobbyLayout())
79+
runDay("day25", ComboBreaker())
80+
81+
println("## Summary ##")
82+
println("All days total: ${roundTime(beginAllDays)}")
83+
}
84+
85+
fun runDay(name: String, day: AoCDay) {
86+
runDay(name, day::part1, day::part2)
87+
}
88+
89+
fun runDay(name: String, part1: () -> String, part2: () -> String) {
90+
val beginTotal = System.nanoTime()
91+
println("## $name ##")
92+
93+
val answers = readAnswers(name)
94+
95+
val p1 = part1()
96+
val p1time = roundTime(beginTotal)
97+
val p1correct = p1 == answers.first
98+
val beginPart = System.nanoTime()
99+
val p2 = part2()
100+
val p2time = roundTime(beginPart)
101+
val totalTime = roundTime(beginTotal)
102+
103+
println("Part 1: ${testSymbol(p1correct)}$p1 ($p1time)")
104+
println()
105+
if(!p1correct) {
106+
System.err.println("Part 1 Incorrect, Expected: ${answers.first}, Received: $p1")
107+
}
108+
val p2correct = p2 == answers.second
109+
println("Part 2: ${testSymbol(p2correct)}$p2 ($p2time)")
110+
println()
111+
if(!p2correct) {
112+
System.err.println("Part 2 Incorrect, Expected: ${answers.second}, Received: $p2")
113+
}
114+
115+
println("Total time: $totalTime")
116+
println()
117+
}
118+
119+
fun roundTime(begin: Long): String {
120+
var totalTime = Math.round((System.nanoTime()-begin)/1000.0)/1000.0
121+
var unit = "ms"
122+
if(totalTime > 1000) {
123+
totalTime = Math.round(totalTime)/1000.0
124+
unit = "s"
125+
}
126+
return "$totalTime$unit"
127+
}
128+
129+
fun List<Int>.longProduct() = this.fold(1L) { acc, v -> acc * v }
130+
fun List<Long>.product() = this.fold(1L) { acc, v -> acc * v }

0 commit comments

Comments
 (0)