diff --git a/README.md b/README.md index 37b5198..8df65ed 100644 --- a/README.md +++ b/README.md @@ -61,7 +61,7 @@ Day 00: Helper file | [aoc.clj](clojure/aoc.clj) | [Day 22](http://adventofcode.com/2023/day/22) | [day22.clj](clojure/day22.clj) | Jenga! [Day 23](http://adventofcode.com/2023/day/23) | [day23.clj](clojure/day23.clj) | Compressing the graph for part 2. [Day 24](http://adventofcode.com/2023/day/24) | [day24.clj](clojure/day24.clj) | Don't ask me how this works. - +[Day 25](http://adventofcode.com/2023/day/25) | [day25.clj](clojure/day25.clj) | Monte Carlo to find "hot" edges.   diff --git a/clojure/day25.clj b/clojure/day25.clj new file mode 100644 index 0000000..3aa4fc6 --- /dev/null +++ b/clojure/day25.clj @@ -0,0 +1,61 @@ +(ns day25 + (:require aoc)) + + +(defn build-graph [components] + (let [adjacencies (atom {})] + (doseq [[k & vs] components + v vs] + (swap! adjacencies update k conj v) + (swap! adjacencies update v conj k)) + @adjacencies)) + + +(defn add-edges [edge-counts vs] + (reduce (fn [edge-counts [a b]] + (update edge-counts (sort [a b]) (fnil inc 0))) + edge-counts + (partition 2 1 vs))) + +(defn traverse [graph start end edge-counts] + (loop [queue (conj aoc/empty-queue [start []]) + seen #{}] + (if-let [[curr prevs] (peek queue)] + (cond + (= curr end) (add-edges edge-counts (conj prevs curr)) + (seen curr) (recur (pop queue) seen) + :else (recur (into (pop queue) (map (fn [x] [x (conj prevs curr)]) + (graph curr))) + (conj seen curr))) + (count seen)))) + +(defn find-most-frequent-edges [graph] + (reduce (fn [edge-counts [start end]] + (traverse graph start end edge-counts)) + {} + (repeatedly 200 #(shuffle (keys graph))))) + +(defn remove-most-frequent [edge-counts graph] + (let [most-frequent (keys (take 3 (sort-by val > edge-counts)))] + (reduce (fn [graph [a b]] + (-> graph + (update a (fn [nbs] (remove #{b} nbs))) + (update b (fn [nbs] (remove #{a} nbs))))) + graph + most-frequent))) + +(defn find-groups [graph] + (let [edge-counts (find-most-frequent-edges graph) + graph' (remove-most-frequent edge-counts graph) + total-nodes (count (keys graph)) + island (traverse graph' (key (first graph)) nil nil)] + (* (- total-nodes island) island))) + + +(defn solve [input-file] + (let [components (aoc/parse-input input-file :words {:word-sep #": | "}) + graph (build-graph components)] + (find-groups graph))) + + +(solve (aoc/read-file 25)) diff --git a/clojure/tests/solutions_tests.clj b/clojure/tests/solutions_tests.clj index bc09d8d..23bedb2 100644 --- a/clojure/tests/solutions_tests.clj +++ b/clojure/tests/solutions_tests.clj @@ -4,7 +4,7 @@ day06 day07 day08 day09 day10 day11 day12 day13 day14 day15 day16 day17 day18 day19 day20 - day21 day22 day23 day24 ;day25 + day21 day22 day23 day24 day25 [clojure.test :refer [deftest is run-tests successful?]])) @@ -48,6 +48,7 @@ (check-day 22 [5 7] [418 70702]) (check-day 23 nil [2394 6554]) (check-day 24 nil [13892 843888100572888]) +(check-day 25 54 603368) (let [summary (run-tests)] diff --git a/inputs/25.txt b/inputs/25.txt new file mode 100644 index 0000000..58449f1 --- /dev/null +++ b/inputs/25.txt @@ -0,0 +1,1252 @@ +pzt: zfx qdv +tzg: bqj +fcj: znv sjk pqc zcr +jrm: qpf lrs xgm +dxx: lrz xvc pcs +zbt: vpp khl hnc +pjt: jbr +qpf: trv gnl +jjd: pnj lfr sdv +xrt: lkc qfj bmx rtt +vvl: mkq +cdn: kkz fdl hsr +sgq: xqd +htv: qcb vgz jdz fqd llm +mkp: kmj ktt dbg +txd: hrf bcf lpr +scv: jmj jdf glc +kpx: xmd jqh +zhj: qbq sqr rqr tvg tjs cnz +vtf: slb gxt mrg +bkc: gmk rmk +jrj: xpg rsz qnp sln +nbf: vcz tbn nfb +xfz: jgh dkp mkc +hsr: bqh vpp fkq +dbc: hfb ksl fgs +qls: pgg +kvn: hfp +fcr: vzx lfl jmj pmn spt sjl lgg +kpq: jkj sjz dkc zhq +dst: ftf thj smm ltr dkb pzt +fgv: tzz prd hcq dkr +qcr: vqs +khl: fdl fbd +gsn: rlm +xrm: dkc +sqf: mzj tkj ntf +fpt: tmn dmp bls +kst: cqt pmr +lbb: gnd jtz dpm cmq cgr +sjz: rxv kcp xpf xck mpp ddr dcm +scs: kkg gxz +mdq: sdh ldj dsg +ppm: mjg kmd +qbl: cmh vdz +svb: jqr jsx +bfb: fml bln xkj +jnh: qbq vfd kqh +fqz: ctq fqc zfb +ndl: xmk njr +zzx: nnf qqh tgm kzh kmr +svm: rpb fpg pkc grk +crm: smm dlg gnl vgz vnp +qkf: jtr cvv ghs khg ntd +rll: cbx vgt zfb +spt: znb +ckr: bfd xxq zkm +nnd: kkz msm tdz gxk +pmc: xkf tnr pbq +pxf: tsp zcv +fxh: rxl sxn zbb rmc +mqs: mzj vkc +jkl: xrl vln zpf lvg +tkx: zgz vpp knn mzc +bml: qcm tcq lvz lqs +cfn: pjd +pnj: pcc khl mbf bzp +fsm: snd gmr mqf nrg +ftt: hnc qrr qfb smr +dhr: dpc +mns: gbd tqh +cdr: xvj sxn kcq +cfc: zbh +tlt: qxd xxg xlq jnx +kkx: ltv +jqq: pzv bkv jlk +brr: sqf mrn mkp hmc sjz +qgg: srn lvp dsg +jnx: rpd scv +cjc: xlh stk fdp +ktb: rjx qdh szh sfq +zfb: jzq +fdz: dfp rsz +phl: djf gql +dxg: gxk skv +qcx: pfp kmx spt ghp +hhd: qzv qqh +xsm: gxt hkb xtk cbx +lkn: fnl htd mjt kvm +xpk: gtl pxx gmh +kxz: gmz mmm hpk +ksq: jbr sdv hpt sfl +mcx: mzg qcm mhc hgt +pdk: lvg xfc jkv nfj +nhk: kmd zgh ckr +nnt: qxc pnj bdp sqz +qfq: npp vnr fsq kgh +ggq: xpg qlc nnx qjq +nrm: rzv bln +krc: xsz znt +llv: vkm xfq xbk xvk +tgm: vjt fmc +bxg: jlv lvz +vld: xgt +hpt: tzp dtm vgq lmj glv +qvx: tnr czl snh jmb +qtf: dsj vtn +zdp: ffr cbq tcp +lxx: qkp pzt plr +sdc: spr zbh +bkq: zfx knp +dhn: xkj hjr rnh +jbx: nnm vgk +kqk: xvx mhm ffv +slb: lrt jcg rkb +lvj: ffv ntl stz +mpt: ztk +jdg: mzp fcf jxv pxp +slr: jjd svr jcg +mdj: qrk vck jzx fqb +nqp: hkk szb +mlh: fhq +thc: pqm rsh +nrt: nrm btg qhr mpc kst +smm: gnt +jpm: plr +qsv: fhq pbl kqk fjx qbl +jlm: zdd czn bmr lcx +sps: zgz jbr +dtm: str +vkh: btx +hcp: fmc +pmf: lnq vxb qfj mqf +xvk: svl jbr mzz +ftj: cnf dxp mjg hrz +jmn: ddr sxv mzb nzk lgz dhp +bjc: xxg +snx: dbf pbm cjc xfz hlm gcn +pbm: kps bkr rsr +jjl: sfq drk rgv gcl +dmt: ktp +zzd: qnv +tct: ftz glc dqc +ssq: jcb +dfl: qvt zcp mtn kcr +xsn: fdl gqd vqs +gch: sbt brs sct cmq gln +tpb: nfg rpb trg bhh +bmr: zxq vgh mts +hhr: bhd xhf jcb krx +hls: mkq rjx rzj +spq: msq cmh rgv ddv pfp +vhn: hnq sls bnc fdv +fkk: gpm rdx kxb ndd +lkg: qpf xpp +qgc: mjm mct gbr +hhq: gjp tmh tcp sgz +nlz: vkc jgb xmd fbh +lrs: fpm +ghg: nzk kfs gqk +jqt: glv bfb fpl btk +rdt: nkx pzg +fbd: skn +dpj: pjs +vkm: xgt pxp gdv +lvq: mds mdq lxk xtg +dxl: grb hjc srj +jxr: sfl mbz nnc fbd +qtk: pbq +knp: tmd +phb: vgk +nsv: phl rnj szh cgr +bnd: zdg xlj mjg +fxd: xjk dbt fkq vnr +vzh: nnm dfq htd jqg +ggx: ntz bkr fzq zjf +rkb: tzp xmh glj +sxv: rsr nzh +pkf: kcp hpk vsh +gdz: bll fmc +hjs: dhk +qhg: gln +mgq: bkc xnh xvj xkf rpd +rsd: lsl znb hcq +mgr: kvl +lqb: nss fpl hkb gsn jzk +npq: grk ddk rsh vfq +gcn: mrq mzb brs sfp +rff: cvn +fdx: xfq gjq +tqm: pqm bgx +ntp: fbd scj cbq +pfg: ckb vkh vxb rtl +xpg: jsg zdf +djf: szb zpk +vft: hcq xkf +ldj: pqm +jbk: jdz nfq gmj hkk jsn +rqj: qts kvj pdd cpn +crx: vpp +dsv: zpk vxr bkn +mhm: rpp mpg nzk kmr +kcf: sfn +nkx: jlp +rvh: lrs zlp rgd rkj +ffq: ksk lzm bnm spn qqt +pxs: cfc kvj zrc xjn +jjv: rhp pkf lvb +ntz: mzj nsg +dmx: zln pbl fdp mkc ppk +dqb: pxg gcq sjk lnx blz +bss: tdq jrk +qjv: xtp kcj bmx vcq zcg +bxj: vnl xfl +ntc: tng +khm: jcb qpd +mzd: fzq dvp brh zxl +rqm: gbq +ldb: tmg +tsq: cfn frd xck rxl +qpr: lnq lfd qfb +ckb: lxk nfb +rlk: gxm pfr tbh gql +kcb: ssh pcc +lfc: ltm hdg xrf hrf +xjm: kgr cbn vpf dlz dgh +pzv: qrs njj +vpj: qbq +vxf: lhk +mjp: tch pzg zlb mts +jlt: vdz mtb +blz: ftx +pkc: vrt pzr +spn: rmn bff mdf +rnk: fbd cqt +ckj: jkv djf cxq llm ndn +jmz: sjh cjg nlz jgh +nzz: nzs pqm nrg zhl +lvb: dpj mzf +jkj: zmz qls bqv +bfc: dhk +czq: klv ssh +npp: jqs pjt bhh gpm +jmj: lqs rsm sml +vgx: nfc +mfs: ffv +scn: fhq +svg: jlv +jjc: tbb lzn +rcs: vcf fnx gnz smr llk xsz dtm +pvk: gvx bpd mrc vck stm +dzb: pdq dlt tcr hvd +dpg: pdd +cjx: xsz vtn fjb grv +jkf: nmc vlp pxj krp +lmg: tvj jqh +lxv: mrc xns gln +dvn: rrn krc ndm +jhh: ztj lcc bkn +ntl: cvh +rlj: vjj lnx pzg dfq +mhj: lzm pgj lfp cbh +tnr: qdt +vjn: kkz zfb dtp sfn +jsn: xpf +mdf: ckj xfc zmt +hjr: gbq mbx +rqn: stm xlq +dpf: kvk +sgs: rhp +mtm: tdb fqd lgx blr +klh: tzg +rsm: qfd +fqb: dpf tmd hfp gvx +ffv: kvk +scf: rkt xns mcs nrf +zzb: nft hcp nkh gxm +lhs: klv dtp ffr shv +xzx: fzt srn vxb ghs +rjx: qkk djv +lnm: vfp zhl gll czq +snh: tdb vzn nrf mxn +pzd: fhj bkh +vhq: dsg ssn hdx zcr +zrd: bll +rxm: tcx kxb zgz +htm: grb sbk pcm +mpg: dvp jsx +vlm: ttd dpx lss +vnl: ksl txn +czg: hrz gks kfl +mkc: kns +jjr: hkq cqm xqd tqj vbx +fnl: qcl thc +tgg: dxg nck fcn +kgv: xgl ztk dfs +lqs: bll +xkl: hkk +hmc: hkk +ztb: rmp rxv jzz +pzr: jdh qcd gsn svx +zlg: gpm +jvd: bjc crn brh lrn +xhh: bzp gbq +zdk: crn gks sct lqh +vbq: nzh fzq sxn jgs +txv: tkg qfk jlj bkr +tzl: bcf +cts: gjl vgk +dcd: pkc gcp ndd rxm +khj: lvz qfd rkt kcp +lxz: dkc qgj ztb +cbq: dgh +ckl: mts shv +gmh: rdr phb +tmf: xzt gjl mzr +cjr: fnl tsp ptq +xhf: xpf btv +qbf: tbh pcp +hfp: xlj +lgg: dbn ltv bnm +gqd: zzd rdr +rfm: hgf hjl vcz +mcj: xkj hnh dhk +xml: nkx +xvf: czp +drz: dpg pxk jtl +hld: jzl krp lrt +gjf: cjc qxd pfm lgz +ctf: vkh +mnh: fcm tsf qnv zbk tth +gdg: cpn vjj vgk +vtg: jsn mkp ddv tnr +nft: ntq prb jjc lcc +zqp: tkg jrm kmj +szm: nfp vgh +xmz: qbq tjp zvf +mzp: bln dhn bvj xgl +gvj: hjs xml +nhx: pcl mrg +xvc: pxk +bmx: lhx htm khg xfl +jqd: drp zjf msq lfl +llm: mzb +lns: cfn srv mrn +scq: zcf slb lmp mpc +cnt: zkn hgk knp lvj +kbb: ktt nvf ccd mrn +gpr: kpx hgl jsx bll +dfm: fbp dbg xzq mmm +qdk: czl +smr: pcc +hps: dng rfl +lgv: jcg qcl fxk vfc +nrf: hkk tmd +lrt: blz +svr: sps xbk khg +dlt: sjh xvf +qvt: vrn dxp ffx +fcf: gcp nnm ntp +jzk: xgt fqc mfs +rnq: jsr vzx gqk ccr +kmx: znb pgj lkg zdg vzx +vxr: crn +vxc: fgq +jfr: kvn qdk rpd glc +vtd: qbh xxg qkp ntl +grv: zzd pjt sch +jrk: grk +mbx: xqb bgx +rpz: xqb lrz tqz nbf pqc +xsz: pjx +qbh: zrr kns ntz +jph: qkk +xvx: mbj zbg pgj sln jnh +cbd: zzd bgf cpn +nfg: tzp jlp bsp +gjp: lbs zlg hjp +vqf: shv mpt jjf xtp btk xsn +qrv: vjr dfq +kxk: lvn vgn rff +ksk: xvf +stz: mzf ffx +kzx: kcf rnh bzc dfs ztk +tng: qbf +ntm: zfb fdx qfb vhj +pcl: ngs tdq +xjt: pxk lhx mts +nvl: ckr khm gql vkc +rqr: vhg vdz +knn: btg pxx +fpl: nhg nrg +gjq: vrh +mxc: hnq nfc +mct: xrm +kjk: cvv fkq dlz +ppk: ndn dxr jgs +hkq: pjh +rvc: dsg mgr pcl lmd +rgl: xvf pgg gbd qlc qrk +blr: rkj lpp tnr svf +rcj: pjx fpt hfz rlj +xlj: xgm +hkb: klh gkd +zcr: cfc qtf +zvc: xqd ltv +kvl: bgx +djv: bnc mff ztj +tzs: dfp dsv jlj nzm sln +dgn: hcj vtf kst rdr +glc: tjp gqj +xnk: mns rmk czp gvx +pcp: bjv +srn: gjp xtg hdg +lxk: rnh +vfd: tdb dpc +ngp: hgv gbq crx +zsd: sdh bkz dgc +lvk: nss grb mzn +hgt: vsx +xgl: bzp pkh +dpt: mzg sxn xkl kps ppk +flz: ncg hnn mrq xfc +fgd: rph hfz dbc +hbl: ghf jqq mfv gdg mpc +gxh: crv nnd nhx +vdn: kmd bjv +cnc: rxq jfj svb +ksl: sfn +msm: pqm szm +rdz: ckc cnc sxj lrs +nnc: lbs jrk +bvj: cvn xfl +rsz: pcp +mgs: nsx tsq vgz dsv +pxx: xmh +lvp: mxl +btt: bhd dpc qlc +ddv: jgb rps +drp: xlq +vln: gnd xxg +rsj: jqt mpt hld vgt +kzh: tgm jsn blx +sdf: rff qrv htd fkf fhk dpg +hgb: jvk tzv qmn vnz +nvd: pzp tvj +sjh: qzv +svl: sdv hjs +kzz: hlx bzp gtl +rps: zfx srv jvk +tcp: kbg +qrk: dkr bkq +vfk: cbx ppt +mxh: xsj ftx hrf +lcc: pfm +rmm: hss dxr mrq +xck: rsm +mvr: jbk xnh zhh pbq ffv +xmh: bfc +htr: pxf chr gmm fgs bps rdr +tkr: jnx bfd ntc xsd +bdg: rpp gks qqm ctp +rbg: klr zhh +pmq: bcv knp glc +jzl: nqf gsx qtr ctf vcd +ddk: kkg lcx lhj +tjb: htm chr vgt xjg +vcq: tdz zdd +llk: jbx jtl tlb rmd +jqj: stk nfj vtb bjh kcr fkn bhc +cbx: lnq +txt: rbg kcp +vnz: tzv tbg +bhc: cqv zrz +vzf: vkm trg lpj dmp +qcl: fjb +zxq: ssh gjl sbj mbz +kqh: zrz vbx +vhp: gjp vbg fqz +nrp: znv +kjl: rjg krp mxl +rcg: mtr nxf kvm npr +rqx: kvb nmc +ntd: nbf cts +bkz: zcv +zgh: lqf bff nnn +hgk: kns tcq qvl +kqq: hnc vfp srn tmn tjb +kgh: smr tbn pmr vfk +chr: ngs kcb +zxm: jqs ptq mxr +lmp: hnh szc dqb xtk +hrs: tmf fml +mpc: cfc +qkp: fbh +ffx: ksk +pnk: mct scn jbs slm +fqm: sch knb nkx bzp +blx: cvh hgl xkf +pmr: hjs pxj +gnj: fqj zxl rqg +ngb: vds ljh qhr dfc +cmq: gfx czl +xfl: njr +ggj: jmj lsl ttz jtz +lss: ttz +ktm: dng cqt fhc +prx: zbh pjt +hqj: czp jlv vtb vgc +kgf: rsr +vcz: hgv +tgc: fkq ndl rjg +cpf: nfc +vtx: glj zdd fgs zxm lrb +mtn: bjc djv gxm +vrn: ssq +cvg: cdp gln dkp +htk: qzv bcq jmb vqr pmn xkf +lrk: cvv msr +zcf: scs +skp: gmj hcp gnt zjk rxl +krx: vxf jfj dgq vft +xxg: cpf tdb +vsh: rkt rxb +tmh: qts tdn rnk xjk +snd: jjf gjq pzg pbc +mxk: ztz ztj kqs +qnh: gks scn hkq hgk +qvl: xvj +dql: txn cdn rph zdp +knb: ctq +vxk: tjp +zbk: kzh ffv xqd lbp +qvv: jbs ldr bcq vkf +cqt: xjn xgt hvk +hjp: mgd +nzm: khq qgc hjb tsf +mnx: ktt +ghs: ccj cqq +qfk: nfj zrz +vbg: khg pxg hnh +cqv: fxb +clp: ntd txd rkb kzk +kjx: dhr qtk +zcp: pzd dmt rbk +rdd: qrs vgn lvn lcx mgd +vnf: dlt qgc bcv +fmt: zkn +znb: jcb +fdv: lmg fdz dbg skz ffd +xdl: kss tnp ggh bqh pdh +qgn: dlg jph rmc qbl +ndt: fjb vkh hgv +grb: nzs +qtr: sfn ndl +vrh: trg vds +bnm: nsg gqk +mqf: npr qrr +xgx: dgh bxj nqv +cxc: hrs vjs kpm +nqv: dbj vgh nfp +pnm: hgk mqs mzb vlm bkc rgr +vgt: hgf ldb +pcd: nzh fbh rgv kfs +plr: mrc pzd tkj +vrj: tcr dgx kvn +fzt: sdc bqj +gbh: zpf plz fdz zvf qkk +vjt: rbk +ljh: tbg skv tmg hdg vcf +bzz: fgs nrg rdt vjj +drq: cxc xgv tzl ksl +dzx: lpr hfz tsr ssn knn +xsj: srj mzc qnv +xgv: nss jlk +nnf: vmp czp +bps: jxv ssh cbx +xjk: sgj dtp ngm +bkv: ddn qhr +mzg: fmt +cpk: hzn rrn bvj tdz +vcf: rpb bzp +vmf: lgk hhd bjv rqg hcp +hrz: xrm +mzc: fjb psb nfp +sbj: mbz +mts: dsj +ggh: msr ckl +rxq: hls qkp xnk +qtc: hnh zbn ckl hkb +cxq: mnx prb +lmv: nsx sxj hgt cdb nnn +zhl: dsg +fjx: mxk mzf gbh +ldp: zlx khd +jhb: fhc pcc +hpp: rjx sml stk ccd +fxb: kgx +fvf: mfz vrt rkb hgf csb hrf +dfp: bkq dxp +xnl: fvb hdg lfr jtl +rjg: bsp ffr +fcm: zkn +xzl: bjg pfr +pzp: sls rnq ftn mqs mzh +pjd: bff jqh +gfb: fhr zkn ncg jmj +gcf: rll jcc pxs +nkh: vrn drp stk +frl: bkz fzv +vfp: xkt bkv +kmj: czl mpp +lmq: czn sqz +ndj: njr btx hjl +njr: dfq fzv +fnj: zvc tvf gks nnf xrm sxv +xqb: qrr ctq +cbh: cmh lcc qzz +pnv: bqh fcn xrf dbj +mjm: fdp +vcr: pzv bfc fqc ngp kvb +qng: nds vld cbq kzz +dng: sgx +njz: mzr czn kkz khd +sfn: spr +gzm: rgt qqf gtl +bnc: qzz mzb +xpp: xrl mhc qcb +gkd: lmq +sns: njk hrf fhc vnl +ccd: rxr +hsp: xgm lpp rbg cxq +qrb: tgm scn zmz bgc +nvf: crn jbm qfk +gkn: vlk ktp dpj +vgk: gxz +jtg: svl kvl ptq npr +hlx: sgj cjr xjm sdh +hgn: dpg zlx cpn khg ppt +dkb: fzq jhh +gnd: vpj +bcv: xhf ldr +qqm: rxb klr mtb qqh +zcg: fgs vqs ctf +bmv: pjh mgx gmz gdp +ddz: rhn lns fhj qhg +zlr: bdr +fml: dtp +mzj: llm +vlp: pkh +mgx: jqh rmc rmk +pmn: jlt +lqh: lgz zpk +zrc: pdg btx gtl +qqt: ndz dkp +nnx: kcp lfp hnq +nqf: sdv tsr lrt +rgz: tvj lxz zkm zrr tjp nzk +zpk: tbg +lbp: rnz +bqh: zgz +dlz: lrk +vnp: fdp bjg gql +gnt: qqj +rqg: ttz +pbt: gxh vgq kvf jtl xrf +rxd: pxg jbx tmn +tqh: qzv fpm +jsr: zpr +mzq: fqc csb scj mpt +rjf: cbq svx sbk +dvk: kjx mkq dpj +fvb: msm +dhl: xlf drz ddn xhh sjk +btk: jhb jlp +cbk: hjr nmc kgv rdx thc jfb +dlg: cdp +kcx: jqj fpm bhc lxv +tcg: svg +qbt: dpf rqn jbh jqr +zdx: ljn bgx rnh zxq +sqk: zrh gsx lrk +jqs: pzg vzh +jdj: pxp kcj htz rqm dvn mtr +qdv: jsr kxz cjg +pjs: slm vtb +hlv: xml dfr zbh kkg +vqm: vcd nrm pdd rlf xvp +ccj: glm htz +zlb: zrh klh zlg kbg +srb: gnz hvg +bgj: jqh jdz mlh +kvj: vjs +xcj: fqm gsn rnk qcr +zzv: qcx mmm jzx hvs +smh: csr jsx kcq +fhq: tkj +ktn: vvl jbs gqj vsh +kbj: tqp crv rqx xhh +str: bdp sbk fcn vgn +hpk: bnd +mhx: nrm pfc rhs txd znv bjm +klc: kfl kgx jpm prd +xbv: rpp mxc vlk fxb +mjt: gcp grv +qfn: zlb hps vjr +bcf: hfb csb +lkv: rnh vfc pxs zcf +xbq: ppm ltr rzj kmr +dms: vxk dgq kmd +hqf: nvd tcg jsr zmt vxk +sdv: lnx +lqn: ntz zzb czp +rlf: zrh +ccs: xxq vpj zzb +jln: kvl srn dbj +gxk: phb +jzx: lss tvj cjg prb +mbj: qqj mrn +xrl: lqs gql +brx: npp prx pcm knb +jtl: lfd +qxm: zbb lzn zlp zjf hgt +qkk: jjc tcr +lpj: sbj jqg xjg +svc: qdh qvl sml zcp +qfv: kxb zkp +tjz: tbh gnl jdf +kps: stm +dbf: vlk khm bld +xtp: vfk tlb +pkk: nft czp slm mjm +vtq: gdz bpd dgq rxr brh +qfb: dng dbj blz +mzz: gmm pzg jgv +vqn: rmd fgd hsg ktm +hdx: qqf +lxs: vgx dbn gbd +ntq: nzh nsg +vtb: jmb sqr +drk: mpg gql fmt +zvv: bcq dkc rmc zpf +gdv: vxc rgt pzg +gjl: psb +lhx: fzv bgx +sqr: cpf xxq +qhr: pkh +pfp: dtk +xsb: btx xql njj +jdf: cdp +fgx: pjs gmz +scx: bdr kjk zfb gmr htz +rkv: szb +rjq: lbs klh zkp bgf +xkv: jtl rqx vld tnp +rnp: hmc kcq dgx jbh +dhp: gnf trv +bzk: pxg pbc kbg njz xmk +rkj: rpp ztz rbk +tmn: xql xtk +frd: zrd +qcb: rbg +lcf: tqp tmg +ghp: qvl jsg jjc +rpg: xsj tzb ldb bdr +zpc: ckb fzt rhs spr rzv +lvz: cmh +dgc: mxl btg vjf +jbd: tlb lkv xpk mgd +csn: mbf +vht: mzh lkg gqh +rsr: lbp mns +lgk: zrd +zgt: mzh lgd svb vpj +pcs: fdx tcx sdc npr hjl +vbk: zkm mlh pcd vvl plr nvf +jqg: ffj +jlg: qcm dhr nhk cvh +tqz: jhb +dfz: mlh dbg qgj frz +ptv: xgx tzl qpr jtl +lfl: kfl ssq +pxp: cbl +ldr: rbk sln gmk +rgd: mrq pjs gbr +vkx: pdp tmg gvj grt +hvk: mfs nss skv +fvk: scs xjg +ktt: qfd +vvv: xgt ftx msr vfc +nfb: pxj +ndm: vjs +lpp: jfj jgh +rxv: sls kmd +fbv: mkp nfc dtk gnx szb gkn bnd +sjp: nds kcf khg bdr +lgx: qdk qzz +zlx: bxj tqz +rtl: tqz lcf qfv fgq +rrl: nzs tmg jcc +mrg: qhr vds +bld: vxf bkn fgx +vfq: ffj +gxm: lss +tch: zbt kvb ggh mgd +zzt: kcb pms jcg +tqp: vpf crx +vgf: cdr fcm jkv jpm +jlj: pfp +gcl: cqm gnl rcn jlj pdq +qnv: xgc +mbd: vrf ppm bjc zkm +jgl: cpf dmt vkf +vrs: hgv klv fvb ngm +qvp: ngs dxg ngm cfc +lpt: dql pxx lvk +hzc: frl grv jjf gjp +cdb: bjg +sjl: kgf tct rsm +fvj: clr bhh bnr xgc +zbg: bpg tjs frd +fsb: kgr vcq gxz +dbt: ljn zbn vlp +fnv: trv dkp +rdx: jqg gxz dtm +ssn: vqs dfs +cnf: qmn hpp kqs fqb ghg +bct: xlj cvg pbq vht +dbr: dpm sfp brh kmd +dff: gbh hzp kqf jbs +xsd: jbm qdt +zcs: jlp lhj bdp ldp +mfz: kgr sjk +gfj: cvv phb +ljn: mzc gvj dfq hvg +rmd: dgh dfs +ttd: fmc zmz mzh +qdh: ztz chl pmc mzh +bfd: ktp vxr +nxf: vjs gvj rlf +tdn: mbz rlf +mvn: dtg ldb sdc +hkn: khd ndj xkt mxl zrh sgz vfq +vqr: sgs ccd pmn kvn +tkg: mct +shh: hgl szh zmz qlc +dsh: qtc qfb ndm gcq +fkn: vbx gvx +cmz: zdp scq mvb fkf +fqv: lbb cnt rkt fnv +hgf: qcd +thj: mpp nvd mxc +xjn: ngm vtn +zln: dkp rqr rhp +btg: xzt kvl +rfl: kzk xvp pxk nfb bfc +scm: jlk tzl vfc +tvk: rcn lxx nvf mzj +cqq: lpr kkz +tcr: dkr +sbk: kcf +rnj: cqv zrr gql smm +fkf: mzn clr +khq: zpk bgj sbt +crv: bls bqj mbx +mml: lvg +stp: kvj tnp lhs btk +qdz: dpt dhp gdp dxp +rmc: hmc +rcn: gbd +fcq: dmt zrd dtk lqn kqh +xjg: hvg +rzj: svg +lkc: ldp pxf qqf +mfx: hjs ctq skn +gkv: vgx pjh bff +rxl: vlk tnr +hsg: fst gmr cvv +dfr: qrs svr xfq lrt +jqr: hvd +zkq: rqg gnd kgf bll +xgc: lvn bcl +cjg: gfx +brh: sgs +pgg: nqp sls +dxr: rmb +gmr: ffr +xnh: hgl +vmp: zpf jlt +gmm: bcl +vzn: xpf tvg cqv +ftf: dhr pvl zpr +gck: hvd dgx bjc mhc +fhk: cfc kvf +rgv: sgq +pht: kfp gxk rjf +hzp: dmt sfq btt +sxf: phb qfn rfm lcf tqm fhn +msq: ctp tsf +knc: hjp cbd rph +jrf: lvn gmh zkp +cbl: fhc gsx pxk +nbv: hrs mjt xkt rjg +pxl: gnj chl bmv +vkc: gfx +kgk: nrp qcd bss vxc tcn +jjf: rlm vcz +ndn: ssq +pms: ndl pjx gfj +btz: qcr tgc mds txn bdp mvb glm bzc +xzq: mnx mjm fmt pfm +lfr: lmq rrl +ndz: brs cdb fmc dvp tcq +sxj: jbh fcm +fqd: czp +pdh: drq bdr jxv gjl +mnr: pqm fvk scm qtr btg +ztt: scs zcv +zvf: hrz jsg +zxl: tvf rsz hgl rkt +bkh: tbb qfd qdt frd +gqh: hpp mpp jzz +shj: kgx sml ncg mnx +qlc: hfp +sbt: nkh +rhn: czp +npb: klr frd fpm kkx +zmx: vhj xgc ndd +pmt: bxg xsd dlg +qxc: tsr mpt +znt: bln rsh +rgt: tzg +xlf: kvf vxc bls +tgx: gqd szc zbn qrs +sch: sbk +pkl: nlz ntf kcp +dfx: fxd jcg kgk lfd xml +kxm: xck kkx rhn zdf cdb +zhh: gqj +hcq: ftz +prd: zfx ltv mjg jsx +lhj: kcf dfc +pdd: rdr +zhq: nsg mtm vft +vcd: fhk jcc +rhc: mrn hls xkl rxr vhg +vts: rkv gmz spt +lmj: fml sqz tbn +mff: lvg +dls: zhl qqf lpr xsz +trs: pnj xhh kjl vkh +rlm: rlf ffr +btv: hhd +jdz: xgh +cnz: bgn qqh mtb +sht: fvk nzs +bjh: jdf ktt pcp +ktj: nfj jbh tbh mml +zkp: nhg +bgf: mfx vrh +ssf: ncg jkv jfj jqr +svf: xhf vjt tvg +chc: grb hps sdh ngs +pvl: rpp +bqv: kgf khm +vlc: hvg vxb grk ftx hjc +kkg: hfb +jfb: zbn xtg xmk +hrf: gsx +tsz: xsd qtk pfr pjh +jgv: gjl klv qrv pcl +ltr: tkg qbf fbh +rhs: vjf tqm chc +zdf: tkj +bbm: kgf qnp jpm mff qnx +ddr: qqj +mzf: lrr rxb +gdp: npb xnh +xmb: lbs qxc krc ndm jbd +srj: pkh +jsx: vrn +gll: glm bzc +mmm: nnn mzj kdl qnp +stm: bjv +pxj: dsj +cvn: vds rzv +zbb: fbp mzg ghp +qts: nfg jln +tnp: lcx +jtz: jlt +gzc: xpk qcr jrf rcj qgg +dmp: bss jqg +tdz: znt kzk +ghn: zcf vgn mpt +tth: rkv mtb mxc tng +qjd: cbh pvp tcg pjh jbm +fzv: sgj +glv: nnc bzc +lff: ntq vmp nsg xmd +nhf: frl sps czq xsm +tqj: sbt hkq rcn +qjq: rmp +dfc: mgr ptq +mzr: tdq sgz +gsl: vfd tmd ssf dtk xmz +zdd: glm +tmv: xrf vhp cqq svx +zjk: sct tct xfc +gsb: tzp rqm sgx lvn +tzv: svg lhk bcq chl rhp +ccr: xmd mml vlk +vrf: qhg lgk lpz bhd +tsr: xql +zbn: hdx +fxk: dlz sht hsr +qnp: dgq +mfq: mbf vtn hfz mxr +rfx: sbj njj rjf slr zzt +nds: hzn +jdh: bqj nzs tbn ztt +cgr: mxn mpp +vjf: zcf qtf +tpk: xgm rbg frz gdz +qmx: czp gnl lpz bpd +xkj: ffj +xlh: dxr lqh zrz +zqk: njr sqz ldj ppt xsb +lrb: jcc ndd mbf +kcj: xql nmc +dmh: npb kxm nqp lzn +nlx: mpd fxb txt pmt +xql: nhg +fsq: cqt krp sfl +kqf: jph hpp vrj lvj +npc: hfb gll zcg dgc +scj: lnq +vgq: sbj +nnn: kqs dbn +rmt: hnq ttd vts kvk +pqc: ldj zlr kxb mfs +tcn: znt krp prx szc +pjf: jzq tgg svx psb +gmj: mff dbn +rct: qxd zdg cmh xxq +dqc: vck gnt +vgc: qls xvj bkr +vnr: mrg bsp +lsl: czp ddr +ffd: sdl mkc tjs +fht: vrt sfn pxj rxd +dtg: tlb gmm bkz +vvn: ndt klq spr cts ccj +kdl: vdn kfs sgq +cbn: hzn kxb hdx +xhc: drk czp mzf rxl +sfp: bgn bqv +ckc: xxq kjx tjz qjq lvb qqt +jzq: pcm gkd +xns: ttz xrm +cvp: kjx tjs ggj ttt +ghf: vfc xvp rgt scm qfv +tcx: kzk mfx +qnx: nsg kcr zxl +nmx: psb rff cbk pxk +dkv: vgf szh mbj fbp +mfv: vjr +jzz: hfp rsr +kvb: pcm bhh +qcm: kps +lvn: zbh +sgz: fdl +gnx: zqp lzm ckc +rrn: gfj vqs xfq +hpn: vnz vxr tcg dhr xrm +xcp: vsx pvl fkn jsg +crc: grk lhs vld dpg +xbk: ngp +vpf: jbr +qfj: xkt +mxn: gmk +ltm: tdn kjk qcl +qtj: rsh nrp zmx +clr: pht +nfc: kcq +tvf: rhp lgd +vvq: grt xvc jxv jjf +njk: sht bxj ptq vgq +xdz: ztj rgr zpr lqv +mpq: qfj fjb lxk mvn vhp +gxt: srb xvp tzg +gnf: jvk vbx +kcp: ktp +gvd: gjq zlg mxl pxx txn +vpm: zdf lrr rmb lmg +ztf: fst bcf qnv sdv ndd +lrz: csn xmh dxl +qmv: qqm brh qdk mcs kkx jrj +nzh: mml +tsp: njr +frz: fgx nrf +fhj: gmk kgx +lfp: kcr bgc xnk +dpx: sls zdf bml +kbp: zlr vlp zkp sjk +bqk: znv vfq zcv rpb ctf +plz: rsm cfn +pns: qzz rhn phl qdv mrc pxl cmq +mvb: nmc htd +lzm: btv zpf +ftn: lgd rbk +qqs: dxx vnl lpt vfc +tcq: qtk jsn +nkq: knc vhq xgv fhn +pvp: tbb vdn zvc +xzt: ddn nnm +grt: szc +pdp: fgq scj hjl jlk +fhr: jgh ndn +glm: jrk +fqj: ztz jlv jgl +rmp: drk gnf +njj: tsp hzn rqm +jms: tjs qqj vln fnv +hlm: qjq txt dbr jph pvl vck +tzz: ftz csr zpk +dpc: cvh +msr: hjc xmk +xzj: vxf lhk kpx srv tng +sxd: kns bhd fnv +ksb: ntl bxg jjv zpr sbt +jtr: vrx szm tcp bcl +kfp: dsj sch sfl zlr +klr: dkr +bpg: ksk jvk qls chl tkj +hnn: ntc svg sgq lqv +pgj: bjg szb +rfj: kvm zsd clr lkn +fjb: pjx +nps: bjm mfz njk srb +vkf: vgz tqh tbb +lpz: hss ndn +jlb: pkl vln rnz lgx +zdg: jgs dgx +gnz: lvp grt +csr: trv +rtt: xrf ddn csb +fst: ffj qtj +qgj: sfq btv +bts: nhg gxz nhx dxl +fpg: scj ddn nrp +qpd: rxr gmk kmr +jsf: fbp smh htv bpd +mcs: lqf lhk +hss: xkf jgs +tlj: rmm jlg ccs xbq +hbh: xsd mgx slm xlh +bnr: krp bls pcl +sct: hnq +ccp: zrr ffx scf vnf +ffr: fdl +trg: qrr +vrt: bcl +glj: bqk lvn +pgn: xjt skn kxk gcq xbk +qkm: knb vjr glm +rnz: mzb rxb +ttt: pfm hgl tvg cqm +hjb: pdq gqk stz vjt +gqj: mzb +bgn: qhg +pbc: fvb rdt +nxh: pzd xqd czg xzl +fnx: shv gkd mgr +rpd: jcb +nsx: ctp rzj +lqv: bxg dqc +jcg: ppt +fvd: scn lgk prb blr +zmt: xsd vxk +pdg: pxk mfv gkd xvc bsp +sdl: qdt tvg jlj ntz +kvm: trg +rgr: kfl mxn +tzb: qcl fcn pcc +thb: dpf dkb dms +vjj: vhj +zxc: hhd sjh fhr rcn +ldv: ntc hpk pmq zxc lgz rxv +lrn: vdz lhk pdq qqj +kmm: vhp lnx gpm smr xtg +bgc: sxd sgs +nfq: fmt ffv qcb +vrx: srj bgx +vzj: skv hsr mfv czn +dcm: srv xkl +lfb: vvl mgx jbm plz +mzn: qcd sqz +mds: dhk fpl +bbj: kfs tkr zjf thb +qmn: fqd bct mkq cdp ftn +kpm: pfc htz +vzx: brs +pfc: vpp dqb hjp +hvs: stk xlq zhh czl +mrq: rkv +vsx: fmc sjz +bjm: mxh bzz qkm vgh zbn nck +fth: rsd bjh csr dvp rqn +lfd: gcq +mxr: csb mzn vjs +hcj: lvp nds gzm +lrr: jlt lzn +xgh: dcm lbp +rmn: lxs xlq jtz kqs +rmk: tsf +dpm: jbh zhh +mtr: zbn csn +ntf: bgn lrn +thl: hjc gkd jxv sgx rfm +hnc: hgv +hjj: vnp sfq vhg xgh jrm +fhn: vrx vpf +skn: rzv +kss: vgq fpg ghn xtk +tdq: tmg +htz: fdx vfq lhx +ctp: vhg bll +fgq: sgx sgj +cbv: sjp ztt nds gcf +kvf: xml +pfr: hvd zpr +bsp: csn +szh: ttz +ccc: dvk cqm dpf gck +ltv: gfx +rph: scj ztk nck +skz: xzl jqj vnp +khd: npr +mpd: gkv pjd drp +kgm: crx hpt fsb kvf fsq +tbg: zrz +rgq: mcj nfp kpm lcx +lqf: vgx bjg +zlp: kvk kpx lss +nck: btx +gcp: rgt jrk +pbl: ftz qxd +klq: kbg sqk sjk vhj +gbr: prd bkn +lmd: kgr pnv trg +jgb: zkn jmb +rmb: mhc lgd jbh diff --git a/inputs/25_test.txt b/inputs/25_test.txt new file mode 100644 index 0000000..bbfda0b --- /dev/null +++ b/inputs/25_test.txt @@ -0,0 +1,13 @@ +jqt: rhn xhk nvd +rsh: frs pzl lsr +xhk: hfx +cmg: qnr nvd lhk bvb +rhn: xhk bvb hfx +bvb: xhk hfx +pzl: lsr hfx nvd +qnr: nvd +ntq: jqt hfx bvb xhk +nvd: lhk +lsr: lhk +rzs: qnr cmg lsr rsh +frs: qnr lhk lsr