From 23ec60cde98942d143bfc952a9936d3e4d6c9237 Mon Sep 17 00:00:00 2001 From: Daniel Heras Quesada Date: Mon, 15 Dec 2025 23:38:55 +0100 Subject: [PATCH] feat(day_11): part A done --- README.md | 1 + src/__tests__/day_11_test.ts | 10 + src/exercises/assets/day_11_input.txt | 543 +++++++++++++++++++++ src/exercises/assets/day_11_test_input.txt | 10 + src/exercises/day_11.ts | 52 ++ 5 files changed, 616 insertions(+) create mode 100644 src/__tests__/day_11_test.ts create mode 100644 src/exercises/assets/day_11_input.txt create mode 100644 src/exercises/assets/day_11_test_input.txt create mode 100644 src/exercises/day_11.ts diff --git a/README.md b/README.md index f45d582..7eed949 100644 --- a/README.md +++ b/README.md @@ -16,6 +16,7 @@ | 8 | Playground | ⭐ | ⭐ | | 9 | Movie Theater | ⭐ | 🌓 | | 10 | Factory | ⭐ | ⏱️ | +| 11 | Reactor | ⭐ | | ### Symbols diff --git a/src/__tests__/day_11_test.ts b/src/__tests__/day_11_test.ts new file mode 100644 index 0000000..ed3dbee --- /dev/null +++ b/src/__tests__/day_11_test.ts @@ -0,0 +1,10 @@ +import { assertEquals } from "@std/assert"; +import { count_all_out_paths, read_device_list } from "../exercises/day_11.ts"; + +Deno.test("Day 11 - A", async () => { + const input_list = await read_device_list( + "src/exercises/assets/day_11_test_input.txt", + ); + const result = count_all_out_paths(input_list, "you"); + assertEquals(result, 5); +}); diff --git a/src/exercises/assets/day_11_input.txt b/src/exercises/assets/day_11_input.txt new file mode 100644 index 0000000..2c46a6e --- /dev/null +++ b/src/exercises/assets/day_11_input.txt @@ -0,0 +1,543 @@ +pnn: opd +gyc: elv lvv +mnx: ivr ibb +vgu: kzj pqv +ilm: eej qlx wgv qrg +zgs: zuw xsc qna ere thp jmf wxk myq oip tey eva ydb izr yhm +ifm: qlj +cuj: out +ocn: bvx hpb jee iad jqj bzm hig abe kng ggh oqo pzp iao hud jpk +nme: hli +wfq: ewj +thc: wzt pol iee ogz +sig: qlx wgv +dgw: kgf xlt +hly: wmu xku +rbs: odx +zvp: opd zkx xeu bhx zgs +cki: ztj you +itw: nya qyb eae +onp: exe gsv +zle: out +qhv: pmn tut uhu +ibt: ncx +pum: ztj you +tmh: hbx hsh ktr nph dcg +vyy: krx +ktr: grm +ggh: ilm ang bwj +wtb: rbs aaz +ugk: fet +ltn: odx ztj +oah: out +xcx: pqv wfq elj +apt: out +dac: muz fio pum qyf +lwa: qfc eqq qoq orb +hiv: xjx enn sie +xvu: vze aek tjd wll +bhx: qna mon voe vxt myq ere jmf wxk ljp yhm zuw tey nha nme thp ydb mfv ozp izr +lmb: ltn wgp mpp +ksl: xku wmu grm +hns: zle nvu +vmw: bxw +yfn: qju +vpl: pok +kzj: kkj ewj +mon: ure xhk ahv mty +xll: vol bdk +wmo: dca gnt +miv: hly qhb eru mnw +ica: msp exg thc +prk: ssx dca dtc +hud: psu +oqo: tyx odi ljw +nqe: hns +hlr: lmm ymk xcx +mwt: cuj apt mtq bqu +ere: fod dxi +wex: uhy wvp +ogp: lhh weu +qab: out +exg: pol +hvq: out +dlf: skp dmm nci vmw +oey: out +mge: edd dmm skp nci +yhm: mty dnc xhk +pol: xgp ljd ufv ibt pcj qpe jvv yey uhx +msp: ogz wzt +kwv: zlt jlx +wgp: you +bzm: bww oby oii +mqw: elv jhz lvv +xyv: opd zkx bhx zgs +vyl: pbz wmy bdk +nya: hcb fet fsf +tut: bxw xku sbb wmu grm +uyz: fay jvm +zxo: opd zkx bhx xeu +rfp: ckl nzc msp +jbf: vlu pss ipe +thv: xeu +plf: ibb sgk ivr ibw +pmq: lex cyo +opb: qlj +tlr: fay uey +uhx: vyy uqc erw +efr: hiv zhy +mkm: bha +sxu: cyo exe gsv lex +lex: rfp +eae: hcb isb fet +xkk: yia mwt mgs +ywb: qfc qoq orb eqq wjp +thp: fod dxi +vcz: djo yqr +voe: hli ovs yyd +baa: azd +oip: ovs +iao: mqw gyc +ehf: rdv akw +vcu: ena +cvo: zle oah nvu +gft: mpp +rrc: oah der +tgp: out +pzd: zgi +myq: ovs lgq hli +der: out +xjx: iha tog +bmq: mjz drr +dtc: oey rqm +pyp: zgi unr +zgi: ztj +emu: ill xfs qpb +pfs: gsv exe cyo +koy: msp ckl +xml: umi nfp dpz bqi aot +vfz: qst +zpe: ifm brt opb +dpz: fsf isb fet +zhy: enn xjx +wvp: lnf umb +xnb: nfp aot bqi +uvf: ibb fwe sgk +fwe: fen yxo +ljd: pgg gke okt +lgq: ugk +qpe: vyy bgp erw +hgk: mwt +bzq: pgs esy +mdz: pum cge qyf muz fio +vlm: opd bhx zgs +odx: xfh oyz ehh iuo ord vpl drs eyt xkx baa mfl +ufv: rho +fen: yug kmf woh +zbl: hud szr iao oqo pzp hig abe ggh kng bzm jqj iad jee hpb mcr ipg bvx +yet: jhz +lnf: xkk hgk aqi +wmy: aak qdq +you: drs plk eph csl wex vld ord vfz idu +khw: skt ssx dca dtc +ggt: nqp +nha: zhy ite +bpf: zle der nvu oah +qmu: yva wtb +pti: ilx xve vjw +qun: vyy bgp +tha: aot bqi dpz umi nfp +txq: xmv zae bcr +los: hvq nsb +ucq: yug +aot: fsf +ibb: fen ucq +eva: gnx ijp +wgf: fet +uxu: fkw qnc lbd +qgw: zgs bhx zkx opd +hdl: jnj hrx +vze: wzt ogz iee +wjp: iee pol qju wzt +kuz: pzd pyp rho zqe +vxt: hiv ite +nld: cgq miv +gke: dve twf +nfp: isb fsf hcb +brt: xvu +ssx: oey njy +ite: enn sie +gsv: rfp koy ica +xbi: bhx zkx opd +egs: grm wmu sbb xku +dcg: wmu bxw xku +qyb: fsf isb hcb +azd: swd hxc +eim: ptq wtb yva +jpk: aow oii oby bww +hig: yet +kkj: qab evn twt +raz: nxx lps nld +twt: out +uqc: omz ipk mne +vlk: gnx hdl mtr +jlx: dcg ktr hbx +rdj: jsa kxe nfm +mne: odx ztj you +ure: qth +evn: out +ofa: zgi +qlx: xyv xkg jcy thv +elj: ewj kkj pan +pbz: vcu aak +xfy: cgq miv vii +yva: cki aaz +skp: sbb wmu grm +zgr: jbn djo +ahv: fft +zmp: rfu pbz wmy vol bdk +lmm: elj kzj +ijp: hrx jnj +eej: xbi xkg xyv jcy thv +vyz: lwa yyr duu +ubk: xyg mge ufe +hbx: bxw sbb wmu grm +ltq: mwt yia +xve: vxd cfr gft +hrx: ehf +elw: weu iml zuu lhh +nph: wmu sbb grm xku bxw +okt: twf mdz dac +fpe: rho zqe +lbs: zgr vcz +qfc: pol iee wzt +kcc: xmv vrk zae bcr +dfi: qfc qoq +war: pmn +gnx: jnj uxp bmq hrx +vrm: equ tfg +grm: ggt myt pmq vyz zpe +csl: xll +qdq: qah los ena +tjy: out +yjs: wzt qju iee +tiv: lhh iml weu +vld: wgb uhy +wqv: jlx tmh yeh +rkw: wmu bxw xku +zae: lrp +ipe: ymk xdb +duo: wzt ogz qju +iml: opd +tce: xfy lps nxx +fod: xml xnb tha +qrg: jcy xbi +qhb: xku sbb wmu grm +dde: vol bdk rfu +qju: pcj pti qvy bjz qun rdj kju cnt huy rbj qpe +zuu: zkx xeu bhx zgs +ewj: evn twt tjy +ejf: brt +xkx: zap hhw azd +skt: njy +kmf: egs +lhh: zgs xeu bhx zkx +uqk: nfm qmu jsa eim +mcr: sig bwj +duu: qfc qoq wjp +uey: qhv prl +dve: pum cge qyf muz +yqr: prk kvk +qth: wgf ede pgs +mfv: rwg umy +abe: bww oby +drr: akw +mpp: ztj odx +iha: isb +kvk: skt gnt dtc +huy: nfm kxe qmu jsa eim +dmm: bxw xku sbb grm +mgs: apt cuj +ptq: aaz cki +uma: cki rbs +cyo: ica koy rfp +yjl: xll vyl +lrp: wzt qju iee pol ogz +uvv: ufe dlf +pss: xcx +ozp: ite +xfh: vlu qst +nzc: ogz iee pol +nbr: uhu pmn glj +qrf: zkx opd zgs bhx +mnw: bxw +uxp: mjz +jgp: tsx jaq ekw +bml: rrc bpf +idu: uhy +psu: fkw hqn lbd +bwj: kyw qlx wgv qrg +eqq: pol qju +pmn: grm sbb +myt: ywb lwa duu +pqv: kkj +zkx: efr ydb mfv all izr zuw vlk tey nme thp yhm qna xsc voe vxt oip myq wxk jmf +tfg: kgf xlt duo +ovg: isb fsf hcb +iad: uxu rru +cfr: mpp +hqn: nbo pnn zxo +bjz: vjw xve ncx ilx +ckl: qju iee ogz +edd: wmu +yeh: hbx dcg nph ktr +djo: kvk khw rby wmo +sbu: fsf isb fet hcb +lvv: vlm dzr +ftk: ifm brt bha +fft: pgs ede esy ojl +kgf: iee ogz wzt +hpb: psu rru uxu +jvv: okt pgg +erw: omz +lbd: snl +jyh: exg nzc +snl: zgs xeu zkx +uuy: nld nxx +qpb: zgs bhx zkx +prl: tut +nbo: zgs xeu opd +nfm: wtb ptq yva uma +vjw: gft vxd +qna: ced dxi +uwx: der nvu +oyz: uhy wgb +wzt: huy jvv qpe fpe qun uqk pcj kju cnt ufv ljd rdj qvy +pan: evn qab +swd: ieu nqe +dzr: opd zkx bhx zgs +kxe: ptq yva +jmf: rwg sys +qpc: vrm hyu nqp +xyg: dmm edd vmw nci +eph: hlr ipe vlu pss +exe: koy rfp jyh ica +ced: tha +ehh: vcz zgr +blb: vrm +szr: bwj sig +drg: umi nfp dpz +weu: bhx xeu zgs zkx +sfk: qhv nbr +ffk: isb fsf hcb +aaz: you odx +nxx: cgq +iee: pcj qvy qun ufv bjz fpe +vlu: ymk vgu xcx xdb +bvx: tyx odi +oii: lov xqv +nci: sbb bxw +kju: rho pyp ofa pzd +pzp: yet mqw gyc +wdd: bcr +jhz: dzr vlm +xlt: pol iee ogz +bdk: qdq aak vcu +oqz: nxx +fzw: lhh zuu weu zvp +krx: odx +ieu: cvo uwx rrc bpf +umi: fet fsf hcb +mfl: zmp +bww: emu +rby: dca gnt +qvy: nfm eim +rfu: qdq aak +muz: ztj you odx +cnt: okt +fgd: nqp hyu +jqj: ang bwj +wmu: ogj bon pfs txq wdd vyz kcc zpe fgd ggt mkm ftk ran sxu myt onp vrb ejf qpc pmq +stt: xyg +xkg: zgs bhx zkx opd +odm: nxx lps nld +bgp: ipk mne +qst: xcx ymk vgu xdb lmm +lov: qgw +oyo: wqv iva +uvr: ltn +ilx: gft lmb uvr vxd +unr: you ztj odx +ojl: isb hcb +vol: qdq +jcy: opd zkx xeu bhx zgs +sgk: yxo ucq +ztj: vld vfz baa eyt xkx eph mfl plk iuo idu ehh vpl xfh oyz csl jbf lbs drs yjl wex +ncx: uvr lmb gft cfr +ipg: uxu +qyf: ztj odx +ipk: ztj +mty: bzq qth +mjz: fvj rdv +sie: sbu iha tog +eyt: azd zap +orb: wzt ogz pol iee +esy: isb +iva: yeh tmh +slh: uhu glj +xqv: qrf xfs +mll: yqr djo jbn +ydb: xhk ure ahv dnc mty +gnt: rqm +all: ure mty dnc +odi: byx hrv tsx jaq ekw +xeu: ljp vxt myq ere jmf xsc qna izr ydb mfv eva tey vlk nme thp zuw +tjd: ogz qju wzt +cge: odx ztj you +ope: mgs +xku: pfs txq bon mkm ftk ggt pmq sxu qpc vyz fgd +ljp: umy rwg +mtq: out +rru: fkw qnc lbd +chu: uwx bpf hns +vti: eae +xmv: yjs +jsy: zvp lhh +ogj: dfi +bon: vrm +ovs: ffk ugk +hcb: uyz tlr uvv ubk uvf iez mnx raz pzs tce stt uuy oqz anf rkh xud oyo plf trv +dnc: bzq qth +hxc: chu glu nqe +tsx: elw ogp +akw: hcb +fay: prl slh +gcl: bxw wmu sbb +vrb: lwa ywb yyr +jvm: qhv war +vxd: wgp +nvu: out +lqw: abe szr hpb hud iad jqj +eru: sbb +rkh: kwv wqv +fdb: bml ieu chu +rwg: vti +zqe: rpv unr +ang: eej kyw +yxo: yug kmf +byx: fzw ogp elw tiv +xgp: gke okt +hhw: fdb swd +xsc: hiv zhy +xdb: elj pqv wfq +oby: xqv +xfs: zkx zgs bhx xeu +aow: lov emu +qnc: snl ecl +zlt: dcg nph ktr hbx hsh +opd: ljp qna xsc mon myq wxk voe oip mfv eva efr izr ozp nha tey +woh: rkw gcl +qlj: vze tjd +hli: ffk ovg +tey: hdl ijp gnx +iez: iva wqv +wgv: thv xyv +uhu: xku bxw wmu sbb +trv: uey +elv: ass +equ: duo xlt +efj: wll tjd aek vze +ufe: nci +enn: tog iha sbu +fet: plf tce hxn oyo xud uuy uvf uvv mnx odm tlr uyz +wgb: zoe +bxw: onp vrb ejf ogj qpc kcc +rdv: fsf fet isb +nqp: tfg equ +glu: bpf rrc uwx hns cvo +izr: ahv xhk dnc +twf: pum +ass: bhx xeu +hrv: tiv +yyd: ffk +umb: ltq ope xkk +mtr: bmq uxp +ecl: opd zkx +drs: zmp vyl dde +rho: zgi unr +cgq: ksl mnw hly +ena: hvq +fsf: hxn pzs oyo rkh xud uuy plf +aek: ogz qju iee +rqm: out +jsa: wtb yva uma +anf: xyg dlf +rbj: rho pyp pzd ofa +kng: ljw jgp odi tyx +pgs: fet +dja: eae qyb +lps: cgq +omz: you ztj +kyw: xyv xkg jcy +yyr: qfc qoq eqq +ede: fsf +xud: ibw ibb fwe +hyu: dgw +pok: swd hxc +umy: itw dja +yia: apt mtq cuj tgp +yug: gcl rkw +jbn: rby kvk khw prk +bqi: hcb +pcj: erw bgp vyy +aak: qah los ena +fio: odx +bcr: yfn yjs +ivr: fen yxo +qah: hvq zzs +iuo: wvp uhy +vii: hly qhb +qoq: iee pol wzt +xhk: qth fft +uhy: zoe lnf +pzs: sfk +pgg: twf mdz dac +ogz: huy jvv rbj bjz qun uqk ibt kuz kju uhx rdj ljd +hxn: ufe mge xyg +ibw: ucq +dca: oey njy rqm +isb: plf trv pzs hxn anf oyo rkh xud oqz stt uuy iez uvf ubk uvv raz mnx odm uyz +wll: wzt qju pol +glj: bxw wmu +jnj: ehf drr mjz +njy: out +tog: hcb fet fsf +sys: dja vti +rpv: ztj odx +nsb: out +zuw: mtr ijp gnx +ymk: wfq pqv elj +ill: zkx xeu bhx zgs +ord: zap azd pok +bha: efj xvu qlj +zoe: aqi hgk +bqu: out +wxk: ovs +svr: lqw ocn zbl +jee: yet +zzs: out +fvj: hcb fsf fet isb +ran: ywb dfi lwa +tyx: ekw tsx byx +fkw: ecl nbo snl zxo +plk: mll zgr +zap: fdb swd +jaq: fzw +ljw: tsx hrv ekw +aqi: yia mwt +vrk: lrp yjs yfn +ekw: tiv jsy fzw ogp +dxi: drg xml +sbb: wdd kcc vyz fgd zpe ggt mkm ftk sxu ran bon ogj txq qpc pmq myt blb vrb +hsh: xku bxw wmu sbb grm +yey: okt diff --git a/src/exercises/assets/day_11_test_input.txt b/src/exercises/assets/day_11_test_input.txt new file mode 100644 index 0000000..01e5b43 --- /dev/null +++ b/src/exercises/assets/day_11_test_input.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 diff --git a/src/exercises/day_11.ts b/src/exercises/day_11.ts new file mode 100644 index 0000000..094ce0f --- /dev/null +++ b/src/exercises/day_11.ts @@ -0,0 +1,52 @@ +const INIT = "you"; +const END = "out"; +type Device = { + name: string; + output_list: string[]; +}; + +export default async function Reactor() { + const input_list = await read_device_list( + "src/exercises/assets/day_11_input.txt", + ); + const path_count = count_all_out_paths(input_list, "you"); + console.log(">> The number of paths is: ", path_count); +} + +export function count_all_out_paths(list: Device[], init: string): number { + let total = 0; + const current_device = list.find((d) => d.name === init); + + // Default exits + // NOTE: how to avoid circular connections + if (!current_device) { + return 0; + } + if (current_device.output_list.length < 1) { + return 0; + } + if (current_device.output_list.includes(END)) { + return 1; + } + + current_device.output_list.forEach((output) => { + total += count_all_out_paths(list, output); + }); + + return total; +} + +export async function read_device_list(path: string): Promise { + const txt_file = await Deno.readTextFile(path); + const raw_device_list = txt_file.split("\n"); + + return raw_device_list.filter((d) => !!d).map((device) => { + const [name, raw_outputs] = device.split(": "); + const output_list = raw_outputs.split(" "); + const formatted_device: Device = { + name, + output_list, + }; + return formatted_device; + }); +}