Skip to content

Commit 0253b7a

Browse files
committed
Refactor
1 parent 1be85c9 commit 0253b7a

File tree

1 file changed

+41
-52
lines changed

1 file changed

+41
-52
lines changed

src/Day11.kt

Lines changed: 41 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -3,34 +3,13 @@ private const val DAY = 11
33
fun main() {
44
fun part1(input: List<List<Int>>): Int {
55
val octopuses = input.map { it.toIntArray() }.toTypedArray()
6-
var flashCount = 0
6+
var totalFlashCount = 0
77
repeat(100) {
8-
// increase energy level of all by one
9-
for (x in octopuses.indices) {
10-
for (y in octopuses[0].indices) {
11-
octopuses[x][y]++
12-
}
13-
}
14-
// flash all octopuses with energy > 9 plus adjacent ones
15-
val flashedOctopuses: Array<BooleanArray> = Array(10) { BooleanArray(10) }
16-
for (x in octopuses.indices) {
17-
for (y in octopuses[0].indices) {
18-
if (octopuses[x][y] > 9 && !flashedOctopuses[x][y]) {
19-
makeOctopusFlash(octopuses, x, y, flashedOctopuses)
20-
}
21-
}
22-
}
23-
// reset energy level
24-
for (x in octopuses.indices) {
25-
for (y in octopuses[0].indices) {
26-
if (octopuses[x][y] > 9) {
27-
octopuses[x][y] = 0
28-
flashCount++
29-
}
30-
}
31-
}
8+
increaseEnergyLevelOfAllByOne(octopuses)
9+
flashWhenEnoughEnergy(octopuses)
10+
totalFlashCount += resetEnergyLevelAfterFlashing(octopuses)
3211
}
33-
return flashCount
12+
return totalFlashCount
3413
}
3514

3615
fun part2(input: List<List<Int>>): Int {
@@ -39,32 +18,10 @@ fun main() {
3918
var step = 0
4019
while(true) {
4120
step++
42-
// increase energy level of all by one
43-
for (x in octopuses.indices) {
44-
for (y in octopuses[0].indices) {
45-
octopuses[x][y]++
46-
}
47-
}
48-
// flash all octopuses with energy > 9 plus adjacent ones
49-
val flashedOctopuses: Array<BooleanArray> = Array(10) { BooleanArray(10) }
50-
for (x in octopuses.indices) {
51-
for (y in octopuses[0].indices) {
52-
if (octopuses[x][y] > 9 && !flashedOctopuses[x][y]) {
53-
makeOctopusFlash(octopuses, x, y, flashedOctopuses)
54-
}
55-
}
56-
}
57-
// reset energy level
58-
var flashCountInStep = 0
59-
for (x in octopuses.indices) {
60-
for (y in octopuses[0].indices) {
61-
if (octopuses[x][y] > 9) {
62-
octopuses[x][y] = 0
63-
flashCountInStep++
64-
}
65-
}
66-
}
67-
if (flashCountInStep == 100) { // if all flashing synchronized
21+
increaseEnergyLevelOfAllByOne(octopuses)
22+
flashWhenEnoughEnergy(octopuses)
23+
val flashCountInStep = resetEnergyLevelAfterFlashing(octopuses)
24+
if (flashCountInStep == 100) { // if all are flashing synchronized
6825
return step
6926
}
7027
totalFlashCount += flashCountInStep
@@ -81,6 +38,38 @@ fun main() {
8138
println(part2(input))
8239
}
8340

41+
private fun resetEnergyLevelAfterFlashing(octopuses: Array<IntArray>): Int {
42+
var flashCountInStep = 0
43+
for (x in octopuses.indices) {
44+
for (y in octopuses[0].indices) {
45+
if (octopuses[x][y] > 9) {
46+
octopuses[x][y] = 0
47+
flashCountInStep++
48+
}
49+
}
50+
}
51+
return flashCountInStep
52+
}
53+
54+
private fun flashWhenEnoughEnergy(octopuses: Array<IntArray>) {
55+
val flashedOctopuses: Array<BooleanArray> = Array(10) { BooleanArray(10) }
56+
for (x in octopuses.indices) {
57+
for (y in octopuses[0].indices) {
58+
if (octopuses[x][y] > 9 && !flashedOctopuses[x][y]) {
59+
makeOctopusFlash(octopuses, x, y, flashedOctopuses)
60+
}
61+
}
62+
}
63+
}
64+
65+
private fun increaseEnergyLevelOfAllByOne(octopuses: Array<IntArray>) {
66+
for (x in octopuses.indices) {
67+
for (y in octopuses[0].indices) {
68+
octopuses[x][y]++
69+
}
70+
}
71+
}
72+
8473
private fun makeOctopusFlash(octopuses: Array<IntArray>, x: Int, y: Int, flashedOctopuses: Array<BooleanArray>) {
8574
flashedOctopuses[x][y] = true
8675

0 commit comments

Comments
 (0)