diff --git a/2016/day-20/Cargo.toml b/2016/day-20/Cargo.toml new file mode 100644 index 0000000..4ab3134 --- /dev/null +++ b/2016/day-20/Cargo.toml @@ -0,0 +1,6 @@ +[package] +name = "day-20" +version = "0.1.0" +authors = ["Bert Peters "] + +[dependencies] diff --git a/2016/day-20/input.txt b/2016/day-20/input.txt new file mode 100644 index 0000000..bfab795 --- /dev/null +++ b/2016/day-20/input.txt @@ -0,0 +1,945 @@ +2803551464-2812875810 +3863319608-3871068145 +881357481-892360003 +1109987968-1119969449 +3658860150-3661459953 +3315323905-3317364128 +4198570301-4213558177 +3652285991-3657587289 +1721298471-1722969206 +3232746849-3243358546 +1661068675-1662703862 +3675435883-3682716625 +1266177355-1267536576 +3868442553-3886066408 +1163754899-1168776503 +2038125438-2040532211 +2113199153-2129200429 +278716595-280702917 +447807401-468043406 +456478106-473088994 +1565862083-1581382324 +2426641191-2433649580 +3769379795-3770350023 +4042653019-4049531142 +3158919914-3172421287 +2604844963-2639161233 +3503237453-3554722462 +4190047494-4193508873 +1508094238-1525307740 +3966816125-3967809178 +153714142-202056631 +2501046140-2510963167 +3465635759-3503237451 +2281340669-2298789211 +1947117382-1967928419 +3554722463-3555159981 +2895819105-2902788319 +3663372904-3664569864 +972483691-975740796 +3103264896-3104355798 +1231082782-1241462802 +677329322-682803315 +4213558179-4263517130 +3733652773-3738472991 +2757807191-2766006676 +3659397827-3662123747 +2014222939-2022150246 +1519490935-1524525631 +2666464202-2678020657 +3676123771-3682875356 +2015665014-2020521963 +109371500-147527150 +294104105-295883568 +1187924694-1192867337 +233912451-268480586 +2412805636-2418891676 +817894379-821825729 +1395482208-1396601076 +3562787574-3582066957 +1636231691-1643851704 +2540574931-2577465973 +3678820167-3692907105 +3317210708-3346205871 +4288708469-4290878845 +1879088166-1925495249 +701025730-744031556 +3423726238-3449088494 +1909393974-1932233877 +1624595706-1638169891 +3967809180-3968979908 +777390928-787119986 +1785937011-1790894471 +359962895-374210080 +854620758-857295870 +3063588727-3074066568 +1433213216-1440086675 +2803878786-2807170810 +2329364922-2341004103 +1779308956-1813426614 +3404134972-3406935359 +1395206729-1399335725 +3508058831-3545265293 +1116027046-1140771866 +2195488600-2201400029 +2604784575-2604844961 +3249582504-3249904321 +3359093168-3389555121 +672414721-685495729 +1676765380-1707877434 +2195210206-2200373110 +2283189431-2295462864 +612834977-633513429 +766576814-777176781 +4213760180-4245027356 +3406935361-3423726237 +3420461762-3447108396 +1235496789-1257178615 +173628319-178025658 +261376069-266145441 +222446472-225105299 +2415523644-2426548029 +1659538503-1661276593 +2093459328-2102469885 +2208927482-2216619804 +3256205940-3256690370 +442613372-455667187 +143074490-143749172 +1735254052-1746870707 +343474171-361691685 +1216387933-1258035838 +2791688067-2800464615 +1779703537-1781066111 +931109619-959468702 +3909752583-3914528328 +1091036396-1105617839 +1885451799-1903144828 +2641179046-2650174969 +3313303611-3315819551 +1788713502-1810384207 +3276737391-3277290125 +3686124913-3694782332 +4049057301-4050036879 +1320547253-1367813733 +3049327526-3076973970 +3925548387-3949355784 +3860805956-3906597931 +121451892-126310872 +208485480-212030275 +1335156808-1354949720 +852919988-853348876 +720375531-737074971 +959468704-971778204 +3616550273-3624309509 +2188151246-2188588728 +780323861-799483097 +1233973486-1251692781 +1438953538-1442443946 +3015669375-3041261940 +1294214596-1305474448 +208089104-220602374 +4039335554-4045707360 +2824055773-2838804608 +3969004038-3980638333 +1170304116-1171741344 +1924952282-1930448454 +2342839060-2380256693 +1280565768-1283231378 +2457571349-2477679245 +3862937291-3868543833 +2871096736-2886900309 +1105617840-1109987966 +3677109966-3683234485 +2187877708-2188292669 +4272688785-4294967295 +3295756457-3325150392 +973279191-978223783 +3878333697-3888847760 +1780876174-1781157600 +2766006677-2767646529 +2841853108-2849654093 +2299057510-2321389996 +700255162-733629340 +2271482758-2286733678 +722098296-739587091 +2553444501-2557591380 +4083439109-4086123206 +2915859231-2961422396 +3061273996-3087247705 +71153829-103801748 +3758297347-3759901378 +2059683083-2067457615 +3582066959-3637753218 +1606122310-1608956523 +2229509702-2254991017 +2187668151-2188163549 +2109717235-2110775852 +973527207-975315519 +1561887968-1565862081 +1516813386-1527201518 +3430335169-3434512116 +637793982-650797362 +59648493-88472995 +595008931-601889180 +4099377796-4128797762 +456719390-472256132 +1799147975-1818999763 +3664059641-3665285914 +235916842-267928464 +3192431703-3211229502 +2506865442-2530124433 +317547190-329175540 +875265848-900708946 +1880550692-1892730911 +1925495250-1947117380 +2593120814-2594557710 +1582158974-1586342876 +3668520063-3712776828 +3814375697-3823522563 +2214942913-2218843768 +322731329-334606123 +1132318778-1167221938 +3637753219-3651531792 +2304025116-2314660343 +3076973971-3094326866 +1751188975-1770447553 +2292741635-2313534240 +1096063406-1097985283 +171054648-203847062 +1279185659-1285305251 +218575107-223805742 +2695974731-2703850693 +3015465123-3036118969 +900708948-913353493 +285956515-300687655 +2835184574-2849398108 +1830648432-1854550606 +24226177-52899821 +3913307348-3915120228 +709805409-750716092 +3914528329-3921545630 +2357158200-2379142732 +1580605862-1599619384 +1633939788-1638760323 +694182947-720239612 +114180253-122443349 +135274241-141236389 +1330410519-1361552379 +2412255194-2426641190 +1349483516-1373026874 +2650174971-2688443883 +116680049-152589875 +107795550-116339751 +1626255610-1627749930 +365704999-369767992 +944383883-947543513 +3274933652-3276799835 +836029143-841012740 +206685245-209556385 +2323037977-2325938879 +2769296404-2791688066 +2297334096-2315320952 +2160389008-2187512585 +1454896024-1484661305 +114948651-118502994 +578033974-580295450 +685495731-749808282 +1270899549-1276643860 +513961497-530771780 +211454341-216664031 +2936207952-2939731619 +1512214853-1534334525 +3059332534-3064532931 +2552656467-2566664334 +400979593-408567879 +925517547-953896754 +2761576742-2761959986 +3555169607-3559462489 +2812875812-2824264301 +2779463262-2786954760 +139313286-147006619 +2353857022-2386604140 +982596329-993066494 +3883902084-3890491738 +14276376-14715040 +140307640-141422463 +3806843586-3810748719 +2347798972-2375546160 +3325150393-3330314771 +4121937465-4145149271 +2962523945-2962832532 +1266915255-1277451820 +3759184321-3760728108 +1042439096-1075737119 +749808283-753078138 +2415727707-2417129852 +3125813780-3158919913 +2141324196-2165240019 +3968979909-4020983158 +3652566174-3652811220 +321199093-335755679 +3046792179-3051753297 +1098495330-1099546156 +2604753232-2604793722 +1862387736-1865564891 +2192793959-2202839050 +2051192988-2062082965 +2557781180-2564684368 +3731887024-3735627111 +2759326292-2766862646 +105999228-114717327 +2146740774-2175585846 +1040408590-1060035405 +915828469-955654421 +2363804509-2365163485 +3948153155-3950758052 +3391750312-3404134971 +2772699877-2774841115 +792609079-802941037 +1119187290-1132318777 +671982481-677760085 +3327509782-3354044053 +271583813-279723779 +408567880-411426277 +2445571312-2486950067 +252000432-271583811 +506925272-513961495 +2365381207-2396847596 +635392808-670044564 +1588066879-1606122309 +2931542740-2938986525 +2109256412-2109771575 +3736474726-3739799756 +781943416-805793862 +10071776-14276375 +3230850634-3231395673 +1660725925-1662714652 +4086903988-4087464424 +4070040103-4086645627 +3213756608-3259325969 +945742841-952576664 +2324657388-2332536987 +2414450355-2423505266 +1869147202-1870835953 +890249566-896198589 +2967360210-3014717075 +1836402422-1845546461 +2149565922-2161600962 +1204370924-1209027465 +2380256694-2386504270 +2229421324-2239778067 +3984204506-3989543212 +2767646531-2781228246 +1048423406-1091036394 +214736602-224127152 +1069306050-1083641951 +1781258836-1790882660 +4157295205-4182675293 +1520299787-1555007003 +3173677946-3176672268 +2275026767-2299863656 +2196014210-2206264513 +836408749-847859546 +2212601866-2217310020 +2967131212-3007224649 +1408935700-1429989498 +1834012279-1862387734 +1501557594-1509143794 +1493417575-1516000767 +808033265-814911993 +3555159983-3559611965 +293029869-300515629 +3062492778-3075018660 +2409773786-2423687676 +2325824819-2338710927 +583617536-589049485 +3912733726-3913993919 +2088007342-2113199152 +2715226105-2748285939 +1867576901-1876702109 +1293224839-1301350883 +4047144971-4050020289 +2973100941-2977140796 +68728696-93299445 +4086674018-4087763373 +8898161-12610188 +2760389636-2761144710 +1349766780-1357040917 +1574999391-1592558418 +4171544034-4177450527 +913353494-954475810 +3302317467-3343577619 +1003762868-1009500925 +3172421289-3178727110 +7930590-8742990 +21462141-57214240 +3222102431-3236579911 +2642830-10503093 +4087763374-4108979938 +1688152784-1725485652 +3921545632-3965661350 +646391125-657162937 +4057318954-4071681125 +1400108869-1405791325 +3754968516-3766077150 +2388970328-2392263662 +3453741880-3495044825 +2761642219-2762087520 +2615095071-2615439669 +563986267-622503249 +2912214767-2914590567 +792865674-795027495 +3618700153-3640992852 +1735982768-1742271760 +2718807926-2725985595 +132128650-139247192 +940623358-957999403 +136939212-143795000 +1047489840-1067499988 +4027166112-4043494417 +2163081404-2163688672 +3924386877-3964777074 +879041395-892669762 +3952771042-3962091261 +2414986463-2415830365 +414180419-420830474 +2239509990-2255431833 +1754732468-1760775166 +506563152-508625398 +1463126781-1478456421 +2033220699-2033540204 +1296021829-1301063981 +172777910-194982125 +3062422795-3069889126 +150826626-153494338 +3699752742-3704811141 +1873077685-1879088164 +3608954677-3644201717 +3803217008-3821838904 +3128596616-3149825732 +1818999765-1821895317 +3699877667-3705348171 +813416483-814897292 +2620443984-2621829586 +1962326862-1963413571 +1417173761-1448538149 +3184138688-3192431701 +3357092321-3366945022 +3145764671-3167784186 +2927609635-2937983943 +994567590-1010121042 +1661060307-1663385037 +2855838759-2883585467 +1463515352-1466425964 +2926027272-2931205457 +3527680952-3535484023 +2961422398-2962550873 +818654023-828591070 +4148775181-4161021581 +1624701609-1627275903 +3868348110-3882840115 +14660092-14975794 +1650201085-1653766664 +1577348597-1594015022 +928333108-935064528 +3359527763-3391750310 +2493422237-2504168537 +4049859084-4050410424 +808181868-814052465 +3874613830-3887590959 +2414207592-2415282578 +2192714364-2213647819 +2620261988-2634878659 +3421336433-3429336343 +2145068049-2158207489 +1367813734-1389219195 +2490910487-2501655457 +4145149273-4152250366 +653475748-657626115 +3354044055-3359527762 +677865088-684199203 +3197386894-3213756607 +2413890103-2414655385 +2435569073-2436676907 +2187512586-2188373926 +2542833514-2559448344 +3572579654-3572646910 +2017351712-2022931296 +5553473-5721362 +640675166-648731596 +2795084400-2804878917 +2609356887-2641179045 +2593669850-2595078437 +4070644525-4083576877 +3952447643-3959969464 +985533706-1018176146 +3981413303-3986034628 +1395736469-1398015062 +3770147570-3771736386 +3049564640-3058068003 +3669109025-3700215305 +586331218-598310839 +2013763822-2017548303 +3259325971-3295497789 +1170438196-1174511625 +893146793-895599310 +4276674223-4280159835 +517139920-555996999 +3700596506-3709565912 +3682493367-3685409046 +1647308172-1649682446 +3850135349-3874541035 +1499363688-1504436967 +2533635168-2540574929 +1508239269-1512070177 +271906508-279234198 +1057947362-1058662323 +2434000862-2434773362 +4069928760-4076838093 +2158118299-2173210733 +1870620487-1874963901 +2517052343-2520191365 +805793864-809890122 +3119674762-3125813778 +2165744152-2184076597 +489482550-490255465 +1394412113-1406168887 +1688791106-1731695014 +2221982373-2252569071 +509411098-512692777 +690237193-723487522 +361691686-400979591 +409813774-429403373 +2479075744-2481943730 +2614997153-2615138853 +138753315-146503262 +1582919319-1588089148 +1111462306-1130533488 +2817276056-2817880217 +3922045147-3951589009 +2458848754-2465651576 +2016288686-2026542989 +3875916854-3885420430 +1819358445-1823011392 +2145320252-2150708967 +3173766775-3186295748 +1124742733-1153625326 +3808566641-3811176751 +3102443342-3103570065 +492056611-501015610 +299335684-312918298 +3558899943-3573860889 +1186125415-1201322109 +1513322537-1541097553 +2581869741-2604753231 +3557617919-3562787573 +2443351935-2462800310 +3700215306-3720331196 +3811735096-3814814473 +3449088496-3453321084 +4038184431-4051388239 +716454294-723662471 +780371402-787696275 +2441289917-2468804258 +2353736566-2376885630 +3908286816-3912629201 +1633135638-1642500049 +4111559476-4135102642 +1653322112-1654018956 +1039455295-1064540912 +1736742501-1737529328 +3059170943-3065265874 +852606650-855213954 +3295497790-3295756455 +4040836405-4047351141 +34353198-41398596 +1692183974-1707916005 +1048943716-1077207190 +3700991866-3721726702 +1661288377-1661519394 +2961925985-2963658715 +2911928114-2915859230 +853205608-856577987 +3883096539-3908286814 +3316435466-3322939929 +3600326622-3624293220 +294216092-296021925 +142225406-143613184 +3223481515-3231699421 +4047939579-4052654319 +10593493-11742652 +1571866528-1582428071 +3868224862-3874921021 +1733465319-1759021943 +140374901-142457673 +2504220157-2523127156 +1967928420-1995956623 +1374999816-1394412111 +2092836480-2097234291 +2188588730-2200239694 +4086645629-4086948153 +1173726445-1197853798 +2118624452-2130408675 +4052654321-4070040102 +874803249-875265847 +915791810-930214990 +2876128871-2891854663 +1166216594-1170304114 +2558656344-2566067825 +3032547997-3034107978 +409533844-417847675 +763326165-770612736 +1226596083-1266177353 +828591072-833358113 +1345792276-1357532116 +1197579007-1200982868 +1894139125-1934259002 +822054687-824550189 +1396307099-1397231865 +1790205358-1807289131 +3094326868-3119674761 +3799035806-3803217007 +3721726704-3754968515 +841012741-874803247 +3840498378-3860805955 +3659695914-3666511687 +622503250-635392806 +1995956625-1998598282 +179163536-184631947 +147006620-153370435 +4089819884-4106849736 +2819423512-2823887988 +3998447441-4018115809 +316775105-332485730 +1873596673-1875758479 +530771781-556775763 +2204589634-2220322499 +3113913197-3121008639 +1448444211-1454866520 +3652721866-3653504520 +3404216248-3405268388 +4182675295-4198570300 +255352265-263634900 +4276722777-4289051171 +1721927940-1723161665 +2826897767-2855838757 +1337359668-1339978852 +2382979588-2393790387 +3654073394-3658478261 +3782544994-3799035804 +4188329897-4211630877 +2963658716-2998320637 +3451432571-3453741879 +2562651834-2567434860 +2486950069-2501046139 +3611478669-3616104106 +3511021819-3549518032 +3758230566-3767068430 +1191506029-1202446209 +219231125-219816356 +1462411319-1464012276 +1569787641-1572527086 +1311860292-1315547903 +1429989499-1437437420 +135664183-143558335 +3914727258-3916071103 +1471033973-1490515863 +1827686776-1834102937 +2441893746-2457455620 +2577465974-2581869739 +1828378028-1828447447 +2507242698-2536227200 +490703380-506563151 +3870274107-3901351871 +2565359-6381735 +3814929925-3840498376 +1775006734-1779308955 +3767068432-3782544993 +490126986-490703378 +2383094618-2409773784 +1960725227-1965554858 +1959828051-1963390089 +139119706-146382463 +241951130-258703134 +153149559-153714140 +3029945372-3037141205 +1094128516-1106309608 +993066495-1033612715 +3671412953-3680108875 +816910858-822955503 +4020983160-4028093132 +1284781999-1286926714 +790424414-799936436 +2707283960-2715226103 +570447483-627718026 +807974973-817894378 +3431718547-3443952967 +2194317541-2215523943 +3989614647-3993925138 +2478679657-2481612117 +1836566878-1840352483 +2232420373-2261771390 +403014712-410743818 +2047708884-2087313829 +2209923477-2221982371 +676720984-679082918 +2065315935-2067342333 +3666511689-3685877680 +2931562466-2939596306 +2002102420-2031435920 +1449029906-1452219358 +1094666459-1107864169 +4159795437-4173026717 +3940699594-3945820962 +1952608448-1961074747 +25578431-30327344 +3936796403-3945735974 +2241985556-2265741391 +2978397189-3011104419 +1820356263-1834012278 +1125129874-1165911944 +1351093053-1388868368 +2695136012-2710933703 +416822916-431004322 +3985767563-3991863544 +2562720447-2569487575 +2883585468-2911928112 +2433649582-2434201906 +1277451821-1293224837 +2748285940-2757807189 +541913187-563986265 +3423500537-3439392036 +2112695644-2112861663 +1834623552-1837111882 +2066343411-2067864185 +1490515865-1516452574 +1619316587-1620102930 +2012483467-2018436181 +1470658235-1476806470 +3055686516-3059572872 +1464985786-1475278434 +2837797335-2842601938 +260452914-269050424 +1655444118-1660245521 +3810437575-3811820227 +2620812261-2621955292 +8797846-8898160 +3966070996-3967714842 +2507277371-2512302315 +3883568275-3901604832 +1770482264-1770749885 +2031435922-2034151802 +2016008864-2018774627 +1235256126-1242304638 +3053174135-3058921180 +1676541058-1688791105 +4151894850-4157295204 +3231210841-3233382083 +524214554-547104233 +974008672-976468125 +1863980174-1873077684 +2261771391-2271482756 +1742271761-1775006732 +4101392823-4124556870 +1305474449-1320547251 +3916415600-3920194992 +2034151803-2047708882 +2971946044-2975097171 +1883910099-1921636748 +3029933838-3030531686 +431004324-452143003 +6381736-6572278 +962120749-977556240 +408315924-419329945 +3177254655-3184138687 +2201400030-2211027743 +144185516-148790937 +489248329-490135980 +2298789212-2307407423 +1406427156-1414175794 +1997537844-2002102419 +2897055611-2907931465 +2036898003-2043832914 +2340924752-2341899776 +3651531794-3653961437 +2416408806-2417403982 +2341841308-2342839058 +2819956485-2826897766 +753078140-780323860 +1912787764-1933732690 +3658512262-3662402246 +568613512-608581930 +1331308255-1339217827 +2208214217-2217761596 +2130408677-2178372173 +674882205-681228966 +1731695016-1737174299 +807594646-821360533 +3659869505-3665103153 +3589683601-3615440532 +1847081-4852291 +2772140253-2787567431 +3607082715-3613107593 +3980322694-3983040781 +3965661351-3967715377 +2321389998-2340924751 +2723678514-2734191352 +3176160664-3183396055 +2087313830-2088007340 +2414701980-2415291970 +384120445-393367368 +1608956525-1647308171 +1975809715-1979788315 +1182300111-1210501223 +2587765468-2587899449 +3240384298-3244209962 +498001069-510433390 +502181868-509590604 +1722606114-1723511765 +4074126463-4080998964 +3965899463-3967805733 +670044565-671955942 +1574009825-1589779145 +2768461131-2782384926 +1589390500-1591710916 +4242385075-4243613632 +1654018957-1676541056 +4026452452-4038184430 +370731507-377702333 +1416892515-1447676948 +671955944-671982480 +1661358788-1661638413 +2620860455-2622167536 +857689748-866284280 +1277265513-1286804775 +2413986300-2415769171 +3427452157-3441299404 +1779900267-1785122611 +257536541-262228939 +2776706637-2788943162 +30146885-30764844 +124248657-137103342 +538057074-538137846 +3821751095-3827013068 +1866675972-1875110376 +1330757760-1338403024 +229290311-247376592 +220344517-221556120 +1033612717-1042439095 +219586004-221068703 +783594805-791480755 +3230747813-3247916095 +3374965918-3389840591 +971778205-982596327 +2434773363-2457398191 +3300575173-3319582719 +1212926504-1226596082 +678898247-681492789 +1506103673-1533979924 +1828376380-1828383805 +4263517131-4272688783 +212030276-229290309 +1735748976-1740874539 +3174657260-3182281606 +1430836020-1451441628 +829961418-839958433 +1660652520-1661464323 +1832743872-1839654436 +2667021873-2700044121 +3232125402-3233384806 +2056189726-2059543792 +3571190891-3576928260 +1660036024-1674545236 +141261139-142401536 +1294730719-1312440914 +1406168888-1406427154 +4031373778-4042188195 +1222515899-1262359655 +215890380-220578007 +14975796-32130998 +3656140012-3659695913 +312918300-331632497 +4196450046-4203629768 +278798522-299335683 +352452453-361151561 +1501985847-1561887967 +3972783164-3974676466 +2875178954-2888406923 +1648379122-1650201083 +1230376291-1239610451 +4042128282-4046828578 +203847063-206685243 +1210501225-1226014714 +448085570-489248328 +1828275465-1828377861 +3014717077-3015329919 +1454866522-1471033972 +1465836464-1483415293 +3653260817-3654409731 +2056154202-2056719190 +4043749730-4047049801 +140558284-142908087 +214891820-219953023 +2050270365-2052917450 +2688443884-2703056941 +8742991-8883499 +192152950-194529718 +1174511626-1193269330 +331632498-343474169 +3813378364-3820993607 +1306694954-1313550446 +103801749-105999226 +232882836-252000431 +62875173-92445303 +32130999-59648491 +2039846746-2040660834 +2040618479-2042227833 +1267828242-1268638794 +3724585570-3755583795 +3015233892-3015465122 +3029147430-3046792177 +6572279-7930589 +2973982436-2979652885 +2360205412-2391769777 +0-1847080 +68510492-91790786 +1930322292-1930943704 +3178171858-3189765272 +492610680-500933487 +453226562-487560847 +117649826-125598812 +1708828053-1717568941 +2478752789-2482439160 +492550604-497775336 +1662381777-1663424714 +540891625-560888932 +725268068-735514807 +2874824446-2876835138 +4239505787-4266258938 +2676568644-2680498302 +4235859233-4258168589 +2609712446-2639427050 +3280862134-3291104119 +3770037523-3791717842 +2674180331-2699814013 +3479546057-3487229794 +2584794634-2589869676 +3118642650-3122375125 +2875715316-2886003370 +3001438362-3004087200 +2727359607-2729064289 +3404295783-3405443957 +3433378532-3444693184 +3786225581-3789622764 +3469569557-3475027155 +3477861475-3497047373 +3594949727-3645723583 +3026813578-3038331328 +2964208749-2968270076 +3262965035-3264162702 +3143170533-3162317153 +3543029824-3546691019 +3529743404-3545604807 +3180438225-3183736951 +3233823029-3240497576 +3401028250-3405865033 diff --git a/2016/day-20/src/main.rs b/2016/day-20/src/main.rs new file mode 100644 index 0000000..77fb307 --- /dev/null +++ b/2016/day-20/src/main.rs @@ -0,0 +1,41 @@ +use std::env; +use std::io::prelude::*; +use std::io::BufReader; +use std::fs::File; + +fn main() { + let args: Vec = env::args().collect(); + let f = File::open(&args[1]).expect("Could not open file"); + let reader = BufReader::new(f); + + let mut ranges = Vec::new(); + + // Assumption: No overlapping ranges + for line in reader.lines() { + let contents = line.unwrap(); + let parts: Vec<&str> = contents.split("-").collect(); + let lo: u32 = parts[0].parse().unwrap(); + let hi: u32 = parts[1].parse().unwrap(); + + ranges.push((lo, hi)); + } + + ranges.sort(); + + let mut min_blocked = 0; + let mut unblocked = 0; + for (start, end) in ranges { + if start > min_blocked && start - min_blocked > 1 { + if unblocked == 0 { + println!("First non-blocked at {}", min_blocked + 1); + } + unblocked += start - min_blocked - 1; + } + + if end > min_blocked { + min_blocked = end; + } + } + + println!("{} allowed ips", unblocked); +}