Add day11 problem + solution
This commit is contained in:
parent
3072b0bde7
commit
e60c687e42
5 changed files with 468 additions and 0 deletions
58
day11/p2.nim
Normal file
58
day11/p2.nim
Normal file
|
|
@ -0,0 +1,58 @@
|
|||
import os, sets
|
||||
import std/[strutils, sequtils]
|
||||
|
||||
proc increaseEnergy(octopi: var seq[seq[uint8]], flashedOctopi: var HashSet[(int, int)], i, j: int) =
|
||||
|
||||
var stack: seq[(int, int)] = @[(i, j)]
|
||||
|
||||
while stack.len > 0:
|
||||
let (i, j) = stack.pop
|
||||
|
||||
if i < 0 or i >= len(octopi) or
|
||||
j < 0 or j >= len(octopi[i]) or
|
||||
(i, j) in flashedOctopi:
|
||||
continue
|
||||
|
||||
if octopi[i][j] < 9:
|
||||
octopi[i][j] += 1
|
||||
else:
|
||||
flashedOctopi.incl((i, j))
|
||||
octopi[i][j] = 0
|
||||
|
||||
let energyIncreases = [
|
||||
(i-1, j-1), (i-1, j), (i-1, j+1),
|
||||
(i, j-1), (i, j+1),
|
||||
(i+1, j-1), (i+1, j), (i+1, j+1),
|
||||
]
|
||||
|
||||
stack.add energyIncreases
|
||||
|
||||
|
||||
proc main() =
|
||||
let fileName = paramStr(1)
|
||||
|
||||
var octopi: seq[seq[uint8]]
|
||||
|
||||
for line in fileName.lines:
|
||||
octopi.add line.mapIt((ord(it) - ord('0')).uint8)
|
||||
|
||||
var step = 0
|
||||
while true:
|
||||
var flashedOctopi: HashSet[(int, int)]
|
||||
|
||||
for i in 0 ..< len(octopi):
|
||||
for j in 0 ..< len(octopi[0]):
|
||||
octopi.increaseEnergy(flashedOctopi, i, j)
|
||||
|
||||
step += 1
|
||||
|
||||
# check for all zeroes
|
||||
if octopi.allIt(it.allIt(it == 0)):
|
||||
break
|
||||
|
||||
for octoLine in octopi:
|
||||
echo octoLine.join("")
|
||||
|
||||
echo "Steps to sync: ", step
|
||||
|
||||
main()
|
||||
Loading…
Add table
Add a link
Reference in a new issue