aboutsummaryrefslogtreecommitdiffstats
path: root/day22
diff options
context:
space:
mode:
Diffstat (limited to 'day22')
-rw-r--r--day22/input.txt420
-rw-r--r--day22/main.hs108
-rw-r--r--day22/test.txt4
3 files changed, 532 insertions, 0 deletions
diff --git a/day22/input.txt b/day22/input.txt
new file mode 100644
index 0000000..07f2160
--- /dev/null
+++ b/day22/input.txt
@@ -0,0 +1,420 @@
+on x=-44..5,y=-19..31,z=-15..33
+on x=-39..11,y=-17..30,z=-15..30
+on x=-42..10,y=-43..7,z=-4..40
+on x=-4..47,y=-8..45,z=-8..43
+on x=-18..28,y=-15..30,z=-36..12
+on x=-24..24,y=-33..14,z=-49..1
+on x=-14..30,y=-34..14,z=-27..24
+on x=-45..7,y=-6..43,z=-9..41
+on x=-16..37,y=-49..-5,z=-30..21
+on x=-10..42,y=-35..10,z=-43..11
+off x=7..17,y=-8..5,z=-30..-18
+on x=-49..3,y=-27..23,z=-44..1
+off x=10..23,y=-21..-10,z=-37..-19
+on x=-41..4,y=-11..41,z=-36..16
+off x=-6..4,y=40..49,z=12..30
+on x=-2..49,y=-43..3,z=-32..13
+off x=-44..-29,y=-8..6,z=1..17
+on x=-9..36,y=-7..43,z=-37..14
+off x=-1..12,y=-36..-23,z=28..47
+on x=-26..27,y=-45..3,z=-20..24
+on x=-87853..-63955,y=-14079..10797,z=16618..34667
+on x=-22600..-10441,y=-47268..-24491,z=-72641..-62383
+on x=-7793..18488,y=71672..78114,z=-44666..-18458
+on x=73..5701,y=-2494..28421,z=-89152..-65315
+on x=-37051..-30202,y=15342..24015,z=-77231..-62996
+on x=53246..70778,y=-62293..-47740,z=20277..41217
+on x=-14142..12389,y=62146..65958,z=-55683..-41913
+on x=-48728..-18398,y=8282..34289,z=-81114..-48336
+on x=-59177..-22673,y=-49858..-29386,z=-59127..-47368
+on x=-85434..-72245,y=13867..31427,z=-21594..-2631
+on x=-35402..-12325,y=-37452..-19185,z=-81697..-63051
+on x=61174..80227,y=-866..32461,z=-20053..-10077
+on x=-32647..-1711,y=-35706..-20854,z=-72604..-60376
+on x=59957..82200,y=-30164..2313,z=-30464..-19345
+on x=6801..22281,y=24570..51370,z=-81154..-67264
+on x=20369..39838,y=73729..88454,z=577..19763
+on x=29800..52019,y=29499..61971,z=48435..55070
+on x=28801..40411,y=-84420..-69983,z=-13267..2211
+on x=13549..40576,y=-47493..-31658,z=-71685..-40487
+on x=13137..24167,y=-66931..-49605,z=26517..54208
+on x=33284..48135,y=46431..67202,z=48616..59067
+on x=-56715..-26618,y=56864..79700,z=-25450..-654
+on x=-54074..-25399,y=-52684..-36578,z=35631..52148
+on x=37464..54023,y=-34067..-6521,z=-70559..-54490
+on x=-41089..-11111,y=-47478..-29133,z=60940..74315
+on x=-82774..-52991,y=-54204..-20897,z=23960..42825
+on x=30749..49712,y=35786..69307,z=37491..45758
+on x=-11491..14973,y=-93031..-58484,z=17353..44836
+on x=-57064..-20188,y=-63440..-37103,z=47342..70176
+on x=-27801..-375,y=30934..59690,z=45378..71236
+on x=61123..82155,y=-15850..-525,z=-53874..-32638
+on x=-16993..-2751,y=40182..64669,z=-62209..-45026
+on x=-82058..-51602,y=6298..30885,z=-39693..-17573
+on x=49260..58127,y=-59897..-48624,z=-30308..-16577
+on x=-56788..-40095,y=-25293..-14542,z=-68269..-53982
+on x=2505..5932,y=-47595..-22583,z=64838..84486
+on x=-53828..-37906,y=-72105..-58994,z=-4913..17377
+on x=5051..19306,y=77062..91570,z=-31347..-1735
+on x=-16847..-320,y=-93124..-64459,z=12444..33910
+on x=-45648..-18838,y=34175..55012,z=39079..55510
+on x=63218..83253,y=-23970..-4735,z=2800..11596
+on x=50244..76221,y=-50393..-33391,z=-17785..-7738
+on x=35816..43139,y=-73177..-43183,z=-41697..-13098
+on x=-66225..-48531,y=-36053..-16991,z=-48638..-26491
+on x=-20786..8663,y=28061..38714,z=-84899..-63223
+on x=59014..76501,y=10125..25324,z=-54183..-35850
+on x=-24243..-8597,y=-47135..-12076,z=62724..76012
+on x=-23347..7901,y=-81218..-55820,z=-60425..-30059
+on x=56319..71652,y=23428..36372,z=-51760..-40670
+on x=-13463..10312,y=78981..96298,z=-15494..17820
+on x=25458..54307,y=-35736..-28250,z=48784..77696
+on x=43259..63044,y=15682..26592,z=-71035..-52596
+on x=-29348..-4953,y=54062..67679,z=39619..65019
+on x=49369..63882,y=-39377..-21590,z=-53387..-47336
+on x=13595..25896,y=27751..59875,z=-78381..-44266
+on x=-62701..-44978,y=22333..30908,z=-54143..-42897
+on x=7977..25840,y=-82123..-71218,z=-16092..-696
+on x=72848..80580,y=-3963..7995,z=-14735..10441
+on x=69499..92382,y=-2662..28065,z=-42992..-17994
+on x=48475..68268,y=42740..64001,z=14503..39264
+on x=-49063..-33385,y=-58610..-30409,z=41056..71840
+on x=-59232..-33228,y=45184..76352,z=17766..31561
+on x=5959..26638,y=-9552..20815,z=75305..87615
+on x=47753..57971,y=42230..61946,z=-12647..-3804
+on x=-81759..-73203,y=4440..38862,z=-16003..-3110
+on x=-73980..-59456,y=-47097..-28017,z=-25117..7475
+on x=23176..38914,y=50432..59832,z=31931..54668
+on x=-71483..-48041,y=19572..30248,z=-40958..-32806
+on x=-37783..-21743,y=-87276..-58240,z=-21390..-1919
+on x=-18665..960,y=-5907..20986,z=66322..81301
+on x=5286..37737,y=50107..67657,z=-67474..-42701
+on x=31390..48914,y=-70366..-54470,z=-46904..-23117
+on x=-27683..-15749,y=-47749..-34632,z=-76712..-50928
+on x=-90781..-60103,y=-31150..-20145,z=-23382..5464
+on x=-44373..-33411,y=55729..68596,z=-34550..-16532
+on x=-1309..36490,y=-88067..-66282,z=-27329..-13890
+on x=-70563..-54927,y=2742..28284,z=-59814..-41321
+on x=36257..58977,y=52630..81787,z=-2016..28038
+on x=59652..83384,y=-3386..9206,z=-40944..-13798
+on x=-27792..6186,y=-47017..-27949,z=-75807..-45725
+on x=60095..91023,y=-26573..-21046,z=-13267..10809
+on x=-22369..-1689,y=-47418..-28289,z=-67790..-44667
+on x=-73998..-62782,y=-24350..-3753,z=-44689..-24202
+on x=-66355..-39116,y=26462..39518,z=44344..65908
+on x=-82304..-51017,y=17614..36432,z=18664..50639
+on x=-73956..-67827,y=18133..33852,z=-29108..-16920
+on x=-79701..-67912,y=-30890..-20859,z=-11116..782
+on x=60573..90823,y=-12009..12435,z=21040..48487
+on x=-42470..-30925,y=18977..50582,z=-66812..-55290
+on x=-44675..-19948,y=6997..36868,z=-76580..-55763
+on x=-40167..-9959,y=-86179..-65330,z=22876..50418
+on x=-14480..4184,y=-82281..-61373,z=-43344..-6589
+on x=49703..56170,y=-12257..-3969,z=43782..66373
+on x=37233..54010,y=-39264..-11480,z=-75787..-54270
+on x=-63691..-41496,y=33366..47400,z=49232..66379
+on x=-70135..-56354,y=-1294..17045,z=-54353..-30318
+on x=-55679..-39187,y=-55170..-20576,z=-45155..-43051
+on x=-68061..-60344,y=25128..55004,z=7484..41085
+on x=39435..74411,y=-36766..-16956,z=-53809..-45526
+on x=-17167..20391,y=13154..26529,z=75118..79685
+on x=4750..24509,y=-2467..5837,z=-91364..-68976
+on x=2296..23980,y=17845..29069,z=-78924..-67593
+on x=-56852..-50617,y=9111..31762,z=40896..66920
+on x=51868..71447,y=-10640..-4678,z=38788..67862
+on x=37269..48010,y=-14504..-2446,z=51306..77677
+on x=-78155..-61440,y=-2307..19061,z=-51692..-31851
+on x=4082..21602,y=23861..44734,z=-72214..-55404
+on x=-13005..1196,y=-94918..-62594,z=-26105..-7647
+on x=12636..18371,y=-39962..-24982,z=71314..86048
+on x=-59519..-38868,y=-32612..-26546,z=-52189..-29970
+on x=50992..58060,y=1867..3995,z=-66397..-51090
+on x=53023..64466,y=19765..49018,z=-47705..-32030
+on x=54103..89259,y=32208..49754,z=18193..26605
+on x=-54934..-44890,y=-32323..-24672,z=-57334..-43264
+on x=21882..38565,y=-62552..-28774,z=37405..74274
+on x=-14076..4166,y=-62802..-35587,z=-85575..-46763
+on x=71563..94673,y=-28357..-5555,z=-8340..-3008
+on x=-77691..-68006,y=16368..43879,z=6925..34881
+on x=-62254..-44823,y=27169..57538,z=-43398..-29411
+on x=-46115..-14147,y=23033..38605,z=-83660..-50766
+on x=-81156..-69203,y=-2037..30876,z=-27757..-16747
+on x=-64594..-49856,y=13230..41598,z=40946..48642
+on x=74552..85238,y=-35069..-1080,z=-10139..5411
+on x=48568..54268,y=15695..32917,z=-59194..-39272
+on x=40963..56399,y=-43896..-32533,z=42647..66233
+on x=-84712..-70637,y=-31823..-15214,z=5502..15753
+on x=-50262..-43765,y=32260..44792,z=-56119..-43527
+on x=-72959..-48790,y=-54165..-19818,z=21483..50707
+on x=-75423..-57594,y=-44010..-34218,z=9567..42582
+on x=46873..62215,y=-50840..-45150,z=3307..22080
+on x=-51898..-33291,y=64961..76592,z=-1697..24644
+on x=36342..50080,y=10355..34849,z=49771..76796
+on x=-38727..-19183,y=22725..44395,z=56999..71498
+on x=36920..68835,y=54496..74295,z=-578..22955
+on x=-18190..-1806,y=79546..83150,z=-5596..16167
+on x=-17085..4193,y=38116..44568,z=-83776..-59420
+on x=60290..90016,y=-15660..4859,z=24..15702
+on x=41898..73669,y=-29992..-11604,z=-69634..-37216
+on x=22950..35763,y=39591..50067,z=-58475..-54162
+on x=-83515..-76348,y=-24390..-7020,z=-5474..19494
+on x=-12605..-6764,y=-9487..13991,z=-90796..-71648
+on x=-84360..-56981,y=-6513..13663,z=10913..41809
+on x=21065..50872,y=-77756..-54255,z=-32228..-10856
+on x=-74731..-46649,y=-12397..8163,z=-61028..-48747
+on x=-1567..17284,y=-29126..-8128,z=-83490..-65343
+on x=23825..51820,y=-77978..-69264,z=-30297..474
+on x=-2005..18443,y=-43669..-25998,z=-72518..-63834
+on x=58982..72502,y=33029..35878,z=25466..40615
+on x=51296..78353,y=24960..56356,z=-8313..18469
+on x=-71399..-57843,y=-44261..-26742,z=22822..51410
+on x=29760..36648,y=-4801..-3279,z=-85583..-66484
+on x=40383..52091,y=42283..45005,z=-54444..-40795
+on x=-28387..-13539,y=-5317..16212,z=-80930..-76037
+on x=-42504..-32698,y=47026..63698,z=-43693..-30669
+on x=-3125..32733,y=-61870..-39243,z=50456..68159
+on x=9751..39005,y=10331..39830,z=64363..87555
+on x=-86870..-68141,y=8031..39962,z=6587..42477
+on x=-13099..12715,y=54037..72815,z=-53385..-32131
+on x=14021..25542,y=42130..71403,z=40910..60362
+on x=-6762..15002,y=-86093..-53378,z=31258..49920
+on x=-17592..3127,y=-62373..-33600,z=53759..74959
+on x=-89137..-56125,y=-35016..-8809,z=-30776..-5398
+on x=44586..47260,y=22806..48955,z=-75476..-43472
+on x=-40162..-24640,y=-57077..-35853,z=54246..71218
+on x=-54201..-46541,y=-34915..-14935,z=52466..78173
+on x=-6679..18857,y=45015..83502,z=-53804..-46675
+on x=-62937..-53572,y=-35813..-29206,z=30508..53149
+on x=-53689..-31763,y=-75022..-61400,z=-12035..7506
+on x=-24770..-7480,y=-70530..-33052,z=47004..67401
+on x=-64788..-42202,y=-34456..-14089,z=-58243..-36384
+on x=-41276..-16521,y=-57613..-37888,z=-69142..-40440
+on x=-25613..-2328,y=48311..67290,z=44223..57924
+on x=-90192..-58384,y=-12961..-7477,z=5935..23214
+on x=16121..48809,y=-60926..-51273,z=-43839..-30861
+on x=26638..60652,y=-44537..-30587,z=58405..71906
+on x=-66410..-36432,y=42454..70443,z=-23159..-10037
+on x=-71864..-54435,y=-36243..-23995,z=14596..34041
+on x=9052..28723,y=-77203..-70603,z=-31838..-18146
+on x=-4816..25036,y=61688..76240,z=21251..46199
+on x=61863..71834,y=-7068..7469,z=29122..46978
+on x=-53069..-22747,y=-61003..-50886,z=-41977..-36808
+on x=-66306..-36754,y=-45013..-22032,z=-44535..-24946
+on x=62478..87269,y=10773..28720,z=22334..42400
+on x=14448..43447,y=-90837..-63542,z=-24857..-11445
+on x=-6219..24505,y=2176..20741,z=65816..91491
+on x=-4504..16125,y=26649..38859,z=-75806..-66094
+on x=-7593..12762,y=10851..31680,z=75476..87589
+on x=-77806..-73411,y=-6826..6277,z=-35741..-6990
+on x=-16506..5646,y=-39393..-25156,z=-93753..-55332
+on x=-32247..1348,y=72630..91477,z=15827..32435
+on x=-19625..-6807,y=-67138..-42260,z=-72627..-49737
+on x=-53034..-25232,y=-36424..-7517,z=-81260..-66867
+on x=9597..27791,y=-44126..-18665,z=-77320..-64055
+on x=36930..61974,y=-53931..-23875,z=-56634..-50103
+on x=-80031..-64462,y=29885..46965,z=-25547..-6196
+on x=-66414..-43495,y=36573..62850,z=-24776..-6505
+on x=-25011..-9028,y=-69426..-56148,z=40533..73395
+on x=25534..46636,y=46058..52691,z=45249..72792
+on x=-7618..10902,y=17884..23097,z=66984..80601
+on x=-83176..-71251,y=-32175..-7710,z=-922..21556
+on x=29449..65515,y=-51110..-34476,z=34096..63188
+on x=-3631..24310,y=-20299..-15069,z=72984..92165
+off x=-50424..-41375,y=-72654..-44771,z=838..16943
+on x=3025..40907,y=-78511..-53856,z=42248..53660
+off x=-29442..-18169,y=33929..64130,z=58394..78342
+on x=62016..93099,y=-36239..-22606,z=-10475..12016
+off x=-81393..-49724,y=10305..34270,z=34305..51924
+off x=31937..42583,y=14977..40524,z=55574..83356
+off x=-72488..-54163,y=21000..44643,z=-45612..-27454
+off x=-93753..-69438,y=3271..31377,z=-16945..2818
+off x=13847..37017,y=35958..73486,z=47726..60893
+on x=-75263..-59456,y=36203..54394,z=-2931..20048
+off x=27162..44008,y=-59493..-34872,z=51686..75220
+off x=-73602..-38606,y=35904..52123,z=-42290..-18989
+off x=-73300..-45099,y=-10701..14399,z=-59463..-39706
+off x=-83528..-62414,y=1442..31990,z=39787..61495
+on x=-19227..1177,y=-81493..-56654,z=33563..39495
+off x=-70257..-52022,y=-44692..-24441,z=-30358..1873
+off x=-94684..-63304,y=-18953..-12160,z=-1247..15579
+on x=4516..21971,y=-26822..-8920,z=-92246..-59738
+on x=47592..59821,y=28110..44046,z=27804..52573
+on x=39539..58512,y=41354..52402,z=33137..45594
+on x=41004..62753,y=-62983..-58912,z=233..14053
+on x=43897..71120,y=2903..24584,z=47215..77087
+on x=-62187..-30271,y=-53081..-44707,z=-46266..-28266
+off x=46434..73444,y=-53205..-35815,z=-57794..-35076
+on x=-87521..-71461,y=-28669..-7399,z=-4329..4473
+off x=14524..33155,y=-74653..-59465,z=7788..40782
+off x=42666..81619,y=17492..36905,z=38287..62402
+on x=-8726..16759,y=-24348..-2024,z=-90211..-65111
+on x=49994..62962,y=2227..24922,z=41992..62455
+on x=30619..39110,y=44325..68006,z=29475..58157
+on x=52166..86859,y=-16051..-2288,z=-35893..-16028
+off x=-82950..-67164,y=-38616..-23530,z=2815..26199
+off x=15592..49678,y=-59501..-50916,z=-71638..-51719
+on x=-5599..2448,y=-4875..22375,z=63268..95230
+off x=-26144..-7146,y=30378..40422,z=54534..80457
+off x=-67364..-46592,y=-8423..11830,z=-62371..-57595
+off x=19562..40225,y=35029..49193,z=-72197..-56945
+off x=-64792..-35048,y=28984..33453,z=-64967..-42923
+on x=2826..26378,y=-85400..-49030,z=22072..48794
+on x=-3048..15987,y=23466..47779,z=60807..88012
+off x=-43613..-23923,y=-21725..13753,z=-74679..-71666
+on x=57515..73257,y=4463..19735,z=-55663..-40576
+off x=-71509..-36371,y=-44288..-32500,z=-58805..-43879
+off x=4058..10573,y=-90040..-74031,z=-11420..15283
+on x=11578..34158,y=43086..64864,z=48987..55683
+off x=-90937..-61197,y=-42619..-7059,z=-13526..6975
+on x=-47775..-35341,y=21796..40791,z=-74978..-54225
+on x=55459..86075,y=-33737..-10240,z=-38803..-31160
+on x=66900..95307,y=-658..33987,z=2578..31976
+on x=51781..62459,y=11954..37284,z=-55567..-29845
+on x=7564..38303,y=24656..45979,z=58307..72979
+off x=25925..40008,y=7133..29683,z=66022..81463
+off x=16087..31819,y=-49297..-18917,z=49254..81722
+on x=61816..77023,y=32302..50207,z=-26122..-13342
+on x=-16944..-551,y=27348..36381,z=51222..84114
+on x=-60896..-35718,y=-25770..-3198,z=-73389..-51938
+on x=53570..57442,y=-56748..-34158,z=28231..37748
+off x=12948..34050,y=-89722..-76481,z=5288..20288
+on x=4092..16941,y=33046..61784,z=62511..75003
+on x=-34294..-19056,y=40621..66504,z=50350..66716
+off x=-60552..-37543,y=25044..37455,z=-67217..-44428
+on x=-59672..-43404,y=-44998..-33041,z=24549..48963
+off x=11363..42189,y=-34219..-11130,z=65796..73487
+on x=-5878..3795,y=-82227..-65797,z=-55000..-37476
+off x=-44704..-16546,y=-53365..-29060,z=63096..82254
+off x=46835..59255,y=42974..52180,z=38447..52668
+on x=28649..53034,y=69128..86256,z=-27036..-4069
+on x=31797..51935,y=-70873..-40006,z=27113..55156
+on x=-16413..784,y=74995..86748,z=22251..36557
+off x=-51126..-19696,y=62556..79243,z=13535..24185
+on x=55195..69351,y=16387..17587,z=-68210..-51399
+off x=-12380..3805,y=-37523..-6086,z=-84246..-72810
+on x=-7904..10345,y=-43424..-9185,z=-81538..-63642
+on x=9595..28061,y=-57291..-53511,z=41104..58415
+on x=-22057..-8429,y=-74023..-50595,z=-53834..-25785
+off x=39543..72810,y=43357..57907,z=-4967..5825
+on x=25952..46891,y=-59512..-39577,z=-66604..-42237
+off x=-45845..-9503,y=21188..47233,z=-73595..-46458
+off x=-58705..-40574,y=40410..62602,z=37852..56809
+off x=42166..60256,y=15546..23665,z=-62954..-50742
+on x=-54920..-38787,y=-73440..-55858,z=-22924..-10148
+on x=-21604..70,y=-67168..-37800,z=-73842..-58943
+on x=44585..52863,y=-47677..-38099,z=32512..59378
+off x=-68847..-37762,y=-79749..-45298,z=-31814..-6826
+on x=65721..82686,y=32570..53560,z=-35607..-1198
+on x=-78244..-53156,y=5914..35587,z=34459..50180
+on x=-88381..-63342,y=13742..41912,z=-47591..-12686
+off x=39744..59977,y=38226..43544,z=34889..57448
+off x=67454..97825,y=-3852..18383,z=-27139..2873
+on x=-52994..-36607,y=-3822..8882,z=42832..75144
+off x=29703..50057,y=6444..44725,z=60091..61494
+off x=49384..69382,y=23037..31241,z=30044..58530
+on x=77544..93200,y=-18366..4222,z=-12443..9543
+on x=32444..48168,y=-80604..-46813,z=23017..35539
+on x=-54080..-41598,y=-75034..-61527,z=17545..24716
+on x=-41183..-15966,y=57318..88966,z=-13329..645
+off x=47462..69587,y=41234..55751,z=7512..26329
+off x=20009..45002,y=4144..8442,z=-86914..-66660
+off x=-73916..-62216,y=5685..32016,z=12725..39661
+on x=-14035..-6506,y=-83445..-75166,z=-1527..27655
+on x=-30238..-19986,y=-24777..-2077,z=-77292..-64543
+on x=64167..87115,y=-14177..14758,z=-10742..8450
+on x=25780..55516,y=-55330..-54111,z=-49841..-36268
+on x=-52479..-29315,y=20462..47890,z=-73960..-60169
+off x=-76016..-57381,y=19112..40178,z=548..19861
+off x=-8311..28174,y=35103..47065,z=55844..85226
+on x=47293..59980,y=-45343..-28831,z=-44151..-25784
+off x=519..30306,y=62364..90147,z=-39751..-13511
+on x=-80316..-68742,y=708..27017,z=3955..23948
+off x=-70769..-49823,y=38737..57694,z=-7758..18891
+on x=48446..72061,y=33800..62229,z=13535..45267
+on x=-16168..2997,y=-22975..-8077,z=66199..85132
+on x=-64980..-35565,y=-66241..-53278,z=-7348..-3672
+on x=-91717..-65980,y=-44249..-12365,z=-10984..8372
+off x=35322..39858,y=-27123..-8496,z=-77757..-48994
+on x=-3930..26786,y=7461..23065,z=72518..91768
+off x=-10532..-7074,y=-11464..-3902,z=-89986..-72527
+on x=53629..81615,y=-60075..-45846,z=-12320..14928
+off x=-83656..-68996,y=-18080..13189,z=-29337..-11467
+on x=-46774..-28700,y=-23827..-6270,z=54246..76853
+on x=-41689..-29588,y=-38149..-13551,z=64995..75004
+on x=15365..46478,y=-84175..-57499,z=-26982..-18015
+on x=8773..29446,y=4874..31204,z=-76125..-63650
+off x=60322..94998,y=-27912..-3665,z=11178..26231
+on x=19730..29512,y=64835..89598,z=-15849..-1111
+off x=63457..87596,y=-8272..9336,z=-8510..14156
+on x=36965..68511,y=-65996..-38254,z=-37353..-20861
+off x=2138..11555,y=5930..21645,z=76602..92006
+off x=69350..83044,y=-1970..18069,z=-34741..-436
+on x=-25153..-8758,y=-26143..-17681,z=67900..79657
+off x=53321..63311,y=55770..63844,z=-6768..8042
+off x=51015..78137,y=-33031..-8895,z=-61391..-32324
+on x=-79490..-58269,y=31453..57687,z=-11468..21464
+on x=-3275..13773,y=-60815..-44132,z=-65158..-49441
+on x=-68779..-46445,y=34511..50996,z=11030..50059
+off x=-8177..9317,y=-24563..-19731,z=-90510..-57472
+off x=48390..66333,y=9511..33396,z=-64098..-38743
+on x=26868..41962,y=-25709..-9549,z=-81852..-64083
+off x=40254..56776,y=3315..23418,z=44927..57319
+off x=-38532..-18812,y=-34537..-3999,z=67871..72424
+on x=-80451..-54109,y=8141..28630,z=40649..48488
+off x=-41866..-33082,y=48481..67972,z=34669..38558
+on x=1985..11485,y=-5625..16920,z=-83211..-61053
+on x=-50296..-25997,y=-50861..-39499,z=-65512..-50437
+on x=-76530..-46217,y=36628..58187,z=14709..31320
+off x=-36064..-11086,y=61197..84224,z=-23954..8344
+on x=-20066..-13478,y=62687..90046,z=-44287..-15529
+on x=-37373..-11863,y=-76819..-55289,z=12018..28023
+off x=54893..70941,y=6313..31555,z=42682..63276
+off x=71444..90185,y=-19742..-5636,z=-48222..-17689
+off x=-14573..7088,y=73450..80278,z=-26894..-20381
+on x=-63000..-52387,y=33041..69197,z=-25867..-1432
+off x=-27022..-20859,y=69040..75320,z=-17231..5175
+on x=-19675..-10057,y=6582..22912,z=-94740..-73605
+on x=-60861..-29005,y=-54918..-22947,z=47523..63863
+on x=39472..51894,y=45318..61684,z=6788..38771
+off x=-55953..-40048,y=-59964..-45678,z=17400..37433
+off x=-73856..-61903,y=29214..41492,z=-4021..14451
+on x=-5749..21764,y=70076..88432,z=15120..37797
+off x=-77673..-56604,y=-68356..-48827,z=-15377..-3043
+off x=50082..86960,y=10169..33250,z=-44586..-26970
+off x=44499..52189,y=-19697..-760,z=52574..68835
+on x=10922..32585,y=-72130..-55088,z=-44965..-19204
+off x=-9238..16630,y=57174..87938,z=-50830..-23199
+off x=19787..51570,y=30181..54089,z=53955..68032
+on x=-85972..-64552,y=-26460..-7515,z=-2073..20090
+on x=2449..30075,y=50071..72688,z=-46982..-43059
+off x=-52224..-35101,y=12040..27039,z=57095..68801
+on x=-52590..-20949,y=63328..67968,z=20767..40966
+off x=-7170..16103,y=-45147..-39116,z=54536..68891
+on x=-43865..-21841,y=16142..32004,z=-79917..-62289
+on x=-33415..-17146,y=11743..48210,z=52933..77317
+off x=26648..53644,y=9918..29253,z=-84770..-63255
+off x=-25080..-17950,y=-46679..-19928,z=60760..87410
+on x=28049..53541,y=32306..58979,z=32761..48445
+on x=-15099..19253,y=-51961..-27400,z=-78713..-62878
+off x=5435..29239,y=-82008..-74434,z=-25893..-5850
+on x=-84963..-58158,y=31674..43258,z=-20003..886
+off x=-56694..-44118,y=22049..31804,z=48676..56434
+on x=59174..61663,y=-61770..-27812,z=10113..42440
+off x=34585..61402,y=34615..61628,z=-34172..-13772
+off x=-81862..-53602,y=45469..58334,z=-25538..1498
+on x=-34692..-20244,y=-35779..-11661,z=-78349..-57042
+on x=-67354..-46237,y=15178..48955,z=-64336..-47149
+off x=9659..35954,y=-14803..1942,z=-92105..-70797
+on x=-50655..-24121,y=52828..57401,z=40182..48460
+off x=51557..75536,y=-50906..-42455,z=-1724..17091
+off x=-21560..5780,y=56640..95726,z=10768..39375
+off x=6098..35818,y=-68926..-41836,z=38622..61618
+on x=-11245..8010,y=54297..85302,z=18748..48445
+on x=48474..77047,y=17887..37948,z=33470..46973
+off x=66358..89307,y=-141..8414,z=-46824..-19030
+on x=-516..19961,y=60846..83692,z=7191..24993
+off x=-40080..-11830,y=-6526..24432,z=56923..92614
+on x=-71762..-54288,y=-30785..-3150,z=29701..47370
+off x=-82694..-66540,y=-33056..-10908,z=-42820..-19656
+on x=27229..53914,y=44050..57314,z=44689..70835
+on x=4204..33386,y=59417..88203,z=18434..23931
diff --git a/day22/main.hs b/day22/main.hs
new file mode 100644
index 0000000..10feed9
--- /dev/null
+++ b/day22/main.hs
@@ -0,0 +1,108 @@
+-- Mostly plagiarized from https://github.com/sndels/aoc21 since 3D is hard
+module Main where
+
+import Data.Foldable (Foldable (foldl'), find)
+import Data.Maybe (isJust, mapMaybe)
+import Data.Set (Set)
+import qualified Data.Set as S
+import Debug.Trace (traceShow)
+import Utils
+
+type Point = (Int, Int, Int)
+
+data Cuboid = Cuboid Point Point
+
+data StepOp = StepOn | StepOff
+
+data Step = Step StepOp Cuboid
+
+parseStep :: String -> Step
+parseStep str =
+ let [cmd, rangeStr] = words str
+ ((x, y, z), (x', y', z')) =
+ splitOn (== ',') rangeStr
+ $> map (drop 2 .> splitOn (== '.') .> filter (not . null))
+ .> (\[[x, x'], [y, y'], [z, z']] -> ((read x, read y, read z), (read x', read y', read z')))
+ in case cmd of
+ "on" -> Step StepOn (Cuboid (x, y, z) (x', y', z'))
+ "off" -> Step StepOff (Cuboid (x, y, z) (x', y', z'))
+ other -> error $ "invalid cmd: " ++ other
+
+mini :: Point -> Point -> Point
+mini (x0, y0, z0) (x1, y1, z1) = (min x0 x1, min y0 y1, min z0 z1)
+
+maxi :: Point -> Point -> Point
+maxi (x0, y0, z0) (x1, y1, z1) = (max x0 x1, max y0 y1, max z0 z1)
+
+(<=!) :: Point -> Point -> Bool
+(x0, y0, z0) <=! (x1, y1, z1) = x0 <= x1 && y0 <= y1 && z0 <= z1
+
+volume :: Cuboid -> Int
+volume (Cuboid (minX, minY, minZ) (maxX, maxY, maxZ)) =
+ (maxX - minX + 1) * (maxY - minY + 1) * (maxZ - minZ + 1)
+
+cuboidContains :: Cuboid -> Cuboid -> Bool
+cuboidContains (Cuboid c0Min c0Max) (Cuboid c1Min c1Max) = c0Min <=! c1Min && c1Max <=! c0Max
+
+cuboidIntersection :: Cuboid -> Cuboid -> Maybe Cuboid
+cuboidIntersection c0 c1 = if minC <=! maxC then Just (Cuboid minC maxC) else Nothing
+ where
+ maxC = mini c0Max c1Max
+ minC = maxi c0Min c1Min
+ (Cuboid c0Min c0Max) = c0
+ (Cuboid c1Min c1Max) = c1
+
+intersects :: Cuboid -> Cuboid -> Bool
+intersects c0 c1 = isJust $ cuboidIntersection c0 c1
+
+diffPart c0@(Cuboid c0Min@(c0MinX, c0MinY, c0MinZ) c0Max@(c0MaxX, c0MaxY, c0MaxZ)) c1@(Cuboid c1Min@(c1MinX, c1MinY, c1MinZ) c1Max@(c1MaxX, c1MaxY, c1MaxZ))
+ | c0MinX < c1MinX =
+ Cuboid c0Min (c1MinX - 1, c0MaxY, c0MaxZ) :
+ diffPart (Cuboid (c1MinX, c0MinY, c0MinZ) c0Max) c1
+ | c0MinY < c1MinY =
+ Cuboid c0Min (c0MaxX, c1MinY - 1, c0MaxZ) :
+ diffPart (Cuboid (c0MinX, c1MinY, c0MinZ) c0Max) c1
+ | c0MinZ < c1MinZ =
+ Cuboid c0Min (c0MaxX, c0MaxY, c1MinZ - 1) :
+ diffPart (Cuboid (c0MinX, c0MinY, c1MinZ) c0Max) c1
+ | c0MaxX > c1MaxX =
+ Cuboid (c1MaxX + 1, c0MinY, c0MinZ) c0Max :
+ diffPart (Cuboid c0Min (c1MaxX, c0MaxY, c0MaxZ)) c1
+ | c0MaxY > c1MaxY =
+ Cuboid (c0MinX, c1MaxY + 1, c0MinZ) c0Max :
+ diffPart (Cuboid c0Min (c0MaxX, c1MaxY, c0MaxZ)) c1
+ | c0MaxZ > c1MaxZ =
+ Cuboid (c0MinX, c0MinY, c1MaxZ + 1) c0Max :
+ diffPart (Cuboid c0Min (c0MaxX, c0MaxY, c1MaxZ)) c1
+ | otherwise = []
+
+cuboidDifference :: Cuboid -> Cuboid -> [Cuboid]
+cuboidDifference c0 c1 =
+ if intersects c0 c1
+ then
+ if cuboidContains c1 c0
+ then []
+ else diffPart c0 c1
+ else [c0]
+
+doStep :: [Cuboid] -> Step -> [Cuboid]
+doStep cuboids (Step op cuboid)
+ | null cuboids = case op of
+ StepOn -> [cuboid]
+ StepOff -> []
+ | otherwise = case op of
+ StepOn -> cuboids ++ foldl' (\cs c -> concatMap (`cuboidDifference` c) cs) [cuboid] cuboids
+ StepOff -> concatMap (`cuboidDifference` cuboid) cuboids
+
+main :: IO ()
+main = do
+ contents <- getContents
+ let rows = lines contents
+ let steps = rows $> map parseStep
+ let result1Cuboids =
+ steps
+ $> filter (\(Step _ cuboid) -> cuboidIntersection (Cuboid (-50, -50, -50) (50, 50, 50)) cuboid $> isJust)
+ .> foldl' doStep []
+ let result2Cuboids = foldl' doStep [] steps
+ result1Cuboids $> map volume .> sum .> print
+ result2Cuboids $> map volume .> sum .> print
diff --git a/day22/test.txt b/day22/test.txt
new file mode 100644
index 0000000..25975df
--- /dev/null
+++ b/day22/test.txt
@@ -0,0 +1,4 @@
+on x=10..12,y=10..12,z=10..12
+on x=11..13,y=11..13,z=11..13
+off x=9..11,y=9..11,z=9..11
+on x=10..10,y=10..10,z=10..10