diff options
author | Leah Neukirchen <leah@vuxu.org> | 2021-12-16 13:04:42 +0100 |
---|---|---|
committer | Leah Neukirchen <leah@vuxu.org> | 2021-12-16 13:04:42 +0100 |
commit | bfdca20a589f8db3821b2b053e75a89e8eac08e5 (patch) | |
tree | cbb8df337b3d1649fa5b889a80dcdbf532829ab2 | |
parent | b40cb1f469bbf88641127caee911ec07e7b2e1c4 (diff) | |
download | adventofcode2021-bfdca20a589f8db3821b2b053e75a89e8eac08e5.tar.gz adventofcode2021-bfdca20a589f8db3821b2b053e75a89e8eac08e5.tar.xz adventofcode2021-bfdca20a589f8db3821b2b053e75a89e8eac08e5.zip |
day15
-rw-r--r-- | day15 | 100 | ||||
-rw-r--r-- | day15.bqn | 7 | ||||
-rw-r--r-- | day15.clj | 67 |
3 files changed, 174 insertions, 0 deletions
diff --git a/day15 b/day15 new file mode 100644 index 0000000..c8b996c --- /dev/null +++ b/day15 @@ -0,0 +1,100 @@ +8795561346959611984851795223993199426691978637498615942935297722897942579728189182383276311836891971 +9971917929239749392313919138788785878436257678478978964999643688839227886859465518439985489795943919 +1519761672617778785983978488277814115999116451991978869729122618211379791865816152742849499151214682 +9897768578325969757223986999919271436414939289747483386572979869519481591978913852845739134918128698 +6131844837515911671618346728935389713865862689991891968992859599212148719512981655915843896819419699 +9994158898369771516892943629594768792167999156447986693115896589979189597554487929195418898275991939 +7899714915991971118529915219739988517292138842395144993792669384948991998684649619885511938319926529 +8439945422238997549198746429761826973391669898967884389843379199899887495381477519258959688562189998 +8193158996336869219329798167599696253894399636289548599616776971684358719751199457412129189416339337 +8915467845679571319719627819399444276933882997919488941218392246725699575931358682988728811692994888 +2183821795618759299397119999912447724899136432675238876256982162673596561194541917989927328994884775 +8789678487971129849969177111293971322992799168799694179116768117969482793885681672825369745192292798 +9899995799751915683316369897193479341895969161197819529318324971956766824967977979682349271859692499 +9738389836681141541749679428151189548958914789921712997989991986792969749119449656969797779397987971 +9699386193977846925881916878943588579248899536993991794576926484969985986958761239832944749381396877 +2938918897233812797889785112782764111371659727455889948919937998893948984527919431599729431858423312 +6669951996546696289498264116385727972556973497368864657695549198987126379129178799142291929595944531 +9593327798991199813978669827818164893823995153184287992392877622665469666148268197736278655385853893 +4489883181443655445696668196922477872145911769238794459937988771294974551878994626812499591419882438 +9828537889259279861788699459666699933159822299169969994311839953287658281994334947114298299449399739 +4188562547592911131922397722799988999499427811169546472448222946122399994149695698195849512899141156 +7812927129675599119818993368441873851158999359195519823173938847593874317319938262871877982994151854 +8925469217741929237517277969589678521292549411978981218821255391918872181337782152599971935434586641 +5539173242188516261195962935992419699921211771998999829366384756736985679791323524894919899791751927 +7997814295618599112279785547892749118824587414992484558129913948987899996139582741731588699495997181 +9294699723167493823939899799875297999693938976152179786642196948529943458129635959926986719188788299 +3382299747968914256996638119179579489495894917369311729612961928153965889817885929465121747699993923 +1269933289896689643116489371719798989991587811658981468139317814827819327181648686519922623159872716 +8749822282959139712191898935929168514293911199984129154669719688839883778199899299699619241169648787 +7789461829886475855754227981617959439666958496998884492729328586718954493775988189711859281328961118 +1996981999456693988591117919251641821968898256445988799178396189162182741171111899482722939388958511 +3281911384597899419698914798194911889589839273747496947197364795912194969393957795992989291837591999 +1293812999287868589289214241179594649119899992343411877615638772289591199319196215849889992628429262 +2598787636835395941715619539222694792812975975481748539877868612571891699419489899939987379366597698 +4781462274896758851786199964998495994884799928116913548959881394813979886818979751785863571721749154 +9781899957313649191946278938943668952725533114949839896192161387789132989919592489457498991499145634 +8939291595887684897787947956711653882547657238349261375815578499482296127299179887193666585829749989 +3987392781148476892679669911899929328939559696918985892627927769683956664885969479599936511452997261 +9718491979119959846848498131157967812971882896718922983832319776899132516188992612996481749999992686 +8919943758399972755642585691411913377667687791139364126793319649518996979999699899691164918399189872 +7377178689183729718471814618846971671488612597556998591379995391219797917687997492569812892162829899 +6198691883598199239981463965166178891395862717797769949534348818992699479916324441967852879113914389 +9216989165552946188295851854481689328373995258899376993895872229212951841639956946995929695927819249 +9188886992578419341444721993392494111118832893996694812192621891797989996585963719519899668496979761 +6178959769221537294292836517919989929381873925111177297994731171813548771847917883712814928381315828 +3716898729898898116791923615175892681249798369195979923194893399955242992199314988739418974466288117 +6712671172426933931999899491979987495165963185198717561866882185885895989659986798139793799819433118 +4584379959151684983916286557263499959997582313992956794499595279918993992689611978329772677199695197 +9983899196819771699641681959945138993831935591154986184953899351941365399295712466533478897952142168 +6899162163198818566972762787289989382494938538296469493317537999999195467999754271988141381266789918 +1452932263797497952199118888137861961329529437698719177689997249821121712191719777639699188944321936 +8937299999674997371979425811822714647182423856472824694292841198359827339725542547754913932519964957 +9994946989869977763295691999117176543478371299189888681177844256187727685388616713239797198891771592 +7554973739824921451596999899131383498318934996922147599937751455999839159799296692986193923888918716 +2183293736212193119141897255991593533998965599699986684333511369999247828115626787252781948997399355 +7166988753117411929413382997948886498187158558318973167282939868978289154979461968949393388198748635 +3848991198627879899197562857896159183619819718874617129918483191133991967698128553471899459892397929 +2765314119181599176729133659328796299792767869687928921291778482422185719921369149813699944966311469 +8482691159398923761627882926982881117188945644896835748384958683499176311775975826629528934976436159 +8629967953659486936456699817244387935152911955491258868396712994893218779896713818697822473611899472 +9869569395962994217619893792989865797229926372388199383181753799972387947281751917911412193198648899 +2911975492385168179852911515718689961977743548821737615588468287984829778119138931993495899999411139 +6627692176997581928496111176845898128798398982139541832937981149719315979978979925639977479916288297 +7971686592726999387593121969616452677783738499693549294716146947144911287158388446849188523198921159 +9654356698192284395828218447993789572441791288511865165275957319726133989295828997899981479293199367 +1983295918471185535848787124187154967288585591968899954121721297447389146121365419765845984999697995 +3772299933945255981887183847913843946135928498137753611472573189883189388898147899899311559517594526 +6935119987289199372691298387496561978547581187375589699139538917889149981989973389296691993898137585 +9596981933155656783964173864653743482911961278323228972783896794973182687777999797879485992688899864 +7946745867994687182819593938168758438993987764997671339742591814996711459998829197381873761169833199 +7998761391174687853825798296855419379326297812911135911535769961499179699318147216113263387981953698 +6975995197822218189738184719494471188758894169771883498878198461499469547885896968499963693355941716 +4351931919415521116137351999816179752593389213165382519362992963377712912373918797312697527115653474 +4219916669692263574989959697799511818886799247369637226524896979114739798437327795849691299932928316 +9469815173589995599191717511929851241512129287419528975628498911949738259719499364539555799899987749 +8479915281919179814239178416812398824865776973192848267616874181477979169919153488172116912595685919 +1289893698599996944651792299632392688252343961243995892218884283891981753441377799862931899681885987 +1918997431886381819198395396582984757593892248817191118278199825665792383989396744979898488291819787 +1593953997936192775781629434971795219615284969133998265488117988899576939192195943941191263898454787 +4116191989544268918925399499117319147593767434896144251686491796711286886419319219768919724488339918 +5724615913863188944231161142188759223298646797932191661684846867251942817233499629528599748994238819 +9568989891141898878889593392781881437292997772591628197913688948429735171975377969524966319878852198 +1451975884978888899851513598956919574939335964999412895192972398975389988737989199973987816587729912 +8266921296948786193491779253862131431671987882857169537999157578838774176914698161799177147198972998 +9899977419231149419726862744398113392793194994238576864681993162199811196897926857981885899436634991 +8863975882112417779869387818526982917699448259848195932976179866278536198163191794669219691194232985 +8964676952961795683996858297181963591827634248715774196944191928959643811872914981968142899983398969 +3819129921898559367111958191971712538989297786949383519349717524859963945439921799892281989822321974 +6843888714292337419966941942419999999577112282934993189218898131672285193999999299488947947756888796 +4897177883982914929221319627191749689347559979399184189239223629815698729511514457552661229971845791 +7951497555381399499653191719458486151898656381679791193539839579318194299745115665134795986878886958 +8999796933696665971996778728127922964493478822898217169185834914999629245188781933911948789292989969 +9196969381136611468918217972388437845173999195912928197355989571899481559772197996243198878913819631 +7166988339662186997128362499643382919978799844892892946796715324518121699785894695193874729916993919 +9298281551968695911458882111884212373479298692144188529258731314391839459899983882393129697999711159 +8558438898992511996283529341897299969324918789817899999965999939196128992393994111199692651355275955 +7689899924699293736392725716697734919419784152918395812482316549583957919989329617954687594936783898 +1169796382849566792128293597457371455827987519511199778291917942178294599929539841167862969924979581 +9496929588378869969158122779414228929724985988984299699786358995268989949878981121159539739996566173 +9791763949837198338991393152592978229948887552199237768112426143281161433828316999916998589965921948 diff --git a/day15.bqn b/day15.bqn new file mode 100644 index 0000000..f26832a --- /dev/null +++ b/day15.bqn @@ -0,0 +1,7 @@ +_fix β { π© β‘ π¨ π½ π© ? π© ; π¨ π π¨ π½ π© } +dβ>'0'-Λβ’FLines"day15" + +Lens β {qβ(ββ½β’π©)β₯β β π© {π©βπ¨+(qΒ»π©)β(qΒ«π©)β(βΒ»Λπ©)β(βΒ«Λπ©)}_fix 0βΎβ ββπ©} + +β’Show ββ½Λβ½ Lens d # 626 +β’Show ββ½Λβ½ Lens 9βΈ|βΎ(-β1)+βΎ(<d)++βΛβ5 # 2966 diff --git a/day15.clj b/day15.clj new file mode 100644 index 0000000..e7155cd --- /dev/null +++ b/day15.clj @@ -0,0 +1,67 @@ +(ns org.vuxu.aoc2021.day15 + (:require [clojure.string :as str])) + +(defn parse-digit [char] + (Character/digit char 10)) + +(def data + (->> (slurp "day15") + (str/split-lines) + (mapv (partial mapv parse-digit)))) + +(defn put-in! [array [x y] v] + (assoc! (get array x) y v)) + +(defn find-path [m] + (let [d (mapv transient (map (partial mapv (constantly 0)) m)) + l (count m)] + (put-in! d [0 0] (get-in m [0 0])) + (loop [q (conj clojure.lang.PersistentQueue/EMPTY [0 1] [1 0])] + (if (empty? q) + (- (get-in d [(dec l) (dec l)]) + (get-in d [0 0])) + (let [[x y] (peek q) + upper (if (and (> x 0) (not= 0 (get-in d [(dec x) y]))) + (get-in d [(dec x) y]) + ##Inf) + bottom (if (and (< x (dec l)) (not= 0 (get-in d [(inc x) y]))) + (get-in d [(inc x) y]) + ##Inf) + left (if (and (> y 0) (not= 0 (get-in d [x (dec y)]))) + (get-in d [x (dec y)]) + ##Inf) + right (if (and (< y (dec l)) (not= 0 (get-in d [x (inc y)]))) + (get-in d [x (inc y)]) + ##Inf) + minpath (+ (get-in m [x y]) (min upper bottom left right)) + ] + (if (or (zero? (get-in d [x y])) + (> (get-in d [x y]) minpath)) + (do + (put-in! d [x y] minpath) + (recur (cond-> (pop q) + (> x 0) (conj [(dec x) y]) + (< x (dec l)) (conj [(inc x) y]) + (> y 0) (conj [x (dec y)]) + (< y (dec l)) (conj [x (inc y)])))) + (recur (pop q)))))))) + + +(def part1 + (find-path data)) + +(def data2 + (let [rows (count data) + cols (count (first data))] + (vec + (for [i (range (* 5 (count data)))] + (vec (for [j (range (* 5 (count (first data))))] + (let [qi (quot i rows) + qj (quot j cols)] + (-> (get-in data [(rem i rows) (rem j cols)]) + dec (+ qi qj) (mod 9) inc)))) + )))) + +(def part2 + (find-path data2) +;; => 2966 |