feat: Add day 11 (without definitiv solution for part 2)

This commit is contained in:
Roman Spring 2025-12-11 09:50:25 +01:00
parent df5de863e8
commit 6868341bc4
6 changed files with 714 additions and 4 deletions

View file

@ -0,0 +1,559 @@
gfw: pfg lik
bzp: nky
hzi: ewh wpa qla
cee: zmj her
qas: alt cvb hor uwp
ycy: brw ryu
pqz: uty tvj
wmg: lmz jcz kbm cpo
rxa: poy kmc
sft: lmi kid usa
nrf: out
tje: vth woa xek lec
nim: vox ysr mpg ilk
qok: bkh
jsi: gzs bkh jis
vwt: pzv
dek: yrv pxh
uco: ukv dqz
any: oyb won frr qir
fdx: goj
xea: vpy
gie: out
wcm: ctd ooe pcf
ncl: raz xlp ttr olc uxy voc
zvh: sze ncg
ptz: ibk gbd
tzb: ilk edy mpg ysr
syy: cdu vjy ycy
gfk: vpy mzs gri
khz: out
nxt: her idf nvp
syw: lmz
lry: sxr omu syw wmg
lik: zkt ckl
uxy: usb trt
xig: out
pca: aos lmm
qzg: epb coi cly
uot: rrb dmb
zxb: ncg jsi sze
ank: dhj
mfq: rxq kmc gkx poy
fdh: yfp llu
jzy: euw dar
jcz: sxm
fan: hke uot qnr
jpj: tca
dar: xek qgt woa
ypp: srd xrd
jqv: ztl nrf tca
cdu: rgu ryu
ucf: dzf fkr qzg nrc
nnz: igg cei frj
trg: ifw xyl hmy xxg
uhq: ekd diz bgr
cja: xgm nfj
edy: sok gjl
ilk: bhp jmf qas sok gjl
ldv: stl zbr
usa: dya ctd ooe pcf
szm: tfu woi dyi
igf: xrd
fgg: sxr kxu wmg syw omu
nrn: aes
tre: zpn oct grs
ctj: qow puu kzu
xet: cmx
qxf: aqq yxa nrn plz chi
dnb: zvh dtc jdb
wsw: bkh jis
hzt: vjy trn cdu
mxk: rkf
pez: cjk zzy yqx
hmy: fwj
vjy: rgu ryu
hus: xxo gsy jpy vhp
pzr: pca kng wno
mzr: dqz
mpg: jmf qas
qow: ktu zog bke
bag: goj
woi: udj
her: rwv eof lun
nlo: kcx
hor: zvk mum ngp vgp lil rrk wpm zmr qxf goa hek mll aqf
ksg: crd hzt syy hfb
hzj: tkr zkt
uln: hmi ctd pcf dya
fuk: swo
mum: yxa chi plz nrn
ugx: icr wui nnz
lqg: abd ceu jak
jpc: omu wmg syw
omu: juh cpo kbm
vox: bhp qas gjl sok
sxr: kbm
efa: xvl sue xwl
lle: cwj mfq rxa
bwo: trt fwm
ybp: cvb alt uwp vsq
sze: jis gzs
rrb: woi rxm
srd: ddh
rjp: xiq sps
uwp: mll aqf tmk qxf cja fuk lle wpm ngp vgp mum zvk fhb goa hek ies zmr goe gfw rrk lil kbc hqs eax qxn
hub: nwk
jis: any yzd fwk trg ykn cts qxc jpr
xyl: fwj
xoj: ino dwm mim
bke: hor vsq uwp alt cvb
wwk: ksg bdt
tvj: ewh
pxy: vhx
diz: xhd qok fyt abm
ajl: gzs
abm: bkh gzs
zvg: ctj dwm
iec: tvj tqf uty hzi
bdt: bni crd syy hfb
wpl: dya
lkt: spo muw
dhj: hzt crd
bgr: xhd qok
vip: kcx
ebw: ceu
rrk: ymm qgn
wxu: vop fxl
qet: vip
lyp: tfu rxm dyi
kbc: rxa mfq
dtv: pcf
cjk: yfo tds
ttr: yfp llu tqt
sxm: out
eof: bkh
kng: dks tkw dcr aos
zeh: fmh
fwk: oyb mas qir frr
zmj: lun eof
roi: aby fft
jcy: xrd
tro: out
foi: ekd lwb bgr
fkr: cly ajl coi
yqx: yfo tds
qpl: out
vop: out
cmx: sze
jak: you yfo
mla: oom ppl awl
kdd: owy
xna: jnh dsd
xhd: bkh gzs
cei: usa dtv
qgt: vsq uwp
xtb: fxl vop
gzs: rdd cts qxc aij tbu wid wzp ugx yzd nzw trg ykn fwk nyn yco any awq
rwq: ajc
mks: efa
lmi: hmi ooe
xvw: xig
ias: pzv kcx
flv: dyi tfu
gos: dcr tkw lmm dks
qxc: pkp jmi xar
sdu: wly sps
hgm: qgn
uis: out
cwj: poy ias
wzp: cmc bhl iqx znd
ibk: xvl xwl
frj: ezr lmi
aqq: aes tet
ppl: uby
owy: osv lji
ngp: mfq rxa cwj
ckl: kcx
ejt: kcx pzv ddh
pzv: sdp zlk dvf arm xna vtq ucf dek rwq ycc dnb lkf qti znr
lmz: tjx pbs sxm
yaa: cxo
yzd: iqx znd
mas: wpl pmh uln
chi: qet
lkf: qzg dzf
kid: dya ctd ooe pcf
spo: kcj
hrg: edz ztl
olc: usb trt
aqf: hzj lik
xxo: jpc lry awh
tkw: rxp hrg jqv
qdr: qnr uot sva
xws: ddh
ztl: out
rgu: tds you
suw: uby jns wah wze
dso: voc ijf uxy pym jro nim xoj fdh jzy bwo tzb mzj
brw: yfo
uty: ewh wpa
jka: izz
oyb: uln pno
mdi: pzr oct qrt
blt: lel
kkj: out
vpy: you yfo
ekd: abm qok fyt
nvp: eof rwv
kmc: ddh kcx pzv
xqt: xxo
dya: vqo ccl ebj reh ght ank uou mzr bag hff vpl wwk yya tjh afd fdx
lel: kpc qpl cqf
zpn: wno kng gos
xgf: owy yns
yqy: fam
yco: frr qir oyb won
zgx: tje euw vbw
tzm: fsj ucs wib
igy: nlo
lpf: hmi ctd pcf dya
sdp: zvh
hjt: eqr sbg
uou: jaw dqz
prf: zri
xiq: jvl beg hmg
yfo: xqt hus hdk srn tal fpm tre whm qdr ipe yqy mdi nwm pqz iec tfn
jmf: cvb alt vsq hor
plz: aes
yrv: rjx cee
wid: xyl hmy ifw xxg
hek: aqq chi nrn plz
nrc: coi ofp
cvb: hgm hqs qxn eax zvk lle zmr goe wpm rrk ngp lil vgp kbc ies fuk tmk goa hek qxf
lsq: mpg
swo: paa vai kea hki prf
tds: ipe mdi hus fan xqt nwm srn hdk tal fpm qdr
beg: uwp vsq hor
dmb: tfu rxm
whm: nba fam
vbw: vth woa qgt lec
tqf: qla ewh
clg: vbw tje
wib: wxu xvw
wly: uws jvl beg
trt: lre jry kqx
ies: swo xgm
dps: ysr mpg vox edy ilk
ipe: oct
tjx: out
ymm: eqr
tno: nlo ecr ltp
bhp: hor uwp cvb
goa: lik
dyi: bpq udj qsj
iqh: kcx
fpm: tqf uty tvj
puu: ktu zog
epb: bkh
tmk: aqq yxa chi nrn
rxp: nrf tro
jdb: jsi
lnk: brw ryu
gel: xar
crd: lnk
wno: dks tkw
dac: muw fue
xqo: qzg nti dzf
trn: ryu
ecn: zou ekd bgr lwb
nba: tzm ahp rfs
ecr: kcx
dtc: jsi ncg
mzj: izz nvr pnr pxy
osv: bkh jis gzs
fwj: dya ooe hmi ctd
bpq: jtp gie kkj
dqz: dac
ght: oii put
ucs: fpv glz xtb
wkz: ktu zog bke
vth: hor
put: rkf vcv
wpa: vvh tbp
tjh: dhj bdt
mtq: ryo
bkh: rdd cts aij jpr wid tbu wzp yzd gel trg mnq awq
nti: epb coi cly ofp
lil: xgm nfj
pbs: out
hmg: hor uwp alt cvb
wpm: ymm
ukv: xsz lkt
fhb: hzj lik
vqo: xea
fam: wkk ahp jjl tzm
tbp: fmh
oct: pca kng wno
you: mdi tfn iec nfc fan tre fpm
fuh: nwk xrd
nvr: sdu vhx
alt: rrk mll zmr gfw goe cja ies
dks: hrg
arm: cmx dtc jdb zxb
izz: sdu rjp vhx
tbu: yaa wui
yjj: pcf
tkr: pzv ddh
ycc: jnh yrv dsd
zok: ceu jak
zri: nlo ltp iso
fue: kcj azf csv
hmi: ljz vpl yya mzr fdx ebj uou
sbg: xws kgk ztw
wkk: ucs
tfn: gsy
vcv: gca ebw wnd
azf: tds
rxq: pzv ddh
ryo: igf
cpo: tjx
udj: uis
xgm: hki prf vai paa kea
san: una vcv
gsy: xwt awh fgg jpc
jro: tqt
duc: lel zie fmh
lji: bkh gzs
nfj: paa prf
xwl: hor uwp vsq cvb alt
vvh: fmh
uws: alt hor vsq
vpl: oii put fnb mxk
cly: gzs
igg: ezr lmi kid dtv
muw: csv azf kcj
znd: yjj stl wcm zbr
xvl: cvb alt hor vsq
bni: ycy cdu trn
cvc: fyq yns owy
etg: kdd ajc
iqx: wcm
ztw: kcx pzv ddh
lun: jis bkh
ozq: gbd ubd
llu: ozq ptz pzc dze
jry: vsq uwp hor alt
rfs: wib
uby: pcf ooe hmi ctd dya
fmh: qpl cqf
mim: wkz jbs qow kzu
ljz: har
cmc: zbr wcm stl
qic: dya ctd hmi
wah: hmi ctd ooe pcf dya
yis: qic fwj
zog: hor alt
kcx: qti znr ucf vtq dek rwq ycc bzp dnb lkf dvf arm xna etg iuh xet xqo sdp zlk cnt
znr: fkr nrc
kzu: ktu zog
hff: bdt ksg
mll: mtq tnh lem
vgp: roi lem
hdk: tqf tvj
euw: lec xek woa
won: wpl pmh
qcz: fwm trt usb
xlp: trt
kgk: kcx
ccl: mxk put fnb
afd: san
fwm: lre ybp wfh
wze: dya ctd hmi ooe
fxl: out
paa: zri
pkp: oom ppl awl suw
xrd: ddh pzv kcx
rwv: bkh gzs
ddh: dnb vtq bzp ycc rwq dek znr sdp zlk xet xqo xna etg
mzs: you
dvf: nky ecn
tjq: bdt ksg
wnd: jak abd ceu
una: lqg zok
voc: dar vbw euw
reh: pez
svr: avs dso stu gmu ncl
zlk: jdb zxb
plx: iqh ztw
juh: tjx
ncg: jis gzs
gmu: qcz raz voc gir ijf dps lsq pym tzb xoj eaa
ryu: you yfo tds
pnr: rjp
gjl: vsq uwp hor cvb
awq: xar jmi mla pkp
ahp: wib fsj
wfh: alt hor
icr: cei frj igg cxo
ysr: qas bhp jmf
xwt: sxr
usb: ybp lre
ndb: dya pcf ctd ooe
cnt: ecn uhq nky
bhl: zbr wcm stl yjj
ooe: vpl hff ljz uco wwk yya afd fdx tjh ccl tjq xyx reh mzr ght ank uou
xvk: yqx zzy yeu cjk
kcj: you tds
qla: vvh duc tbp blt zeh
gca: jak ceu
vsq: hek goa ies zmr gfw goe rrk lil kbc hgm hqs qxn eax mll tmk aqf qxf cja fuk lle wpm vgp mum zvk fhb
ubd: xvl xwl
jtp: out
abd: you yfo tds
gkx: ddh kcx
dzf: cly ajl
vhx: xiq wly sps
nky: zou
ezr: hmi ctd pcf dya
edz: out
tet: ltf
kxu: kbm lmz cpo juh
kea: igy
gir: pxy nvr izz
aby: ypp fuh hub
yfp: ozq ptz pzc dze mks
pxh: nxt cee rjx
tfu: bpq qsj adw
tnh: ryo fft
fnb: una rkf
qrt: gos kng
lem: uqj
raz: mim ino
pcf: ebj reh vqo tjq ank uou ght uco vpl hff tjh fdx afd wwk
nzw: jmi
nfc: vhp jpy xxo
grs: wno
hqs: chi aqq
rkf: wnd gca zok
lmm: rxp
jpr: xyl yis ifw
nyn: qir
jaw: lkt dac xsz
iso: kcx pzv ddh
pzc: ibk
oii: rkf
ewh: tbp duc zeh blt
har: zzy yqx yeu cjk
yns: wsw lji
oqe: wkk rfs jjl ahp
poy: pzv
lec: hor uwp vsq alt
eax: mtq tnh
hki: igy
ktu: vsq uwp alt cvb
pym: llu yfp
awh: kxu omu
hke: dmb szm
stl: ooe ctd hmi dya
jpy: jpc
goj: gri vpy mzs
xsz: fue muw
jnh: nxt
rdd: mas
yxa: ods aes tet qet
sps: beg jvl uws
xxg: lpf
tca: out
xek: cvb
ctd: mzr fdx bag ght ccl hff vqo ebj reh
vtq: nky foi
fyq: lji
zzy: you
vhp: xwt awh
ofp: jis gzs
tal: grs pzr zpn oct qrt
zie: khz cqf kpc
cts: znd iqx ldv cmc
qnr: rrb flv lyp
jbs: ktu
fyt: jis
zvk: xgm
frr: uln pmh ndb pno
ifw: lpf fwj
aes: ejt vip
ltp: pzv
eqr: vwt iqh ztw xws
glz: fxl xig
sue: cvb hor uwp
zou: qok abm
mnq: jmi pkp
rxm: adw
eaa: yfp
tqt: ptz pzc dze mks
idf: rwv lun
dcr: jpj
qti: foi
ceu: yfo tds you
sok: vsq cvb alt
woa: uwp vsq cvb alt
fft: jcy igf ypp fuh hub
pno: pcf ctd
ajc: fyq
jvl: hor uwp vsq cvb
jns: pcf ooe hmi ctd
lre: hor
ykn: yaa icr
pfg: ckl
cxo: dtv kid lmi ezr
zbr: ooe dya
aos: hrg jpj jqv
wui: sft cei cxo
ods: ltf
ijf: pxy
zkt: ddh kcx pzv
gri: you tds yfo
zmr: ymm hjt qgn
yeu: tds
goe: ymm hjt
rjx: her zmj idf nvp
kbm: pbs
jjl: ucs
xar: oom awl
dsd: rjx nxt
jmi: oom
ltf: pzv ddh
qsj: kkj
nwk: ddh kcx
sva: dmb flv szm lyp
avs: jzy raz ttr qcz olc gir ijf dps bwo zvg tzb xoj jro pym voc uxy
fpv: vop fxl
hfb: cdu lnk vjy trn
uqj: fuh
pmh: ooe hmi ctd dya
vai: zri tno igy
oom: uby wze wah jns
iuh: kdd cvc xgf ajc
yya: goj xea gfk
ebj: ukv
cqf: out
aij: bhl znd ldv iqx
dze: ubd gbd
csv: yfo you
adw: uis gie kkj
kqx: uwp vsq hor cvb alt
coi: gzs bkh
fsj: fpv xvw xtb glz wxu
srn: fam oqe
qxn: hzj
xyx: har xvk pez
stu: mzj eaa xoj jka jro clg voc uxy xlp ttr zgx dps lsq
kpc: out
qgn: plx
dwm: wkz qow
qir: uln
lwb: abm qok xhd
ino: puu qow jbs wkz
nwm: uot hke
gbd: xwl sue
awl: uby jns wah

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

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

