From dee419d2fdceedd28b9ca781af88acb421b1fdf5 Mon Sep 17 00:00:00 2001 From: Simon Cambier Date: Sat, 2 Dec 2023 10:56:50 +0100 Subject: [PATCH] added viz for day2 --- day2.p8 | 101 ++++++++++++++++++++++++++++++++++++++------------------ 1 file changed, 69 insertions(+), 32 deletions(-) diff --git a/day2.p8 b/day2.p8 index 6b6782c..6a21a40 100644 --- a/day2.p8 +++ b/day2.p8 @@ -105,6 +105,9 @@ local input = split( Game 100:7 blue,6 red,5 green;3 blue,13 green,11 red;6 red,13 green,14 blue;8 red,10 blue,15 green]], "\n" ) +-- viz +local flakes = {} + --strdsum --v0.1 --@shiftalow / bitchunk @@ -124,46 +127,80 @@ local maxblue = 14 local sum = 0 local sumpower = "0" -for i, game in ipairs(input) do - local ok = true - local minred = 0 - local mingreen = 0 - local minblue = 0 +local iter = cocreate(function() + for i, game in ipairs(input) do + local ok = true + local minred = 0 + local mingreen = 0 + local minblue = 0 - local data = split(game, ":")[2] - printh(" ") - printh("GAME " .. i) - printh(data) + local data = split(game, ":")[2] + -- printh(" ") + -- printh("GAME " .. i) + -- printh(data) - local hands = split(data, ";") - for hand in all(hands) do - local grouped = split(hand, ",") - local red = 0 - local green = 0 - local blue = 0 - for item in all(grouped) do - local q = split(item, " ") - if q[2] == "red" then red = q[1] end - if q[2] == "green" then green = q[1] end - if q[2] == "blue" then blue = q[1] end + local hands = split(data, ";") + for hand in all(hands) do + yield() + local grouped = split(hand, ",") + local red = 0 + local green = 0 + local blue = 0 + for item in all(grouped) do + local q = split(item, " ") + if q[2] == "red" then red = q[1] end + if q[2] == "green" then green = q[1] end + if q[2] == "blue" then blue = q[1] end - -- part 2 - if red > minred then minred = red end - if green > mingreen then mingreen = green end - if blue > minblue then minblue = blue end + -- part 2 + if red > minred then minred = red end + if green > mingreen then mingreen = green end + if blue > minblue then minblue = blue end + end + -- printh("red: " .. red .. ", green: " .. green .. ", blue: " .. blue) + if red > maxred or green > maxgreen or blue > maxblue then + ok = false + end end - printh("red: " .. red .. ", green: " .. green .. ", blue: " .. blue) - if red > maxred or green > maxgreen or blue > maxblue then - ok = false + -- viz + for i = 1, minred do + add(flakes, { rnd(128) \ 1, -rnd(20) \ 1, 8 }) + end + for i = 1, mingreen do + add(flakes, { rnd(128) \ 1, -rnd(20) \ 1, 11 }) + end + for i = 1, minblue do + add(flakes, { rnd(128) \ 1, -rnd(20) \ 1, 12 }) + end + + sumpower = strdsum(sumpower, tostr(minred * mingreen * minblue)) + if ok then + sum += i end end - sumpower = strdsum(sumpower, tostr(minred * mingreen * minblue)) - if ok then - printh("OK") sum += i + printh("sum: " .. sum) + printh("powers: " .. sumpower) +end) + +function _update() + coresume(iter) + local todel = {} + for i, flake in ipairs(flakes) do + local x = flake[1] + sin(t() / 5 + i / 20) / 2 + local y = flake[2] + 1 + if pget(x, y) == 0 and y < 128 then + flake[1] = x + flake[2] = y + end + end +end + +function _draw() + cls() + for flake in all(flakes) do + pset(flake[1], flake[2], flake[3]) end end -printh("sum: " .. sum) -printh("powers: " .. sumpower) __gfx__ 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000