aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAleksa Vuckovic <aleksa@vuckovic.cc>2023-12-19 17:08:00 +0100
committerAleksa Vuckovic <aleksa@vuckovic.cc>2023-12-19 17:08:00 +0100
commitd7d0ddcaf91cdba5b34fa875592fcb933b6915f1 (patch)
treef124f4ec4f488ba068719ddc0d99edf3223f4934
parent457c2af984ac34e6615a8b49b953c4499809255c (diff)
-rw-r--r--input/day17.txt141
-rw-r--r--input/day18.txt602
-rw-r--r--input/day19.txt733
-rw-r--r--src/day12pt1.rs5
-rw-r--r--src/day17pt1.rs74
-rw-r--r--src/day17pt2.rs80
-rw-r--r--src/main.rs8
7 files changed, 1638 insertions, 5 deletions
diff --git a/input/day17.txt b/input/day17.txt
new file mode 100644
index 0000000..2440164
--- /dev/null
+++ b/input/day17.txt
@@ -0,0 +1,141 @@
+112122213334114113231321113242442532114231435134313123422531466634524341365435226414266142534414424454223435252235121122412212321113333331322
+223232213233241232223442321443443213241415425134452545521652444356235262253644142626141551655514435312312325445125353434124143233211232113333
+211213214441123212122221154421231255125552335213135145221152221555311336145563141322415243442545415433321515514324222342443413124234411332123
+131313334321312411414211223544553144245344433412164431622456356541225525241612614244464345425154453425541313132514552342123141432344113233321
+111113112343343311214243333415452215523324216126534451321114612342532211114446546111426124124133263133355511145531124154124223433321232342331
+221213233112134144413533333233441132153566413136335636542312215222534622666142354151643636433123324415532323355522333345421134232212243234332
+213124343224222223453324145323112233253615131241326436323652613243124452252556561345215556214163546142251544341332435552341312311341311242433
+232442112421414214235235535351225513632421241545535454262653122656213436336213253565361263333423411454622122124255111454533244122222332243112
+124342241222442141523553131335425436256264245131616344414622444323334661544566324434213252644342151315522665212353444312155325343224134223143
+113121421144241234221422334223321664536152461265363514423421141627531116552661735133255163221316232553164131254221455144312333342133312324234
+223432424242434452112232342511562316535244164413161633666175562412475177464412157124654545451533231514162162534455455154343315513334234133423
+432443311111134434532153445151333416134532661123445463436425756534173755562221337751133141134233543454326234111642214531541223424344433132324
+141431222332434541355553522346261125611116555544265116475145413757247625144415741445145636351653211116422641315241452541121545255324431444311
+221214341124323143353552332435256554655566364623732257151431113223726747124526431162317573261463562614534211222354625434552515111451123343333
+113413432244251354425335233316443432621432141342641274641241223631514614324372743726752436355566121515553631416333523525413142232351113132214
+121424124215414531434215565214314325121452322537256554252656464173135421422213247416723532755135163213662125156532414411515352451154331213411
+433413221512223555141245335413113266426541712322333573342245651321116443514346475312473232533324224542412312334622423444244251353232154421421
+441313143341555322135314261224536116411571453471626113114325633616554343344734736654674331536223135425161425663665241534441152155145521124321
+313434155451145555521352512231526632411424122612262166342451461543251665133652546121661463626353126646125546655624255256425243514143424322421
+214133533545351442336114462114436664553553364141514631662747162314755263785436712515643167172757461327675265116163544421256513552321411242114
+234244434234433223513151266262315532163634612453471235252112422636575445626464264664755147361144133516633433115414114556666624315155541411144
+213122135421411133636161216542616141216711613272221641337352468367222337365685762673527335551556314275715541124636631345322121334121414543344
+331412322151512132633113554245514442557375223174627721256332578558834826365585227873457541653137751123251632563115663126322312345152333112411
+233322523333314526643621225434327374156742647737367734268382644753476883753563867433834828646557444166256374126352555325143525444113344315423
+313244221314354216454166632416477244532735636662647378334784284287764828563888552657323537267263566441267547777331243113236216214521443154234
+121334252152341432265646423317156713347454314726282383522585764278683342278634528375544883844363673526566144451741246332566525354514211525215
+233123131453511451154635534463531457662465163674385887633546488537863387775773644347363643383233243221455553446214266266365545236544241224454
+135133543152166422162652446136237363271215335475834758565272438874554585838645336675686368367662254561156235442774322532614223541425554354211
+135114443351266246234124332164463452714537353565722645268825223462334684527468773725253385584437388753666167717616367422136534464124221255154
+143211552113431335246161252751442755515356873735466733762642822643376633865835866258383423734766223443517715432172173226565666612135421142512
+522124444145322162436434367444547637513588464788458227765557564677845354889774867886653262846832288773764622443272431516151353613122434523142
+425135524366644246446414436625731112273572384237436586752722855596948968795785539548768822337823375835734764733563747665123222464552252454111
+141553212252525124636317752717416337578526824658568358333334975775535333336455453785766472827663336372238237746663222161666543555452335141524
+214425312565511541216241255761553545357572677756658483665857939373446447969897479456949734334458244473527726126577716551626364164343434541342
+215454511255333546211373156576753767746766243337277873455396879559858884569847593656346585362575654637328852454144255442446263233546255241532
+431315542114461265413353242417763654728735538858349557834586899333733555998884679743575576665365425435885333416351362371556142543446624325311
+441132211244444552527276456342447554548445886353434456936496689543479958679987675694674838689466724247828377642262637431716153545436542222424
+242431331426553316262677722567567677758462448438375744636357437637737547354954866633357437376596228352258264236124256266764226225656131241355
+323121453453535426317775721632377827877678522767568893488453445548375969395876375743848879797757958435424472572353376162227161161335141552343
+525113361336514413264142455647544454374577823689563368647958663483543563484633534964833647644858732558882683745555517251673646445331335215333
+332436116534513543243245763415468232724446234767873689843947686869756485746936837748455389455984597564635326653622427733567742315266623124552
+321423364544664443611566475357636824527336233645598757369976493899966746787565875656384557859777878343528563833325741753457572633216533413341
+232444445132316614542765745137364645458264896547383938669684987856485459845759546684539565534845435684545657526432633116756767425333554426214
+312323366525255545664713421226262764385826634944976757986569549474696494754644995844646943559577964479683337226885657311316544114315326122433
+432532261413643465625757211268874848228698443668399465987788645575689745947548565755485465397495575674665353433655762416747632473364142144533
+442666223614262643462522226486488384463454565653955484767795848678845686984855849668455463735654889387766447766255583147153577766455625146515
+241656226263364273264413544437366474543559376577358375487669468644447957458647565698648497334734879767677482242367842253724113176113362532152
+331356316444161717624323347727385437475466598344693557544648485864547555596559754777687957685885645983875974733855482347552531261634511313351
+346623463124144563734426275453557883835397748845946966745975469668855947499944995798945597997346576885837964343463786334126561551663634413422
+346546632246644627255213836455427753749333383937667887769757654445966667775646585769787768787488787799367848673688335233117135345526131136153
+321521223351171657635676266387762764834738436664947975977864775568997766948589644675467698649685464757489545333883665233256774267421126442615
+113454463613757576722122785286836774833494358636946857547476769968595989558574578979448756994784974836736975365462734784434474513711256544423
+261361441535263216375222433226638435468558537948779999578855958996578965598656769984659644867675987896596384385652246536756523417615316524345
+243161145311157631736252633763367473994557635765984548644954495699656565865587897648896679588968478774847436654827333666754351552634653446133
+226135365151451336224542858636357589584836469845777988469898676898678586599888575995968875447865993939376459987547637838371633417553455165351
+542126162221773443661768253224227688939876348997899659665468957985655686878579787698796575897755989888475469336685447847814527623532565436416
+212166364431161235425264647844388856793486848588958974548786599588595679767685676579784959898484675386649958763773333235646732553366114621363
+465356463267563471141522627635633838797535785459858698678766597859687965898965666756869748769445499684347889436828482737675731247144546346352
+464452162137337235656872758766255598678375965555784687675588769566598558769566595556797845998858774686795836447277575442643117266635136161643
+315236316177133415512254444436723883464443356589575656966676997886599769979597886585865794557747498864884835343375623764887347373117765541634
+543345565165721223367426422848438335784567747859894978569655867996757859699785555565899597877564766658794499743854575825264575313474763653226
+223464154576341265348276273438888473567993865478788769859799979969799787778957595579669695758458448698497333976974768563237545415713716614432
+526422665152337417376628444748664768456684687589957675865575575978999899798798895669985997889666757779438875598354344685556177743735626664313
+422466143331242541215655483447574359868594865568857985988785786758968767667987667688995859674754584744386576566825676825446133156426211325144
+616312315445772563568428468343494898673549685477858678855859576996799776676988989576855967894556694944775869596967632653456753216516325236265
+666654466273114135457582352222939756993646866879784557779765866776877899676968799678598569574487494799779674439773248573873773514243776563141
+646364141335745273254427368334873939835375794956585858689768869896987966886969889967697877578445749766985846845334486384763726635173455311633
+523556335277231462634722574533767497484597789547985699999765887799799977689687796579988897886578856746886867974944356522882725316674455563414
+116613413717173656388858823635379353844846956765756567758859958899699696986669767975996755866487445664694763789547865568347276743744163156154
+215356433444157176447344872278783673778596758567488565767957788966867899898687966695885557688956974965655397367468286572642264415742536431213
+354345565631277522377584543663753534935878564554859596575866566969987787768679769789867986657864644689563564596862833262674361644525265452154
+365245225411532566167624768678567473848757668785897585867997687696897999987696867689878585569968457655795795769677374587537446765626756416613
+654345135377622536582857544283864388873695585888788586858589768798686668977697866876569886985859654574485638466892747766245571245512351444266
+142455453364453354645883536386377533856985875557544666579568586697776896979799668795899998884545464858559434759642253466336835515614225134241
+166111335622635235382757544483453446779865995546685886597577897897886879997988789656559779694544849958433859749678585854526444636262272322151
+114123615542731734345363748253393343788459575898785876889887759866986998686866799995557677674769444777449778799487233856547565647415251555613
+225655412425222154528887828265459967598679846458787686577875979967987899696976689975556958788888957645833848879363487267375572522573754355214
+236113423313264417166673637432538857534768445878846565887567778998889766996688668997559578698655666548966788346996387466287511212346363111546
+246452426362535412434734877827987759568349697554884498877569698696697688679967776788867568586447648946473376743443326848223344317536552656551
+363262151626241673313682523373766868637935987748764459965566968797969676767866858998976779598567744496464763834933652652285122741473165662252
+141131526142762255724844244565248553995599885586564669659758667779998679768985997989976667764957468756878455785572467485247217651126563562455
+454316423641632142335572574336483878586959987448576455887995997657585867886699769789589567586784596499537895577926373466353764335464216546614
+112563253263662275723422683745849475663636586667585648757856899757689997976669575896866555759894856495984549759652785836232277444135525656565
+151146312233731235567683772855767685549774645869975547789869668665596857898569695759595698494896567589476747873425327267251316343461142634624
+113412135417256533734554576432276369847883699866758876457557675657756665756959879668985778456685788836697435775527237725385741313113213136136
+226464154124725656146657853278827553539444565748486699545699787657966768887676669589597476578788864355846969536282253285446355142577144454553
+311625513563634244276562467363762458744946859697584549785685558767956698687556986779969847454965647477564974668577578356633156776235154624415
+561312322127427517227683337578533785985343389586665554478568588657555779565986889995987557874486879476949833342723582358356147161347223642445
+142434644167621215241443466466565953634859966476585944489869988998567979776575698676659566478455784576737658935678687457467662242112433522115
+163462265125631445715772844427478846986598884646996997679495585677765987975858998878965877967856566699887383878456787685562262374546512426365
+361132545144715117335722483458665785767956544354999949479474475887976777965765958877556856579868956637857483376632742886555242224775364114335
+243114541463557315742218272865587239786849337735747976797759559976565965795568578579947654869644699836374736346566826385645163654613514412545
+454251352263426736264511474636588585849435397368577456996969588795677756545854645944964545459485874685569349342835674773127525314211423644552
+242532214563433774525353425644764782587584475648957946754885646498659968649466657678764969464667884997754843657434547567233377627331411466152
+424261164452251233542157535362337422236897757385959444756787876967495545778598678545797649487937974367447327665772782637231123771231236314444
+515333532554441217132351454364243555453754889336963656799449585659855949465676765845576967454998667958795833273725463715333535216153632232631
+323653653663135417725772243453686377733868439784777765446647897447484655964677548677957878838594468553433542737786744533543511156543261115212
+314354615336445277161562753758888632877858536933363796976477946658899998858664676744864465597776438993554862358426232251747116756556622335211
+224326523214316315365567252263738265538478658853476636698574696676574455594454755478566458355653334745728683667882725516742463335223461362554
+314321255311115543233214175443238745634774535759554735596357966846887769548485857786736944595655348554283587374434253554533432521351436626653
+251523263446646635712631434244685648455672698773346549593393548948967459856768685453776593988693545367243675434646373437732253346432236561211
+514414556455426446424517712777688337787886756936385638444945374987997777484457644789963579396768536784266555347745755734575433353616566636125
+341442461553616515152114457451274538274432425355655376745568387986578777555439793677558968596979849656756367788367617324343355146512232613155
+451312625663366356331413344567262832435478573885778985935593968796946796855783375339986637865787386876858332353422311323477475535531631554325
+555535433215113453162744225317474765772773287267679555664984633484767653866876487973489333499399733384372472562614345313512343441226222625453
+134323443422151164266762657416335254525855533627387447637339976347633759693383574677544756767474533676542385827355547427776445634421224311543
+435451426143434644454413441321634623866587858343599978369473746739655469786988388393779839773433228626478324761343772471174312266655616233341
+214451141526326626612633442633654645335867755286855346495766357576868967978963587459555756596476642628527625763767277135543543256115643131512
+123212413143634235143642117554612458282588875582543458775836863786445879896888734739878843488566865372365232754771556766521461436242325435434
+314233354152665621655153572764332535454672752628346524438648675858549467886376396693949345274522842326684733315623412521264424231124153544435
+554135154441514551543522637255534643368454536376834673635588465766357573859979838789935582276642432344458727516723736635626555324225111544114
+525343313116145613264313626473374515754364374877556486222727796668887944387975364675282622578246436473467566567324323644424665356222513243251
+352145411416251342363636121621276145164435466356646777633878785285839734683434436576773442825766377586742337726314312245332246131515214343525
+411153243354466432166256322112413463262312346674238555637277472768844684438453444682456258678886743473461572525526515713623452225331234551544
+214252522333566532311514661467135411376421456832756685768664764463464676875367562354786635638736664261376641212724765131623153465635355553332
+214311541222124266346613631213231615413373744874576427582536544482285738646572838275738656877727284537122167637351556554162515123232312515255
+344234152531331666331424646371474716677335417825367237526254544568262443223278667376488622345584332242615461544126414313536612532523251351412
+244441541231313231623634265666645251354155351353364653254822874744356677326454455587877274746725556157173577535271154454651422121455412123334
+444423555552533134251134545546524261672543466167144785557575372774256257786234663348274247487232313736245273444114342455651213153215124451522
+424235123244352114354133141226524577245146413271312266534886845222748584664484667735467747763147124165572112476512151411662151333131435331234
+441231421452513124245654613435436743711751721346167231663684332846548846735723855276458443254666543467514553172455326424353433144111455335324
+321242321244525315164331255323336223136624645164227454347367254562688587874275746787345361454562331416355475656466333354415421531121122554422
+224112254351245222534522242253551525175745126754732226213665123724334522573243565527514746164444223476227754153462142353644143522332223234334
+332322515133214141522643645363424163427156665565317662637525352635365274443472676533131352212536671144714163665565251663316251542352143423422
+432433422325353224421334464435215222437136173637131546633213744522122614145437423243456753173714337574557346165451463114454151235232553412414
+413123234525235142223141562661646451524125243571165223263374632672565723354135714564746644251135174322543131162323355255515533111551432422133
+242442431514515344545215552641165651554646264636313433656356413636342255666265574727452272546551631252355623334235114422425155232245153314224
+431433434314524114543543532555621254623334667361242744546316327671552375621361142252766135134431175645241333634311435651221521443453344134231
+411444223334455315351214145513113133134426232616747561473575561172476716457177475612674732411377534342435633416264465153342345222211433122212
+321113244431341555121212444546643562141424556113255327445344445624726766354156342312675156633713511315563532311163461342123315431554421412321
+124311432212244442522353422134332444612314255526155553332667175135264134174412426763267627272344256226156536525244244331411113141133413113433
+133133214214445143123215233434623146563514611356435543211273647473565127657144764541613452333345263535626314114554523334424314442314411444423
+143344322341314112553114345545132255233416546133633221253246241526276124126314765421564432622211461632326412416213142152341522553423223132111
+122421233212214351113253432242223144331442466145551626631662355755374756462133124442264451516441245334132462134523223441545553114422142133334
+133431211224134334112434322412454341125616362131644625246115242615314331614324423162462563154624332634561613545451323234534414443414332321443
+311424123331311414423153433545414512563145366263254464653425211664355456162355512552665342432164532655454461342512555333215434342321421121343
+221132412144432132224253322534451325325121436131114354623121166464434446366541142625524554662234654531365323153131125152222342412144314313332
+211213424114344343432524145534213543534233642253644462635534341462666125141232521234166344431635622341132441552122444315522241244234241434113
+121221444111343131433135153533121134345312123152656155343563142155266664666565134642132434545145326334421115322243252455113322141341131432213
+211121222313331244411335525513412252235422253253356654655133364333641616114266625352332235433541125143555112514152151151212112423144412331213
+321132114324214421224442245421251324255131123132336164436334161523555436463354441261613114142623515341112345415442434312244224122422242322312
diff --git a/input/day18.txt b/input/day18.txt
new file mode 100644
index 0000000..8c98512
--- /dev/null
+++ b/input/day18.txt
@@ -0,0 +1,602 @@
+L 4 (#6f81b2)
+D 5 (#295ca1)
+L 2 (#51f302)
+D 6 (#295ca3)
+L 11 (#604112)
+U 4 (#711a63)
+L 2 (#113be0)
+U 7 (#6d3273)
+L 7 (#2180d0)
+U 2 (#51c613)
+L 10 (#0e0770)
+U 2 (#10e181)
+L 3 (#485450)
+U 10 (#83df31)
+L 3 (#1ea290)
+U 4 (#235d31)
+L 2 (#09ca50)
+U 6 (#06daa1)
+L 6 (#703070)
+U 2 (#3c56a3)
+L 3 (#20af60)
+U 4 (#152273)
+L 6 (#880cb2)
+U 5 (#451b63)
+L 3 (#880cb0)
+U 5 (#48c2b3)
+R 4 (#397f70)
+U 4 (#069351)
+R 4 (#0fe520)
+U 10 (#7f2111)
+R 4 (#0fe522)
+D 8 (#1d4c21)
+R 2 (#4a1650)
+D 6 (#3966e3)
+R 5 (#00cba0)
+U 7 (#212d93)
+R 8 (#273670)
+U 3 (#6c6c51)
+R 7 (#1bae00)
+U 9 (#1053e1)
+R 5 (#4d2030)
+U 2 (#7cc033)
+R 6 (#1659d0)
+U 4 (#447301)
+R 5 (#611880)
+U 11 (#25c2b1)
+R 5 (#0ed680)
+U 5 (#7b67d1)
+R 2 (#0ed682)
+U 7 (#092ab1)
+R 5 (#4eb230)
+U 3 (#559ba3)
+L 5 (#103b62)
+U 7 (#40fb43)
+R 5 (#103b60)
+U 9 (#583153)
+R 4 (#4cc440)
+D 6 (#4c2dd3)
+R 7 (#02e430)
+U 7 (#2545d3)
+R 3 (#5edcf0)
+U 3 (#79e7f3)
+R 5 (#10ccc0)
+D 10 (#6d8b11)
+R 3 (#3f7ce0)
+D 3 (#240201)
+R 6 (#23cec0)
+D 5 (#59ce81)
+L 6 (#370b30)
+D 4 (#104291)
+L 9 (#320380)
+U 4 (#458441)
+L 6 (#9263f2)
+D 6 (#190861)
+L 3 (#9263f0)
+D 6 (#444301)
+R 5 (#289070)
+D 3 (#096fd1)
+R 9 (#79ee30)
+D 6 (#22e183)
+L 9 (#08b990)
+D 6 (#895df3)
+R 5 (#164c60)
+D 4 (#143041)
+R 4 (#4d7220)
+D 5 (#7c1e61)
+R 5 (#1ad4f0)
+U 5 (#0fc2e1)
+R 6 (#684712)
+D 8 (#012521)
+R 3 (#183810)
+D 6 (#387cf1)
+L 4 (#070d90)
+D 6 (#1cdc61)
+L 6 (#3345b0)
+U 7 (#46fa61)
+L 4 (#0c1060)
+D 7 (#38a731)
+L 5 (#88f420)
+U 6 (#2aae11)
+L 3 (#4aee92)
+U 4 (#2f2bc1)
+L 5 (#2dd012)
+D 4 (#2f2bc3)
+L 3 (#4f8b92)
+D 6 (#0637f1)
+L 8 (#3fa330)
+D 9 (#433fa1)
+L 6 (#4ecdf0)
+D 8 (#1e3aa1)
+L 6 (#847120)
+D 7 (#4673c3)
+R 4 (#014b10)
+D 7 (#836133)
+R 8 (#259bd0)
+D 4 (#155de3)
+R 7 (#685880)
+D 4 (#0c3403)
+R 6 (#45ca80)
+U 6 (#5d3e63)
+R 6 (#3314b2)
+U 5 (#210823)
+R 7 (#3c6db2)
+U 4 (#65ddf3)
+R 8 (#6f8260)
+D 5 (#42dde3)
+R 4 (#037972)
+D 8 (#24cd91)
+R 4 (#5c2e72)
+U 3 (#24cd93)
+R 4 (#4e7b22)
+U 9 (#066b33)
+R 2 (#040360)
+U 2 (#3d4c13)
+R 5 (#8465c0)
+U 5 (#2c64a3)
+R 2 (#14ad02)
+U 6 (#356233)
+L 5 (#4ca262)
+U 6 (#4acd83)
+R 5 (#202ce2)
+U 10 (#4579b3)
+R 3 (#3fe2f2)
+D 5 (#205603)
+R 4 (#3319b2)
+D 4 (#692d23)
+R 5 (#2c7bd2)
+D 5 (#68d661)
+L 5 (#3742b2)
+D 5 (#0fe0c1)
+R 5 (#452892)
+D 8 (#78b723)
+R 3 (#37a0d2)
+U 14 (#3768e3)
+R 4 (#270100)
+D 2 (#38ff13)
+R 6 (#3dcc72)
+D 3 (#2e1723)
+L 6 (#3dcc70)
+D 6 (#2cdba3)
+R 8 (#4cdfd0)
+D 5 (#17ca31)
+L 8 (#419790)
+D 5 (#035321)
+R 6 (#397212)
+D 5 (#914b21)
+R 7 (#397210)
+U 3 (#14f231)
+R 5 (#5a4a50)
+U 2 (#34d9c3)
+R 9 (#320cf2)
+U 6 (#626173)
+L 6 (#320cf0)
+U 2 (#2a1f73)
+L 8 (#3a33c0)
+U 5 (#2ba8e1)
+R 2 (#68d670)
+U 8 (#528601)
+R 5 (#0ae4b0)
+U 2 (#15c2f1)
+R 5 (#02a230)
+U 10 (#6338d3)
+R 6 (#078062)
+D 4 (#72c223)
+R 2 (#5846a2)
+D 5 (#39cd03)
+R 11 (#464952)
+U 3 (#660903)
+R 7 (#34bd02)
+U 9 (#2a59c3)
+R 7 (#751042)
+U 8 (#562a93)
+R 7 (#0a81a2)
+U 4 (#4d15f3)
+R 6 (#67cc92)
+U 6 (#4d15f1)
+L 3 (#723672)
+U 6 (#0566d1)
+L 6 (#6cf2f2)
+U 2 (#582a11)
+L 4 (#74a212)
+U 11 (#103141)
+R 6 (#287b52)
+U 4 (#84f181)
+R 7 (#2eb650)
+D 8 (#903541)
+R 8 (#2eb652)
+D 3 (#103391)
+R 3 (#157392)
+D 3 (#0789b3)
+R 7 (#1d07a2)
+D 6 (#61e393)
+R 4 (#7881d2)
+D 2 (#3f5893)
+R 7 (#286722)
+D 6 (#381f83)
+R 8 (#4a7da2)
+D 2 (#463143)
+R 4 (#0b4032)
+D 7 (#7e9143)
+L 6 (#355d82)
+D 2 (#02aae3)
+L 4 (#11bbe2)
+U 4 (#67fa03)
+L 10 (#11bbe0)
+D 4 (#3e2733)
+L 5 (#407c92)
+D 2 (#04db23)
+L 5 (#386842)
+D 8 (#4d5491)
+R 6 (#4e3752)
+D 4 (#4d5493)
+R 6 (#409f12)
+U 7 (#873c01)
+R 7 (#4d0672)
+U 2 (#873c03)
+R 3 (#238232)
+D 5 (#2ec8d3)
+L 6 (#1a84c0)
+D 6 (#4e0e23)
+R 6 (#207ac0)
+D 3 (#234f73)
+R 6 (#257662)
+D 5 (#665b03)
+L 9 (#257660)
+D 3 (#1154a3)
+L 3 (#1a2570)
+D 7 (#08f133)
+R 6 (#7489d0)
+D 11 (#0d29d1)
+R 4 (#3b6d72)
+U 5 (#5ad2a1)
+R 8 (#4f1132)
+U 5 (#021471)
+R 4 (#12f0e0)
+U 2 (#1b0d21)
+R 4 (#4a05e0)
+U 8 (#4d8d53)
+R 4 (#69d810)
+U 3 (#4d8d51)
+R 5 (#168f40)
+U 3 (#3b30b1)
+R 8 (#5dc4b2)
+U 8 (#289f01)
+L 10 (#7f9962)
+U 7 (#04d161)
+L 4 (#8a7ea0)
+U 4 (#043f51)
+L 3 (#7d8e00)
+U 3 (#1542d3)
+R 8 (#13a2b0)
+U 9 (#50e003)
+L 6 (#105580)
+U 4 (#159251)
+L 11 (#536490)
+U 3 (#69cae1)
+R 10 (#1d0b70)
+U 2 (#27dc61)
+R 3 (#2e41c0)
+U 6 (#01a1a1)
+R 4 (#8dfc90)
+U 7 (#2c9351)
+L 8 (#166b42)
+U 3 (#6e2221)
+L 4 (#5b1e42)
+U 7 (#6e2223)
+L 5 (#3232c2)
+U 4 (#520c71)
+R 9 (#2d1100)
+U 9 (#45aaa1)
+R 8 (#76ab40)
+D 8 (#2ca591)
+R 8 (#8dfc92)
+D 7 (#21f501)
+R 6 (#49ca60)
+D 8 (#887f81)
+R 9 (#48c220)
+D 3 (#887f83)
+L 9 (#1d4540)
+D 7 (#64f8f3)
+R 6 (#29f2f0)
+D 3 (#3672b3)
+R 4 (#5b6a30)
+D 9 (#47a913)
+R 3 (#5b6a32)
+D 4 (#1c77c3)
+R 4 (#29f2f2)
+U 13 (#14fa23)
+R 5 (#56ead0)
+D 5 (#258123)
+R 11 (#6e74d0)
+D 5 (#258143)
+R 2 (#1127e0)
+D 4 (#536d63)
+R 4 (#7f9cb2)
+D 2 (#08c9d3)
+R 12 (#11c220)
+D 4 (#0d4613)
+R 4 (#1117c0)
+U 6 (#63d6e3)
+R 7 (#079410)
+D 6 (#140c73)
+R 4 (#518310)
+D 2 (#2f5813)
+R 8 (#3d38b0)
+D 8 (#33bca3)
+R 4 (#2fc890)
+D 3 (#199091)
+R 4 (#3c9a40)
+D 6 (#199093)
+L 12 (#671c60)
+D 6 (#6314b1)
+L 3 (#0ddda0)
+D 6 (#2625c1)
+L 8 (#67eb80)
+D 4 (#5f03a1)
+L 4 (#402810)
+D 6 (#6622d1)
+L 6 (#3c8210)
+D 5 (#1f1501)
+L 4 (#386720)
+U 4 (#5e9f81)
+L 3 (#4658b0)
+U 7 (#50aee1)
+L 6 (#3b36b0)
+U 4 (#2d3bf1)
+L 6 (#485710)
+D 7 (#5b0341)
+L 2 (#826220)
+D 5 (#299251)
+L 7 (#6d7080)
+D 4 (#20d6f1)
+L 7 (#547000)
+D 4 (#7ded11)
+R 9 (#19bc70)
+D 3 (#119381)
+R 5 (#28b900)
+D 6 (#2a6a61)
+L 6 (#11d062)
+D 6 (#6de691)
+L 8 (#11d060)
+U 4 (#20cb01)
+L 3 (#44ffd0)
+U 12 (#5555e3)
+L 5 (#567c32)
+U 2 (#24a913)
+L 3 (#567c30)
+D 5 (#3f1d03)
+L 8 (#6cc840)
+D 2 (#4f6121)
+L 4 (#427f10)
+D 5 (#662b11)
+R 12 (#274300)
+D 3 (#4d3db3)
+L 5 (#8269d0)
+D 3 (#0a29d3)
+L 4 (#8269d2)
+D 4 (#4cad33)
+R 9 (#5897b0)
+D 7 (#07e1b1)
+R 3 (#3b3d00)
+D 4 (#502e91)
+R 8 (#2afc70)
+D 5 (#4c0471)
+L 4 (#0abae0)
+D 2 (#7d3af1)
+L 9 (#085c40)
+D 3 (#294e31)
+L 3 (#5af032)
+D 6 (#15b561)
+R 6 (#3d5552)
+D 4 (#538691)
+R 5 (#1ef0e2)
+U 4 (#4ad471)
+R 5 (#365c92)
+D 3 (#0b4651)
+R 3 (#165bf2)
+D 6 (#7969a1)
+R 5 (#258320)
+U 6 (#3eac11)
+R 4 (#7f1160)
+U 6 (#3bbb51)
+R 2 (#2d4ac0)
+U 8 (#7a6763)
+R 8 (#320fa0)
+U 5 (#497d21)
+R 3 (#4affb0)
+U 11 (#60bfa1)
+R 7 (#4affb2)
+D 4 (#058041)
+R 9 (#085c42)
+D 6 (#7b9b61)
+R 7 (#1b6382)
+D 7 (#69d101)
+R 8 (#08bdd2)
+D 3 (#7923f1)
+L 5 (#0c8052)
+D 12 (#047191)
+L 6 (#217442)
+D 2 (#12c433)
+L 8 (#6a7582)
+D 4 (#5c3823)
+L 8 (#5fd572)
+D 2 (#1b1723)
+L 6 (#5fd570)
+D 4 (#5d5313)
+L 3 (#3443a2)
+D 6 (#3865d1)
+L 8 (#5d30a2)
+D 5 (#528a23)
+R 9 (#64c9c2)
+D 2 (#7b78e3)
+R 6 (#31c952)
+U 12 (#476ac3)
+R 6 (#57aeb2)
+D 7 (#537b03)
+R 2 (#1447f2)
+D 5 (#582521)
+R 5 (#12d112)
+D 7 (#4424c1)
+L 9 (#5c3792)
+D 7 (#53d2c1)
+L 3 (#5c3790)
+D 10 (#519051)
+L 7 (#218392)
+U 10 (#273bd1)
+L 6 (#2d6cd2)
+D 5 (#4ec1d3)
+L 3 (#8492b2)
+D 5 (#4ec1d1)
+L 3 (#171a22)
+D 3 (#0002d1)
+L 8 (#634852)
+U 2 (#0ee1d1)
+L 6 (#3d2eb2)
+U 3 (#04ea01)
+R 4 (#607f20)
+U 9 (#7e4251)
+R 2 (#607f22)
+U 4 (#0fa471)
+R 3 (#2d0682)
+U 12 (#4fbb41)
+L 3 (#005e72)
+U 6 (#4c5b61)
+L 6 (#7f5b72)
+U 10 (#33e641)
+L 7 (#4240a2)
+D 3 (#3c80b1)
+L 4 (#24d372)
+D 9 (#3298d1)
+L 6 (#055d42)
+D 4 (#41a9c3)
+L 6 (#4ace92)
+D 3 (#41a9c1)
+L 5 (#49d532)
+D 8 (#2d69e1)
+L 5 (#11cb42)
+D 9 (#6343c1)
+L 5 (#5aec92)
+U 8 (#727291)
+L 7 (#575b02)
+U 8 (#2d9493)
+L 5 (#29b0e2)
+U 5 (#773de3)
+L 6 (#448ef2)
+U 4 (#30b9c3)
+L 6 (#453232)
+U 4 (#48bc11)
+L 2 (#3e79d2)
+U 11 (#7ccff1)
+L 3 (#5516d2)
+D 7 (#3596c1)
+L 8 (#0a44d2)
+D 2 (#363c41)
+L 6 (#83a172)
+D 4 (#23f181)
+L 11 (#8de640)
+D 4 (#312f31)
+L 6 (#7ace72)
+D 4 (#2dc461)
+L 6 (#1a77a2)
+D 7 (#215151)
+L 6 (#8a6f80)
+D 3 (#41f301)
+R 3 (#0c6ef0)
+D 7 (#41f303)
+R 9 (#4b0960)
+D 6 (#5ab701)
+R 12 (#46eee0)
+D 5 (#0cf881)
+R 5 (#4175a2)
+D 8 (#08d7b1)
+L 6 (#576f32)
+U 4 (#5b2e81)
+L 3 (#1609b2)
+D 4 (#548b91)
+L 7 (#653f72)
+D 3 (#503443)
+R 5 (#42aae2)
+D 5 (#5f85d3)
+R 5 (#0efc42)
+D 3 (#023203)
+R 7 (#4ce242)
+D 3 (#914443)
+R 5 (#379b32)
+D 8 (#914441)
+L 7 (#23df42)
+D 3 (#5f0713)
+L 10 (#181532)
+D 3 (#0caa31)
+L 5 (#25dc72)
+D 7 (#1f7ef3)
+L 6 (#43f6d2)
+D 3 (#1f7ef1)
+L 10 (#39ee62)
+U 6 (#0caa33)
+L 3 (#729962)
+U 8 (#08e3b3)
+L 9 (#4abe22)
+U 6 (#11eca3)
+L 9 (#251700)
+U 4 (#677653)
+L 3 (#75e930)
+U 4 (#5a9583)
+L 6 (#64e040)
+U 7 (#0d2d03)
+R 9 (#723e00)
+U 9 (#44b093)
+L 6 (#070fe0)
+U 2 (#42d003)
+L 12 (#5dfdd0)
+U 6 (#16e5d3)
+L 4 (#4a5ee0)
+U 4 (#5c7403)
+L 5 (#623452)
+U 9 (#653f33)
+L 7 (#0983c2)
+U 10 (#2b6293)
+R 5 (#1eba12)
+U 12 (#3f8d01)
+R 3 (#516e32)
+D 9 (#5114c1)
+R 8 (#257082)
+D 3 (#3c6e33)
+R 7 (#541502)
+U 6 (#502401)
+R 5 (#3d0322)
+U 6 (#4eec41)
+R 6 (#74a502)
+U 8 (#3a4fc3)
+L 3 (#29c2f2)
+U 3 (#572513)
+L 11 (#780f92)
+U 4 (#0d9b73)
+L 2 (#321ee2)
+U 3 (#6d7933)
+L 5 (#614562)
+U 6 (#4bdbd3)
+L 12 (#614560)
+U 3 (#3facd3)
+L 4 (#4c7bd0)
+D 8 (#58d343)
+L 4 (#7d48b0)
+D 4 (#05c741)
+L 4 (#2d8730)
+U 4 (#6964f1)
+L 4 (#68bdd0)
+U 8 (#780801)
+L 8 (#3bbd00)
+U 4 (#0296e1)
+L 6 (#0d0280)
+U 3 (#3094e3)
+L 8 (#2581a0)
+U 8 (#6b7e33)
+L 5 (#2581a2)
+U 3 (#4db803)
+L 7 (#30e580)
+U 5 (#4f8f73)
+L 2 (#6ec3c2)
+U 8 (#340063)
+L 4 (#1428b2)
+U 3 (#4810c3)
diff --git a/input/day19.txt b/input/day19.txt
new file mode 100644
index 0000000..055652e
--- /dev/null
+++ b/input/day19.txt
@@ -0,0 +1,733 @@
+vvr{a>520:jq,s<3691:R,a>325:A,R}
+dmg{s<1730:A,x<3350:R,R}
+ctv{s<3757:R,R}
+xhh{a<3542:A,A}
+cpx{m<1847:A,R}
+qqg{a<911:nf,lpf}
+mnr{a>1914:A,x>752:A,A}
+ktx{m<1153:R,A}
+mkz{a>2959:A,a<2378:rlr,R}
+br{x>2184:A,s>3693:A,s>3530:R,A}
+fpk{a<2465:A,a>2524:A,A}
+ffs{a>536:A,a>328:A,s>3058:R,R}
+zcl{m>2554:pz,a>2167:gr,qs}
+lpf{a>1643:hc,x>3626:xxp,mth}
+vl{x>2958:R,R}
+nrs{m>2481:R,x>3117:A,m<1978:R,R}
+sv{m<1749:R,rl}
+tv{x<219:R,a<1429:A,m<2884:R,A}
+nl{m>1827:A,m>1345:A,x>2928:A,R}
+vj{x>439:A,s<2318:A,a<806:A,R}
+kd{s>767:jhv,x<1090:bk,A}
+ts{s<3148:rxp,a>1365:lr,bkt}
+bl{m<2736:A,s<571:R,dv}
+brp{a<923:R,a<1279:R,a<1574:A,R}
+bgt{a<1575:R,s<3923:fbv,s<3953:A,pdj}
+djn{s>322:A,m<1056:A,a<1988:A,A}
+rqq{s<3130:A,m<2434:A,A}
+lz{x>3622:A,x>3296:qt,s>3010:R,A}
+pts{x>1771:R,R}
+kpp{s>1217:A,s<1204:R,R}
+bnq{s>3121:A,x>490:A,a>2141:R,A}
+hxf{s>2885:R,a>1520:A,s>2880:A,A}
+khd{s>3265:bc,a<1211:ffs,R}
+gv{m>3417:A,a>2938:R,m<3354:A,R}
+lk{m<2377:xk,s<3132:R,A}
+cs{s<960:A,x>3655:R,R}
+mh{a>1468:A,s>2418:R,x<508:vj,vgr}
+cnt{x<766:R,x>1060:R,A}
+zt{a>3624:R,x<1504:R,s>271:A,A}
+fpt{m<1199:bnq,x<958:R,x<1153:A,mrg}
+jkq{a>1783:qnp,a>1626:A,R}
+fnc{x<3093:fzx,x>3571:cp,m<3233:zpz,xxl}
+kmg{m<1640:lvj,x>2199:xv,R}
+lkm{m>722:xbm,R}
+pgd{s<2128:brp,jj}
+shm{m>919:R,s<3189:R,R}
+xfr{m>761:R,s>2748:A,m>323:A,R}
+rgl{a<1202:R,R}
+qgd{a<746:hzp,rgl}
+vkj{m<2086:R,x>850:A,a>3710:R,R}
+cm{s<1657:R,R}
+lvj{s>2173:R,a>747:R,A}
+vz{a<2716:A,R}
+nsm{m<2126:A,a>1310:A,x>2771:A,A}
+pk{x>2292:A,A}
+jm{s<363:A,A}
+hp{a>2641:trf,mh}
+nlr{s>2969:A,x>1304:A,A}
+hx{m<3078:R,R}
+pjv{x>253:grc,x<97:R,x<193:A,hz}
+xrb{x>3443:kn,A}
+tx{a>1279:A,dcf}
+qjb{m>1551:qfg,qrq}
+ftr{s>2830:nmq,td}
+jvn{s>3843:R,A}
+gsz{s<2923:rfs,ts}
+xhx{x<2340:lj,A}
+gbn{m<882:A,A}
+qvl{a>1697:hr,a<1466:A,a<1601:A,ll}
+jh{m>173:R,s<564:A,s<797:A,R}
+vgf{x>497:A,x>320:A,R}
+lgk{a>3109:R,A}
+lbx{x>1134:A,R}
+nxp{s>840:A,R}
+gkh{m<545:A,m>610:A,m>569:A,R}
+zpz{x<3332:jk,m>2774:A,R}
+sqt{x<399:R,m<3088:A,s<477:A,A}
+mpf{a>3316:A,A}
+ckv{m<3213:A,a<842:A,s<2396:A,A}
+lpq{s<2685:A,A}
+fg{m>3358:R,x>3763:A,R}
+cf{a>1252:A,x>346:A,x>212:A,R}
+bcv{s>3187:cxd,x>2785:R,x>2752:nsm,zn}
+pq{x>2944:A,R}
+vc{x>2389:cqz,m>1620:bd,bdr}
+jgb{x<2002:A,R}
+nfb{s<2319:A,a>3483:hj,m>1700:R,A}
+zh{m<664:A,s<2311:A,A}
+hrs{a<340:R,x>1096:A,R}
+stl{a<1757:cfp,qrl}
+lg{x<2142:R,m>1798:bx,x>3110:rg,A}
+nrd{x<2026:qh,m>1735:mrk,pn}
+cmk{s>292:A,A}
+szf{a<996:A,x>1757:bqq,s<1243:R,A}
+tg{a>989:A,s<936:R,s<1091:R,R}
+ktl{x<2556:R,x<2639:A,R}
+nb{m<3571:A,s>1051:R,R}
+vx{a<2247:A,x<2460:A,a<2331:R,A}
+in{s<2569:qj,csb}
+rvc{m<1417:A,s>2822:A,m>3074:R,A}
+hcv{a<3271:A,A}
+blq{m<1523:mz,rq}
+dvv{m<1558:rx,rn}
+pdj{m>1764:R,s>3971:R,R}
+tzf{s>3567:R,m<631:A,a<3273:R,R}
+vvp{a<2271:nrc,m>2025:ls,a>3004:znl,ftr}
+dx{s>3049:qdv,m>1362:hpq,m<759:A,xrl}
+fgb{a>3186:pq,s>3045:A,rz}
+zfr{s<3704:pg,a<1503:kkc,a>1606:rj,mcm}
+hk{s<3670:A,a<2667:R,R}
+vbs{m>2005:jgb,pts}
+mmr{m>2322:R,m>1991:A,s>1195:A,R}
+jsj{a<846:R,A}
+gr{x>1637:A,m>1437:A,tzf}
+smr{x>553:xkj,a>3828:pjv,s<2877:rvn,lk}
+kkh{a<979:A,a<1290:R,m<3262:R,R}
+rfs{s<2782:zfq,s>2869:rlj,vvp}
+hld{m<2626:R,R}
+pdr{s>3716:R,x<1984:A,R}
+bpl{m>2642:R,m<2208:A,R}
+rsb{s>2186:A,klj}
+svh{m>1897:A,a<3228:A,s<2449:trr,A}
+nvc{a>1611:sfr,A}
+kx{x>637:A,x>614:A,A}
+qh{x>1954:pdr,sl}
+mr{x>2233:R,x>2163:A,R}
+ndm{a<2304:R,A}
+fb{m>2610:A,m>1344:A,A}
+qm{m>2943:R,a>2109:R,R}
+dv{a<678:A,R}
+nbv{a<1299:R,m>2259:R,s>2404:A,R}
+ls{a>2854:mpf,zqx}
+xc{m>2101:R,s<2882:R,a>1165:A,R}
+lct{m<2076:bs,s>2785:mkf,m>2855:A,bks}
+dk{a<3506:A,A}
+qmn{x>325:qf,a>449:kl,a<295:A,vm}
+ncg{a<1018:lct,a<1371:rnd,x<2673:jkq,nvc}
+zmq{m<2525:R,A}
+thd{a>2757:gj,a<2405:qrn,m>2056:bmz,kr}
+tts{m<3228:R,s>640:R,a>3171:A,A}
+trr{a>3548:R,s<2437:R,R}
+clc{s<2527:R,s>2549:A,A}
+jtv{m<2950:A,s<210:R,R}
+ghv{m>1136:xkd,s<1218:ql,m<502:gvn,szf}
+jq{s<3727:A,m<1398:R,A}
+ql{x<2601:lbx,dz}
+rvn{x<189:vvb,hxn}
+xx{x>2241:A,m>1897:A,R}
+ccd{s<3621:A,R}
+lts{s<3872:A,m>835:A,s<3931:R,A}
+rn{s>925:R,R}
+ngb{s<2880:A,R}
+xxv{a<2094:A,s<2881:R,R}
+kr{x>2351:A,s>258:R,a>2619:bdp,A}
+mz{x<3454:fgb,zzp}
+hd{a>2529:A,dmg}
+hz{x>224:R,m<2084:R,A}
+gh{m<971:A,m>1211:R,A}
+jr{a>2700:R,m>1234:A,x<355:A,A}
+jc{x<739:A,a<917:R,s<2457:ck,mnr}
+bpj{x>330:rqq,R}
+xfj{s<1260:ht,m<2092:jd,xhx}
+bz{s<3823:A,R}
+cxd{a<874:A,R}
+bs{s>2688:A,m>1007:A,x<2651:A,R}
+htn{m>977:R,a<2308:A,x<2327:A,A}
+jhv{a>996:R,s<967:A,s<1075:R,A}
+bcr{a<3147:ndm,tp}
+pkj{m<2510:gbn,a>981:jjx,A}
+zzp{s>2986:shm,x>3786:rpv,mb}
+bc{s>3370:A,a<923:R,x>2579:R,A}
+tj{x<2848:rb,s>1693:A,A}
+fvl{s>1450:css,s>1274:fr,a>1541:ngh,rmz}
+frc{m<2984:A,m<3157:sqt,tts}
+lb{m>1612:A,A}
+bp{m>2003:A,x>3015:cs,tg}
+nnl{a<1000:R,s<3854:A,s>3945:A,R}
+rl{m<3088:A,x<463:A,a>1631:A,R}
+gvn{s>1250:A,s>1235:fhj,fqn}
+rnf{m<733:R,x<1676:R,A}
+cp{a<3134:fg,m>3460:A,kmc}
+pd{s>637:vb,s<564:pt,R}
+rz{x<3098:R,m>826:R,m<293:A,A}
+zc{a>689:vmd,a<339:A,llk}
+zl{s<3450:R,A}
+rj{s<3855:A,m<1825:lcq,x>558:qn,R}
+tp{a<3484:R,x>2024:R,a>3761:A,R}
+jbz{m<3184:cnt,R}
+fs{s<1772:A,m>908:nl,a>2631:A,A}
+sfr{a>1871:A,a<1714:A,R}
+lv{a>3338:A,s<314:R,x>2326:R,R}
+hjj{m<1335:R,m>2001:R,a<2651:R,A}
+sm{x>2614:R,m<621:A,A}
+qdv{x<2058:R,R}
+xsg{m>2409:qb,x<1022:bg,mgj}
+vvb{x<121:A,m<1386:R,R}
+szz{x>1786:xs,s<2260:stl,x<596:qg,zk}
+sr{m>1474:A,gbk}
+xxp{s<2328:A,x<3808:A,A}
+fxk{s>3196:A,btj}
+mgg{m>2309:R,a<2169:R,x<1003:jr,R}
+rc{x>853:R,x>554:R,x<304:tk,A}
+vzk{a>830:A,m<1128:kh,x>558:R,npn}
+dd{x<2364:R,hk}
+jvf{s<1220:kkh,m<3274:qgd,a>869:tx,dxb}
+xn{a<1700:rjg,A}
+vf{a>1341:A,s>3229:R,A}
+dxb{m>3699:R,s<1248:R,m<3525:sml,A}
+zd{s>1372:cbd,zc}
+qb{x>1140:R,a>3588:R,a<3369:A,R}
+ck{s>2389:R,x>753:A,m>2076:A,R}
+bk{m<1112:A,x>422:A,x<254:R,A}
+bdp{s>119:R,m<885:A,R}
+xfq{m>1857:km,a<2650:rvk,m<1229:svp,fnm}
+jjx{a<1105:R,A}
+hh{x>2723:A,x>2324:R,R}
+vxv{s<3855:A,a<1221:R,A}
+hj{m<1924:A,A}
+zj{a>2161:A,a<1948:mmr,a>2043:A,R}
+lcq{m<760:A,R}
+zmm{a>1990:vx,m>3237:nq,m<2768:R,zrk}
+qrn{m>1714:qm,a>2144:htn,djn}
+zk{a<2467:lkf,txv}
+gsm{a>2592:sm,m<700:A,a>2099:R,R}
+vhm{m>3185:R,m>2612:A,x<2721:R,R}
+lss{a>1698:dd,ldr}
+gf{a<589:ggp,a>940:xc,A}
+qrl{a<2989:mgg,s>2068:rsb,x>881:xjq,cnz}
+nz{x>640:zl,m<654:A,gh}
+ljc{m<2348:xqn,m<3307:hvc,zpt}
+ptz{a<1956:kmk,x>332:ks,dxr}
+lj{s>1269:A,A}
+rjr{a>1905:A,s<3610:A,R}
+bkt{s<3288:xm,gkz}
+jjq{s<2376:R,a<3384:R,m>3288:A,A}
+fzx{x<2811:A,s<786:R,sjr}
+hcz{a<1441:A,A}
+ng{x>2025:A,a<1962:R,m>2393:A,A}
+kg{x<1581:R,x<1788:R,R}
+hc{a<1965:A,m<2176:R,R}
+zrk{x>2229:A,R}
+cgp{x>715:A,m>3614:A,R}
+vmd{s>1327:R,A}
+jsk{x>2685:bcv,m>1553:qgx,m>700:khd,mx}
+kkc{m<1471:hcz,a>1447:A,x>594:A,tv}
+ph{s<2709:R,a>615:A,R}
+bqq{m>918:A,s<1255:A,x>2567:R,R}
+dn{a>3209:zt,fc}
+vm{x<119:R,a<356:R,A}
+bvz{s<3732:zcl,fvj}
+vgr{x>557:A,s>2325:R,A}
+kl{m>1917:R,a>623:R,s<3697:R,A}
+css{x<2079:flp,a>2235:vp,ttl}
+qsf{s>458:rfh,s<225:A,x<1109:jm,A}
+jjl{a<1765:qv,x>2506:tf,x>1208:zv,ljc}
+xr{s>1663:A,R}
+zqx{m<3112:A,R}
+mm{x<2642:A,A}
+bmm{a>1287:vf,m>2723:cf,tpd}
+bx{s>1379:R,m<3154:A,a>2029:A,R}
+hb{s>3578:A,a>1601:A,R}
+npn{a>418:R,R}
+gn{a<1162:dxm,a<1473:lz,xrb}
+pj{x>3259:bgb,m<2105:rqc,hn}
+cfp{m<1402:pgd,nn}
+rx{a>2279:R,m<809:R,s<927:A,A}
+dj{s<2516:R,R}
+bj{s<3719:fls,pj}
+ttl{a<753:djc,s>1593:tj,qr}
+zp{m<862:A,R}
+hzp{a<266:R,A}
+hnb{m<729:A,m>1432:A,m>1081:A,R}
+dfv{s<899:R,m>1776:bss,A}
+gx{x<420:R,s<739:A,x>875:A,R}
+lp{m>1603:A,x<2185:A,R}
+khp{m<1240:R,s<3695:R,x>2040:R,A}
+dxr{s<2453:A,x>300:A,dj}
+rqc{m>859:mrq,a>1818:jvn,m<375:A,A}
+cbf{a>1801:A,x<2146:R,A}
+dxm{a<741:A,x<3647:lvx,s>3125:zm,cpx}
+zdf{x>918:hrs,s<3499:bpj,x<510:qmn,vvr}
+rk{a<1622:kjn,x>2035:lx,R}
+mkf{s<2843:R,m>3082:R,R}
+tpd{s>3176:R,a>1225:R,x>394:R,A}
+tzq{m>2428:ngb,vl}
+qj{s<1179:jjl,s>1877:szz,fvl}
+xm{s<3237:R,a<738:A,A}
+mf{a>1552:A,s<2401:R,R}
+rlr{x>3280:A,x>2759:R,R}
+hxn{a>3691:R,s<2707:R,s<2802:R,A}
+lt{a>3090:R,s<71:A,A}
+xk{a>3660:R,A}
+zqm{a>928:A,A}
+qs{m>1136:R,rnf}
+jl{m<3203:A,m>3526:R,s>3891:A,A}
+lx{a<1729:A,x>2216:A,m>1412:A,R}
+gc{m<3522:R,a<2626:A,R}
+pzc{a<3024:vtg,m>1682:R,m<1377:A,rrf}
+gbk{m<654:R,s<1217:A,s<1223:R,A}
+lvx{a<927:R,m>2149:R,x>3327:A,A}
+fhj{s<1242:R,A}
+xqn{m<896:pv,x<621:hq,pzc}
+hq{s<661:cr,a>3031:R,s<1000:R,A}
+xtz{s>2914:A,s>2909:R,R}
+mpv{s>3459:bj,a>2014:blq,tgr}
+rmz{m<2196:ghv,jvf}
+fc{a<2548:kg,s>166:R,a<2930:A,lt}
+rpv{x>3861:R,a<3150:R,s<2725:R,R}
+nq{a>1505:R,m<3509:R,R}
+qz{a<1558:R,m<3088:A,m>3640:R,R}
+pg{a<1524:cdc,s>3406:A,m<1803:R,R}
+nn{m<2341:fm,s>2091:nnd,x>667:R,A}
+qnp{a<1882:A,s<2689:R,A}
+kb{x<1708:A,A}
+km{m>3254:R,x>2185:R,s>3646:cbf,R}
+qhp{x<1902:bvz,ksc}
+tf{m>2474:fnc,lh}
+mrk{m>2540:gth,nh}
+btj{a<3349:R,x>877:A,R}
+cv{s>1227:ss,sr}
+dlr{m<1789:gsm,m>2852:rtx,a>2963:bxj,zj}
+xbm{s<3216:R,A}
+cx{a>1657:R,x>1871:R,A}
+cb{a<2526:R,A}
+llk{m>2126:A,A}
+hjb{m>3625:R,m>3514:R,A}
+bq{a<1187:pkj,m<1393:lkm,x<695:bmm,svf}
+fn{x>151:R,m<2679:A,A}
+vp{a>2870:ff,m>2322:hd,s<1637:vjv,fs}
+rlj{s>2896:qd,a>2284:zdx,a<1323:gf,jg}
+ggp{m<1794:R,s<2883:A,x<1856:R,A}
+znl{m>856:A,a<3666:hcv,sf}
+svp{x>2155:xhh,a<3541:ctv,s<3726:ccd,bz}
+mgj{x<1387:A,x<1600:R,R}
+lkf{x>1081:qk,x>777:jf,x<686:mrc,jc}
+rjg{a<1443:R,x>1229:R,s<1556:R,A}
+mbg{a<622:A,x<834:A,x<867:R,R}
+bss{a<3054:A,x>2187:A,a<3492:R,A}
+xkd{a<562:kpp,R}
+qr{s<1530:jdd,x<3305:R,R}
+qfg{a<2318:R,fn}
+jf{x>919:A,a>935:A,mbg}
+bg{s>2516:R,A}
+cbd{m>2449:A,a>1041:cn,a<450:R,xp}
+xl{s<2925:hx,a>3207:R,R}
+vrg{a>1289:hb,cj}
+mtb{s>2981:hrh,A}
+gfm{s<3070:R,m>3645:R,m>3357:R,R}
+zfq{a<1584:js,lpq}
+fbv{a<2481:A,x>1644:A,R}
+rxp{a<1460:dx,bcr}
+dlj{a>3193:A,x>2205:A,A}
+nrc{a<941:rvc,s>2824:R,cx}
+vjv{a<2589:R,s<1539:A,s<1591:A,R}
+prg{x>943:R,x>469:R,a>1828:A,R}
+cn{s>1408:A,m>1058:R,A}
+hvc{x<696:frc,x<972:tt,qsf}
+flp{a>2225:fq,a<1241:fj,s<1733:xn,prg}
+bkf{m<1041:A,A}
+dl{a>1330:R,s<2427:R,x<1467:A,A}
+sn{m>3136:gfm,grr}
+rfh{x>1129:R,A}
+td{m>1204:R,m>773:A,a<2619:R,A}
+jg{x<1834:A,a<1719:hxf,x<2218:ng,xxv}
+jrj{a<386:A,R}
+nv{m>210:R,R}
+pjx{s<2086:mm,a<3090:fb,x>2720:R,sfp}
+ll{s<2174:A,s<2409:R,R}
+pn{x>2063:rjr,m>970:khp,a>1997:A,fhq}
+gj{a>3526:R,a<3207:mr,lv}
+nj{m<2883:A,s<3049:R,s>3494:R,cgp}
+xq{a<3632:R,s>2980:R,R}
+mrq{m<1543:R,m>1844:A,R}
+rm{a>3252:hv,R}
+fxx{a<1183:kmg,m<2218:qvl,zmm}
+grr{a<2906:R,s<2997:R,m>2839:R,R}
+kjn{x>2064:R,m>2516:R,x>1756:R,A}
+bvd{s>3355:A,a>1525:R,R}
+nf{x>3448:jrj,R}
+hs{a<3135:R,s>399:R,A}
+dln{s<561:mv,x>2863:nxp,s<800:A,A}
+kmc{s>639:A,m>2835:R,R}
+sfp{a>3626:A,x<2148:A,R}
+ff{a<3401:R,a>3684:A,m>1555:hh,zp}
+jz{a<3162:xt,a<3530:vq,s<3365:smr,svn}
+tgr{x>3121:gn,x>2865:tzq,s>2899:jsk,ncg}
+gl{s<739:pd,x>1894:dfv,a>2666:zmq,dvv}
+grc{x<435:A,A}
+sml{s<1264:R,m>3363:A,x<2284:A,A}
+mkc{x<760:A,a<631:A,a>1386:R,kq}
+xp{s>1423:A,x<2579:R,R}
+vq{m>1343:fxk,nz}
+mrg{m<1518:R,m<1658:R,A}
+js{a>944:xg,x>2026:ph,s<2666:R,R}
+kh{a<318:R,x<621:R,a<659:A,R}
+rg{x>3435:R,R}
+fhq{x<2040:A,a>704:R,m>551:A,R}
+kq{m<2577:R,s<894:A,x<1039:A,A}
+qd{m>2322:R,s<2906:A,x>1957:A,xtz}
+ksc{x<2099:nrd,x>2265:lss,xfq}
+kzv{a>2414:xj,lg}
+kk{a<617:R,R}
+jk{s>538:A,m<2863:A,R}
+xg{a>1210:R,x>1982:R,x>1800:R,A}
+cl{a>2733:R,clc}
+bd{m<2716:A,a<3313:R,m<3413:A,fbm}
+xjq{s<1984:A,m<1511:A,bpl}
+rvk{a>1155:bkf,m<813:br,m<1432:A,zkh}
+nd{s>452:kd,x>1163:kk,vzk}
+fvj{s>3841:bgt,m<2521:bb,tz}
+ks{m>2382:R,ntz}
+tt{a<2850:R,A}
+qgx{s>3258:zqm,s<3027:R,ktl}
+ss{m>2041:A,ft}
+rq{x<3120:xl,m>2642:sn,rtf}
+jdd{s>1486:R,m>2101:A,m>762:A,A}
+qx{a>3696:qrp,s>3657:A,R}
+bks{a<607:A,R}
+xs{a>2441:fh,x>2963:qqg,fxx}
+mrc{m>2461:ckv,m>1428:kx,m>724:tq,A}
+rb{m<2468:R,x>2419:R,x<2271:R,A}
+ht{s<1252:R,A}
+qk{x<1328:mf,x<1549:dl,nbv}
+djc{m<1600:cm,a>283:nrs,R}
+fh{s<2220:pjx,lgk}
+bdr{a>3328:jfn,m>707:R,R}
+rtx{x<1386:R,m>3269:gc,gb}
+xkj{a>3749:A,a<3675:dtp,s<3004:pht,vkj}
+pv{m>323:R,x>502:jh,s>514:nv,vz}
+vv{a>3320:R,s<636:R,s>948:A,R}
+sg{s>601:bp,cmk}
+cr{a<2514:R,R}
+gb{a<2813:A,R}
+bmz{s<196:A,a<2556:fpk,s>307:pk,R}
+bb{m>1091:A,R}
+zdx{s>2879:R,a<3102:vk,A}
+jfn{a<3606:A,A}
+nbp{m>818:A,A}
+kn{s>2923:R,A}
+fr{a<1594:zd,a>2929:vc,kzv}
+xj{m<2544:hjj,R}
+hv{m>1991:R,A}
+qrp{x>874:A,x>389:R,A}
+cnc{m<985:A,R}
+cnz{m<2037:hnb,A}
+vmb{a>1700:jz,nm}
+mv{m<1362:R,A}
+gkz{s>3342:jsj,x>1892:xx,m<1670:R,kb}
+xt{m>1817:nj,a<2551:fpt,ktx}
+fj{a>463:A,A}
+mx{m>253:gkh,s<3140:R,m>137:R,R}
+jd{m>842:lb,m>451:kkv,s<1266:A,A}
+cqz{s<1368:A,m<1575:A,R}
+svf{s<3263:R,R}
+sl{m<2246:A,R}
+zrq{x>2077:lsm,x<1840:A,a>1618:R,bvd}
+pz{m>3317:hjb,s>3590:A,x<1658:R,jvc}
+csb{x<1439:vmb,x>2420:mpv,s<3414:gsz,qhp}
+kmk{x>328:kpg,R}
+qrq{a>1614:A,s<2403:zh,x>114:R,nbp}
+fq{x>909:xr,a>2931:A,A}
+lr{a>2309:rm,a>1791:vbs,s>3276:zrq,rk}
+lsm{x>2277:R,a>1618:R,R}
+klj{x>1054:R,m>2202:A,x>399:A,R}
+mb{a<3099:R,s<2735:R,R}
+fqn{m<210:R,A}
+jj{s<2200:A,A}
+pht{a>3714:R,A}
+tz{x<1673:R,a<1378:A,A}
+rrf{a>3595:A,a>3246:A,R}
+nmq{a>2748:R,a<2542:R,x<2016:R,A}
+fls{a<2084:vrg,mkz}
+fbm{a>3544:R,A}
+fnm{s>3733:dlj,lp}
+zpt{s>665:xb,m>3543:hs,gv}
+bxj{m>2343:R,A}
+zkh{a<571:A,s>3679:A,a>921:R,A}
+cdc{m>1919:A,R}
+ngh{s>1238:xfj,s<1208:dlr,cv}
+cj{a>700:A,R}
+bgb{a>2604:dk,m>1677:jl,x>3687:lts,R}
+dz{m<718:R,x<3415:R,R}
+nnd{x>1061:R,m>2920:A,a>798:R,R}
+hn{m<2984:A,a>2031:A,vxv}
+dtp{x<945:A,a<3591:A,R}
+qv{x>2355:sg,m<1752:nd,nxg}
+vtg{a>2512:R,m<1657:A,x>981:R,A}
+hr{x>2303:A,m<1178:A,A}
+txv{s<2416:nfb,s<2487:svh,a>3134:xsg,cl}
+mth{a>1241:R,A}
+sf{s<2826:A,a<3808:A,a<3934:R,A}
+hrh{m>2319:A,x>461:A,m>839:R,A}
+tk{s>3674:A,s>3485:A,A}
+ldr{m<1530:R,s<3738:hld,x<2358:rrr,nnl}
+kpg{a>779:R,m>2426:R,R}
+mcm{m>1928:qz,a>1571:R,a>1536:A,vgf}
+kkv{s<1268:R,R}
+ntz{x>354:R,R}
+qg{x>390:hp,x<245:qjb,ptz}
+rrr{s<3885:A,m<2398:R,R}
+rtf{a>3255:xq,x>3511:A,s<3159:A,R}
+ft{x>2278:R,m<1043:R,a<2670:R,R}
+dcf{x>2425:A,x<1158:A,A}
+vb{s<704:R,x<1816:R,R}
+zv{s>491:gl,x<2068:dn,thd}
+xb{s>882:nb,gx}
+gth{s>3795:R,m<3296:A,A}
+nxg{x>1262:bl,s>410:mkc,a>704:jtv,jbz}
+rnd{x<2587:R,m<2247:xfr,vhm}
+sjr{a>2727:R,A}
+pt{s>532:R,R}
+fm{x>631:A,x>335:A,s<2100:R,A}
+gq{s>681:R,a<2732:R,m>1215:A,R}
+svn{m<1967:qx,rc}
+xv{s<2249:A,A}
+zn{s<3051:A,x>2727:A,A}
+hpq{s<2983:R,m<3115:R,A}
+nh{a<1716:A,R}
+qn{m>2908:R,s<3927:A,R}
+lh{x<3047:dln,gq}
+zch{x>1081:nlr,A}
+np{x>876:zch,a<1580:mtb,sv}
+tq{a>1139:A,a<709:R,R}
+vk{m>1771:R,a>2624:A,R}
+qt{a<1334:R,x>3407:R,R}
+qf{s<3748:R,A}
+zm{s<3247:R,x<3878:A,R}
+xrl{a<807:A,a<1157:A,s>2999:A,R}
+jvc{s<3505:R,s>3546:A,R}
+trf{m>2082:jjq,a<3517:cnc,R}
+nm{a<835:zdf,a<1402:bq,s>3203:zfr,np}
+xxl{a<3140:cb,a<3432:vv,A}
+
+{x=3161,m=1141,a=51,s=441}
+{x=240,m=174,a=555,s=1269}
+{x=639,m=25,a=2025,s=345}
+{x=97,m=1410,a=1572,s=1133}
+{x=763,m=1918,a=625,s=2037}
+{x=83,m=1395,a=433,s=2841}
+{x=359,m=652,a=831,s=129}
+{x=979,m=204,a=1976,s=1629}
+{x=3112,m=122,a=816,s=305}
+{x=523,m=2334,a=108,s=1286}
+{x=267,m=152,a=480,s=389}
+{x=278,m=917,a=1419,s=2422}
+{x=207,m=1337,a=600,s=282}
+{x=128,m=913,a=3232,s=189}
+{x=1359,m=15,a=1792,s=2028}
+{x=87,m=2807,a=3202,s=104}
+{x=4,m=240,a=686,s=1790}
+{x=2332,m=537,a=1657,s=289}
+{x=1739,m=75,a=2757,s=1320}
+{x=2127,m=44,a=1389,s=224}
+{x=564,m=3263,a=177,s=447}
+{x=424,m=915,a=1856,s=18}
+{x=632,m=1638,a=665,s=315}
+{x=950,m=993,a=136,s=11}
+{x=154,m=611,a=405,s=1090}
+{x=1784,m=1239,a=506,s=878}
+{x=379,m=332,a=89,s=1091}
+{x=2234,m=315,a=1158,s=2140}
+{x=971,m=283,a=56,s=1089}
+{x=39,m=101,a=256,s=995}
+{x=259,m=25,a=829,s=2383}
+{x=2681,m=876,a=676,s=109}
+{x=1783,m=2119,a=299,s=25}
+{x=2735,m=1444,a=94,s=572}
+{x=710,m=2673,a=372,s=1524}
+{x=171,m=221,a=1344,s=234}
+{x=250,m=547,a=40,s=2485}
+{x=1282,m=1141,a=823,s=1862}
+{x=3,m=557,a=1924,s=1310}
+{x=23,m=1217,a=133,s=2587}
+{x=2073,m=75,a=246,s=250}
+{x=591,m=646,a=510,s=610}
+{x=1057,m=1782,a=1460,s=360}
+{x=715,m=2817,a=1441,s=1769}
+{x=132,m=478,a=1510,s=1669}
+{x=3098,m=1549,a=915,s=2968}
+{x=1913,m=570,a=542,s=381}
+{x=311,m=935,a=277,s=290}
+{x=486,m=148,a=240,s=61}
+{x=428,m=1469,a=26,s=1175}
+{x=520,m=979,a=84,s=413}
+{x=244,m=1671,a=2482,s=6}
+{x=53,m=1426,a=3,s=202}
+{x=787,m=1504,a=1281,s=1676}
+{x=27,m=2265,a=1142,s=202}
+{x=1876,m=170,a=2306,s=2130}
+{x=699,m=48,a=228,s=634}
+{x=684,m=1694,a=287,s=1244}
+{x=1140,m=919,a=845,s=1543}
+{x=2313,m=183,a=948,s=1856}
+{x=345,m=325,a=399,s=673}
+{x=758,m=79,a=523,s=1105}
+{x=271,m=1196,a=611,s=1465}
+{x=495,m=2296,a=543,s=873}
+{x=1054,m=273,a=1040,s=975}
+{x=2372,m=642,a=415,s=303}
+{x=2865,m=216,a=208,s=1772}
+{x=219,m=29,a=689,s=561}
+{x=885,m=150,a=816,s=1035}
+{x=2293,m=1052,a=546,s=527}
+{x=1384,m=461,a=264,s=911}
+{x=1125,m=652,a=3475,s=1492}
+{x=193,m=823,a=511,s=719}
+{x=3393,m=26,a=15,s=111}
+{x=611,m=1012,a=114,s=839}
+{x=527,m=159,a=3961,s=465}
+{x=214,m=416,a=1332,s=348}
+{x=21,m=1247,a=1356,s=112}
+{x=3308,m=387,a=587,s=16}
+{x=171,m=1571,a=2145,s=1685}
+{x=1334,m=970,a=133,s=102}
+{x=567,m=348,a=318,s=624}
+{x=344,m=911,a=593,s=326}
+{x=976,m=584,a=270,s=339}
+{x=879,m=796,a=565,s=1348}
+{x=1427,m=1060,a=751,s=1071}
+{x=2412,m=582,a=407,s=1668}
+{x=21,m=147,a=1452,s=681}
+{x=457,m=404,a=1617,s=338}
+{x=1810,m=1236,a=19,s=174}
+{x=55,m=674,a=530,s=327}
+{x=423,m=348,a=1067,s=424}
+{x=2836,m=2279,a=3116,s=73}
+{x=792,m=2863,a=1457,s=1643}
+{x=537,m=910,a=2132,s=2005}
+{x=895,m=1383,a=86,s=632}
+{x=302,m=891,a=61,s=303}
+{x=24,m=28,a=438,s=458}
+{x=1134,m=104,a=219,s=623}
+{x=208,m=1184,a=280,s=2224}
+{x=1884,m=762,a=2518,s=588}
+{x=1712,m=2692,a=580,s=1996}
+{x=597,m=1108,a=1198,s=889}
+{x=29,m=1692,a=456,s=2358}
+{x=604,m=1656,a=149,s=374}
+{x=995,m=1575,a=1300,s=1043}
+{x=513,m=64,a=348,s=670}
+{x=2016,m=148,a=288,s=240}
+{x=2208,m=388,a=726,s=69}
+{x=521,m=1808,a=2767,s=856}
+{x=512,m=103,a=439,s=1943}
+{x=148,m=935,a=787,s=477}
+{x=1153,m=2337,a=238,s=3068}
+{x=692,m=2215,a=1089,s=134}
+{x=2260,m=1675,a=2775,s=1847}
+{x=625,m=3316,a=1996,s=2999}
+{x=2263,m=2373,a=2421,s=349}
+{x=13,m=2202,a=316,s=132}
+{x=1414,m=2836,a=2224,s=206}
+{x=2597,m=203,a=741,s=1575}
+{x=3420,m=1012,a=637,s=768}
+{x=278,m=1222,a=1586,s=463}
+{x=511,m=816,a=71,s=381}
+{x=538,m=320,a=395,s=2388}
+{x=522,m=741,a=2172,s=1418}
+{x=112,m=619,a=1875,s=1458}
+{x=462,m=2079,a=252,s=54}
+{x=2828,m=121,a=297,s=19}
+{x=444,m=1444,a=85,s=88}
+{x=1328,m=43,a=1168,s=241}
+{x=1963,m=162,a=135,s=915}
+{x=350,m=994,a=223,s=3064}
+{x=130,m=790,a=895,s=52}
+{x=317,m=83,a=265,s=478}
+{x=215,m=2935,a=703,s=2731}
+{x=1274,m=1313,a=455,s=2270}
+{x=18,m=1971,a=1987,s=1992}
+{x=2444,m=646,a=1462,s=232}
+{x=1054,m=44,a=241,s=1037}
+{x=212,m=1389,a=1490,s=574}
+{x=301,m=3887,a=1190,s=300}
+{x=3405,m=2067,a=2279,s=976}
+{x=503,m=1631,a=933,s=303}
+{x=1877,m=2443,a=2986,s=2055}
+{x=559,m=1073,a=2167,s=1286}
+{x=2473,m=1614,a=1850,s=503}
+{x=357,m=430,a=1105,s=15}
+{x=601,m=271,a=891,s=290}
+{x=1958,m=6,a=250,s=796}
+{x=635,m=507,a=262,s=853}
+{x=337,m=949,a=2590,s=53}
+{x=3419,m=3441,a=1089,s=592}
+{x=132,m=992,a=482,s=306}
+{x=979,m=958,a=2428,s=572}
+{x=20,m=60,a=1124,s=3558}
+{x=189,m=406,a=1382,s=546}
+{x=1264,m=12,a=716,s=239}
+{x=916,m=2214,a=69,s=146}
+{x=631,m=2307,a=1969,s=421}
+{x=1277,m=864,a=1780,s=490}
+{x=306,m=2550,a=53,s=2171}
+{x=120,m=1296,a=474,s=301}
+{x=1566,m=869,a=894,s=2050}
+{x=698,m=2308,a=687,s=492}
+{x=2410,m=2671,a=806,s=1228}
+{x=988,m=3291,a=459,s=229}
+{x=1481,m=204,a=646,s=2167}
+{x=238,m=593,a=497,s=186}
+{x=317,m=187,a=772,s=129}
+{x=53,m=3624,a=751,s=554}
+{x=503,m=59,a=699,s=2483}
+{x=59,m=1139,a=442,s=334}
+{x=297,m=473,a=2519,s=554}
+{x=254,m=1241,a=1477,s=280}
+{x=117,m=1332,a=251,s=571}
+{x=543,m=2228,a=606,s=473}
+{x=1241,m=822,a=1544,s=2650}
+{x=656,m=665,a=2678,s=2842}
+{x=111,m=1574,a=537,s=807}
+{x=152,m=641,a=16,s=325}
+{x=2814,m=230,a=2633,s=224}
+{x=4,m=856,a=2263,s=32}
+{x=1837,m=124,a=221,s=3059}
+{x=320,m=311,a=1653,s=15}
+{x=265,m=307,a=930,s=2960}
+{x=796,m=87,a=2572,s=741}
+{x=602,m=585,a=2755,s=381}
+{x=455,m=441,a=610,s=1380}
+{x=552,m=1554,a=1800,s=39}
+{x=1707,m=170,a=92,s=789}
+{x=772,m=490,a=1173,s=763}
+{x=2930,m=2475,a=1873,s=1826}
+{x=1571,m=572,a=1883,s=1534}
+{x=2008,m=2416,a=155,s=799}
+{x=2060,m=1868,a=372,s=41}
+{x=1899,m=104,a=7,s=456}
+{x=37,m=718,a=642,s=1394}
+{x=2078,m=1001,a=2864,s=791}
+{x=124,m=890,a=2174,s=2418}
+{x=996,m=2173,a=318,s=2194}
diff --git a/src/day12pt1.rs b/src/day12pt1.rs
index bdf4027..dbc7011 100644
--- a/src/day12pt1.rs
+++ b/src/day12pt1.rs
@@ -7,7 +7,10 @@ pub fn main() {
for line in input {
let s = line[0];
- let n = line[1].split(",").map(|s| s.parse::<u64>().unwrap()).collect::<Vec<_>>();
+ let n = line[1]
+ .split(",")
+ .map(|s| s.parse::<u64>().unwrap())
+ .collect::<Vec<_>>();
println!("{} {:?}", s, n);
}
}
diff --git a/src/day17pt1.rs b/src/day17pt1.rs
new file mode 100644
index 0000000..959012c
--- /dev/null
+++ b/src/day17pt1.rs
@@ -0,0 +1,74 @@
+use std::cmp::Reverse;
+use std::collections::BinaryHeap;
+use std::collections::HashMap;
+const N: usize = 200;
+const M: usize = 200;
+
+pub fn dist(input: &Vec<Vec<u32>>, y1: i32, x1: i32, y2: i32, x2: i32) -> i32 {
+ let ind1 = (y1 - y2).abs();
+ let ind2 = (x1 - x2).abs();
+
+ if (ind1 == 1 && ind2 == 0) || (ind1 == 0 && ind2 == 1) {
+ return input[y2 as usize][x2 as usize] as i32;
+ }
+
+ return i32::MAX;
+}
+
+pub fn main() {
+ let txt = std::fs::read_to_string("./input/day17.txt").unwrap();
+ let input = txt
+ .lines()
+ .map(|s| {
+ s.split("")
+ .filter_map(|c| c.parse::<u32>().ok())
+ .collect::<Vec<_>>()
+ })
+ .collect::<Vec<Vec<_>>>();
+
+ let n = input.len();
+ let m = input[0].len();
+ let mut d = [[i32::MAX; M]; N];
+
+ // (dist, y, x, dy, dx, cnt)
+ let mut bh: BinaryHeap<Reverse<(i32, i32, i32, i32, i32, i32)>> = Default::default();
+ // (y, x, dy, dx, cnt)
+ let mut hm: HashMap<(i32, i32, i32, i32, i32), bool> = Default::default();
+
+ bh.push(Reverse((0, 0, 0, 0, 0, 0)));
+ hm.insert((0, 0, 0, 0, 0), true);
+
+ while !bh.is_empty() {
+ let Reverse(x) = bh.pop().unwrap();
+ let (ndist, i, j, odi, odj, cnt) = x;
+
+ if ndist < d[i as usize][j as usize] {
+ d[i as usize][j as usize] = ndist;
+ }
+
+ for (di, dj) in [(0, 1), (0, -1), (1, 0), (-1, 0)] {
+ if odi == -di && odj == -dj {
+ continue;
+ }
+
+ let ni = i + di;
+ let nj = j + dj;
+ if ni < 0 || ni >= n as i32 || nj < 0 || nj >= m as i32 {
+ continue;
+ }
+
+ let ncnt = (cnt + 1) * (di == odi && dj == odj) as i32;
+ let ndst = ndist + dist(&input, i, j, ni, nj);
+
+ if hm.contains_key(&(ni, nj, di, dj, ncnt)) || ncnt == 3 {
+ continue;
+ } else {
+ hm.insert((ni, nj, di, dj, ncnt), true);
+ }
+
+ bh.push(Reverse((ndst, ni, nj, di, dj, ncnt)));
+ }
+ }
+
+ println!("{}", d[n - 1][m - 1]);
+}
diff --git a/src/day17pt2.rs b/src/day17pt2.rs
new file mode 100644
index 0000000..2ace59f
--- /dev/null
+++ b/src/day17pt2.rs
@@ -0,0 +1,80 @@
+use std::cmp::Reverse;
+use std::collections::BinaryHeap;
+use std::collections::HashMap;
+const N: usize = 200;
+const M: usize = 200;
+
+pub fn dist(input: &Vec<Vec<u32>>, y1: i32, x1: i32, y2: i32, x2: i32) -> i32 {
+ let ind1 = (y1 - y2).abs();
+ let ind2 = (x1 - x2).abs();
+
+ if (ind1 == 1 && ind2 == 0) || (ind1 == 0 && ind2 == 1) {
+ return input[y2 as usize][x2 as usize] as i32;
+ }
+
+ return i32::MAX;
+}
+
+pub fn main() {
+ let txt = std::fs::read_to_string("./input/day17.txt").unwrap();
+ let input = txt
+ .lines()
+ .map(|s| {
+ s.split("")
+ .filter_map(|c| c.parse::<u32>().ok())
+ .collect::<Vec<_>>()
+ })
+ .collect::<Vec<Vec<_>>>();
+
+ let n = input.len();
+ let m = input[0].len();
+ let mut d = [[i32::MAX; M]; N];
+
+ // (dist, y, x, dy, dx, cnt)
+ let mut bh: BinaryHeap<Reverse<(i32, i32, i32, i32, i32, i32)>> = Default::default();
+ // (y, x, dy, dx, cnt)
+ let mut hm: HashMap<(i32, i32, i32, i32, i32), bool> = Default::default();
+
+ bh.push(Reverse((0, 0, 0, 0, 1, 0)));
+ bh.push(Reverse((0, 0, 0, 1, 0, 0)));
+ hm.insert((0, 0, 0, 1, 0), true);
+ hm.insert((0, 0, 1, 0, 0), true);
+
+ while !bh.is_empty() {
+ let Reverse(x) = bh.pop().unwrap();
+ let (ndist, i, j, odi, odj, cnt) = x;
+
+ if ndist < d[i as usize][j as usize] && cnt >= 4 {
+ d[i as usize][j as usize] = ndist;
+ }
+
+ for (di, dj) in [(0, 1), (0, -1), (1, 0), (-1, 0)] {
+ if odi == -di && odj == -dj {
+ continue;
+ }
+
+ if cnt < 4 && !(odi == di && odj == dj) {
+ continue;
+ }
+
+ let ni = i + di;
+ let nj = j + dj;
+ if ni < 0 || ni >= n as i32 || nj < 0 || nj >= m as i32 {
+ continue;
+ }
+
+ let ncnt = if di == odi && dj == odj { cnt + 1 } else { 1 };
+ let ndst = ndist + dist(&input, i, j, ni, nj);
+
+ if hm.contains_key(&(ni, nj, di, dj, ncnt)) || ncnt == 11 {
+ continue;
+ } else {
+ hm.insert((ni, nj, di, dj, ncnt), true);
+ }
+
+ bh.push(Reverse((ndst, ni, nj, di, dj, ncnt)));
+ }
+ }
+
+ println!("{}", d[n - 1][m - 1]);
+}
diff --git a/src/main.rs b/src/main.rs
index 3c60b82..e3e41ae 100644
--- a/src/main.rs
+++ b/src/main.rs
@@ -1,7 +1,7 @@
-mod day16pt1;
-mod day16pt2;
+mod day17pt1;
+mod day17pt2;
fn main() {
- day16pt1::main();
- day16pt2::main();
+ day17pt1::main();
+ day17pt2::main();
}