Skip to content

Commit c8d55dd

Browse files
committed
Add day 22
1 parent c9ad7d1 commit c8d55dd

File tree

5 files changed

+522
-0
lines changed

5 files changed

+522
-0
lines changed

2021/22/22.jl

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
function solve(data)
2+
volume(v) = prod(max(0, v[i+1] - v[i] + 1) for i=1:2:5)
3+
intersection(v1, v2) = [(i % 2 == 1 ? max : min)(v1[i], v2[i]) for i=1:6]
4+
cubes = []
5+
for (onoff, nums) in data
6+
function remove_volume(original, remove)
7+
# Function to remove one cube from another, by replacing it with up to 6 other cubes
8+
intersecting = intersection(original, remove)
9+
volume(intersecting) == 0 && return [original]
10+
original_divided = []
11+
add(v) = volume(v) != 0 && push!(original_divided, v)
12+
x, X, y, Y, z, Z = original
13+
xi, Xi, yi, Yi, zi, Zi = intersecting
14+
add([x, xi-1, y, Y, z, Z])
15+
add([Xi+1, X, y, Y, z, Z])
16+
add([xi, Xi, y, yi-1, z, Z])
17+
add([xi, Xi, Yi+1, Y, z, Z])
18+
add([xi, Xi, yi, Yi, z, zi-1])
19+
add([xi, Xi, yi, Yi, Zi+1, Z])
20+
return original_divided
21+
end
22+
# Remove the current cube from every previous cube (doesn't matter if on or off)
23+
!isempty(cubes) && (cubes = reduce(vcat, remove_volume(cube, nums) for cube in cubes))
24+
# Add the cube if it is turned on
25+
onoff && push!(cubes, nums)
26+
end
27+
# Sum all cubes, since none are intersecting after the previous operations
28+
return cubes .|> volume |> sum
29+
end
30+
function main()
31+
extract_ints(str) = parse.(Int, m.match for m in eachmatch(r"-?\d+", str))
32+
data = split.(readlines()) .|> sp -> (sp[1] == "on", extract_ints(sp[2]))
33+
data_part1 = filter(nums -> all(i -50:50 for i=nums[2]), data)
34+
35+
println(solve(data_part1))
36+
println(solve(data))
37+
end
38+
main()

2021/22/example.ans

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
474140
2+
2758514936282235

2021/22/example.in

Lines changed: 60 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,60 @@
1+
on x=-5..47,y=-31..22,z=-19..33
2+
on x=-44..5,y=-27..21,z=-14..35
3+
on x=-49..-1,y=-11..42,z=-10..38
4+
on x=-20..34,y=-40..6,z=-44..1
5+
off x=26..39,y=40..50,z=-2..11
6+
on x=-41..5,y=-41..6,z=-36..8
7+
off x=-43..-33,y=-45..-28,z=7..25
8+
on x=-33..15,y=-32..19,z=-34..11
9+
off x=35..47,y=-46..-34,z=-11..5
10+
on x=-14..36,y=-6..44,z=-16..29
11+
on x=-57795..-6158,y=29564..72030,z=20435..90618
12+
on x=36731..105352,y=-21140..28532,z=16094..90401
13+
on x=30999..107136,y=-53464..15513,z=8553..71215
14+
on x=13528..83982,y=-99403..-27377,z=-24141..23996
15+
on x=-72682..-12347,y=18159..111354,z=7391..80950
16+
on x=-1060..80757,y=-65301..-20884,z=-103788..-16709
17+
on x=-83015..-9461,y=-72160..-8347,z=-81239..-26856
18+
on x=-52752..22273,y=-49450..9096,z=54442..119054
19+
on x=-29982..40483,y=-108474..-28371,z=-24328..38471
20+
on x=-4958..62750,y=40422..118853,z=-7672..65583
21+
on x=55694..108686,y=-43367..46958,z=-26781..48729
22+
on x=-98497..-18186,y=-63569..3412,z=1232..88485
23+
on x=-726..56291,y=-62629..13224,z=18033..85226
24+
on x=-110886..-34664,y=-81338..-8658,z=8914..63723
25+
on x=-55829..24974,y=-16897..54165,z=-121762..-28058
26+
on x=-65152..-11147,y=22489..91432,z=-58782..1780
27+
on x=-120100..-32970,y=-46592..27473,z=-11695..61039
28+
on x=-18631..37533,y=-124565..-50804,z=-35667..28308
29+
on x=-57817..18248,y=49321..117703,z=5745..55881
30+
on x=14781..98692,y=-1341..70827,z=15753..70151
31+
on x=-34419..55919,y=-19626..40991,z=39015..114138
32+
on x=-60785..11593,y=-56135..2999,z=-95368..-26915
33+
on x=-32178..58085,y=17647..101866,z=-91405..-8878
34+
on x=-53655..12091,y=50097..105568,z=-75335..-4862
35+
on x=-111166..-40997,y=-71714..2688,z=5609..50954
36+
on x=-16602..70118,y=-98693..-44401,z=5197..76897
37+
on x=16383..101554,y=4615..83635,z=-44907..18747
38+
off x=-95822..-15171,y=-19987..48940,z=10804..104439
39+
on x=-89813..-14614,y=16069..88491,z=-3297..45228
40+
on x=41075..99376,y=-20427..49978,z=-52012..13762
41+
on x=-21330..50085,y=-17944..62733,z=-112280..-30197
42+
on x=-16478..35915,y=36008..118594,z=-7885..47086
43+
off x=-98156..-27851,y=-49952..43171,z=-99005..-8456
44+
off x=2032..69770,y=-71013..4824,z=7471..94418
45+
on x=43670..120875,y=-42068..12382,z=-24787..38892
46+
off x=37514..111226,y=-45862..25743,z=-16714..54663
47+
off x=25699..97951,y=-30668..59918,z=-15349..69697
48+
off x=-44271..17935,y=-9516..60759,z=49131..112598
49+
on x=-61695..-5813,y=40978..94975,z=8655..80240
50+
off x=-101086..-9439,y=-7088..67543,z=33935..83858
51+
off x=18020..114017,y=-48931..32606,z=21474..89843
52+
off x=-77139..10506,y=-89994..-18797,z=-80..59318
53+
off x=8476..79288,y=-75520..11602,z=-96624..-24783
54+
on x=-47488..-1262,y=24338..100707,z=16292..72967
55+
off x=-84341..13987,y=2429..92914,z=-90671..-1318
56+
off x=-37810..49457,y=-71013..-7894,z=-105357..-13188
57+
off x=-27365..46395,y=31009..98017,z=15428..76570
58+
off x=-70369..-16548,y=22648..78696,z=-1892..86821
59+
on x=-53470..21291,y=-120233..-33476,z=-44150..38147
60+
off x=-93533..-4276,y=-16170..68771,z=-104985..-24507

2021/22/input.ans

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,2 @@
1+
607657
2+
1187742789778677

0 commit comments

Comments
 (0)