wip: day11a

This commit is contained in:
2025-12-12 08:17:58 +01:00
parent b1c43e46fc
commit 0a08ad2cae
7 changed files with 778 additions and 17 deletions

View File

@@ -1,25 +1,27 @@
# Advent of Code 2025
```bash
day01:A => 1150 ( 51us)
day01:B => 1150 ( 49us)
day02:A => 31839939622 ( 7737us)
day02:B => 41662374059 ( 64501us)
day03:A => 16812 ( 106us)
day03:B => 166345822896410 ( 282us)
day04:A => 1518 ( 193us)
day04:B => 8665 ( 3713us)
day05:A => 701 ( 140us)
day05:B => 352340558684863 ( 19us)
day06:A => 6503327062445 ( 188us)
day06:B => 9640641878593 ( 137us)
day07:A => 1678 ( 43us)
day07:B => 357525737893560 ( 50us)
day01:A => 1150 ( 98us)
day01:B => 1150 ( 100us)
day02:A => 31839939622 ( 13822us)
day02:B => 41662374059 (128425us)
day03:A => 16812 ( 119us)
day03:B => 166345822896410 ( 357us)
day04:A => 1518 ( 321us)
day04:B => 8665 ( 5870us)
day05:A => 701 ( 310us)
day05:B => 352340558684863 ( 36us)
day06:A => 6503327062445 ( 266us)
day06:B => 9640641878593 ( 145us)
day07:A => 1678 ( 57us)
day07:B => 357525737893560 ( 70us)
day08:A => 0 ( 0us)
day08:B => 0 ( 0us)
day09:A => 4725826296 ( 159us)
day09:A => 4725826296 ( 236us)
day09:B => 0 ( 0us)
day10:A => 452 ( 395us)
day10:A => 452 ( 667us)
day10:B => 0 ( 0us)
day11:A => 636 ( 491us)
day11:B => 636 ( 421us)
----------
78306us
152155us
```

643
puzzles/input11.txt Normal file
View File

