This commit is contained in:
2025-12-11 23:41:44 +00:00
parent 8bf230ff8f
commit 9ef7abed94
5 changed files with 756 additions and 0 deletions

View File

@@ -43,6 +43,10 @@ path = "src/day9/main.rs"
name = "day10" name = "day10"
path = "src/day10/main.rs" path = "src/day10/main.rs"
[[bin]]
name = "day11"
path = "src/day11/main.rs"
[dependencies] [dependencies]
anyhow = "1.0.100" anyhow = "1.0.100"

604
src/day11/act.txt Normal file
View File

@@ -0,0 +1,604 @@
zmg: vew ynx rdv kzq
fho: drg
qtg: bcp kzq
nbp: fkn
oaa: ulw zyf
fyy: dwh vjr cdg miw
rwj: kkt hdz irr ovu
qoy: rao eev wzh wkc
jzz: glp pwf fwp
aqu: swy txo nqu mla
yws: zxh fft
rdd: zbw cqw
hoo: bfn amg vyd dod ovp kii
bnz: vdk
shw: gzx
iep: zbw
mxl: udq owi yhh rrk
izl: tfr
oku: pvp
omu: pvq tsj hfl
xwc: bdu tuz tkz
tjf: rek vil
uak: bko
idt: yrr
que: yyb aqu cfl
tmg: eev
ybn: hfe qou xrk
dgj: jbz you fhk hoo
hfl: fmn gzw sug
mix: gzx
cwn: fhk you jbz
rek: dfy ued zya nnk
sug: utp btl lzb hor ndl uuw kyi zqd jdq cfs nvd acs pyx pbm eqc ome
lan: kkt ovu irr
miy: uub gyg yol tua
dev: out
ykn: fea rlv how ksp
yom: fhk
tcl: fnb
nnk: hdz kkt
wau: rtw vuk aoe
amz: nxs vku
nqy: fdp wyk
bdj: hit ytb tcl
bgd: uru mhm
zdl: fps pmc maa frp
wrv: sug cjl gzw fmn
feh: irc ojk
efc: out
zst: rta knd
nqi: gyt pwv
snz: out
fea: wqv hse rqw
tqh: fea
hho: isx whl yiz
tkz: zkq
omh: uuu
dxu: dwh vjr sfc cdg miw
wzh: zbx tjd
iyj: bgw mug
naw: hhm pkw hwn
qdf: tjr
vku: kez abg qmx
udf: ulz
mhj: tmg ffw qoy flj nyf ybn que fxt rua rys vyu cri aoh nuf fik jsk wmy epz
uuy: sug
roi: out
abz: isx yiz
cvr: isx yiz whl
xrw: fwp pwf fnk glp
rta: yug thh
lyu: efc yxj iof hgu kpd
qwv: fkn gzx lzk
aum: yrx ubo
uuu: fmn gzw cjl sug
hjd: hbs
epr: maa frp pmc srx fps
sav: dst
rng: qou xrk
jue: rdd cze
wzl: out
nwn: gyt cwn
flj: aqu yyb
cdj: kxf daa
zln: nxs owg vku
pmu: kwh pql
tqw: lzk jhf gzx fkn
txo: nfb eez prz wkl
bko: gzx fkn jhf lzk
cym: plo
ovp: plo imv ums sjv
sjv: vre qtg
uzz: irr
nxs: kez aum qmx
hwe: cqb abv
lak: weu rtq
gvt: iyd
bcm: frp fps
pli: mug pfl pxs
gxw: jyz
nrb: sem pmu kcm teh
ffw: cfl
teh: pql vnb kwh
zdh: pvn
ome: byz lql
jnl: mdt ajt yzg nvq lfk aco yws kpp wff vxd nrb evs tjx cdj zdl kml ipx kkf vaw xjv
yxj: out
lof: sug gzw
hwn: you hoo
eva: jiq dny jky yom
rgs: qke abv cqb
fxt: tlz qtc
fft: mbr uuu
xjw: rtq
fnp: fnb ctz jnl wpq zvu
dcw: out
rms: pym lyu
nwy: wxb bko qkz shw gvo
wpq: aco nrb zdl epr mdt
lpf: jho
tzo: wkm yns ndo
kii: yag gel
oty: dmu
cjl: vkl ndl eqc hor pbm hki nvd lzb btl utp jdq zqd qlt
kdw: evf dxu
inn: jnl zvu wpq ctz
idv: yol uub gyg
epz: yyb
ovu: zst kdw czw xrw alk hkm kha sor gct ytl wvx ixw edo qmw vvm qdf jzz eat
gel: bdu
oic: rms
arh: cvo wkq toa vdh
bgw: yoo
grv: wkm
duj: emk
tog: sem kcm teh
srx: omu otm qpk
pdv: rek asl vil
cvj: pdi
utp: pdv ugr jho
ufz: sug fmn gzw
vvm: eem
imv: ses zmg vre
uzk: oty nlq
pwv: jbz
xhr: jti ufz uls
xwa: cxv xjw qbx lak
kbb: jnl zvu fnb
chx: jhf
nxn: fxt wmy que jsk rng oxu flj tmg ybn
kkt: alk hkm bfb zst kdw xrw czw tnr ixw edo vvm qmw jzz eat qdf kha sor gct lsg ytl
vqb: fmn gzw
ytb: zvu fnb
pmm: hhm
evs: fho vyk
far: iep kir axy cze
hkt: zev uga
fwp: cdu pdk szr oaa
lfk: vyk dqg
hkv: shw wxb gvo
rgv: ctz fnb jnl zvu wpq
plo: vre ses zmg
qmw: tjr hmb
ari: kxu
xrk: bdj gfq
jyz: rwj ryf
jho: asl rek
irm: you hoo
hit: jnl ctz fnb
yug: xfk trd ffe
edo: tjr hmb ibe
qiu: fdp wyk
glp: szr pdk cdu
ohw: ary
ytl: evf
aaf: tcl rgv
eqc: zkb mxl zke
aco: frp srx pmc
eem: ari jvj
wkc: ubu zbx
jdq: byz tue
udq: ovu irr ybz kkt hdz
vyd: hlf sur rpe ntd
kez: yrx szz ubo
gvn: wpq jnl fnb ctz
wvx: fyy dxu
cvo: out
nev: uls tqy ufz jti
ipx: sem
gqb: izl
vfz: wkm yns ndo
sor: buf
lsg: knd
uuw: mxl zkb
ufu: bqi ssr yag
qmj: pwv
ruw: vuk fnp aoe
zya: ybz irr
tuz: bnz oai
rdv: sjc bew
tyc: znl
dfy: irr ovu kkt
wkm: irm dgj yqu
kyi: jho pdv tjf
pyx: zke
rrk: ovu irr hdz
mhm: cxv xjw qbx
ynx: vdf arh
zxh: uuu
zot: uuy kvl
pkw: jbz hoo
dqg: bww vqb kvl
axb: vyi
ajt: dzl haw nii hkt
wyk: pvn fnu myf
geg: out
ntd: uzk ggo
bgt: zdh
xfk: zih
qoq: xiw woi dcw geg smh
yzg: pmu teh sem
rqe: jti ufz tqy
ybz: czw xrw bfb hkm lsg kha gct edo qdf jzz eat qmw
zkq: vkn vdk ufm
vyu: ruw boq wau
cdg: uak
rlv: oic hse
ugr: rek
myf: fhk you hoo
bso: jcg mvt aji yny
ozr: kkt hdz irr ovu
uub: zvu jnl fnb ctz
czw: fwp
pmc: omu qpk usl
prz: kbb urb
vaw: zxh fft zrw
cph: out
inh: ble
dmu: woi dcw
emk: nqs dac
rao: zbx
ipm: pdk
kcm: kwh
wxb: gzx
jbq: hvb rys rua fxt nyf ybn yrj tmg ffw qoy flj epz jsk nuf vyu cri
ary: oty nlq iyd
ypy: vis jsp qmj nqi nwn
isx: deb naw pmm
wmy: hfe
shb: hhm hwn xik
znl: qit zpr ryf
cze: sby
xiw: out
dny: hoo
kxu: fkn jhf
cre: auy
wzq: gzx lzk
pym: iof hgu efc yxj
wby: jcg
aik: ojk gvn irc
wra: vyi jcg aji
xuq: hoo
ffe: wzq
qmx: dwf
ana: ulz cut
qbx: weu rtq
qlt: rez sbk cre hjd
bew: wkq cvo roi vdh toa
vdh: out
xbo: xln
szz: usg qtz
toa: out
jbz: cxl vyd cym elv ufu sfh
zkb: lan udq
kxf: nev rqe
cxl: imv ums
ral: lak
jsp: cwn
cwr: jhf
pfl: yoo yrg
xln: out
jky: jbz hoo fhk you
sur: jem gvt
rxy: out
jcg: nbp chx tsb mix
btl: pny jue
bqi: tuz
rys: rao eev wzh zkn wkc
pny: cze iep axy rdd
tue: gxw cxu
zke: lan owi
cqw: kkt ovu
vmw: lyu
gab: cut emk
smh: out
kvl: sug fmn gzw
vjv: zpr ryf rwj qit
uru: cxv xjw
ksp: hse wqv
sfc: eky uak nwy hkv
hhm: hoo fhk jbz
fdp: pvn hfc myf
gvc: jbz
asl: dfy zya
fnk: oaa
mfs: yat
vuk: ctz fnb zvu wpq jnl
maa: oku omu
cza: yny
nvd: far pny
qkz: jhf gzx
sbk: hbs hut
rpe: jem ggo
elv: gel xwc bqi yag
qlg: bgw
tnr: hmb
yrg: you fhk hoo
mbi: lzk fkn
pdf: ksp fea how rlv lvc
frp: qpk
owg: aum kez
utj: sug gzw
bfb: ipm glp pwf fwp
byz: gxw cxu
buf: jvj hrd yrr ari
hrk: kpd efc yxj
trd: qwv wzq
hor: hsv far pny jue
tgh: wzq zih
szr: zyf
zev: sav vkg uhr
irr: wvx gct kha lsg vvm jzz eat ixw edo xrw kdw czw tnr zst hkm
fps: oku
yrx: xbo usg qyt qtz
vnb: utj vqm
zyf: fkn jhf lzk
lzk: udf duj tzo haa pfh uwc
axy: cqw zbw
sfh: hlf rpe sur
oai: ufm
ojk: zvu wpq ctz fnb
vxd: dqg zot
mvm: fmn
yiz: fdk
fdk: pkw hwn xik
tsb: fkn gzx
nuf: wau boq
gyg: wpq zvu jnl
jvz: wyk zdh
boq: aoe fnp vuk rtw
ckx: out
ffm: cjw pdi
jti: fmn cjl
eaq: lzk
hhy: ovu ybz hdz
urb: fnb ctz
yrj: ruw wau
lql: trg tyc
you: qsz bqf tqh zln kii bgd pth
lca: ypy tfr rwd
ble: bgt nqy
sby: ybz hdz kkt ovu
war: tqy
nii: aub zev hmp
fnb: zdl nvq tjx tog ljh vaw ipx
vkn: snz rxy cph
iof: out
cfl: swy nqu mla
cqb: nqy qiu
swy: nfb lhi eez prz wkl
jiq: you hoo jbz
lni: wkq cvo toa roi vdh
uhr: dst rjv
nfb: inn kbb urb
afj: xjw cxv jrw qbx lak
usl: pvq
pxn: zvu ctz
dod: rpe ntd ohw
gzw: lzb lpf utp jum vkl uuw ndl hki qlt kyi cfs jdq pbm eqc acs nvd pyx
hki: tue byz
tua: ctz wpq zvu
hmp: ocz
tve: kud yug
qpk: tsj pvp pvq
iyd: prb dmu
jrw: rtq kwa
ndl: jho tjf
hdz: vvm hkm alk tnr sor zst
evf: cdg miw
nbl: ozr
ibe: wby bso axb wra
coy: nwn nqi qmj vis
kha: eem idt
irc: fnb ctz jnl wpq zvu
cfs: zke zkb mxl
kzq: arh vdf
gct: rta
mbr: gzw fmn sug
cdu: zyf tqw
vkg: mvm
nqu: wkl prz eez lhi
pql: utj lof bhd
pvq: fmn gzw sug cjl
zpr: kkt ybz irr
qsz: ums sjv
dwh: eky nwy ozt hkv
cjw: out
fjn: pym hrk
zih: fkn gzx jhf
eez: inn
ulz: nqs eva dac
ufm: ckx snz cph
whl: fdk naw deb shb
hsv: iep axy kir cze
qyt: dzo
rtq: gbo ffm cvj
cyf: yat
ssr: tkz
yol: wpq
yny: tsb mix
ubu: idv miy
cxv: kwa rtq weu
hmb: cza wby
brs: out
deb: pkw
bhd: gzw fmn cjl
ewj: vku
abg: ubo szz dwf yrx
prb: xiw geg
jvj: eaq dlc
qit: ybz hdz ovu irr
vkl: tal tue
tjd: miy
eev: tjd ubu zbx
usg: wzl dzo xln
miw: hkv uak nwy
ulw: lzk jhf
yag: bdu tkz tuz
weu: gbo mkb ffm
hkm: knd
mdt: zrw fft omh
aji: chx tsb mix mbi
trg: vjv nbl
eky: gvo
ubo: qyt
abv: bgt qiu
pwf: cdu pdk szr oaa
jem: iyd nlq
csr: yol uub gyg
yyb: nqu txo
zrw: wrv mbr
qou: gfq aaf bdj
kpp: daa
sem: vnb kwh
hvb: qou
uwc: ulz
mkb: pdi dev
amg: afj xwa uru ral mhm
pth: afj xwa mhm
how: wqv rqw
dwf: qtz usg qyt
jum: zkb zke
woi: out
yat: tfr coy ypy
pvn: jbz hoo
alk: tve knd rta
sjc: wkq roi toa
ryf: kkt ovu
vjr: nwy uak ozt hkv
abw: gyh cri vyu rng jsk fik nuf wmy ybn nyf tmg yrj ffw flj qoy oxu rys hvb que rua fxt
ums: zmg ses
fhk: amg cxl ewj amz pdf cym tqh sfh zln ykn
gbo: icr
tfr: jsp
fmn: pyx acs nvd ome eqc cfs jdq zqd kyi qlt hki ndl hor utp jum lpf btl lzb
gfq: hit pxn tcl
ndo: yqu irm
hgu: out
yhh: ybz hdz ovu irr
otm: pvp hfl
qla: isx yiz
dzo: out
wqv: vmw fjn rms
bww: gzw sug cjl
qtz: xln wzl
tjr: bso wra axb cza
hbs: uzz
yrr: cwr
gyt: you hoo
wff: daa
bfn: ohw sur rpe
yoo: fhk hoo jbz
ixw: fnk
dzl: zev hmp
tqy: fmn
zkn: tjd zbx
cri: aik feh qtc
daa: xhr
lvc: hse rqw
cxu: znl vjv
vqm: fmn sug
nqs: jiq jky
rjv: sug cjl fmn gzw
kir: sby zbw
kml: dqg
qke: qiu jvz nqy
svr: nxn mhj ybx abw jbq
pbm: rez sbk
haw: uga aub hmp zev
drg: gzw
eat: evf
kpd: out
pdg: ovu kkt hdz ybz
hlf: uzk ggo ary
tjx: teh kcm sem
ses: rdv kzq vew ynx bcp
oxu: boq ruw
zbw: irr
ozt: bko qkz wxb
vre: rdv ynx bcp
aub: vkg uhr
tmp: xhr war rqe
pdi: out
hse: fjn
gyh: qtc feh
nlq: dmu qoq
zvu: tjx cdj zdl kml ipx kkf vaw bcm epr ljh ajt nvq lfk aco yws kpp wff vxd nrb evs
rez: hbs auy hut
hfc: hoo fhk jbz
nyf: wzh rao
tal: trg
uga: vkg ocz
dac: jiq jky gvc dny
ued: ovu
thh: ffe tgh xfk
icr: out
rua: hfe xrk
bdu: oai bnz
kkf: hkt haw nyp dzl
rwd: vis nqi nwn
aoe: zvu jnl ctz
kwh: bhd lof vqm utj
dlc: fkn gzx jhf
vyk: kvl vqb bww
vyi: chx
hfe: gfq
xik: hoo fhk you jbz
tsj: cjl sug
vdk: ckx brs cph
dst: sug cjl fmn gzw
vil: dfy ued
ljh: tmp
ggo: oty nlq
aoh: boq ruw
hrd: dlc
yqu: jbz fhk you hoo
vdf: vdh wkq cvo
nvq: haw hkt dzl
gvo: lzk
mug: xuq
ctz: yws kpp yzg mdt lfk nrb wff vxd zdl kml cdj ljh tog ipx bcm
rtw: fnb ctz wpq
uls: gzw fmn sug
vew: sjc
knd: thh kud
pdk: tqw ulw
owi: hdz ybz
qtc: gvn ojk
fkn: hho udf vfz cyf wiy uwc inh iyj qlg grv mfs pfh qla abz pli cvr
pvp: sug
lhi: urb
nyp: uga aub
mvt: mix mbi tsb
ybx: nyf aoh flj yrj rys rng epz rua wmy
auy: pdg hhy
vis: gyt cwn
mla: nfb wkl prz lhi
hut: uzz pdg
jsk: wkc wzh eev rao
fik: cfl
bqf: fea rlv how ksp lvc
acs: tjf ugr jho
tlz: ojk
fnu: hoo
cut: dac
lzb: cre
wiy: pxs mug
pxs: yoo
jhf: haa uwc iyj wiy duj cyf udf gqb cvr ana pli tzo abz qla hwe qlg gab grv
zqd: sbk
ocz: dst
kud: trd ffe
yns: yqu dgj
gzx: vfz rgs gab gqb qlg udf inh ana iyj duj wiy
pfh: lca yat
xjv: kxf
haa: yiz
kwa: gbo ffm mkb cvj zcl
zbx: csr idv
bcp: bew lni vdf
rqw: vmw fjn rms
zcl: dev pdi cjw
wkl: kbb
wkq: out

