diff --git a/2025/11.rs b/2025/11.rs new file mode 100644 index 0000000..656889f --- /dev/null +++ b/2025/11.rs @@ -0,0 +1,57 @@ +---cargo +[profile.dev] +opt-level = 3 + +[dependencies] +nalgebra = "0.34" +--- + +use nalgebra::DMatrix; +use std::collections::HashMap; + +static CONTENT: &'static str = include_str!("./inputs/11_1.txt"); + +fn main() { + let parts: HashMap<[char; 3], (usize, Vec<[char; 3]>)> = CONTENT.lines().map(|l| l.trim()).map(|p| { + let (key, rest) = p.split_once(':').unwrap(); + let key = key.trim(); + let rest = rest.trim(); + + let key: [char; 3] = core::array::from_fn(|idx| key.chars().nth(idx).unwrap()); + let rest: Vec<[char; 3]> = rest.split(' ').map(|p| { + core::array::from_fn(|idx| p.chars().nth(idx).unwrap()) + }).collect(); + + (key, rest) + }).chain([(['o', 'u', 't'], Vec::new())]).enumerate().map(|(idx, (key, v))| (key, (idx, v))).collect(); + + println!("{:?}", parts); + + let mut adj_matrix = DMatrix::from_element(parts.len(), parts.len(), 0u64); + + for (src, (src_idx, targets)) in parts.iter() { + for dest_idx in targets.iter().map(|t| parts.get(t).map(|(i, _)| i).unwrap()) { + adj_matrix[(*src_idx, *dest_idx)] = 1; + } + } + + println!("{}", adj_matrix); + + let you_idx: usize = parts.get(&['y', 'o', 'u']).map(|(idx, _)| *idx).unwrap(); + let out_idx: usize = parts.get(&['o', 'u', 't']).map(|(idx, _)| *idx).unwrap(); + + let mut total_routes = 0; + + let mut connectivity_matrix = DMatrix::identity(parts.len(), parts.len()); + for length in 1..=parts.len() { + println!("Length: {:?}", length); + connectivity_matrix *= &adj_matrix; + + let routes: u64 = connectivity_matrix[(you_idx, out_idx)]; + println!("Routes: {}", routes); + + total_routes += routes; + } + + println!("Total Routes: {}", total_routes); +} diff --git a/2025/inputs/11_1.txt b/2025/inputs/11_1.txt new file mode 100644 index 0000000..61c3843 --- /dev/null +++ b/2025/inputs/11_1.txt @@ -0,0 +1,576 @@ +nzm: rdg art kvn ljd nrj +pvs: kmc fxz njx amt +ext: xfz inf kzr +hwq: jpw yjw vkt +ygr: wtu vbc hkc +gly: ujv mtz zcc +bjl: blz pmb +cst: uej kcg +zqw: dta udx fhr slm qsa xsm yif ych wcj hbl xth crj fjy ebp piy snu eyt cpz gqb nwk jjt kfd +tyl: rzk wcc zti jex eqn xbm uqa ceu mgw urj gvj iel zuh +llk: aij +rby: rsc +waa: rae bsg +rcu: art kvn nrj +sev: drf tod +tqj: ydc fzm +eep: xlo poa iqd +xas: lws xdb qbt +cfg: uzb +bcg: jaf zpm oql +zqg: xsg hsq +tqb: vic zle tyl hnh +wgu: doq ekw jyi +ned: kzx lvb tza idx +vtt: gls rvi ppv otq +lky: wfk rpg aij +wcc: pxu zel bth +lqv: njx amt kmc fxz opq +led: hkc yzo wtu vbc +vks: cfy zud +hck: kzx lvb tza +loe: lym +zko: qya +tod: nre fxv +fxv: fkd ekg mmm xba +qjj: hud fkd ekg mmm xba +sjw: you vkz +pnj: hwq mot ydw +ydv: kzt ssj vwa +leu: qbt +ljn: rcf fmw +kuy: tyl hnh ibk vic +ezr: vrk vwa +pfr: vap +zpo: sit sfh twt odd +mlr: kmc fxz +ydw: jpw yjw pha vkt +ttd: bjl hkc +rgn: zud dzj +snu: hvd liz +vbc: pmb mmx +ihv: ibk vic +vgi: idx +rwa: fkd +sud: yzb hky +fhb: jru mrb pps +fsi: byp svo ezv vsa +fkd: roj kvk dio zwl vle nsa oxj wyb +cfy: ffo pvs ytq +nbu: out +lru: ipg imm hrs +ovm: zle hnh +rsk: mlx +ooq: csk +egg: uzb jaf oql qqh +lry: rae +zqx: twb xyk rut +brt: kio cgz +msc: mmm ekg hud fkd +kzx: gcv akw hng +twb: fdf rja sjw +vhs: sxj +fdf: vkz iqd +wew: vgz gls otq +chj: kpx xiw +qeu: dtq xsl rfn +rfn: qey tqb eza fjn +wzr: you poa xlo +ghx: xsf jvu aid qeu +zrm: uej hzq +zuh: kxh vup sir +nqd: mrb tbx pps gka +zih: njx fxz amt opq +ngw: fzc zyv gbx +pcz: kvb +zxv: hng gcv +lsp: cqq pfr ibh +pha: poa vkz iqd you +oea: qbt lws +kme: air +nax: vad kpx xiw +qsa: bcg egg cfg +cat: ewt wew +njx: bat fdj nsw chj wyq fam iqk qgq omu kiv ovi dup +qya: bdb qjj mof +twt: owm +ail: amt njx opq +gtk: out +oul: xdv +ryw: qmg ntj +wqz: wrc ngy +lit: wzr fdf rja sjw +ibk: urj pjr cfs ceu mgw eqn cas uqa xbm rzk ktv zti +rjc: zup rsk +ych: lky cvz ilm +hud: roj xuu ibr iua ybi +tvp: jfy hyh eip qmg ntj +inv: qjj bdb +ykn: tak zto qei +epu: vtc edy rgn +hzb: vee +jpw: poa iqd +urj: ucy gbg pdi ygy bjo +ybi: awi +vkz: fmf waa dcd eje gly ihh +pps: ehx +qbt: kmc amt +iua: isx trq res shq +iel: bth eth +imj: mmm fkd ekg +ipg: iew ypy +fzm: vua +piy: ned +nre: mmm ekg hud +kvk: dac hky +nrj: out +thp: hnh tyl ibk zle vic +iqd: wjs fpr hzb fmf lry dot waa eje lzu mgf +ljd: out +zle: jex cas eqn uqa yla rzk ktv wcc zti pjr urj gvj iel zuh rle ceu mgw oha +zel: wmu ijr +lzu: rae +pgl: xlo you vkz poa +bjt: eip +foo: pqh vfu drf +ngy: jac wvw +tnb: tor ooq pyq gai +iew: leu whw xas oea +zwg: wrc ngy etz +rzk: kxh cnw mjp sir +fxz: qgq brt huy gav wyq iqk fam omu kiv ovi kmq nax dup bat muk fdj nsw +wmu: bkk +cpz: ygr +ucs: vkz you +jla: uuf thp +jaf: akw hng gcv +xoj: vic tyl zle +cqq: dlp vap +ffo: opq kmc amt fxz +urv: vap dlp qwf +zfn: dac +oyv: vic zle tyl +rbm: pvh gwk jrh +xlx: rvi +icb: eep yby +vub: njx opq +qwf: gcv akw hng +esc: fmw +tix: fxz amt +wyb: hky +oql: hng akw +yla: nkv hgb equ +zpm: hng gcv +xba: utf kvh ajc sud zov zwl ybi oxj loe wyb dio nsa uvr vle +dfp: etz wrc baq +vap: hng +rja: vkz iqd poa you xlo +bsg: fog dpl bip +sfu: gbx tua zyv +dzz: vua tnb gzy +hvd: nmx +muk: bjt tvp ryw dyt +ckt: vkz iqd poa +uuf: ibk zle hnh tyl vic +air: oyv +slm: ktn hvd liz +tqf: onm ius msc +rae: bip +roj: zqx ojs oyj qph +eqn: tqf pty guo +kzr: ail tix +ydc: gzy tnb +iqk: qic ote rbm +xsl: tqb fjn uwy eza +qph: xyk lit +shq: zza mnm zbd ucs +kcg: out +pqh: rrp +xuu: res +qfl: hsq ifm xsg tab +gai: oqt azy +vua: hjl pyq +rut: rja +jex: bjo +bws: qjj +fog: fgo ykr fhb gda +hqe: iew dlk ypy +utf: lym +qqh: hng akw +gbg: sev spq foo +ktv: sir kxh vup cnw mjp +nfn: gcv hng akw +qei: ngw +hrs: iew +whw: qbt xdb +rdg: out +pmb: gcv akw hng +gcv: ssm nli rhl tuj zfe kvs tgh zqg big lru twn glg ykn qfl jts dyy +otq: xba mmm +spq: pqh tod +gzy: gai ooq hjl +jvu: dtq rfn +sfd: uri lkc +isx: ucs mnm zza zbd +vbg: nbu viv +xem: cmi edy +ifd: dzz rsc fzm +kmq: rdt +tgf: jyi +alt: poa vkz you +gbx: qzi mlr qrq fyo +pkw: uqr lsp +uri: ibh pfr urv +ucy: sev spq +dhh: zle hnh tyl vic +pty: msc ius kdz onm +fam: joh +kzt: nzm +ifm: sxj ext +ijr: rwa hal bkk +tak: fft +onm: fkd ekg +eje: rby tqj app +nsa: res shq trq +xyk: wzr fdf sjw +qrq: amt +ykr: pps gka mrb jru +uwy: vic zle tyl hnh +ygy: yhs spq +xsf: rfn dtq xsl +lvv: uuf thp +ceu: zel +vee: ydv xgp +lws: opq fxz njx kmc +tbg: bws inv +fee: kmc fxz njx +mtz: ezr zfy +huy: tvp dyt +ibr: fsi urt awi +rfr: sjw +ojs: rut rfr +twn: imm hqe hrs +yjw: xlo vkz poa +vft: kzt ssj eha +baq: wvw jac yoy +fyo: amt kmc fxz +urt: svo byp vsa +sbp: hng +kiv: wec kme +sir: rqx cat zgj pws +bat: ghx +pws: syu vtt xlx +gwk: zne jla lvv gpg +lvb: hng gcv +svr: zqw ino ugt +doq: fqp ljn nrr +jyi: esc nrr +gzj: xfz +hgb: zko +tua: pjd mlr qrq fyo +ppv: hud fkd xba +bwi: epu xem +ytq: amt kmc opq +aij: akw +bfr: xem nnd +kvs: tab +rle: pty +ehx: out +dio: awi urt fsi +crj: hck vgi ned +qth: ekg fkd xba mmm +xsg: ext +zgj: vtt wew syu +hkc: mmx blz +wqi: gcv akw +ujv: vft +owm: njx fxz amt +ewt: otq rvi gls +ekw: esc ljn nrr +zti: guo +xsr: uej +cas: eth +ymz: biy +kvn: out +fmw: nbu xdv +idx: gcv hng +xbm: zda hgb nkv +mot: pha jpw +gka: biw gtk +hky: pgl olf +pyq: oqt +bth: ijr +dgr: vtc rgn +pdi: yhs spq +uvr: hky dac +rdf: out +mgf: tqj rby +cnw: rqx zgj cat +zbd: iqd xlo +chp: tyl zle +cdw: ngw sfu fft +vrk: jyh rcu +mlx: vub +tuj: dgr xem nnd epu +jrh: gpg lvv +gvj: brb zel +azy: out +qzi: fxz amt njx opq +jjt: led ttd +xjo: mot ydw +yby: xlo you iqd vkz +amt: brt huy gav +fhr: vgi ned +bjo: yhs ria +cvz: rpg pdn wqi +dta: uba led rpo +uqr: ibh pfr urv cqq +rpr: ibk +rqx: vtt syu ewt +imm: iew +bkk: hud ekg +hbl: ktn liz +jru: rdf +xdb: opq +jac: zrm txj cst xsr +hyh: ovm dhh +awi: svo aoq ezv +eyt: pkw sfd zhj +eha: nzm +oyj: rut xyk lit twb rfr +syu: otq ppv rvi +ktn: dfy xll sbp nfn nmx +cjv: xoj kuy oyv rpr +zov: zqx ojs oyj qph +nrr: oul vbg fmw +rpg: hng +svo: afw +dfy: akw +tza: akw hng +wjs: dfp wqz zwg +qgq: bjt +wnc: hwq mot ydw +nkv: tbg agm zko +nhc: jvu xsf aid +oha: zda kzk equ +ria: drf tod +eza: vic +xfz: lqv +dfb: wgu fml +agm: bws qya flm +cgz: air phg +bdb: fkd +nnd: edy rgn vks cmi +gda: tbx jru gka pps +omu: kpx +blz: akw gcv +dur: zpo rsk +chb: dfp +dup: nhc joh +ibh: zxv +vwa: jyh nzm rcu +wec: phg air cjv +fzc: fyo qzi pjd mlr +uqa: ucy pdi ygy bjo +tab: ext gzj ypl +ajc: ojs oyj qph +hdi: tyl zle ibk +mgw: ygy bjo gbg +lsx: you poa vkz +zhj: lsp uri lkc +dyy: hqe imm +vup: pws +ius: mmm xba +rrp: hud fkd xba +hal: fkd ekg mmm xba +vad: lwp +poa: dcd dot fmf waa chb lzu gly kpb ihh fpr wra gmr ejc +dyt: hyh +zcc: xgp ydv zfy +ujp: tyl vic +oxj: tsp lym +pjr: vup +txj: uej kcg hzq +rlv: fog dpl bip +pxf: tsp +sxj: kzr +tor: oqt +qmg: hdi ovm ihv +cfs: cnw vup mjp sir +yoy: zrm cst txj +pvh: gpg lvv jla zne +qic: pvh gwk pcz jrh +wra: fml tgf +wia: pvh pcz +wvw: xsr cst +phg: kuy rpr +udx: bcg +nwk: rpo led ttd uba +afw: lsx yby +eth: nkl ijr wmu +xlo: ktj dfb waa fmf wjs dcd gmr +zup: sit odd mlx twt +uba: wtu bjl vbc yzo +gqb: led uba ttd +odd: fee +res: ckt +ypl: inf +ypy: sjh whw +tsp: pnj wnc xjo +dlp: gcv +dlk: leu xas whw +nsw: rdt ote wia rbm +vsa: afw pdf icb +dtq: uwy eza qey tqb +pdn: akw gcv +ihh: wgu tgf +drf: imj +eiw: ydc dzz +hnh: mgw cfs ceu oha urj pjr wcc rzk yla cas eqn xbm +ugt: dta crj ebp fhr udx eyt yif ych cpz wcj gqb hbl xth nwk jjt kfd +vic: zuh zti rle jex yla ceu ktv iel +fjy: ilm +trq: zza mnm +ssm: epu +kfd: egg zcd cfg +fml: doq jyi +edy: cfy +zza: poa iqd vkz you +jyh: rdg ljd kvn nrj +xsm: llk lky +hjl: oqt csk azy +mnm: you +brb: ijr nkl +aoq: afw pdf icb +jkz: vic tyl zle ibk +zto: sfu fft +mmx: hng akw gcv +fdj: cgz kio wec +rvi: hud +hng: qrc glg bwi dyy kvs cuh big ssm nli +kvh: ojs oyj +kmc: wyq huy kiv fam fdj +big: biy dur rjc +lym: xjo wnc +vkt: xlo you vkz iqd +oqt: out +you: kpb ihh mgf gly eje chb lry dfb ejc wjs fpr +zfy: kzt eha +eip: ovm ujp +yif: cfg egg zcd bcg +zwl: qph oyj +pdf: eep lsx +xuw: njx kmc fxz +nkl: rwa hal +pvf: wnc +equ: tbg zko +jts: dgr +nli: imm hqe +ovi: ghx joh +ati: out +sit: vub +ndr: shq res isx +kvb: uuf jkz +xgp: kzt ssj eha vwa +nmx: gcv akw +ino: ebp nwk fhr slm snu eyt ych wcj dta gqb +kpb: wqz dfp +app: fzm dzz +sfh: fee vub +xll: hng +vtc: dzj +liz: dfy xll sbp nfn nmx +kxh: rqx cat +gav: dyt ryw bjt +mrb: gtk ati biw +ilm: wqi +ote: gwk pvh +dac: pgl alt +ejc: mtz ujv zcc +biw: out +glg: biy dur rjc +bip: fhb gda ykr +flm: mof qjj qth bdb +wrc: jac +kzk: tbg +qey: ibk +xiw: lwp nuc kgu chp +guo: ius +yzo: pmb +fft: tua zyv fzc +kgu: zle +gpg: jkz thp +xdv: out +zfe: rjc biy +jnc: ifm hsq xsg +biy: zup rsk zpo +vle: lym pvf +dzj: xuw zih ytq pvs +rhl: cdw zto +akw: kvs tgh bfr zqg nli jnc ssm tuj rhl zfe cuh qfl dyy bwi ykn qrc big ymz lru twn +yzb: alt +hzq: out +rsc: gzy tnb vua +ebp: bcg cfg +dot: rlv bsg rae +nuc: vic +mmm: wyb loe nsa vle ybi iua ndr sud zov zfn pxf roj xuu kvh utf +tgh: vhs tab xsg +wfk: akw gcv +byp: afw pdf icb +inf: ail lqv +dcd: vee zcc +etz: yoy +aid: xsl +mof: ekg fkd mmm +kio: cjv phg +sjh: lws +mjp: rqx zgj cat +jfy: hdi ovm ihv +ssj: nzm +kdz: fkd mmm +art: out +gls: fkd hud xba +opq: nsw qgq iqk chj +kpx: chp nuc +uzb: hng gcv +vfu: rrp nre imj fxv +cmi: cfy zud +wyq: nhc ghx joh +csk: out +vgz: ekg mmm xba +wtu: mmx +hsq: ypl ext gzj +ekg: ybi oxj vle roj kvh ajc sud kvk zfn zwl pxf +fjn: tyl zle ibk vic +lkc: pfr urv cqq +fqp: rcf vbg +cuh: rjc +zcd: uzb jaf zpm qqh +fpr: rby ifd eiw app +zud: pvs ffo xuw +uej: out +ktj: tqj eiw rby +rpo: yzo hkc vbc wtu +lwp: tyl hnh ibk vic +fgo: pps jru +gmr: rae bsg rlv +zyv: pjd qrq +ezv: pdf +ntj: dhh ujp ovm hdi ihv +rcf: xdv nbu +joh: xsf aid +viv: out +pjd: opq fxz kmc njx +zda: agm tbg +zne: jkz uuf +yhs: vfu drf tod pqh +xth: zhj sfd pkw +qrc: cdw +wcj: zhj +dpl: fgo nqd gda +olf: you iqd xlo +fmf: wqz dfp +rdt: gwk +pxu: nkl +tbx: ati ehx biw rdf gtk diff --git a/2025/inputs/11_example.txt b/2025/inputs/11_example.txt new file mode 100644 index 0000000..01e5b43 --- /dev/null +++ b/2025/inputs/11_example.txt @@ -0,0 +1,10 @@ +aaa: you hhh +you: bbb ccc +bbb: ddd eee +ccc: ddd eee fff +ddd: ggg +eee: out +fff: out +ggg: out +hhh: ccc fff iii +iii: out