@@ -0,0 +1,643 @@
ufk: out
kgy: srg try
fhi: mxe
ywm: tsx jqk tco
hjp: pxg fkj ode
tzd: orq joq smr
gmu: qfj
kow: tsx jqk
lga: ldk kcm eyu
trj: nnb gek
uqc: fdh rdj
opa: uwc iet cst hnj ybf
xtf: yso rzi tew
exk: wgb jyz zri igi
ice: rhu
fpv: wcy wnm
wuh: iet uwc ybf hnj
hon: vbl rnk met ihp
jvj: gqx
lgn: out
zzi: aef ecv
sce: ixo unv
uxr: iut
nss: qbk ncd
qjk: out
vjv: you rhu jny
fwg: tco
ffk: rpq txp vug hfz
djh: fdh
ekp: sau gbi
amf: ecv kjy
ciy: lgn fzm
uiv: lpi xgf
ihp: cui oul tsz
qxa: jny rhu you
xhl: vyp yoy
tdm: fcw gzu
avz: omy
qfj: kuh anb gxw ulx
rlu: ldg jee qpe riq
adu: lvz eda uiv
ykx: yfk
htw: kgs rpq vug hfz
qqf: jyz igi sdo
nkj: out
cxl: zhi okh
cui: wrc wnm
wrg: kgs txp hfz
upv: nnb
naw: zlb pav erz zxj oam
vug: fdj
yol: fek dvn ywj zxd osu
xgf: ucd
wnk: jny
gfz: ikw qjy
clh: osz
jbw: swf czw
pmi: ybs tkt cld
qqr: zme bol
yqo: tfg
qrz: iet uwc ybf hnj
eda: kek xgf
yfm: tzd szb
enl: jny
efg: ety dro onk
ipq: cwu rpf eru gmo
pgw: ekp hza mog rqt
gar: dds ihv
clx: lvd mir ezh ugd rjt
kek: ltl xph
pob: jet woy
vpy: fox rvu
ddd: kvn fmj uxr
pwe: ccy cys
hzl: wcy wrc
tfl: zxd fek ywj dvn
urb: tgo
fzn: uah jyp zvf
wzs: ksm cka
pbi: pxq fec dat
gzl: fdh
vbl: cui tcg fhi
yba: xuf exk
beo: qyj rhp jiq gfz wcx
xee: upv mxh trj
mfj: bvq uno daq qth wgz
zmk: awn ala
ldk: out
wvv: pav syo hon clb vhq eji oio lav sdy zlb yby quj kgy
rjt: oaf ttk apr
efw: kjy aef ecv
lmp: jny
blv: juh udg
gnn: fiw teb
cil: mmb wxs ymh
pfg: rvu utq
tjq: auf
dat: vgr ggt uco
jnv: htw ozg
fui: qhj
ghw: tfg
hza: sau jdc
arp: okh
uck: hzl
hkh: fev muf ddd hgt
svr: zae jwu wvv naw ypl
fvc: you rhu
ggp: fdj
yby: xcy
vvw: myu agv hnx
jkl: ymh
fiw: see
edz: iet uwc ybf
kym: tvq
nmk: tdm kkc
raf: bkp hhm rjh ydz
xru: ych
qwn: uwc ybf
jnt: out
qjq: qxa
bon: icp rah ipt
mxh: nnb
ohd: tlc
daw: ice
sen: vpy
aqf: jny you
lav: bbl kbm nze
tgo: you rhu
aum: fvc nqq fne
mtn: nsy uho uou yqo jmz szl psd nff wjm efg ghw gmu kui qga njd edv
vck: qse yfm yns xmf meo
hfz: amb
fox: zqk amb
rnh: qph pmi
utm: kxp pdj
ham: hhm bkp
ljo: cwu
qse: szb eoh thr tzd
auf: cst iet
wlo: rah kep shp
osj: iuj zme xzb
qga: qjq ago pdq jlx
tdt: zmi gex kvd
mzt: rhu you
cby: wnm wrc wcy mxe
pdr: tzm
nnb: ixo unv
kvn: vbh acl iut
wpi: uqc
txp: zqk amb
tcg: wrc
xzb: mtn
hca: ljo fft
fgc: wfp crf
vis: riz
ehk: yoy qjk tvq
kwj: nss edl
kzn: ciy suk
nav: you
wew: kep
xvy: djs
rss: ygf wuh qrz
buo: cby smw
cld: wpi
keu: jyp
fss: uwc iet cst ybf
inn: osj
tjp: teb
kxp: twr fcf phr
phr: wdx jck
pav: rnk vbl ihp
wdx: kym xhl
jck: kym xhl ehk zxb
otj: zmi kvd gex
nmh: xru ykn fcf phr
uah: wrd fsd cza
ors: kwj qhz mpe
cwu: iad qod
hgx: gak
clb: upb
pdq: lmp qxa tgo
hyw: hke clh ixu sen
qpt: mud ogi
gao: tzp
mxe: iul vvw zhx zbl eiq zzi wyl rjz dwe ich bvo axx asm rqm sex
tco: vjv enl tji
ivx: ciy
rzi: raf wig yvt
fdh: nsy kui zld qga edv nff wlp pcv
kud: kix gsl boq
kuh: raj ekp mog rqt
ski: huu upv
axx: otj tdt
fmx: gxw pgw kuh
lay: ljo krb bue
ipt: zqk
vls: sjn iau
fkj: vls dzt
vyy: awf ank hsj aum tvb
qnk: ywj
smw: wnm wcy mxe wrc
tsz: wcy wnm
iet: lmq gjp clu fkh kud rbx hph qdi gnn vff jnv nvs gdk pqk qpn zsb jah xtf tjp miz
uwc: qdi hph rbx jnv vff gnn clu gjp fkh kud xtf jah zsb qpn miz tjp gdk pqk nvs
agv: cvb beo vjr
aqo: kay
meo: thr tzd szb eoh
ckk: qfj fmx xez
acp: udg
jyp: fsd wrd
mng: hgd ljv fpv
vuy: hzl ght hwj
tew: raf wig
zmi: hnj ybf iet
ltl: wrc
ode: vls xqf
clu: fiw teb
loh: ihp
zhx: blv zvr hfm acp
daq: uwc hnj ybf
xll: osu dvn ywj fek
dro: fwg ywm qox
kkc: fcw
frk: wcy mxe wnm
oao: nji uho uou jmz wlp swt ghw zld gmu kui efg pcv pwe njd
gdk: htw ffk ozg wrg phe
ccy: ogv
ogv: rhu you
oio: gsu
rgx: osj
zae: jmw kgy zlb sdy yby clx quj hon oam gux erz zxj rlz eji loh clb vhq vae
ucd: wrc wcy mxe wnm
zqk: jfl gfh tqc hbz fui hnb btv fzn inn szw npa spb avz lqy keu rnh
yiw: eya uah
xmf: eoh
zri: mtn oao fdh
wlp: onk
xpd: lga
odx: wzs xpd
you: cil xvy sin iph jkl doo cxl upe fga wdd utm azz bbx tsq bsx svm pmq ieg
raj: jdc
wyb: wkt
doo: wxs ymh
aiz: kvd edz
ksm: ldk
crf: sdo
bvq: ybf hnj iet
anb: raj mog rqt
znf: iet cst hnj ybf
cst: xtf hph rbx rda fkh kud pqk lmq
omy: kwj qhz mpe
tlc: mnv hgd ljv
gfh: fgc hsm krw
nka: qbq tfg kbb
xqf: sjn znf ssj
qhj: tet gzl dil djh arw
ety: ywm fwg ccm qox kow
awn: ivx kxo kzn
yfk: you rhu jny
sff: fdj amb zqk
zhi: wsy tdm kkc
hsd: vwr epe
wgb: mtn rdj fdh
qxm: lym frk smw
xxf: kgd
wqq: ogv
jlx: tgo qxa lmp
xuq: uwc hnj ybf
rbx: kix boq gsl
zxb: vyp qjk
vbh: nkj tdu tiw
qyj: qwn xuq csr
xph: wrc wcy mxe
joq: mxe wrc
ezh: oaf yno ttk
gqx: izq kzn ivx
qjy: uwc iet ybf
xjn: cfs hwj ght
yru: fdj
kxo: afp ciy
gex: iet uwc cst
qcy: out
iau: hnj ybf uwc
vru: huu mxh upv
tji: rhu you
qth: uwc cst
tkt: jbw qvm wkt
djs: ala
gsl: sen hke
dzt: iau znf sjn
huu: nnb gek sce
tsx: tji vjv nav enl
cza: vxy kbh
rrk: vyy dac
sau: you rhu
vda: ode
iul: lay
pqk: kix hyw
srg: eob vks
thr: smr joq orq nmn fxq
dlt: cfs ght
nky: wzs xpd
eru: qod
qbk: mtn oao rdj
kep: amb fdj
ttk: ixj mth buo qxm
ugd: apr yno
lqy: pmi vis rft qph
qbq: ice ade
kix: sen ixu
rah: zqk amb
zvr: mfj
spb: ngf hsm yba fgc
npa: yba fgc
qpn: bon iox wew
sex: tzp hca
xuf: zri igi wgb
oaf: qxm mth ixj
upb: jet gar ohd
mth: frk
wcx: qjy xuq qwn ikw
xez: kuh pgw ulx anb
gjp: wrg
ixj: frk lym cby smw
riz: jbw wkt
ybf: kud fkh clu gjp lmq jnv vff gnn hph rbx rda pqk gdk nvs miz tjp xtf zsb qpn
gbi: jny rhu
gek: unv jnt
tet: rdj
usk: ssi omy axc ors
hgd: wnm mxe wcy wrc
uie: amb
qyl: xjn vuy uck
hgt: kvn uxr
xre: xzb iuj
sdo: rdj oao mtn
see: tzm tfl yol xll
rqt: sau
ank: nqq uhs
utq: fdj zqk
zvf: fsd
acl: tdu nkj dtw
svm: nmh pdj kxp
teb: olu pdr
iph: jvj fyb zmk djs
vhq: lvd ezh mir rjt
zme: mtn oao rdj
kbb: wnk ice
ymh: nky odx aqo
uou: pdq urb qjq ago
nng: rdj oao mtn
fxq: wrc wcy mxe wnm
qph: cld ybs wyb
fdj: jyd avz szw usk piw qgn xja keu gfh yiw tqc fui fzn inn rgx
vgr: out
uhs: rhu jny
swt: qjq ago urb pdq
arw: fdh oao mtn
ohu: fox utq rvu
fmj: vbh iut
lvd: yno apr ttk
jwu: eji rlz zxj loh oio lav clb vhq vae xxf oam hon erz lpu clx sdy zlb jmw
lvz: xgf lpi kek
fek: amb fdj
nze: uiv
ala: ivx
rnk: tcg
fzm: out
pxq: uco ggt vgr iya
bgu: vyy ugx
qox: tco tsx
eji: lvd ugd ezh mir rjt
cys: yfk
vjr: wcx
icp: zqk fdj
hnj: gjp lmq kud hph qdi rbx jnv gdk pqk nvs xtf qpn
izq: suk ciy
kvd: uwc ybf
kui: xez fmx
ybs: jbw qvm wkt
dwe: pxg fkj
cab: agv hnx
bue: tjq cwu
olu: tfl qnk tzm yol
wyl: kjy aef
iuj: oao mtn fdh
jet: dds
udg: daq uno bvq
jee: xee
unv: out
szw: rft qph pmi sio vis
hnx: sfb vjr cvb
ogi: djh gzl dil
ccm: tsx
dac: tvb awf hsj
edv: epe vwr rrk bgu
oul: mxe
twr: ych
juh: wgz daq qth
wkt: czw uqc
vxy: fdh
zlb: kbm
nqq: jny
kay: cka
rhp: csr xuq ikw qjy
cvb: rhp gfz
mpe: edl rnb
rqm: ejd aiz
boq: sen hke clh
nmn: mxe wrc
qpe: vru ski
erz: srg
eob: dlt uck xjn vuy
eoh: nmn
rjh: uie yru sff
fkh: rzi
azz: jee ldg
hnd: ubz ddd
tzm: osu dvn ywj
yno: qxm buo ixj
wcy: gao zbl eiq sue rqm dwe sex
rnb: erv
ecv: oek rss bwi
jqk: tji aqf
vyp: out
bbx: djs jvj zmk
tdu: out
szb: smr orq fxq
try: vks
ugx: hsj ank tvb
piw: axc
hbz: osj qqr xre
hnb: qhj ogi
vsf: acp
tsq: kxp pdj nmh
pmq: nmh
bol: oao
osu: amb fdj
kbh: mtn rdj
vff: yso rzi tew
vks: xjn vuy eju dlt
szl: bgu
met: fhi cui oul tsz
csz: xmf yfm
uco: out
ldg: vru alk
ljv: wrc
lpi: xph ltl ucd
tzp: ljo ipq fft
cfs: wnm wcy mxe
yoy: out
pxg: xqf dzt
jyd: mud ogi
nvs: fiw jqd
awf: nqq uhs
efd: qqr xre
kcm: out
rda: ffk ozg phe
rft: wyb ybs
gux: xcy pob
rvu: amb fdj zqk
asm: pxg
mnv: wnm mxe wcy
vwr: vyy
bsx: riq
dds: mnv ljv hgd
jyz: fdh mtn rdj
fsd: nng kbh vxy
erv: mtn
wig: rjh ydz hhm
mmb: nky odx
mud: dil gzl djh
aef: oek bwi
gzu: dat lar
qvm: swf uqc
hsj: uhs
oek: wuh qrz ygf fss
gak: fev muf ubz ddd
zxj: uyw pob
smr: wrc wcy
lpu: srg
zxd: amb fdj zqk
dtw: out
qod: iet hnj cst ybf
fcf: wdx ych
gxw: ekp rqt mog
qdi: boq gsl kix
fga: zhi
kgd: yfm meo yns
edl: qbk ncd
riq: xee ski
ago: qxa lmp
ikw: iet
jfl: hsm ngf
ngf: wfp exk
apr: mth qxm buo
dvn: zqk amb fdj
rew: uah eya jyp zvf
fcw: lar fec
vzx: qse
fev: fmj kvn
ihv: ljv
phe: kgs rpq txp hfz
lar: ggt iya
ieg: nmk okh
jny: svm arp iph bsx tsq rlu wdd upe hgx
wdd: hkh
zsb: boq hyw
kbm: eda lvz
osz: fox utq
tof: mmb
suk: lgn gbv qcy
nji: dro onk
qgn: sio qph rft
sin: zmk djs
bkp: sff ggp
ixu: pfg vpy ohu
tvq: out
ixo: out
orq: wnm wrc wcy
upe: hkh hnd
iox: icp
hfm: juh
czw: oao
eju: hzl
fft: eru gmo
rjz: acp hfm blv
vae: nze bbl
ade: you rhu
psd: daw
njd: qbq
rhu: bbx bsx utm hgx tof upe ieg pmq svm sin rlu xvy cxl doo jkl iph
jqd: pdr olu see
sue: lay hca
fec: ggt
ubz: fmj
iad: hnj ybf uwc iet
pcv: pdq
ncd: fdh rdj oao
rpq: zqk fdj
hph: rzi tew
wjm: ykx wqq cys
kjy: bwi rss
bwi: qrz
hke: ohu
jmw: adu
wfp: igi wgb
dil: oao
rlz: met
hsm: wfp xuf qqf crf
sjn: uwc ybf
muf: kvn uxr
mgk: ejd cyg tdt
gmo: qod iad auf
xja: pmi
pdj: ykn phr fcf
gsu: vks qyl
ykn: ych wdx
ssj: uwc ybf cst
xcy: ohd jet
zld: bgu rrk epe
myu: sfb beo
rpf: qod opa
sfb: jiq gfz
igi: mtn
tfg: ade
nff: ety dro
epe: ugx
iut: nkj tdu tiw
shp: zqk
onk: qox kow fwg
yso: ham
wgz: iet cst hnj
afp: gbv
cyg: kvd edz
ggt: out
iya: out
oam: vck
tiw: out
eyu: out
sio: wyb cld tkt
ssi: qhz mpe
uho: xez fmx
hwj: wnm mxe wcy
sdy: csz
uno: cst hnj iet uwc
wrd: nng kbh vxy
btv: ors
miz: tew yso
okh: kkc wsy
yvt: ydz
ych: zxb
zbl: ejd cyg otj tdt
csr: iet uwc cst
jmz: onb ykx ccy
tvb: fvc
ypl: jmw sdy yby kgy erz syo pav gux oam hon clb oio lav yfa loh zxj rlz eji
kgs: zqk
mir: apr oaf yno
woy: ihv dds mng
ght: wnm mxe wrc
ich: tzp hca
onb: ogv mzt yfk
syo: kgd vzx
rdj: szl nji uou nsy yqo nff wjm zld gmu efg njd uho ckk wlp swt psd ghw kui hsd nka qga edv
wxs: nky
uyw: gar
ygf: iet
ydz: ggp yru uie
amb: qgn avz szw npa hnb rgx tqc yiw jfl gfh efd piw rnh keu jyd usk rew spb btv fzn qpt fui hbz
swf: mtn fdh
fyb: gqx ala awn
ywj: fdj
ozg: rpq vug
ulx: raj hza rqt
tqc: eya jyp zvf uah
nsy: xez
jiq: ikw xuq qwn qjy csr
yfa: ugd ezh
eiq: ode fkj
wrc: vvw cab vda ich gao sue sex amf iul zhx hjp zbl zzi wyl eiq rjz mgk dwe vsf bvo axx asm efw rqm
yns: tzd
wsy: gzu pbi fcw
lmq: bon wew iox
bvo: myu
quj: rnk met
krw: xuf wfp
gbv: out
qhz: rnb
lym: wrc wnm
jdc: rhu you
axc: qhz mpe
wnm: iul hjp rjz cab mgk eiq zzi wyl bvo ich asm axx
mog: sau gbi
krb: rpf
eya: fsd cza
fne: rhu you
cka: ldk eyu ufk
hhm: uie
alk: trj
ejd: gex
bbl: uiv
jah: wlo iox

