From 7b93f6899397d9a8841e33470c79525c1ad9027c Mon Sep 17 00:00:00 2001 From: Irene Knapp Date: Wed, 22 Dec 2021 03:13:06 -0800 Subject: 22 --- 22/Cargo.toml | 11 ++ 22/input | 420 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 22/small | 136 ++++++++++++++++++ 22/src/main.rs | 293 ++++++++++++++++++++++++++++++++++++++ 22/tests/main.rs | 17 +++ Cargo.lock | 8 ++ Cargo.toml | 1 + 7 files changed, 886 insertions(+) create mode 100644 22/Cargo.toml create mode 100644 22/input create mode 100644 22/small create mode 100644 22/src/main.rs create mode 100644 22/tests/main.rs diff --git a/22/Cargo.toml b/22/Cargo.toml new file mode 100644 index 0000000..f3441a0 --- /dev/null +++ b/22/Cargo.toml @@ -0,0 +1,11 @@ +[package] +name = "advent_22" +version = "0.1.0" +authors = ["Irene Knapp "] +edition = "2018" + +[dependencies] +advent_lib = { path = "../lib" } + +[dev-dependencies] +assert_cmd = "0.10" diff --git a/22/input b/22/input new file mode 100644 index 0000000..4493584 --- /dev/null +++ b/22/input @@ -0,0 +1,420 @@ +on x=-25..19,y=-17..32,z=-18..27 +on x=-16..34,y=-36..15,z=-4..44 +on x=-18..33,y=-44..10,z=-1..48 +on x=-10..44,y=-24..25,z=-45..3 +on x=-49..-2,y=-44..3,z=-35..11 +on x=-5..42,y=-48..1,z=-15..35 +on x=-26..27,y=-4..49,z=-8..44 +on x=-47..-1,y=-40..6,z=-11..40 +on x=-41..12,y=-41..9,z=-12..38 +on x=-49..4,y=-27..18,z=-12..38 +off x=11..25,y=1..10,z=-6..7 +on x=-33..17,y=-22..29,z=-8..37 +off x=-39..-27,y=11..24,z=-16..-1 +on x=-28..18,y=-39..6,z=-39..13 +off x=27..41,y=-23..-10,z=35..44 +on x=-4..40,y=1..45,z=-21..25 +off x=36..49,y=16..33,z=-47..-31 +on x=-42..5,y=-43..8,z=-35..14 +off x=-39..-22,y=20..29,z=19..30 +on x=-10..34,y=-45..5,z=-30..16 +on x=58130..74792,y=4830..35228,z=39318..63561 +on x=-40466..-17822,y=-77868..-64431,z=-3886..11187 +on x=-19073..-1463,y=65422..82885,z=23304..43978 +on x=46738..71241,y=39352..59200,z=-5917..-3830 +on x=-19010..13307,y=-96005..-74582,z=-19665..-2574 +on x=-60112..-47300,y=-46572..-26967,z=-59253..-29957 +on x=-66448..-41722,y=35529..57095,z=24647..44817 +on x=-32187..-7009,y=-58802..-52885,z=-59593..-37103 +on x=-90935..-64508,y=15951..29237,z=7318..29845 +on x=7010..16589,y=65579..81354,z=-39391..-8720 +on x=38716..51593,y=-22916..9050,z=51191..72341 +on x=41708..72592,y=21789..55040,z=16830..37085 +on x=-86698..-50596,y=-14192..-2839,z=35619..46625 +on x=-46830..-27930,y=-81448..-59759,z=-6028..21764 +on x=-44016..-36639,y=-61840..-28937,z=36509..67942 +on x=13310..31955,y=-68626..-49294,z=-46784..-39318 +on x=38860..64742,y=38732..58725,z=-43510..-29002 +on x=-90461..-67594,y=-53950..-29966,z=-9548..3630 +on x=-67554..-57558,y=-54779..-44189,z=21159..31677 +on x=3757..32872,y=-80070..-60915,z=5277..16947 +on x=-72838..-48066,y=-5015..17491,z=25977..48301 +on x=23477..41778,y=15763..42256,z=-82192..-56024 +on x=52710..75131,y=-29088..-1205,z=-41381..-37580 +on x=38409..57853,y=-50857..-31314,z=-59158..-52612 +on x=-80116..-48960,y=-39594..-13419,z=-45425..-15108 +on x=65797..83032,y=-51087..-29660,z=-23996..1975 +on x=53353..80001,y=12347..28197,z=-23588..-1312 +on x=-71662..-65247,y=-53225..-30719,z=-9866..11030 +on x=49873..73770,y=-48745..-15568,z=28177..52885 +on x=69904..79221,y=26365..47073,z=-29095..-16378 +on x=70750..92569,y=-22117..-3579,z=-16440..-10396 +on x=58085..80322,y=28177..67663,z=9272..17316 +on x=9120..29041,y=35569..52486,z=49397..69227 +on x=7148..32565,y=-88490..-60413,z=-4685..13676 +on x=-4357..13624,y=57740..73053,z=-66175..-35343 +on x=-72404..-50117,y=-18666..17680,z=-52896..-39914 +on x=-9567..9523,y=-15111..8108,z=-90208..-79702 +on x=-10948..12900,y=-92952..-61380,z=8585..35744 +on x=-39691..-33001,y=-481..16835,z=-85521..-64353 +on x=-41700..-38162,y=58196..66356,z=-54670..-34351 +on x=-41782..-26325,y=30554..48802,z=43336..61539 +on x=7603..24698,y=-58399..-42038,z=-54977..-50149 +on x=-74963..-67013,y=-38190..-18104,z=-48442..-23429 +on x=-63905..-48685,y=46845..71472,z=-18004..2350 +on x=14437..49543,y=-62065..-41585,z=-49774..-37768 +on x=-5517..15643,y=-16972..20782,z=60593..96969 +on x=-92280..-58006,y=7885..39177,z=449..35282 +on x=-4290..17666,y=-90595..-63406,z=8750..23433 +on x=6979..28454,y=-22944..-3734,z=-77888..-74927 +on x=24287..50795,y=-68103..-32134,z=46841..62225 +on x=-18963..-7266,y=-68315..-53968,z=-67632..-35819 +on x=-29535..-12178,y=67827..82507,z=-29427..-28303 +on x=-15190..10688,y=62804..80708,z=37673..50924 +on x=51637..82062,y=-23425..-13849,z=25263..44367 +on x=-57999..-42079,y=-61465..-54845,z=7054..41290 +on x=61972..71946,y=-6088..14399,z=39883..57439 +on x=47066..73652,y=3289..26576,z=39216..58947 +on x=-82190..-50896,y=14389..24693,z=27922..44002 +on x=24953..52534,y=-73272..-59039,z=-19032..-8246 +on x=3134..24046,y=31174..51696,z=-66891..-61000 +on x=-79297..-65977,y=10686..30665,z=-19492..-8395 +on x=18022..42598,y=-23168..-4267,z=57820..78601 +on x=61665..84231,y=-19314..2438,z=1604..18531 +on x=-21091..-7592,y=-3117..7700,z=-78569..-65004 +on x=62684..81399,y=-35984..-5816,z=14750..34173 +on x=-26998..-6601,y=-5986..14501,z=77097..95680 +on x=-72600..-53340,y=-38496..-21227,z=-62500..-45403 +on x=31773..45502,y=-11640..4290,z=-75810..-59658 +on x=-80495..-43424,y=28216..47742,z=-46020..-19497 +on x=33917..56972,y=-71159..-50513,z=33699..53033 +on x=-4895..18133,y=-93735..-60850,z=-26226..-16640 +on x=-28630..-5186,y=-37588..-29317,z=56086..73887 +on x=-31062..-21579,y=33327..60798,z=49401..73175 +on x=-10957..1264,y=-47922..-25717,z=56267..76856 +on x=-26519..-19291,y=-80269..-58812,z=4739..21059 +on x=-73392..-68495,y=-53325..-36377,z=-22576..-10983 +on x=-57251..-42571,y=-55067..-50711,z=21956..28445 +on x=-21760..3615,y=-30637..-8269,z=-92600..-72783 +on x=-78712..-68343,y=-35631..-8253,z=-49432..-32291 +on x=-98297..-62132,y=-10182..17937,z=-21663..-2939 +on x=-49619..-20903,y=-81950..-49731,z=14331..36557 +on x=-77719..-54696,y=-4933..5387,z=-54375..-38489 +on x=18952..30044,y=-5948..8556,z=71419..79100 +on x=-14443..6073,y=9664..24826,z=65287..92698 +on x=19757..49423,y=9775..23431,z=53476..87732 +on x=-390..13958,y=78578..83672,z=-14643..5068 +on x=-17569..1231,y=-52196..-24285,z=66712..88356 +on x=22102..26555,y=-77462..-58381,z=22142..32757 +on x=22592..52007,y=29247..32200,z=54297..72364 +on x=-77059..-51695,y=-30316..-16003,z=25367..39748 +on x=42986..64693,y=35661..68372,z=-29918..-11953 +on x=-34041..-4237,y=-88022..-67620,z=-26207..-3610 +on x=-49834..-37233,y=-59504..-34261,z=34131..66365 +on x=65349..94319,y=-19835..-6545,z=-24667..-708 +on x=13050..44190,y=5167..32154,z=-89339..-58446 +on x=45597..62970,y=-9451..11044,z=-56915..-40832 +on x=-9732..11852,y=9820..30333,z=-92396..-67585 +on x=38976..54998,y=-22749..1348,z=51283..63636 +on x=73378..96435,y=-12058..18745,z=-30246..-4493 +on x=-89828..-69363,y=10042..23961,z=12175..29039 +on x=2941..12201,y=-78520..-66567,z=-26924..-14825 +on x=-68528..-60099,y=9887..25885,z=29052..59211 +on x=9315..24935,y=-88183..-57281,z=-15962..21546 +on x=-85263..-72812,y=-34542..-23564,z=-24492..-5477 +on x=-95590..-58694,y=15268..16414,z=-20338..12400 +on x=47161..61390,y=-51497..-46140,z=-54082..-41603 +on x=-24948..-860,y=65273..85686,z=3751..18779 +on x=-74872..-70466,y=-10445..20449,z=-42187..-23559 +on x=15395..36309,y=51601..79496,z=-55445..-38989 +on x=-6788..-2487,y=-88523..-71818,z=-38861..-15152 +on x=-81443..-68997,y=4713..18849,z=-2294..25453 +on x=-27684..-12475,y=-78207..-52418,z=24610..51493 +on x=-45965..-22263,y=18486..35080,z=52396..77570 +on x=-16449..-6272,y=-81117..-56749,z=-35606..-21607 +on x=10951..31839,y=55087..74608,z=-47000..-28178 +on x=-84540..-51147,y=28945..62947,z=-4032..18597 +on x=36357..50129,y=16893..23034,z=64171..74913 +on x=-3998..20566,y=59440..93316,z=22696..25488 +on x=-54915..-23612,y=-68560..-45524,z=-58054..-37867 +on x=-35598..-25037,y=-43854..-18452,z=54139..77736 +on x=-64988..-54266,y=-48957..-21857,z=28252..32986 +on x=-95466..-72491,y=-36404..-11874,z=-4259..8571 +on x=-81482..-72858,y=4863..36596,z=3393..17002 +on x=-14906..-9140,y=75824..91655,z=14158..31682 +on x=-56168..-38184,y=68009..72189,z=1057..5047 +on x=-89689..-62813,y=-13369..18363,z=9600..42828 +on x=-51440..-32934,y=31208..42008,z=-68421..-53583 +on x=-6288..16856,y=-42060..-29202,z=68124..80036 +on x=-83895..-61949,y=3336..25725,z=9552..19154 +on x=-61288..-51950,y=-55736..-44850,z=-1436..30098 +on x=-23437..-115,y=-48046..-32435,z=59063..81720 +on x=-85940..-65530,y=2023..13769,z=12538..35840 +on x=-17034..642,y=72777..94279,z=4086..24430 +on x=-29254..-7953,y=-92196..-72024,z=5829..40481 +on x=19780..33000,y=42445..63200,z=-53200..-41275 +on x=-12441..16072,y=18286..40034,z=68730..94707 +on x=-16418..4994,y=-26517..6769,z=72160..92524 +on x=-19492..1556,y=47218..72884,z=-67974..-48038 +on x=26010..60405,y=-79985..-56817,z=-10117..20209 +on x=55184..79442,y=-35184..-11981,z=27930..47203 +on x=-44505..-14453,y=69915..76169,z=-36486..-15678 +on x=47765..71553,y=-16894..8462,z=-77595..-43228 +on x=20787..35894,y=41719..63073,z=-71757..-51052 +on x=1043..34518,y=-80401..-65743,z=-12161..22280 +on x=-6882..20242,y=27697..41680,z=55075..91076 +on x=35532..49684,y=65792..80184,z=-17848..6540 +on x=58693..84924,y=15648..25639,z=-45401..-19689 +on x=-85098..-78038,y=-10846..-134,z=-5850..15444 +on x=-2730..12605,y=12851..43889,z=67815..81883 +on x=-29043..-9448,y=48093..78524,z=50467..63696 +on x=-38250..-17112,y=1181..30921,z=67073..85611 +on x=18694..45770,y=-63824..-33467,z=-65348..-32736 +on x=-48050..-12127,y=-36602..-23731,z=64057..84572 +on x=-92730..-66419,y=-15873..4455,z=-37327..-8638 +on x=-77520..-47498,y=-31489..-17959,z=38570..55019 +on x=-35101..-28002,y=-81178..-65021,z=-43410..-13765 +on x=-81154..-45690,y=3545..24492,z=-44708..-26663 +on x=-4366..11895,y=64672..90379,z=30279..50474 +on x=2570..35120,y=-72500..-66047,z=-48806..-29387 +on x=-17836..3311,y=-37959..-15427,z=58018..83171 +on x=-41222..-23220,y=-83264..-48361,z=-28535..-9809 +on x=-32657..-6854,y=-63857..-33169,z=50784..74629 +on x=31759..58009,y=58130..81062,z=-12947..19610 +on x=-77910..-70462,y=-25392..-8935,z=21699..28460 +on x=-74375..-69543,y=-39903..-11033,z=556..12066 +on x=-96260..-69319,y=-13239..15749,z=-5861..32245 +on x=-89059..-57112,y=-29085..-10293,z=4791..37832 +on x=-53908..-32723,y=41908..48893,z=43394..62135 +on x=-56878..-35991,y=-16413..16902,z=49630..72926 +on x=-23547..5628,y=62602..94384,z=-21369..6727 +on x=-53850..-37537,y=-13642..4380,z=52105..72940 +on x=31257..52545,y=-52332..-26349,z=42207..66321 +on x=2684..30781,y=28321..51558,z=-64015..-48974 +on x=-3053..917,y=60451..96694,z=5038..23673 +on x=-8930..1238,y=-80903..-64783,z=23996..37917 +on x=32035..39229,y=-63892..-44117,z=-54484..-29812 +on x=-19633..5010,y=70766..81566,z=257..11177 +on x=2204..32041,y=-13135..1289,z=58814..96086 +on x=32579..57092,y=50782..69021,z=16603..44417 +on x=24380..52350,y=-74864..-64943,z=16359..37394 +on x=5080..16681,y=34283..58295,z=-71141..-48408 +on x=65497..86700,y=-43687..-21647,z=-29471..-22694 +on x=-78966..-55978,y=-51271..-18249,z=7472..26951 +on x=-3302..20676,y=-99123..-73526,z=-4992..26620 +on x=-4361..21592,y=-63639..-52408,z=-61167..-52807 +on x=12881..29105,y=55833..65015,z=25636..50553 +on x=-22870..7514,y=44949..67069,z=-68698..-54147 +on x=4489..23016,y=46700..73193,z=42992..54291 +on x=33906..55000,y=-84469..-54728,z=-27445..-3981 +on x=-4535..23944,y=29291..58817,z=50920..67512 +on x=74404..93376,y=-28674..-4357,z=1529..21378 +on x=-42096..-39330,y=53218..68450,z=21313..49413 +on x=-79424..-46791,y=8607..30438,z=-46626..-37391 +on x=-77257..-57467,y=8975..41058,z=31151..63104 +on x=-36397..-6018,y=65533..81964,z=8100..27782 +on x=1772..13114,y=-45452..-24542,z=51315..72370 +on x=-56414..-43858,y=-15760..-1511,z=53056..65252 +on x=5178..19230,y=66264..77905,z=-37387..-20995 +on x=-44447..-28857,y=-7474..1043,z=-79436..-63272 +on x=31312..61933,y=45570..59005,z=-50556..-35448 +on x=-54070..-25768,y=-49818..-25232,z=-61393..-41248 +off x=-23531..-8752,y=-12082..15447,z=-98148..-77085 +off x=-26458..-11303,y=-14757..19158,z=-84941..-70774 +off x=67054..69860,y=10769..36987,z=-48226..-15571 +on x=48596..79742,y=43523..54624,z=1937..19705 +on x=21840..45194,y=-88151..-63952,z=23272..43757 +off x=-56180..-30105,y=-23034..-10177,z=45362..82434 +off x=-30367..-12221,y=-56677..-45797,z=41015..77005 +off x=3957..24789,y=-33453..-16504,z=75407..93827 +on x=16677..53031,y=-81001..-63422,z=-26709..5644 +on x=3897..26268,y=-80809..-58412,z=-53456..-31096 +off x=-53935..-34004,y=-64717..-30773,z=-63167..-51325 +on x=-51734..-42462,y=-31476..-29266,z=42510..61608 +on x=41714..67356,y=-56338..-39534,z=-57329..-34656 +on x=-29703..102,y=-48375..-32386,z=50956..78822 +off x=18805..29389,y=55214..61118,z=-54668..-36938 +off x=-43634..-27449,y=-44154..-40158,z=-64794..-39780 +off x=26340..46631,y=32695..56730,z=-72694..-49637 +on x=-67221..-33213,y=42396..68108,z=6296..35814 +off x=47145..74448,y=16794..27177,z=-53775..-38461 +off x=-71161..-35857,y=11495..38517,z=-69460..-49322 +off x=-51569..-34369,y=-57058..-40466,z=-48249..-35893 +on x=76969..94122,y=-9622..4260,z=-11777..9827 +off x=-25468..-9830,y=-89766..-62827,z=-23077..3267 +on x=-34914..-16785,y=43235..66914,z=47390..70799 +on x=-43047..-25405,y=29640..46573,z=58243..79904 +on x=-65414..-55209,y=30985..66345,z=-40780..-23211 +on x=-56019..-47580,y=2182..7294,z=48708..59721 +on x=30197..41111,y=54185..76003,z=-45138..-33569 +off x=30206..46343,y=-48504..-25452,z=-64948..-61437 +off x=46610..52577,y=-53600..-35507,z=36685..63416 +on x=-67663..-48131,y=-9151..14784,z=-65365..-50610 +on x=-84458..-60979,y=2763..20965,z=-50046..-31834 +off x=44885..70482,y=22096..53275,z=-47233..-35548 +off x=33735..54437,y=-64543..-50572,z=18089..42914 +on x=49649..55370,y=-59126..-51117,z=15176..38972 +on x=34525..49133,y=-74322..-51979,z=6510..45365 +off x=-67081..-43347,y=-16984..-2265,z=-54556..-44149 +on x=-18962..6882,y=-21555..-1276,z=-79408..-74695 +on x=-85431..-67417,y=20207..37574,z=-24683..1131 +on x=-87398..-57912,y=-46757..-20616,z=-1696..35333 +off x=-38761..-24011,y=56096..77032,z=-8538..7289 +off x=66762..83683,y=-26879..-2102,z=13838..46715 +on x=47061..74282,y=49221..66218,z=4113..26350 +on x=4777..21230,y=-33897..-5656,z=-87420..-71323 +on x=30099..57071,y=-21885..5161,z=-79787..-52376 +off x=-44596..-31390,y=-46512..-37910,z=-62932..-56097 +off x=-14054..12636,y=-31346..-16168,z=67008..87013 +on x=30408..66968,y=23194..37084,z=-69204..-39793 +on x=22564..36076,y=-37139..-18687,z=50359..66811 +on x=-61861..-46587,y=28526..48242,z=-32086..-24184 +on x=-82280..-50593,y=2728..22792,z=-60682..-29871 +on x=-783..16463,y=-47282..-16939,z=64502..74420 +off x=-47520..-14633,y=40759..47312,z=46161..76712 +on x=-69277..-54302,y=24768..49368,z=15566..35795 +off x=12622..41719,y=35874..58381,z=43857..67791 +off x=-799..16093,y=-1219..20716,z=67589..87424 +on x=35940..51327,y=30163..46992,z=-59947..-50999 +off x=-9321..2965,y=7853..36841,z=68030..81454 +off x=-37124..-30202,y=-80579..-51201,z=-40645..-18050 +off x=28596..52892,y=47368..72821,z=9780..31479 +on x=8990..18432,y=-36443..-12728,z=-95059..-69642 +off x=-77654..-67477,y=-2706..4112,z=28813..58150 +on x=-51071..-36543,y=41044..49939,z=42109..59713 +on x=-10079..19481,y=62783..91315,z=184..34000 +on x=-2397..3530,y=-11556..-706,z=76963..86864 +on x=6108..21196,y=-44694..-17116,z=61649..84795 +on x=46991..61627,y=-75243..-47914,z=7700..32503 +off x=59336..64609,y=-8125..11873,z=33615..71285 +off x=-85488..-61850,y=-6467..26523,z=6343..10566 +off x=-84524..-67431,y=-11010..9472,z=-22622..-2724 +off x=57508..72883,y=-50521..-39545,z=2734..6998 +off x=53809..64551,y=-35985..-23521,z=50129..54626 +on x=31383..51927,y=-47560..-26142,z=56108..59189 +on x=64838..70463,y=18960..46107,z=-5709..5891 +off x=-31932..-10900,y=62729..84704,z=-37694..-13759 +off x=40118..68033,y=-41588..-36259,z=34880..60200 +on x=39381..48090,y=-68538..-40574,z=-52761..-43347 +off x=64765..72987,y=-14028..16757,z=36141..47632 +off x=5855..25039,y=-85798..-60707,z=-30495..-20735 +on x=57912..77906,y=42168..50409,z=-28700..2962 +on x=19631..35834,y=28921..54740,z=51647..77378 +off x=-82481..-71581,y=21190..40353,z=-24926..-2552 +off x=-46450..-22899,y=-68165..-38827,z=-54999..-42378 +on x=-54128..-36413,y=8300..40253,z=48335..77869 +on x=34740..55414,y=5155..8343,z=-72542..-54001 +on x=31990..55541,y=-84291..-50415,z=-38724..-8673 +on x=-48741..-26045,y=3191..16457,z=-73525..-68070 +off x=-33831..-29433,y=-1626..17107,z=-79534..-68499 +on x=-42587..-15988,y=-83266..-62879,z=3424..23280 +on x=-38590..-25325,y=-64154..-45384,z=-54835..-40345 +on x=-13947..-1435,y=-92195..-76444,z=5699..36092 +off x=45044..57694,y=-14002..7161,z=-61158..-45716 +off x=38275..46353,y=-67689..-52479,z=-14487..1146 +on x=32016..45320,y=43682..68546,z=23400..42946 +off x=-3019..17260,y=63031..81988,z=32500..57080 +on x=-217..18895,y=-30559..-6455,z=-83475..-70541 +off x=-44798..-20533,y=-14628..4328,z=63367..89914 +on x=-66126..-51005,y=-48724..-27264,z=9877..18967 +off x=4493..39312,y=-92170..-64063,z=-32182..-4856 +on x=-12782..-1953,y=44313..64242,z=55493..60786 +off x=-83865..-61599,y=20014..32460,z=-32367..-2728 +off x=-44145..-28037,y=-74041..-63219,z=-31805..-9417 +off x=-45440..-16291,y=-58154..-37500,z=49909..61326 +on x=-52220..-20559,y=-15232..-8220,z=-71909..-62090 +on x=42800..57928,y=41072..73675,z=-12386..12198 +off x=64013..66218,y=23975..41145,z=-32405..-19771 +off x=-48747..-17911,y=59950..77703,z=-13769..7741 +off x=-63221..-42119,y=-55919..-46750,z=-41421..-40955 +off x=-48375..-12160,y=58420..80105,z=12920..24208 +on x=71072..79759,y=21125..45199,z=-4705..13837 +on x=-31352..3765,y=-94595..-58769,z=11911..23915 +off x=373..23352,y=-50895..-14246,z=-80217..-59767 +off x=7066..8657,y=-96706..-68072,z=-7088..16509 +on x=-51232..-33172,y=-40791..-25520,z=-62034..-40752 +on x=14275..34925,y=70729..81904,z=-11351..8996 +off x=-89880..-63344,y=14455..21987,z=10249..18184 +off x=-76665..-73466,y=12389..29268,z=-29705..-3064 +on x=50578..55235,y=-58508..-27331,z=-54406..-27657 +on x=67746..78075,y=3684..23596,z=-21969..2968 +on x=55755..66688,y=-60536..-37192,z=22915..44014 +on x=8038..40360,y=24131..50984,z=68348..69876 +off x=-17128..2366,y=27772..43497,z=70368..79928 +off x=54479..74773,y=38588..57296,z=2414..16691 +off x=-66541..-48861,y=-68223..-45601,z=-21915..-3036 +off x=-86928..-67200,y=-16408..13564,z=-33939..-13500 +off x=-13912..2218,y=-17671..6914,z=63164..82953 +off x=22139..35022,y=54579..61399,z=-55684..-38673 +off x=27878..48984,y=62441..82349,z=-22618..14260 +on x=-2195..21083,y=-25991..-2907,z=-96165..-70720 +off x=-38732..-21837,y=34725..51044,z=45008..70383 +on x=3848..34698,y=-60068..-41642,z=41254..65901 +on x=-61361..-44786,y=-28125..-2043,z=31526..57293 +off x=27201..34733,y=52189..89851,z=-42123..-20394 +on x=18085..42407,y=1757..15913,z=56541..85108 +on x=70893..77546,y=-20167..-13209,z=-30405..-18024 +on x=4454..28933,y=62353..92256,z=2598..34484 +off x=-30932..1089,y=-11002..-5461,z=-92865..-61938 +off x=-11090..-863,y=-45056..-29336,z=-79612..-59805 +on x=69347..90731,y=-5338..17953,z=23178..51736 +on x=-26888..2250,y=-17399..3480,z=-95553..-77039 +on x=13758..21604,y=-86651..-55244,z=-31610..-12946 +off x=-2310..22325,y=-73076..-38378,z=47549..72016 +off x=-64760..-34824,y=50715..69108,z=2880..17133 +on x=8293..37626,y=209..32795,z=69510..77903 +on x=26569..43319,y=-28837..-10605,z=-86283..-46966 +on x=15189..48460,y=56103..70924,z=-41507..-18695 +on x=50472..60820,y=36325..65141,z=-26465..3805 +off x=71475..84634,y=26761..52226,z=-18788..8211 +on x=-15498..2082,y=57975..85738,z=10032..37898 +off x=64853..80096,y=18049..39945,z=-22719..-3021 +on x=-89021..-56923,y=-37013..-5501,z=-37752..-3744 +off x=-53563..-34043,y=-13571..7215,z=51654..69601 +off x=73603..95599,y=-29185..-6592,z=-1547..7830 +off x=-89899..-58785,y=-37642..-22122,z=2100..15738 +off x=43149..48403,y=58070..61555,z=12040..21277 +off x=-77570..-44604,y=-38604..-21364,z=-49649..-30121 +off x=-6505..6293,y=-9490..20632,z=67506..99213 +on x=-26630..-3114,y=39428..53919,z=-75858..-48317 +on x=65580..89172,y=19400..27712,z=-32985..-20804 +off x=3210..27477,y=64531..97346,z=-22032..-12913 +on x=-12572..7541,y=-74421..-44890,z=-67529..-47072 +off x=-38799..-33254,y=55740..82233,z=530..24464 +off x=-3034..17204,y=-52009..-41850,z=53550..72208 +on x=75041..88551,y=-2920..16778,z=-12397..6561 +off x=-57828..-45910,y=33391..50062,z=42181..58694 +off x=64086..79980,y=-35062..-6655,z=-43005..-19072 +on x=46293..78226,y=15332..31724,z=20486..49133 +on x=10114..27622,y=-42356..-32617,z=55094..85456 +on x=-23675..-15335,y=-96639..-64457,z=-9611..8841 +off x=-66057..-61691,y=29422..39444,z=-52445..-17174 +off x=-2306..21587,y=-70513..-56859,z=48314..55486 +on x=-7693..3070,y=-67695..-61179,z=31517..61993 +on x=-42386..-29382,y=42216..64356,z=-62841..-35339 +off x=66402..74832,y=-4752..14537,z=-46085..-28352 +off x=55950..79164,y=-33399..-13600,z=-41795..-12050 +on x=-39692..-34786,y=-29052..-9990,z=-80147..-56930 +off x=-31315..-9184,y=-14651..13406,z=-91739..-78572 +on x=6656..15557,y=48620..68978,z=40125..51661 +off x=-65883..-38294,y=7846..15268,z=-75714..-60704 +off x=-48084..-17849,y=-80014..-57655,z=-14004..20143 +off x=-67339..-29231,y=51852..56222,z=-45946..-29021 +off x=33224..49365,y=-12256..9048,z=-71923..-43893 +off x=11578..19032,y=67746..88200,z=3562..28538 +on x=-33943..3274,y=-3303..6385,z=64558..82042 +off x=37371..56283,y=-71559..-59397,z=10223..38124 +off x=-20468..-3133,y=-85638..-66116,z=18723..33699 +off x=-21553..-6096,y=52051..71487,z=-60241..-44696 +on x=2119..38578,y=-55284..-16851,z=-81488..-48856 +off x=4121..23554,y=70827..83659,z=13022..29851 +off x=-7658..30282,y=32804..49109,z=-84735..-65886 +on x=42254..58740,y=-80327..-54242,z=-2455..13934 +on x=36999..55943,y=36056..71034,z=4631..30064 +on x=-16744..1244,y=60903..82252,z=-22510..-1874 +on x=-47833..-35095,y=62424..78564,z=-43716..-17319 +off x=-13531..-2144,y=-47211..-31550,z=61823..69864 +off x=33638..66759,y=-56079..-22500,z=27700..62584 +off x=17484..53809,y=-82382..-61322,z=-7780..23179 +on x=36303..56592,y=-37680..-17563,z=51742..69493 +on x=-39105..-21357,y=-20555..-8374,z=65002..74328 diff --git a/22/small b/22/small new file mode 100644 index 0000000..4e496e9 --- /dev/null +++ b/22/small @@ -0,0 +1,136 @@ +--- scanner 0 --- +404,-588,-901 +528,-643,409 +-838,591,734 +390,-675,-793 +-537,-823,-458 +-485,-357,347 +-345,-311,381 +-661,-816,-575 +-876,649,763 +-618,-824,-621 +553,345,-567 +474,580,667 +-447,-329,318 +-584,868,-557 +544,-627,-890 +564,392,-477 +455,729,728 +-892,524,684 +-689,845,-530 +423,-701,434 +7,-33,-71 +630,319,-379 +443,580,662 +-789,900,-551 +459,-707,401 + +--- scanner 1 --- +686,422,578 +605,423,415 +515,917,-361 +-336,658,858 +95,138,22 +-476,619,847 +-340,-569,-846 +567,-361,727 +-460,603,-452 +669,-402,600 +729,430,532 +-500,-761,534 +-322,571,750 +-466,-666,-811 +-429,-592,574 +-355,545,-477 +703,-491,-529 +-328,-685,520 +413,935,-424 +-391,539,-444 +586,-435,557 +-364,-763,-893 +807,-499,-711 +755,-354,-619 +553,889,-390 + +--- scanner 2 --- +649,640,665 +682,-795,504 +-784,533,-524 +-644,584,-595 +-588,-843,648 +-30,6,44 +-674,560,763 +500,723,-460 +609,671,-379 +-555,-800,653 +-675,-892,-343 +697,-426,-610 +578,704,681 +493,664,-388 +-671,-858,530 +-667,343,800 +571,-461,-707 +-138,-166,112 +-889,563,-600 +646,-828,498 +640,759,510 +-630,509,768 +-681,-892,-333 +673,-379,-804 +-742,-814,-386 +577,-820,562 + +--- scanner 3 --- +-589,542,597 +605,-692,669 +-500,565,-823 +-660,373,557 +-458,-679,-417 +-488,449,543 +-626,468,-788 +338,-750,-386 +528,-832,-391 +562,-778,733 +-938,-730,414 +543,643,-506 +-524,371,-870 +407,773,750 +-104,29,83 +378,-903,-323 +-778,-728,485 +426,699,580 +-438,-605,-362 +-469,-447,-387 +509,732,623 +647,635,-688 +-868,-804,481 +614,-800,639 +595,780,-596 + +--- scanner 4 --- +727,592,562 +-293,-554,779 +441,611,-461 +-714,465,-776 +-743,427,-804 +-660,-479,-426 +832,-632,460 +927,-485,-438 +408,393,-506 +466,436,-512 +110,16,151 +-258,-428,682 +-393,719,612 +-211,-452,876 +808,-476,-593 +-575,615,604 +-485,667,467 +-680,325,-822 +-627,-443,-432 +872,-547,-609 +833,512,582 +807,604,487 +839,-516,451 +891,-625,532 +-652,-548,-490 +30,-46,-14 diff --git a/22/src/main.rs b/22/src/main.rs new file mode 100644 index 0000000..bc61faf --- /dev/null +++ b/22/src/main.rs @@ -0,0 +1,293 @@ +use advent_lib::prelude::*; + + +#[derive(Debug, Clone)] +struct Step { + set_to: bool, + min: Point, + max: Point, +} + +#[derive(Debug, Clone)] +struct Region { + min: Point, + max: Point, +} + +#[derive(Debug, Clone)] +struct Point { + x: i64, + y: i64, + z: i64, +} + +#[derive(Debug, Clone, Eq, PartialEq)] +struct Span { + min: i64, + max: i64, +} + + +fn main() -> Result<()> { + let mut args = std::env::args(); + if args.len() != 2 { + eprintln!("Usage: advent input"); + } + let _ = args.next(); + let filename = args.next().unwrap(); + + let input = advent_lib::read_lines_file(&filename)?; + + let mut directions = Vec::new(); + for line in &input { + let mut step = Step { + set_to: false, + min: Point { x: 0, y: 0, z: 0 }, + max: Point { x: 0, y: 0, z: 0 }, + }; + + let words: Vec<&str> = line.split_whitespace().collect(); + + step.set_to = match words[0] { + "on" => true, + "off" => false, + _ => panic!("hm"), + }; + + let components: Vec<&str> = words[1].split(",").collect(); + + let parts: Vec<&str> = components[0].split("=").collect(); + let ends: Vec<&str> = parts[1].split("..").collect(); + step.min.x = ends[0].parse::().unwrap(); + step.max.x = ends[1].parse::().unwrap(); + + let parts: Vec<&str> = components[1].split("=").collect(); + let ends: Vec<&str> = parts[1].split("..").collect(); + step.min.y = ends[0].parse::().unwrap(); + step.max.y = ends[1].parse::().unwrap(); + + let parts: Vec<&str> = components[2].split("=").collect(); + let ends: Vec<&str> = parts[1].split("..").collect(); + step.min.z = ends[0].parse::().unwrap(); + step.max.z = ends[1].parse::().unwrap(); + + directions.push(step); + } + + let mut total_on = 0; + for x in -50 .. 51 { + for y in -50 .. 51 { + for z in -50 .. 51 { + let point = Point { x, y, z }; + if test_cube(&point, &directions) { + total_on += 1; + } + } + } + } + + println!("{}", total_on); + + let total_on_everywhere = count_everywhere(&directions); + println!("{}", total_on_everywhere); + + Ok(()) +} + + +fn test_cube(point: &Point, directions: &Vec) -> bool { + for step in directions.iter().rev() { + if (point.x >= step.min.x) && (point.y >= step.min.y) + && (point.z >= step.min.z) && (point.x <= step.max.x) + && (point.y <= step.max.y) && (point.z <= step.max.z) + { + return step.set_to; + } + } + + false +} + + +fn count_everywhere(directions: &Vec) -> i64 { + let mut lit_regions: Vec = Vec::new(); + + for step in directions { + if lit_regions.len() == 0 { + if step.set_to { + lit_regions.push(Region { + min: step.min.clone(), + max: step.max.clone(), + }); + } + continue; + } + + let mut new_lit_regions = Vec::new(); + for lit_region in lit_regions.into_iter() { + /* Depending on whether set_to is true or false, we may be doing union + * or difference. However, we implement union as difference followed by + * also including the entire subtracted volume. So difference is the + * only operation that needs the per-axis breakdown of cases. + * + * Start by determining whether it's overlapping or not. The + * non-overlapping cases are: + * + * A==========B (lit region) + * C=========D (step) + * + * A=========B (lit region) + * C==========D (step) + * + * Now eliminate cases where the step entirely covers the lit region: + * + * A======B (lit region) + * C==================D (step) + * + * The following cases remain: + * + * A==================B (lit region) + * C======D (step) + * + * A==========B (lit region) + * C=====.......? (step) + * + * A==========B (lit region) + * ?......=====D (step) + */ + let mut lit_spans = Vec::new(); + let mut step_spans = Vec::new(); + let mut differenced_spans = Vec::new(); + for axis in 0 .. 3 { + let mut relevant_spans = Vec::new(); + + let (lit_min, lit_max, step_min, step_max) = match axis { + 0 => { (lit_region.min.x, lit_region.max.x, step.min.x, step.max.x) }, + 1 => { (lit_region.min.y, lit_region.max.y, step.min.y, step.max.y) }, + 2 => { (lit_region.min.z, lit_region.max.z, step.min.z, step.max.z) }, + _ => { panic!("run in circles scream and shout"); }, + }; + + lit_spans.push(Span { min: lit_min, max: lit_max }); + step_spans.push(Span { min: step_min, max: step_max }); + + if (lit_max < step_min) || (lit_min > step_max) { + // Non-overlapping + relevant_spans.push(Span { min: lit_min, max: lit_max }); + } else if (step_min <= lit_min) && (step_max >= lit_max) { + // Step entirely covers lit + // It is intentional that nothing is done here. + } else if (lit_min < step_min) && (lit_max > step_max) { + // Step is a segment in the middle of lit + relevant_spans.push(Span { min: lit_min, max: step_min - 1 }); + relevant_spans.push(Span { min: step_max + 1, max: lit_max }); + } else if lit_min < step_min { + relevant_spans.push(Span { min: lit_min, max: step_min - 1 }); + } else { + relevant_spans.push(Span { min: step_max + 1, max: lit_max }); + } + + differenced_spans.push(relevant_spans); + } + + if ((differenced_spans[0].len() == 1) + && (differenced_spans[0][0] == lit_spans[0])) + || ((differenced_spans[1].len() == 1) + && (differenced_spans[1][0] == lit_spans[1])) + || ((differenced_spans[2].len() == 1) + && (differenced_spans[2][0] == lit_spans[2])) + { + new_lit_regions.push(Region { + min: Point { + x: lit_spans[0].min, + y: lit_spans[1].min, + z: lit_spans[2].min, + }, + max: Point { + x: lit_spans[0].max, + y: lit_spans[1].max, + z: lit_spans[2].max, + }, + }); + } else { + for z_span in &differenced_spans[2] { + let region = Region { + min: Point { + x: lit_spans[0].min, + y: lit_spans[1].min, + z: z_span.min, + }, + max: Point { + x: lit_spans[0].max, + y: lit_spans[1].max, + z: z_span.max, + }, + }; + new_lit_regions.push(region); + } + + let z_min = std::cmp::max(lit_spans[2].min, step_spans[2].min); + let z_max = std::cmp::min(lit_spans[2].max, step_spans[2].max); + + for y_span in &differenced_spans[1] { + let region = Region { + min: Point { + x: lit_spans[0].min, + y: y_span.min, + z: z_min, + }, + max: Point { + x: lit_spans[0].max, + y: y_span.max, + z: z_max, + }, + }; + new_lit_regions.push(region); + } + + let y_min = std::cmp::max(lit_spans[1].min, step_spans[1].min); + let y_max = std::cmp::min(lit_spans[1].max, step_spans[1].max); + + for x_span in &differenced_spans[0] { + let region = Region { + min: Point { + x: x_span.min, + y: y_min, + z: z_min, + }, + max: Point { + x: x_span.max, + y: y_max, + z: z_max, + }, + }; + new_lit_regions.push(region); + } + } + + } + + if step.set_to { + let region = Region { + min: step.min.clone(), + max: step.max.clone(), + }; + new_lit_regions.push(region); + } + + + lit_regions = new_lit_regions; + } + + let mut total_lit = 0; + for region in &lit_regions { + let x_extent = region.max.x - region.min.x + 1; + let y_extent = region.max.y - region.min.y + 1; + let z_extent = region.max.z - region.min.z + 1; + let volume = x_extent * y_extent * z_extent; + total_lit += volume; + } + + total_lit +} + diff --git a/22/tests/main.rs b/22/tests/main.rs new file mode 100644 index 0000000..5012dd4 --- /dev/null +++ b/22/tests/main.rs @@ -0,0 +1,17 @@ +use assert_cmd::prelude::*; +//use predicates::prelude::*; +use std::process::Command; + + +#[test] +fn personal_input() -> Result<(), Box> { + let mut command = Command::cargo_bin("advent_22")?; + + command.arg("input"); + command.assert().success().stdout( + "612714\n\ + 1311612259117092\n"); + + Ok(()) +} + diff --git a/Cargo.lock b/Cargo.lock index 0cab4ef..5038bde 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -170,6 +170,14 @@ dependencies = [ "assert_cmd", ] +[[package]] +name = "advent_22" +version = "0.1.0" +dependencies = [ + "advent_lib", + "assert_cmd", +] + [[package]] name = "advent_lib" version = "0.1.0" diff --git a/Cargo.toml b/Cargo.toml index 803c3a9..8ee9c55 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -22,4 +22,5 @@ members = [ "19", "20", "21", + "22", ] -- cgit 1.4.1