60 lines
1.4 KiB
Nim
60 lines
1.4 KiB
Nim
import std/strutils
|
|
import std/sequtils
|
|
|
|
proc grid_hidden(grid: seq[seq[int]], cx: int, cy: int, width: int, height: int): bool =
|
|
let cv = grid[cy][cx]
|
|
|
|
if cx == 0 or cy == 0 or cx == width-1 or cy == height-1:
|
|
return false
|
|
|
|
if not (cx+1 ..< width).toSeq().any(proc(x:int):bool = grid[cy][x] >= cv):
|
|
return false
|
|
|
|
if not (0 ..< cx).toSeq().any(proc(x:int):bool = grid[cy][x] >= cv):
|
|
return false
|
|
|
|
if not (cy+1 ..< height).toSeq().any(proc(y:int):bool = grid[y][cx] >= cv):
|
|
return false
|
|
|
|
if not (0 ..< cy).toSeq().any(proc(y:int):bool = grid[y][cx] >= cv):
|
|
return false
|
|
|
|
return true
|
|
|
|
|
|
proc run08_1(): string =
|
|
const input = staticRead"../input/day08.txt"
|
|
|
|
let grid = splitLines(input)
|
|
.filterIt(it != "")
|
|
.mapIt(it.toSeq().map(proc(p:char):int = parseInt(p.repeat(1))))
|
|
|
|
# echo grid
|
|
|
|
let width = grid[0].len()
|
|
let height = grid.len()
|
|
|
|
# echo width, "x", height
|
|
|
|
var visible = 0
|
|
|
|
for y in 0 ..< height:
|
|
for x in 0 ..< width:
|
|
let hidden = grid_hidden(grid, x, y, width, height)
|
|
#if hidden:
|
|
# io.stdout.write "#"
|
|
#else:
|
|
# io.stdout.write "."
|
|
if not hidden: visible += 1
|
|
#io.stdout.write "\n"
|
|
|
|
|
|
return intToStr(visible)
|
|
|
|
|
|
when not defined(js):
|
|
echo run08_1()
|
|
else:
|
|
proc js_run08_1(): cstring {.exportc.} =
|
|
return cstring(run08_1())
|