66
src/day11/common.rs Normal file
View File

@@ -0,0 +1,66 @@
use std::collections::HashMap;
use std::fmt;
use std::sync::{Arc, Weak};
use std::cell::RefCell;
pub fn parse_node_graph(puzzle: &str) -> HashMap<u32, Arc<RefCell<TreeElement>>> {
let mut node_graph = HashMap::new();
puzzle
.lines()
.map(|line| line.split_once(':').unwrap())
.map(|(node, child_str)| (node.chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap(), child_str.split_whitespace()))
.for_each(|(node, childs)| {
let node = node_graph.entry(node).or_insert(Arc::new(RefCell::new(TreeElement::new(node)))).clone();
childs.for_each(|child| {
let child_id = child.chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap();
let child = node_graph.entry(child_id).or_insert(Arc::new(RefCell::new(TreeElement::new(child_id))));
child.borrow_mut().add_parent(&node);
node.borrow_mut().add_child(&child);
});
});
node_graph
}
pub struct TreeElement {
name: u32,
parents: Vec<Weak<RefCell<Self>>>,
childs: Vec<Weak<RefCell<Self>>>,
}
impl TreeElement {
pub fn new(name_hash: u32) -> Self {
TreeElement {
name: name_hash,
parents: Vec::new(),
childs: Vec::new(),
}
}
pub fn add_parent(&mut self, parent: &Arc<RefCell<Self>>) {
self.parents.push(Arc::downgrade(parent));
}
pub fn add_child(&mut self, child: &Arc<RefCell<Self>>) {
self.childs.push(Arc::downgrade(child));
}
pub fn find_route_to_cont(&self, name_hash: u32) -> usize {
if name_hash == self.name {
return 1;
}
self.childs.iter().map(|child| child.upgrade().unwrap().borrow().find_route_to_cont(name_hash)).sum()
}
pub fn get_name(&self) -> String {
format!("{}{}{}", char::from_u32((self.name & 0xFF0000) >> 16).unwrap(), char::from_u32((self.name & 0xFF00) >> 8).unwrap(), char::from_u32((self.name & 0xFF) >> 0).unwrap())
}
}
impl fmt::Display for TreeElement {
fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result {
write!(f, "TreeElement: {} [{:?}] [{:?}]", self.get_name(), self.parents.iter().map(|c| c.upgrade().unwrap().borrow().get_name()).collect::<Vec<_>>(), self.childs.iter().map(|c| c.upgrade().unwrap().borrow().get_name()).collect::<Vec<_>>())
}
}

