Day 4 - Part 2

This commit is contained in:
Simon Cambier 2023-12-04 18:42:05 +01:00
parent cb83afa64b
commit f889ccffc0

31
day4.p8
View File

@ -1,6 +1,7 @@
pico-8 cartridge // http://www.pico-8.com pico-8 cartridge // http://www.pico-8.com
version 41 version 41
__lua__ __lua__
local input = split([[Card 1: 47 10 77 75 94 50 93 43 27 18|73 75 32 65 98 76 71 13 50 78 54 94 18 83 77 6 79 93 45 27 87 57 51 55 43 local input = split([[Card 1: 47 10 77 75 94 50 93 43 27 18|73 75 32 65 98 76 71 13 50 78 54 94 18 83 77 6 79 93 45 27 87 57 51 55 43
Card 2: 17 9 7 91 32 97 76 39 83 88|88 25 46 50 91 18 39 76 17 22 28 82 44 66 52 7 11 56 77 9 40 83 97 32 47 Card 2: 17 9 7 91 32 97 76 39 83 88|88 25 46 50 91 18 39 76 17 22 28 82 44 66 52 7 11 56 77 9 40 83 97 32 47
Card 3: 32 2 10 96 30 37 60 86 88 50|64 96 58 41 24 37 86 84 80 49 30 53 83 50 42 33 2 52 88 46 19 89 32 51 5 Card 3: 32 2 10 96 30 37 60 86 88 50|64 96 58 41 24 37 86 84 80 49 30 53 83 50 42 33 2 52 88 46 19 89 32 51 5
@ -200,6 +201,10 @@ Card 196: 54 71 23 38 79 55 78 67 44 10|71 17 85 93 55 72 68 14 8 11 75 86 52 41
Card 197: 7 65 66 60 52 23 15 27 32 3|59 4 79 97 91 41 83 36 22 89 19 38 96 81 8 29 49 86 46 12 25 6 24 16 78 Card 197: 7 65 66 60 52 23 15 27 32 3|59 4 79 97 91 41 83 36 22 89 19 38 96 81 8 29 49 86 46 12 25 6 24 16 78
Card 198: 89 99 29 80 68 39 38 10 2 63|88 8 92 81 23 54 1 12 45 96 67 86 37 98 47 34 71 4 58 3 27 41 75 93 66]], "\n") Card 198: 89 99 29 80 68 39 38 10 2 63|88 8 92 81 23 54 1 12 45 96 67 86 37 98 47 34 71 4 58 3 27 41 75 93 66]], "\n")
printh("")
printh("Advent of Code 2013 - Day 4")
printh("")
function contains(haystack, needle) function contains(haystack, needle)
for i, v in ipairs(haystack) do for i, v in ipairs(haystack) do
if v == needle then if v == needle then
@ -223,24 +228,42 @@ function strdsum(a, b)
end end
local sum = "0" local sum = "0"
local copies = {}
for i = 1, #input do
copies[i] = "1"
end
for i, line in ipairs(input) do for i, line in ipairs(input) do
printh("Card " .. i .. " - " .. copies[i] .. " copies")
local numbers = split(line, ":")[2] local numbers = split(line, ":")[2]
local winning = split(split(numbers, "|")[1], " ") local winning = split(split(numbers, "|")[1], " ")
local mine = split(split(numbers, "|")[2], " ") local mine = split(split(numbers, "|")[2], " ")
local count = 0 local count = 0
for i, v in ipairs(mine) do for j, v in ipairs(mine) do
if contains(winning, v) then if contains(winning, v) then
count = count + 1 count = count + 1
copies[i + count] = strdsum(copies[i + count], tostr(copies[i]))
end end
end end
printh(" " .. count .. " winning cards")
if count > 0 then if count > 0 then
count = count - 1 count = count - 1
printh(2^count) -- printh(2 ^ count)
sum = strdsum(sum, tostr(2^count)) sum = strdsum(sum, tostr(2 ^ count))
end end
end end
printh(sum) printh("Part 1 " .. sum)
-- Part 2
local part2 = "0"
for i = 1, #copies do
-- printh("Card " .. i .. " - " .. copies[i] .. " copies")
part2 = strdsum(part2, tostr(copies[i]))
end
printh("Part 2 " .. part2)
__gfx__ __gfx__
00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000 00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000