125
src/day11/main.rs Normal file
View File

@@ -0,0 +1,125 @@
use anyhow::Result;
use std::{
collections::{HashMap, HashSet},
fs,
};
fn sol1() -> Result<()> {
let text = fs::read_to_string("src/day11/act.txt")?;
let graph = text
.split("\n")
.filter(|a| a.len() > 0)
.fold(HashMap::new(), |mut g, m| {
let mut split = m.split(":");
let node = split.next().unwrap();
let outs = split
.next()
.unwrap()
.trim()
.split(" ")
.fold(HashSet::new(), |mut s, a| {
s.insert(a);
s
});
g.insert(node, outs);
g
});
fn count_paths(t: &str, visited: &HashSet<&str>, g: &HashMap<&str, HashSet<&str>>) -> usize {
let mut visited = visited.clone();
visited.insert(t);
let mut sum = 0;
for i in g.get(t).unwrap() {
if visited.contains(i) {
continue;
}
if *i == "out" {
sum += 1;
continue;
}
sum += count_paths(i, &visited, g);
}
return sum;
}
println!("sol1: {}", count_paths("you", &HashSet::new(), &graph));
Ok(())
}
fn sol2() -> Result<()> {
let text = fs::read_to_string("src/day11/act.txt")?;
let graph = text
.split("\n")
.filter(|a| a.len() > 0)
.fold(HashMap::new(), |mut g, m| {
let mut split = m.split(":");
let node = split.next().unwrap();
let outs = split
.next()
.unwrap()
.trim()
.split(" ")
.fold(HashSet::new(), |mut s, a| {
s.insert(a);
s
});
g.insert(node, outs);
g
});
let mut node_hit: HashMap<&str, usize> = HashMap::new();
let mut node_hit1: HashMap<&str, usize> = HashMap::new();
let mut node_hit2: HashMap<&str, usize> = HashMap::new();
fn count_paths<'a, 'b>(
t: &'a str,
end: &'a str,
visited: &HashSet<&str>,
g: &'a HashMap<&'a str, HashSet<&'a str>>,
hit: &'b mut HashMap<&'a str, usize>,
) -> usize {
let mut visited = visited.clone();
visited.insert(t);
let mut sum = 0;
if let Some(n) = g.get(t) {
for i in n {
if visited.contains(i) {
continue;
}
if *i == end {
sum += 1;
continue;
}
if let Some(c) = hit.get(i) {
sum += c;
} else {
sum += count_paths(i, end, &visited, g, hit);
}
}
}
hit.insert(t, sum);
return sum;
}
// after some testing there is not path from out -> dac or out -> fft or out -> src
// our fft -> dac
// so the result is just svr -> fft * fft -> dac * dac -> out
println!(
"sol2: {}",
count_paths("svr", "fft", &HashSet::new(), &graph, &mut node_hit)
* count_paths("fft", "dac", &HashSet::new(), &graph, &mut node_hit1)
* count_paths("dac", "out", &HashSet::new(), &graph, &mut node_hit2)
);
Ok(())
}
fn main() -> Result<()> {
sol1()?;
sol2()?;
Ok(())
}

10
src/day11/test.txt Normal file
View File

@@ -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

13
src/day11/test2.txt Normal file
View File

@@ -0,0 +1,13 @@
svr: aaa bbb
aaa: fft
fft: ccc
bbb: tty
tty: ccc
ccc: ddd eee
ddd: hub
hub: fff
eee: dac
dac: fff
fff: ggg hhh
ggg: out
hhh: out