30
src/day11/mod.rs Normal file
View File

@@ -0,0 +1,30 @@
pub mod part11a;
pub mod part11b;
mod common;
#[cfg(test)]
mod tests {
use crate::day11::{part11a, part11b};
const PUZZLE: &str = "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";
#[test]
fn part11a() {
assert_eq!(part11a::solve(PUZZLE.to_string()), 5);
}
#[test]
#[ignore]
fn part11b() {
assert_eq!(part11b::solve(PUZZLE.to_string()), 0);
}
}

8
src/day11/part11a.rs Normal file
View File

@@ -0,0 +1,8 @@
use crate::day11::common::{parse_node_graph};
pub fn solve(puzzle: String) -> u64 {
let node_graph = parse_node_graph(&puzzle);
node_graph.get(&"you".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()).unwrap().borrow().find_route_to_cont("out".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()) as u64
}

9
src/day11/part11b.rs Normal file
View File

@@ -0,0 +1,9 @@
use crate::day11::common::{parse_node_graph};
pub fn solve(puzzle: String) -> u64 {
let node_graph = parse_node_graph(&puzzle);
node_graph.get(&"you".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()).unwrap().borrow().find_route_to_cont("out".chars().map(|c| c as u32).reduce(|a, b| a << 8 | b).unwrap()) as u64
}

View File

@@ -8,6 +8,7 @@ mod day07;
mod day08;
mod day09;
mod day10;
mod day11;
use std::time::Instant;
@@ -46,6 +47,8 @@ fn main() {
("day09:B", day09::part09b::solve, "puzzles/input09.txt"),
("day10:A", day10::part10a::solve, "puzzles/input10.txt"),
("day10:B", day10::part10b::solve, "puzzles/input10.txt"),
("day11:A", day11::part11a::solve, "puzzles/input11.txt"),
("day11:B", day11::part11b::solve, "puzzles/input11.txt"),
];
let start: Instant = Instant::now();