Cringe ass visual
include std/[cmdline, strutils, sequtils, math]
const render = true
var inp = toseq lines commandlineparams()[0]
var image_cur = 0
proc print_image(mymap: seq[seq[int]]) =
var f = open("frame_" & inttostr(image_cur, 4) & ".ppm", fmWrite)
inc image_cur
var (w, h) = (len mymap[0], len mymap)
var mymax = max mymap.mapit max it
writeline f, "P3"
writeline f, w, " ", h
writeline f, 255
for y in 0 ..< h:
for x in 0 ..< w:
if inp[y][x] == '^':
writeline f, 255, " ", 0, " ", 0
elif mymap[y][x] == 0:
writeline f, 0, " ", 0, " ", 0
else:
let val = uint16 255 * 2 * mymap[y][x].float64.log float64 mymax
if val >= 255:
writeline f, 0, " ", 255, " ", 255 * 2 - val
else:
writeline f, 0, " ", val, " ", 255
var start: tuple[y, x: int]
for iy, y in inp:
for ix, x in y:
if x == 'S':
start = (iy, ix)
var mymap = newseqwith(len inp, newseq[int] len inp[0])
mymap[start.y][start.x] = 1
when render: print_image mymap
var p1 = 0
for y in start.y ..< pred len mymap:
for x in 0 ..< len mymap[0]:
if mymap[y][x] <= 0: continue
if inp[succ y][x] == '^':
inc p1
inc mymap[succ y][succ x], mymap[y][x]
inc mymap[succ y][pred x], mymap[y][x]
else:
inc mymap[succ y][x], mymap[y][x]
when render: print_image mymap
echo p1
echo foldl(mymap[^1], a + b, 0)