This commit is contained in:
Stefan Harmuth 2025-12-11 09:08:28 +01:00
parent 48a7e734ac
commit 84a0c421b2
4 changed files with 716 additions and 0 deletions

84
day11.py Normal file
View File

@ -0,0 +1,84 @@
from collections import deque
from tools.aoc import AOCDay
from typing import Any
class Device:
def __init__(self, name: str):
self.name: str = name
self.outputs: list[Device] = []
self.inputs: list[Device] = []
class Day(AOCDay):
inputs = [
[
(5, "input11_test"),
(634, "input11"),
],
[
(2, "input11_test2"),
(377452269415704, "input11"),
]
]
def parse_input(self) -> dict[str, Device]:
devices = {x.split(":")[0]: Device(x.split(":")[0]) for x in self.getInput()}
devices["you"] = Device("you")
devices["out"] = Device("out")
for line in self.getInput():
device, outputs = line.split(": ")
for output in outputs.split():
devices[device].outputs.append(devices[output])
devices[output].inputs.append(devices[device])
return devices
def get_paths(self, start: str, target: str, devices: dict[str, Device]) -> int:
if start == target:
return 1
if target not in self.DP:
self.DP[target] = {}
if start in self.DP[target]:
return self.DP[target][start]
self.DP[target][start] = sum(self.get_paths(x.name, target, devices) for x in devices[start].outputs)
return self.DP[target][start]
def fill_cache(self, start: str, target: str, devices: dict[str, Device]) -> None:
devices = self.parse_input()
self.seen_reset()
Q = deque([devices[target]])
while Q:
device = Q.popleft()
if self.seen(device.name):
continue
self.get_paths(device.name, target, devices)
for source in device.inputs:
Q.append(source)
def part1(self) -> Any:
return self.get_paths("you", "out", self.parse_input())
def part2(self) -> Any:
devices = self.parse_input()
self.fill_cache("svr", "out", devices)
if self.DP["out"]["fft"] < self.DP["out"]["dac"]:
self.fill_cache("dac", "fft", devices)
self.fill_cache("svr", "dac", devices)
return self.DP["dac"]["svr"] * self.DP["fft"]["dac"] * self.DP["out"]["fft"]
else:
self.fill_cache("fft", "dac", devices)
self.fill_cache("svr", "fft", devices)
return self.DP["fft"]["svr"] * self.DP["dac"]["fft"] * self.DP["out"]["dac"]
if __name__ == '__main__':
day = Day(2025, 11)
day.run(verbose=True)

609
inputs/input11 Normal file
View File