View file

@ -1,8 +1,9 @@
namespace AdventOfCode2025.Inputs; namespace AdventOfCode2025.Inputs;
public sealed record Input(int Day, int PartNumber = 1) public sealed record Input(int Day, string Tag = "1")
{ {
private const string BasePath = "../../../Inputs/"; private const string BasePath = "../../../Inputs/";
private string ToPath() => BasePath + $"Day{Day}_{PartNumber}.txt"; private string ToPath() => BasePath + $"Day{Day}_{Tag}.txt";
public List<string> Lines => field ??= File.ReadAllLines(ToPath()).ToList(); public List<string> Lines => field ??= File.ReadAllLines(ToPath()).ToList();
public string AllText => field ??= File.ReadAllText(ToPath());
} }

View file

@ -0,0 +1,126 @@
using System.Text.RegularExpressions;
using AdventOfCode2025.Inputs;
namespace AdventOfCode2025.Solutions;
public class Day11() : Solution(11, "ex2")
{
public override string SolvePart1()
{
const string StartVertexName = "you";
const string EndVertexName = "out";
Dictionary<string, Vertex> vertices = GetParsedInput(new Input(Day).Lines);
return GetAllPaths(vertices[StartVertexName], vertices[EndVertexName])
.ToList()
.Count
.ToString();
}
public override string SolvePart2()
{
const string StartVertexName = "svr";
const string EndVertexName = "out";
Dictionary<string, Vertex> vertices = GetParsedInput(new Input(Day).Lines);
return CountAllPathsPart2(vertices[StartVertexName], vertices[EndVertexName]).ToString();
}
private static Dictionary<string, Vertex> GetParsedInput(List<string> inputLines)
{
var regex = new Regex(@"^(?<vertex>\w{3})|(?<to>\w{3})");
Dictionary<string, Vertex> vertices = new();
foreach (var matches in inputLines.Select(line => regex.Matches(line)))
{
var firstMatch = matches.First().Value;
vertices.TryGetValue(firstMatch, out var lineVertex);
if (lineVertex is null)
{
lineVertex = new Vertex(firstMatch);
vertices[lineVertex.Name] = lineVertex;
}
foreach (var match in matches.ToList()[1..])
{
if (!vertices.TryGetValue(match.Value, out var toVertex))
{
toVertex = new Vertex(match.Value);
vertices[toVertex.Name] = toVertex;
}
lineVertex.To.Add(toVertex);
}
}
return vertices;
}
// Assume no cycles
private static long CountAllPathsPart2(Vertex from, Vertex to)
{
const string DacKey = "dac";
const string FftKey = "fft";
Queue<(Vertex Vertex, bool DacVisited, bool FftVisited)> queue = new();
queue.Enqueue((from, false, false));
long counter = 0;
while (queue.Count > 0)
{
var current = queue.Dequeue();
if (current.Vertex == to && current is { DacVisited: true, FftVisited: true })
{
counter++;
continue;
}
foreach (var next in current.Vertex.To)
{
var nextVertex = next;
while (nextVertex.To.Count == 1 && nextVertex.To[0] != to)
{
nextVertex = nextVertex.To[0];
}
queue.Enqueue(
(
nextVertex,
current.DacVisited || nextVertex.Name == DacKey,
current.FftVisited || nextVertex.Name == FftKey
));
}
}
return counter;
}
private static IEnumerable<List<Vertex>> GetAllPaths(Vertex from, Vertex to)
{
Queue<List<Vertex>> queue = new();
queue.Enqueue([from]);
while (queue.Count > 0)
{
List<Vertex> currentPath = queue.Dequeue();
var lastVertex = currentPath.Last();
if (lastVertex == to)
{
yield return currentPath;
continue;
}
foreach (var next in lastVertex.To)
{
if (currentPath.Contains(next))
{
continue;
}
var newPath = new List<Vertex>(currentPath) { next };
queue.Enqueue(newPath);
}
}
}
private sealed record Vertex(string Name)
{
public List<Vertex> To { get; } = [];
public override int GetHashCode() => Name.GetHashCode();
}
}

View file

@ -2,9 +2,10 @@ using AdventOfCode2025.Inputs;
namespace AdventOfCode2025.Solutions; namespace AdventOfCode2025.Solutions;
public abstract class Solution(int day, int part = 1) public abstract class Solution(int day, string tag = "1")
{ {
protected readonly Input Input = new(day, part); protected readonly int Day = day;
protected readonly Input Input = new(day, tag);
public virtual string SolvePart1() => "Part1 is not solved"; public virtual string SolvePart1() => "Part1 is not solved";
public virtual string SolvePart2() => "Part2 is not solved"; public virtual string SolvePart2() => "Part2 is not solved";
} }