adventofcode2023/day2.p8

212 lines
12 KiB
Plaintext
Raw Normal View History

2023-12-02 10:03:27 +01:00
pico-8 cartridge // http://www.pico-8.com
version 41
__lua__
local input = split(
[[Game 1:4 red,3 blue;6 blue,16 green;9 blue,13 green,1 red;10 green,4 red,6 blue
Game 2:2 green,3 blue;11 red;2 green,5 red,1 blue
Game 3:19 green,4 blue,13 red;1 green,1 blue,1 red;17 red,18 green
Game 4:4 green,8 blue,20 red;19 red,3 green,14 blue;15 red,4 green,1 blue;18 blue,14 red;19 red,10 blue;3 green,11 blue,15 red
Game 5:1 red,3 blue,15 green;13 green,2 blue;6 green;6 green,8 blue;4 green,9 blue,1 red
Game 6:2 green,10 red;4 blue,1 red,2 green;2 red,2 blue,1 green;5 red,3 green,1 blue
Game 7:4 green,2 blue,10 red;1 green,12 red;5 green,12 red,2 blue;10 red,1 blue,5 green;1 green,1 blue,11 red
Game 8:8 blue,3 red,1 green;9 blue,14 green,6 red;3 red,15 blue,16 green;9 red,4 green,6 blue
Game 9:9 blue,9 red,5 green;6 red,1 green,12 blue;7 blue,3 green;4 red,12 blue,1 green;5 red,4 green,1 blue
Game 10:1 blue,2 red,19 green;7 green,5 blue,7 red;2 blue,1 red,3 green;2 blue,9 red,10 green
Game 11:2 red,17 blue,12 green;5 green,3 blue;14 green,2 red,15 blue
Game 12:4 blue,13 green,1 red;5 blue,3 green,4 red;8 blue,15 green;12 blue,5 red,6 green;2 green,5 blue,4 red;11 blue,18 green,4 red
Game 13:8 blue,11 red,2 green;18 red,7 blue,7 green;6 green,9 red;7 green,3 blue,12 red;1 green,4 red,4 blue
Game 14:3 green,11 blue,1 red;3 green,1 red,13 blue;5 green,6 blue,1 red;1 red,5 blue,5 green;10 blue,2 green
Game 15:3 red,8 green,1 blue;8 green,10 red,3 blue;1 blue,4 green,2 red;10 red,10 green;3 blue,4 green,3 red;12 green,7 red
Game 16:13 red,9 blue;2 green,7 red,7 blue;9 blue,7 red,7 green;13 blue,10 red
Game 17:12 red,19 green,4 blue;2 blue,5 red,11 green;4 red,7 green,8 blue;6 red,10 green;3 green,7 red,10 blue
Game 18:2 blue,6 red;5 red,3 green;12 red,1 blue,3 green;1 green,19 red,5 blue;3 green,2 blue,16 red
Game 19:10 red,5 green;10 red;9 red,7 blue;1 blue,8 red
Game 20:11 green,5 red,7 blue;7 green,12 red,11 blue;13 green,3 blue,5 red;3 red,3 blue,1 green
Game 21:10 blue,10 green,2 red;16 blue,9 green,1 red;3 green,1 blue,2 red;17 green,5 blue,2 red;6 blue,15 green,2 red
Game 22:2 red,1 blue,5 green;4 blue,3 red,6 green;3 red,4 blue;4 blue,1 green,1 red;3 blue,3 red,5 green
Game 23:3 red,7 green;17 green,7 red,5 blue;4 blue,4 red;19 green,3 red,9 blue;3 green,3 blue,6 red;9 red,7 green,6 blue
Game 24:2 red,14 green,8 blue;6 red,12 blue,15 green;1 green,10 red;3 red,7 blue,15 green;11 red,13 blue;1 green,9 blue,10 red
Game 25:12 blue,7 red,7 green;2 red,10 green,9 blue;11 blue,6 green,6 red;6 blue,6 green;4 red,8 blue,2 green;6 green,4 blue,3 red
Game 26:2 blue,5 red;9 red,1 green;16 red,2 blue;4 blue,1 green,5 red
Game 27:12 green,12 red;15 green,11 red;7 red,19 green;1 blue,2 green,3 red
Game 28:4 blue,4 green,7 red;6 green,9 red,10 blue;5 red,4 blue,9 green;9 red,6 blue,2 green
Game 29:1 blue,3 green,9 red;5 green;3 green,2 red
Game 30:1 blue,5 green,3 red;2 green,1 blue,3 red;12 green,4 red;5 green,2 red;8 green,4 red,1 blue;6 green
Game 31:9 blue,5 green;3 red,11 blue,2 green;1 green,4 blue,2 red;1 green,3 blue,1 red;11 blue,5 green
Game 32:3 red,1 blue,16 green;11 green,4 blue;2 blue,4 green,2 red
Game 33:4 blue,15 green;6 green,11 blue;5 blue,1 red,13 green;14 green,1 red,5 blue;1 red,4 blue,14 green
Game 34:2 green,10 red,2 blue;8 red,10 green;3 green,1 blue,1 red
Game 35:3 blue,7 green,10 red;4 red,9 blue;8 blue,7 green,4 red;2 green,7 red,3 blue
Game 36:2 green,4 red,4 blue;1 blue,6 red;7 green,10 red;10 red,3 blue
Game 37:1 green,1 red;1 blue,1 red,9 green;6 blue,11 green,10 red;17 blue,3 green;2 green,8 red,6 blue
Game 38:6 blue,7 green,2 red;12 green,15 blue,3 red;7 blue,3 red,7 green;6 blue,10 green
Game 39:8 green,4 red,14 blue;19 blue,11 red,5 green;15 green,12 blue,13 red;18 green,5 red,11 blue;10 green,8 blue,10 red;8 green,2 red
Game 40:2 green,5 red,4 blue;1 red,2 green;10 blue,1 green;8 blue,8 red,2 green;2 red,6 blue
Game 41:18 red,2 blue;17 red,4 green,3 blue;5 blue,7 red;3 blue,3 green,8 red;8 red,2 blue
Game 42:2 blue,6 green,7 red;2 red,4 blue;4 green,4 blue,10 red;6 green,5 red,8 blue;3 red,3 blue
Game 43:1 green,17 red,1 blue;16 red,8 green;7 blue,15 red,10 green;1 green,1 blue,6 red;13 green,13 red;11 green,8 blue,1 red
Game 44:9 blue,9 green,19 red;7 red,1 blue;6 blue,8 green,9 red;8 green,2 blue,13 red;1 blue,5 green,19 red
Game 45:5 red,3 green,10 blue;4 green,17 red,3 blue;13 blue,2 red,10 green;11 blue,15 red,13 green
Game 46:14 green,1 blue,6 red;12 green,18 red;10 red,1 blue,3 green;5 red,8 green
Game 47:8 red,5 blue,2 green;4 red,4 blue;3 blue,9 red,2 green;2 red,2 green,4 blue;14 red,1 green,2 blue
Game 48:11 red,2 blue,1 green;2 green,11 blue,7 red;2 red,1 green,12 blue;1 green,7 red,2 blue
Game 49:7 blue,8 red,2 green;10 red,5 blue,2 green;10 red,2 blue,3 green
Game 50:18 red,3 green;8 red,10 blue,3 green;11 red,1 green;8 red,9 blue,1 green;7 blue,3 red,3 green
Game 51:6 green,2 blue,3 red;1 green,4 red;1 red,1 blue;1 red,5 green;6 green,2 red
Game 52:8 green,6 blue;2 blue,1 red,17 green;8 red,8 green;2 green,4 red,2 blue
Game 53:6 red,4 blue;15 red,4 green;16 red,3 green,7 blue;1 green,18 red,2 blue;14 red,8 blue,1 green
Game 54:9 red,11 green,4 blue;9 blue,9 green,14 red;3 blue,1 red,9 green;7 green,16 red,10 blue;11 green,3 blue,11 red;3 blue
Game 55:9 red;1 blue,10 red,1 green;15 red,5 green;2 blue,1 green,14 red;1 blue,2 green,8 red;6 red,3 green,2 blue
Game 56:16 blue,13 green,1 red;7 green,4 blue;1 red,11 blue,16 green;10 green,2 red,9 blue;20 green,1 blue,1 red;14 green,2 blue
Game 57:13 red,7 blue,4 green;19 red,3 blue,8 green;9 red,2 blue,13 green
Game 58:5 green,10 blue;11 green,9 blue;6 green,11 blue;8 green,2 blue;1 red,5 blue,2 green;6 green,5 blue
Game 59:7 blue,4 red;1 green,15 red,7 blue;6 blue,15 red;2 green,13 red,7 blue;6 blue,15 red
Game 60:6 green,2 blue,1 red;6 green,8 blue;11 green,2 red,15 blue;1 red,4 blue,9 green
Game 61:2 green,4 blue;8 red,4 blue,3 green;4 green,8 blue,5 red
Game 62:1 blue,11 green;7 green,3 blue;7 green,1 blue,1 red
Game 63:14 red,7 green,1 blue;2 red,15 green;3 green,6 red;20 red,1 blue,9 green;11 red,1 blue,15 green
Game 64:9 red,2 green;9 green,8 red,2 blue;2 red,2 blue;1 green;7 red,1 blue,9 green;12 green,4 red
Game 65:4 blue,1 red,3 green;7 green,8 blue;11 red,3 green,1 blue
Game 66:5 red,2 blue;2 green,1 red;2 green,13 red,4 blue;15 red,2 blue
Game 67:2 green,1 blue,15 red;8 blue,10 red,1 green;2 green,6 blue,18 red
Game 68:6 red,2 green,3 blue;1 blue,13 red,5 green;5 green,2 blue,7 red;2 blue,8 green,2 red;2 red,1 blue;8 green,8 red
Game 69:2 blue,3 red;3 green,1 red,2 blue;2 red,1 green,5 blue;3 red,3 green,4 blue;1 blue,4 green,7 red;2 green,4 blue
Game 70:2 red,17 green;8 red,14 green;1 blue,18 green;5 red,4 green,1 blue
Game 71:6 red;3 green,9 blue,18 red;19 blue,14 red;11 blue,18 red,5 green
Game 72:13 blue,10 red,4 green;5 green,13 blue,13 red;7 green,7 red,5 blue;9 blue,6 red;4 blue,6 green;7 red,2 blue,4 green
Game 73:3 red,6 blue;8 red,2 blue;6 blue,1 green,4 red;1 green,5 red
Game 74:3 red,3 green,10 blue;1 green,1 red;7 red,3 green,7 blue;3 blue,4 red
Game 75:1 green,10 red,8 blue;13 red,7 green,9 blue;18 red,9 blue;2 green,1 blue,5 red
Game 76:4 green,4 red;8 green,3 red,3 blue;1 red,2 green;6 blue,3 red,3 green;1 red,1 green,1 blue
Game 77:7 red,8 blue,7 green;13 green,7 blue,8 red;2 red,10 green,5 blue;2 red,5 blue,3 green
Game 78:2 red,7 blue;5 blue,6 green,3 red;16 green,3 blue,10 red;13 green,2 blue,2 red
Game 79:1 blue,8 red;4 blue,12 red,5 green;14 red,10 blue;2 green,7 red,2 blue;14 red,2 green
Game 80:7 blue,5 green,7 red;2 green,2 blue,7 red;4 red,1 blue,18 green;2 green,11 red,3 blue;4 blue,9 red,15 green
Game 81:3 green,4 red,14 blue;11 blue,4 green,14 red;6 blue,8 red,5 green
Game 82:2 green,7 blue,2 red;15 blue,2 green,1 red;3 blue,2 green;1 red;2 red,15 blue,2 green
Game 83:5 blue,1 green,5 red;12 red,10 blue;1 blue,11 red
Game 84:4 red,8 green,14 blue;1 green,8 blue,2 red;1 red,6 blue,9 green;8 green,15 blue,4 red;4 blue,4 red,6 green
Game 85:8 green,16 red,5 blue;10 red,10 green;18 green,10 blue,1 red;3 red,9 blue,13 green
Game 86:2 blue,10 green,6 red;8 blue,6 green;8 blue,3 red;8 green,4 red,3 blue
Game 87:8 blue,4 red;16 red,20 blue,4 green;18 red,1 green,1 blue;6 red,1 green,16 blue;18 blue,6 red
Game 88:13 green,8 blue,5 red;13 red,5 green,9 blue;10 red,18 blue,7 green;14 green,9 red,13 blue
Game 89:14 red,3 green,5 blue;10 blue,5 red;9 blue,12 red,3 green
Game 90:2 red,2 blue;1 blue,1 green,3 red;2 green,1 blue,8 red;4 red,2 green,2 blue;2 blue,9 red,6 green
Game 91:1 green,1 blue,6 red;3 blue,2 red;2 red,10 green;7 green,2 blue,4 red;1 blue,12 green,8 red
Game 92:5 red,6 blue,14 green;9 blue,1 red,10 green;2 red,7 green,6 blue;2 red,10 blue,4 green
Game 93:11 red,5 blue,2 green;7 green,8 red,6 blue;3 green,5 blue,10 red;16 red,8 blue,6 green;2 green;1 green,11 blue,16 red
Game 94:4 blue,2 red,4 green;5 blue,1 red,2 green;12 blue,3 red,3 green
Game 95:1 red,12 green,4 blue;1 blue,9 green,3 red;1 blue,13 green,1 red;3 red,2 green,1 blue;4 blue,3 red,15 green
Game 96:1 red,7 blue,2 green;5 green;3 red,5 green,11 blue
Game 97:8 green,6 red;1 blue,6 red,10 green;1 blue,6 red
Game 98:2 green,8 red,1 blue;9 green,2 blue,7 red;1 blue,2 red,11 green;8 red,10 green,2 blue
Game 99:3 blue,2 red;1 blue,3 green,3 red;1 red,3 green;2 green,2 red,2 blue
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"
)
2023-12-02 10:56:50 +01:00
-- viz
local flakes = {}
2023-12-02 10:03:27 +01:00
--strdsum
--v0.1
--@shiftalow / bitchunk
function strdsum(a, b)
local s, l, d = '', max(#a, #b), ''
for i = 1, l do
local v = (a[-i] or 0) + (b[-i] or 0) + #d
d = v > 9 and '1' or ''
s = v % 10 .. s
end
return d .. s
end
local maxred = 12
local maxgreen = 13
local maxblue = 14
local sum = 0
local sumpower = "0"
2023-12-02 10:56:50 +01:00
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)
2023-12-02 10:03:27 +01:00
2023-12-02 10:56:50 +01:00
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
2023-12-02 10:03:27 +01:00
2023-12-02 10:56:50 +01:00
-- 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
-- viz
for i = 1, minred do
2023-12-02 11:30:49 +01:00
add(flakes, { rnd(128), -rnd(20), 8 })
2023-12-02 10:56:50 +01:00
end
for i = 1, mingreen do
2023-12-02 11:30:49 +01:00
add(flakes, { rnd(128), -rnd(20), 11 })
2023-12-02 10:56:50 +01:00
end
for i = 1, minblue do
2023-12-02 11:30:49 +01:00
add(flakes, { rnd(128), -rnd(20), 12 })
2023-12-02 10:56:50 +01:00
end
2023-12-02 10:03:27 +01:00
2023-12-02 10:56:50 +01:00
sumpower = strdsum(sumpower, tostr(minred * mingreen * minblue))
if ok then
sum += i
2023-12-02 10:03:27 +01:00
end
2023-12-02 10:56:50 +01:00
end
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
2023-12-02 10:03:27 +01:00
end
end
2023-12-02 10:56:50 +01:00
end
function _draw()
cls()
for flake in all(flakes) do
pset(flake[1], flake[2], flake[3])
2023-12-02 10:03:27 +01:00
end
end
__gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00077000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000
00700700000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000