@ -0,0 +1,609 @@
iak: edr ehw kqn vjh
awq: sfz nys cio jzi gtt
nes: sqf ist mux
jik: out
kie: pzi
myb: cjq
wvy: pmr kqw aao hja
laa: kpq xgo sks
yyj: lpz rpn apc
cee: vjh kqn ehw edr
guq: vjh kqn vht ehw
lmu: zyi pzi
ypf: heb cyx
odx: daf cwj
ywl: xct cix jyw
bpw: tql jvl cix jyw
jvl: krb ftw sov nqy eve yja bsr qek ydb ixx dme ftr
pjr: pyn
lsp: bwn lpe rnt yau
llq: myn xmh
jtg: jgi zrc aju
mxo: wyy
kyu: dsa wbq gds gpv
ahk: rjq las
pxm: dac
unz: odx ypb
lgx: tva
tos: erv jhw vnt
aow: ukf xmh
thm: vyn acx
nas: cyx heb tdx
sow: ehw edr vht
idj: out
ftt: jeo uiq
foe: nbx eth
fzg: bpo
mpk: you ire sdo
wck: vjh vht
jev: rpn apc
yon: pzi zyi
zcg: sks xgo kpq
vhv: hxp bwn
fwm: nga
uil: hna qql ayn
laj: jdr dmd
xwl: zah tow
tks: apc lpz rpn
hpf: lvf ahk rct bln
lpz: vsg xkv qkf qzj syb rgz jbm eew qio fer gkw rlr bok axj ihb
ukf: jqj ruq arm
nog: ctx kzx
arm: lpz apc
jqq: nky awq lzg
zbb: shl
xfw: unm lvf rct
mgp: fuq inv
xlv: vno
llu: jev mea xjb hwz
hna: uvw
fja: kzx qak ctx
mux: zcg
add: nve ias zyx
kcf: she mpk wdc
zim: wtt vhv lsp
geo: cio gtt jzi sfz nys
khq: sow nwe twj
xgd: tfz eua bhd
yja: dzg bhl kqc
bok: lun egu hpx
xgo: jvl
dqc: bjb uby zjh
szj: ire sdo qdo
cgr: jqm nga dxx
fel: fda zca pwa tfc
ikv: ffz mhl xpw
ewe: keb vkx hds
dty: yyn
rpx: rxy pyn idj
gbl: uby zjh
pzb: pjv zkg nfn laj
txi: muy pzi
jeb: agi vno emh arf
hds: llq aow bjg
pwa: zri yyj beh
ylr: tql jvl xct cix jyw
jbm: fls
gds: ire
izo: ywl
nbx: uaz fds njj
gqh: yyn xxc
tfc: beh wpr yyj zri
yil: xgd nmj xfg
xse: fzg rmc sah
tbc: zah tow
tdx: edr ehw vht vjh
dac: dsa gpv gds
vkx: llq aow
arf: xkb
njj: ypf
tql: ikv nvd sov ftr ssj ydb qfp qek bsr
jmo: rxy idj
ywn: raf zxb rrq mdy
lvf: bik las
nfn: nen dmd
zuv: wdd luw zhk
cxx: agi arf
akw: moa fpi
wjc: tkh xwo
bjg: myn sgb lpw ukf xmh
fft: dqc gbl
yfs: dxx
oix: blo ojp qhy
mqv: gak
rtn: jvl xct jyw
erv: out
yea: ayn hna qql
raf: dqi
kbm: wfg jmw nrn tos
sah: yon ltb occ bpo
lty: wtt
nzl: rxy pyn
jdc: jwr haz
bws: lvl chi
swx: dry ege
wjh: zcg laa mvt
wcq: bci
wcg: out
tmy: ynx ayr
wtb: zyx ias wrv
zpt: dry vjc
zyx: out
zhk: muy
haz: qdo you ire sdo
lfb: znb vod
hwz: lpz
wpr: apc lpz
llv: wtb uuw vdk
pcn: cjq wcg
cmw: fel rds jfu
dmd: nzl pjr rpx jmo lvu
rmc: ltb yon
bwn: pzi zyi
fzi: bpw wza
vnt: out
maz: sgb ukf xmh
kab: uwp
vyn: emo fzi vqz kuj
zjh: ehw edr kqn
wzi: dre gak
ary: out
ffl: she mpk
ire: kta yfs imk lju hid zbb wrm wmp wif nog wee jnd mcq lau dmg fja fml fwm
zyz: cjc
sks: jvl xct tql jyw
sfz: jjp fzj yhn
svr: jwx zwz ytb mrd
dmg: qak yzh kzx
mih: vbm bic brf
dry: wdb agd
wrm: aza
jin: unm bln rct
uaz: ypf nas
jwg: she mpk wdc
vbm: crg pcn ccl
ist: zcg
ymm: smd pim
hpe: xct jvl tql cix
wpc: fnx ayr
viw: yku
zrh: nwe twj
dxx: pjv zkg
ftr: zya kqc ahi
yac: wyy xwo tkh
qni: wjc kww mxo yac
xpd: pjc kie wmz
wfw: zyx ias nve
mfh: tks wpb
xgu: nbx eth
ude: out
ijh: rpn lpz apc
xgz: nmj xfg
dsa: you ire sdo
ias: out
gak: yft daf qus cwj xxv
goz: you sdo
tjw: fel rds
apc: sou aji axj uvd qpi fer eew syb rgz nke jbm vjm vsg
yxl: ege vjc dry
qzj: uil yea kex
pyd: mdy zxb rrq
xpw: wgr
wdc: you ire
bod: raf rrq
qex: zyi
fds: nas
tva: apc
deo: tyh mfl
you: wmp cgr wrm mgp zbb kta imk yfs hid fja fml lau
gpr: tos wfg nrn
daf: lgx iga pnz
mea: apc rpn
iui: lnp nwe
niy: zdn jtg jpa ryo
cnd: rqr kyu hnt
fer: jqq
gtt: fzj
keb: llq maz aow
gjz: oku wfg nrn
ywh: hds keb vkx
qnl: rbd rtn glp hpe
wmz: zyi
fjz: yyb ryo jpa jtg
bci: ary dyg
wfg: erv vnt jhw
art: moa
ykd: art akw
nld: ojp kxv blo
tfz: dqc qeo
fzj: jyw xct tql
ucr: wfg jmw
jdr: pjr nzl lvu rpx jmo
tow: lpz
wan: rpy brf bic obm
nnc: fnx
rix: llv zgm yyn
nve: out
xex: jyw xct jvl
bjb: edr ehw vjh
tne: hxn dnp xwl
qdo: fja fml fwm lau dmg wee jnd mcq wif cgr nog wrm mgp zbb kta yfs hid lju
zya: hcj
wee: pzb jqm
sqf: laa mvt zcg
hxn: ijh jic
qio: kex
dem: kww xkg wjc yac
znb: gpt fek iak
imk: wcd aza
rbd: tql jyw
ics: rmc sah lgp
xal: jwg tfb ffl
fnx: kit egq
bhl: zpy
zkg: jdr nen dmd
hah: qeo gbl
fmu: ris nbx eth
sou: jqq ijf tvi
yft: lgx ctu iga
ywr: bpo
alu: jwr haz uju
cix: ftr ssj dme qek bsr ixx wmk qfp eve yja ftw nvd sov nqy ikv krb
hxq: hpf
dme: kji fsf hxq
axj: uil
ryo: omz zrc jgi
foy: rqr kyu
luw: pzi zyi
apl: jfu
tgs: luw wdd zhk lmu
uuw: nve
rhs: hpf jin xfw
moa: yam zvc
sys: wfg oku
kzx: dhp
twj: vjh kqn ehw edr
fqu: kqn edr
agd: ehw vjh
gmv: zuv
lju: yzh
aja: kqw hja aao
ajb: rmc lgp ywr fzg
pub: lvd dry
fda: wpr
lpe: zyi
uvw: jyw cix jvl tql
kji: hpf jin xfw
fml: ctx
zca: beh zri yyj
fji: cpq
thz: pmr aao hja kqw
dcp: nij deo srh ltq
til: ijh jic zah
jqj: apc
lav: fel
vod: wck
gpv: qdo
fuq: mih wzj vwx
hnt: dsa wbq
khg: geo nky rsb
nmj: bhd tfz
ccl: wcg
srh: pjc tyh kie wmz
inh: kxv ojp qhy
fpi: bci zvc yam
zyi: yil wcx bno inh duj cxx lfb foe xlv fmu xgz nmb oix mnc ogc tom xgm nld xgu
occ: zyi
wzj: obm
tkh: cib ame cee guq
aza: yda gqh
jeo: qnl frt
kuj: ylr
nys: fzj jjp
nky: nys cio jzi
iki: mea xjb hwz
yzh: dhp
vfw: qub zuv
zoa: lce
eqb: ege
jic: rpn
iga: tva zod
bdo: mdy raf zxb
xjb: apc
brf: ccl crg
wbq: ire sdo you
lau: dll xvb ykd
dhp: gjz kbm
nwe: vht edr kqn
acx: emo yku fzi kuj vqz
cio: jjp fzj yhn
rnt: muy zyi pzi
pmr: ajb xse
rhh: lpz rpn
ypb: qus
vsg: nes afr dvw ivd
xzg: vjh
nen: lvu jmo rpx
zgm: wfw uuw wtb
hid: fuq inv
wif: inv xgg
ivd: sqf wjh ist
ahi: xal zpy fua
cwf: egq
qcc: tdx
wyw: vdk
gnk: jeo uiq fji
ixx: cnd pxm foy
rpn: vjm qzj vsg xkv qkf qio eew jbm rgz nke syb rlr qpi bok hte eip gkw fer sou ihb aji axj uvd
seg: iki oko
qfp: xry pxm cnd
kpq: jyw cix xct tql
vjm: dds nes
kqw: ics ajb xse
aju: fcc tks wpb
ish: llv xxc
qeo: bjb
wyy: buw cib ame
bhq: pmr
zrc: tks fcc wpb
eew: dds dvw
jxp: pim smd
xry: hnt kyu rqr
qak: wok jen
jle: wcq
rlr: ijf
lgp: bpo occ ltb yon
psw: chi lce
sbj: out
vdk: wrv ias
vqz: bpw
bic: ccl crg
pzi: dem fmu xlv xgz foe lfb jeb cxx duj bno wcx inh yil xgm xgu nld tom qni ogc oix nmb
ehw: ewv cge wzi rqa ywh bqq seg lav zyz ugk qpo tjw yve
agi: zrh
avb: haz
xgm: eth ris
hry: qcc ypf
jwx: hln bod wpc aja pyd wvy bhq ywn tmy zim vnj tch
wdb: kqn vht
jpa: aju zrc omz jgi
qfh: lvl lce
ltb: muy
jwr: qdo ire you
mfl: muy zyi pzi
wmp: ykd dll
yau: zyi muy
rct: bik
bno: xgd
hxp: muy pzi
duj: emh arf agi
ugk: zdn ryo jpa
oko: hwz jev
dbb: llu
wmk: rhs hxq uqj kji
syb: egu lun thm
dzg: xal
kww: xwo wyy
ufx: jyw
unm: bik svm rjq
ayn: ufx
inj: hgk txi
eve: mhl
zod: lpz rpn apc
uwp: egq
nlm: uiq
yda: wyw
ojp: zpt pub swx yxl eqb
mrd: xmu zim vnj tch nnc vfw hln hta
zxb: dqi rul
mdy: qex
vht: zyz ugk unz dbb lav seg bqq rqa wzi cge ewv mqv yzr niy fjz yve tne ewe apl tjw
qpo: hxn
bqq: xwl tbc hxn til
pyn: out
xfg: tfz fft hah eua
yve: keb vkx
usf: vhv
wgr: ire sdo you qdo
cwj: pnz
zah: apc
mcq: wcd aza
vnj: tgs
rds: pwa fda zca tfc
oku: vnt sbj
glp: xct
bpo: muy zyi pzi
cjc: xxv daf
pjv: jdr dmd
blo: swx yxl
lyo: out
ydb: xpw ffz mhl
rqa: oko
wtt: lpe rnt hxp
rsb: nys sfz
kqn: lav bqq mqv niy yzr fjz cmw ewe
bhd: gbl
svm: you ire qdo
skn: muy
rad: vhv
vjh: fjz cge apl ewe tne cmw ugk zyz
qkf: tvi ijf jqq khg
edr: ywh wtp jkp mqv cmw ewe yve
gkw: nes dvw ivd
she: sdo qdo
lpw: arm ruq ars
inv: mih
ruq: lpz rpn
vno: xkb khq iui
cyx: vht edr kqn
zvc: ary lyo pld ude dyg
heb: vjh edr ehw vht
nrn: vnt jhw sbj
las: sdo ire qdo
jfu: tfc
uvd: yea uil
tfb: wdc
nga: nfn
rpy: myb
emh: iui
qek: zoa qfh bws
vwx: bic vbm rpy brf
fua: jwg
cib: kqn edr ehw
obm: pcn ccl myb
qtd: vht ehw edr vjh
qus: lgx iga
rul: muy
rqr: wbq
qub: zhk lmu luw
vsy: wck gpt fqu iak
sdo: lju hid imk yfs mgp zbb wrm wif wmp nog cgr mcq jnd lau dmg fja fml
hpx: viw
ijf: geo awq nky
wcd: gqh rix ish dty
wpb: apc lpz
ftw: dzg ahi kqc bhl zya
nqy: zoa psw
wtp: iki
cge: dre ypb
kta: ykd xvb
ltq: kie pjc mfl wmz
rxy: out
wrv: out
lvu: rxy idj
nje: jeo
rrq: qex dqi rul
nke: ftt nje
dds: mux azd
egq: hgk
nzf: emo vqz kuj fzi
rjq: qdo
nmb: kww yac
ris: uaz hry fds njj
egu: viw nzf vyn
gpt: ehw kqn
pld: out
lce: jdc avb
lvl: jdc avb alu
jzi: yhn fzj jjp
ynx: egq inj
omz: fcc
mnc: vsy vod
nvd: dzg bhl zya kqc
hja: ics ajb
cpq: glp rtn
fsf: jin
cjq: out
frt: hpe glp rbd
dyg: out
sgb: jqj ruq
dvw: wjh mux azd sqf
ayr: inj kit egq
hln: pim dcp
bln: bik
hgk: zyi
xkv: nes dvw ivd
vjc: agd xzg
wza: tql xct jvl cix jyw
jjp: tql jvl xct cix
dnp: zah ijh jic
myn: jqj arm
lun: nzf vyn acx
azd: laa mvt
zwz: xmu bod gmv nnc aja pyd wpc lty usf hta zim rad ymm tmy ywn vfw kab vnj bdo bhq wvy
ssj: qfh psw
uby: edr ehw vht vjh
tom: vod znb vsy
xmu: vhv wtt
jmw: vnt
zdn: mfh omz zrc aju
crg: cjq jik wcg
buw: vjh ehw edr
xvb: art akw skq
eth: hry njj
qpi: egu lun
xmh: arm ruq ars jqj
uiq: izo cpq
jkp: vkx keb
fek: vht edr vjh kqn
pim: xpd
kex: ayn hna
jgi: wpb tks
jqm: nfn laj pjv
tyh: zyi
tch: fnx ayr cwf
rgz: fls gnk nlm ftt
chi: jdc
zpy: jwg kcf
fcc: rpn lpz
uju: sdo qdo
ame: vht
kit: skn txi
kqc: hcj fua xal zpy
wok: ucr gpr
pra: guq cee buw cib
jyw: ikv wmk nqy sov nvd
yam: lyo
ogc: xfg nmj xgd
gga: cix tql xct
fls: fji
dre: daf
xkb: lnp sow
aji: hpx thm
beh: apc
dqi: muy pzi zyi
xct: qek ydb ixx qfp wmk yja ftr ftw dme ikv
qhy: yxl zpt pub
xxc: uuw
skq: wcq moa
afr: mux sqf
ctu: zod rhh
qql: ufx xex gga
kxv: pub swx
emo: ylr wza bpw
smd: ltq xpd deo nij srh
pjc: muy zyi
shl: gqh rix yda dty
wcx: nmj xgd
xgg: wzj wan vwx mih
ege: qtd
lzg: gtt
krb: psw
mvt: kpq
jhw: out
uqj: jin
bik: you
jnd: nga jqm
xkg: wyy pra
aao: ics xse
pnz: rhh zod
lvd: wdb
ihb: kex
yhn: jvl tql jyw
sov: cnd pxm foy xry
ffz: wgr goz
muy: xgu nld xgm qni tom mnc oix nmb xgz xlv lfb duj cxx jeb bno wcx yil
jen: gpr ucr kbm sys
ewv: til tbc
ctx: wok dhp
bsr: kji hxq rhs
zri: apc lpz
hte: hpx lun egu thm
yyb: mfh aju
ytb: wpc nnc pyd bod xmu usf thz lty vnj kab tmy ywn rad ymm jxp bdo
nij: wmz mfl kie pjc tyh
ars: rpn
xxv: ctu iga
yyn: add uuw vdk wfw
yku: bpw
hta: dcp
dll: skq jle
mhl: szj
yzr: hds
hcj: kcf ffl tfb
eip: ijf jqq
wdd: pzi zyi
tvi: geo awq lzg nky
eua: qeo dqc
lnp: kqn
xwo: buw

10
inputs/input11_test 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
inputs/input11_test2 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