@@ -3,34 +3,13 @@ private const val DAY = 11
33fun 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+
8473private fun makeOctopusFlash (octopuses : Array <IntArray >, x : Int , y : Int , flashedOctopuses : Array <BooleanArray >) {
8574 flashedOctopuses[x][y] = true
8675
0 commit comments