This commit is contained in:
Acvaxoort 2023-12-20 20:11:35 +01:00
parent 867a987508
commit 73f6305410
5 changed files with 1064 additions and 0 deletions

54
day19/Cargo.lock generated Normal file
View File

@ -0,0 +1,54 @@
# This file is automatically @generated by Cargo.
# It is not intended for manual editing.
version = 3
[[package]]
name = "aho-corasick"
version = "1.1.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "b2969dcb958b36655471fc61f7e416fa76033bdd4bfed0678d8fee1e2d07a1f0"
dependencies = [
"memchr",
]
[[package]]
name = "day19"
version = "0.1.0"
dependencies = [
"regex",
]
[[package]]
name = "memchr"
version = "2.6.4"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "f665ee40bc4a3c5590afb1e9677db74a508659dfd71e126420da8274909a0167"
[[package]]
name = "regex"
version = "1.10.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "380b951a9c5e80ddfd6136919eef32310721aa4aacd4889a8d39124b026ab343"
dependencies = [
"aho-corasick",
"memchr",
"regex-automata",
"regex-syntax",
]
[[package]]
name = "regex-automata"
version = "0.4.3"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "5f804c7828047e88b2d32e2d7fe5a105da8ee3264f01902f796c8e067dc2483f"
dependencies = [
"aho-corasick",
"memchr",
"regex-syntax",
]
[[package]]
name = "regex-syntax"
version = "0.8.2"
source = "registry+https://github.com/rust-lang/crates.io-index"
checksum = "c08c74e62047bb2de4ff487b251e4a92e24f48745648451635cec7d591162d9f"

9
day19/Cargo.toml Normal file
View File

@ -0,0 +1,9 @@
[package]
name = "day19"
version = "0.1.0"
edition = "2021"
# See more keys and their definitions at https://doc.rust-lang.org/cargo/reference/manifest.html
[dependencies]
regex = "1.10.2"

797
day19/input.txt Normal file
View File

@ -0,0 +1,797 @@
brk{s<3727:A,m>3500:A,s<3845:A,A}
lt{a<982:A,s<274:vg,R}
cms{s>621:A,x<502:dz,m<3295:R,nzd}
mfd{a<2692:A,R}
xcv{x>3826:R,a<1965:A,A}
gtr{m<2488:R,s>1479:R,x<766:R,R}
cm{m<2381:ff,m<3360:A,a<210:R,dd}
fks{m>3641:llh,x>3409:xr,s>2575:xh,kvx}
qpk{x<1633:A,x>1755:R,A}
qtr{a>671:A,A}
fdj{s<2953:mpr,gx}
sdh{x>3471:pq,bqm}
kkq{m<3791:R,a<1960:R,m>3871:xck,A}
fxf{a>2645:R,a<2563:R,s>1762:A,A}
mzh{a<3350:R,R}
xd{m<3532:R,A}
rcr{s>340:A,x>158:A,R}
xmj{m<2852:mqq,pxh}
ccj{s<3489:R,m>1373:fl,R}
dm{x>2462:R,m<3451:A,A}
tvg{m<407:A,A}
sl{s<3430:A,A}
csm{m<2603:kz,m>3229:pdr,x<2006:pn,kt}
vp{m<1377:R,R}
fz{s<3314:A,R}
cl{s>2425:bm,A}
mt{x>3089:fks,s<2167:nhd,ck}
hdj{a>2641:rld,m>501:jcg,x<790:kpb,hzs}
fr{s>1476:A,m<2837:A,s<840:R,cn}
prt{x>1207:fqk,x<1076:R,R}
mhd{x<215:A,a<614:A,x<473:A,A}
qg{s<819:chx,tz}
xzs{a>3775:R,a<3614:tkl,x<440:dxb,zff}
xjx{m<2030:A,a<1186:R,s<3638:R,R}
srj{x<1029:slm,a<390:rf,s>2991:dl,cl}
tm{m<2243:bn,jfc}
pc{m<3591:zjn,m<3847:A,a>2274:R,hvg}
crq{x>2138:R,A}
fl{m>1681:A,R}
mxd{a>2884:pkc,s>2033:hnt,vpk}
gr{a>3121:R,R}
bpv{s>1041:A,s>841:R,R}
kft{a>2883:rhq,a<2461:ns,xmj}
qch{s>1420:R,A}
qq{s<3024:A,a<1621:R,x<3397:R,A}
hf{m<1930:bf,dp}
lb{s>3448:A,R}
zmv{s<3274:R,x>3417:R,A}
ctr{m<3609:R,a<1962:R,x<2540:A,A}
hkp{s>1646:A,srp}
mvx{m>2859:R,x<3488:A,R}
vhb{a<363:qch,A}
bp{s>2455:R,dsv}
hsh{s<530:hxt,s<1090:xrl,jtv}
bx{s<2039:A,a<3303:R,m>2291:R,R}
pnd{a<2844:rgz,m<2449:A,m>2479:jn,gqk}
qlk{s>2611:A,s<2092:A,A}
vqb{a>443:A,A}
jnk{s<2464:bbp,fz}
qf{s>2452:A,x<3493:R,a>2585:R,A}
hhf{s>3215:A,s>3204:R,R}
fqk{s>3289:A,A}
ts{s<637:vqb,a>588:sb,rl}
fqr{x>2070:R,s<2020:R,m<253:kk,R}
xhf{s>2527:tqf,a<1637:jpp,s>1510:stv,A}
vv{x<236:A,A}
phz{x>1705:A,bcs}
rpq{a>371:A,a<189:A,s<1681:A,A}
ksd{x<861:gnl,m<1879:bd,x<1267:R,A}
llh{s<2375:R,m>3826:R,a>3360:dhv,zmv}
dl{x<1110:gn,R}
kc{s<2887:bcz,x<730:qlq,gjq}
rnv{a>2030:R,A}
jfz{m<3510:A,x<232:tbr,R}
vz{m>3640:A,x>486:R,R}
rh{x>2717:lp,dsz}
vb{m>3771:R,x<1919:A,R}
pfr{s<3524:krf,x<1618:R,R}
rsd{a<2380:R,m<3388:jp,fn}
gx{s>3460:cf,a>961:xt,m<2457:rqx,hg}
qpz{x<571:A,m<900:R,a>1295:R,R}
ctj{a<2109:rcr,R}
cg{a<801:nrl,m<655:ljs,xq}
tvv{a>3123:dx,m<3516:A,lql}
pbn{m<2844:A,m<2979:R,x<869:czg,R}
psc{x<2808:fls,fd}
mfn{s>361:gbb,mmx}
rq{m>3477:A,bdt}
qjf{m>3469:jf,a>3075:R,s<3247:zfg,R}
pt{a<943:A,s<2493:R,A}
nqk{x>1088:A,m<3482:cjv,R}
nm{x<3016:A,R}
lrn{m>2221:R,s<944:R,R}
nx{x<1228:R,A}
dd{x<3424:R,x>3749:R,R}
kvn{m<3865:A,s>2276:A,s<1944:A,A}
fdd{s>1070:A,s<510:R,A}
db{s>3186:dpk,a>267:gzv,a<165:nqj,cm}
hzl{x<3742:tds,A}
ng{m<3172:xbl,m>3206:nfn,A}
tx{s>3352:A,x<761:nvq,qqb}
qk{x>1230:sv,s<2839:cc,s>3467:kqx,nqk}
fdg{x>2748:A,A}
hdp{m>194:fc,hn}
kfn{s>1076:sqq,x<3311:R,A}
kqx{a>2382:qrf,x<1127:A,A}
xcj{m<1971:A,R}
xbh{a>2219:A,A}
zff{m>3648:A,R}
gb{m>3833:A,R}
fm{s>3311:sdh,s>2946:db,vx}
hvm{x>852:A,A}
vvl{a>3121:R,x<1888:A,R}
mqq{x>649:A,a<2667:djs,s<2270:nrh,R}
lvr{x>3164:A,A}
mm{m>1622:R,m<1576:R,a<3617:R,A}
dnl{m<1785:pdh,x>1500:qh,m>3058:gk,fmj}
znf{a>3644:R,m>616:R,R}
jx{s<2270:dc,mhd}
qkm{m<3068:A,m>3082:A,s<2345:A,A}
vpk{x<476:R,s>906:lqh,s<543:R,A}
np{a<2600:A,A}
sdc{x<3298:A,x>3586:A,R}
gd{a>2233:A,rnr}
pxh{x>956:pbh,x<633:tpx,s>1719:fml,mfd}
ccb{x>1805:zzt,gtc}
fjj{m<3563:R,a<3062:A,R}
bxd{a<2061:dht,x<1214:ddg,s>713:phn,xxm}
gc{a>3697:A,x>1586:R,A}
pq{m<2538:R,brk}
st{s>985:A,R}
sj{s<2968:qtr,s<3559:A,s<3717:xjx,A}
cc{x<1067:xtc,m>3623:R,R}
mf{m<640:A,R}
jh{a>1578:A,a>1429:kd,gsd}
kk{m>146:A,x<1964:A,a<2410:R,R}
tg{s<2462:A,vh}
gv{m>886:R,A}
pfs{x<1627:A,x<1710:R,m>3873:A,R}
cv{s<841:A,m<3680:R,A}
fsl{s>594:cz,m<3496:vt,x<3596:nb,cs}
sk{m<420:R,R}
fd{x>2977:R,x<2893:A,x>2941:A,A}
xtc{m>3658:A,s>1963:A,R}
fv{m>1518:tb,R}
rzz{a>2302:R,a>2054:A,x>2519:ctr,R}
tl{x>1375:mqn,x>1305:qcv,A}
mfj{s>525:A,R}
tpx{a>2714:A,R}
jn{a<3598:R,R}
lh{s<765:fjj,x<2579:R,a>3123:A,A}
vl{m<640:A,A}
nkb{x>1198:csm,s<1799:qg,x>616:tgp,fdj}
qcv{s<2985:A,A}
khd{s>1945:A,x>438:R,x>179:R,R}
hg{a<485:A,R}
cz{m<3595:kv,A}
mp{m>2937:R,s<2500:A,fdq}
kpb{m>238:rv,m>140:R,rjv}
pns{m>1520:kj,s>2684:pfr,jm}
qrh{x>2812:R,R}
rm{x>723:sxc,bb}
vk{m>877:A,x<981:A,a<2928:A,R}
hbn{m<831:tvg,R}
jrl{s>3423:A,R}
rjv{s<2026:R,R}
sgk{a<1410:R,A}
xh{m<3280:A,m<3424:lb,x>3301:A,lvr}
gbb{a<2591:A,m>3659:A,R}
kz{m<1495:dg,s>2364:sj,hh}
lpc{a<1432:xp,x>3244:kr,hp}
jvz{s<3621:R,R}
tkl{m<3638:A,A}
vm{s<1460:R,x<567:R,R}
ph{s<2907:A,a>1552:R,x<3818:R,R}
czg{m<3013:R,x<517:R,m>3043:A,R}
sr{x<3617:R,x<3755:A,x>3887:A,A}
gl{m<3472:R,a<2437:R,x>338:R,R}
dhv{x>3631:A,x>3309:R,m<3743:A,R}
zj{x<2822:R,R}
zc{x<2284:R,R}
tk{m<243:R,a>762:A,A}
fn{s<1386:A,a<2507:A,x>1878:R,R}
pct{a<796:R,R}
gqk{a>3284:R,m>2462:R,m>2455:A,A}
pkc{s<1958:R,s>2881:kh,s<2559:A,R}
fst{s>907:R,s<859:A,A}
dr{m<1214:zkm,x<1089:mxd,s<1851:bcc,pns}
rsx{m>1063:R,s<2954:R,R}
jqc{x>3241:vc,A}
rgz{x>558:R,m>2449:R,m>2406:R,R}
pdh{x>2318:vnv,m>793:dr,a<3139:cq,frf}
ps{x<2979:A,A}
lj{m<1381:R,m>1474:R,R}
pzr{s>2658:R,A}
mg{m<3270:R,s<324:R,s>434:A,R}
qqc{m<3150:sp,x>1498:R,m>3190:A,kg}
srp{s>918:A,m>3662:R,m>3473:R,R}
gpt{s<362:A,m<1712:zq,qc}
xt{x<319:R,s<3141:tv,m>2094:R,R}
css{x>562:A,x>354:R,A}
tpm{a<111:R,R}
gzv{a>336:R,A}
cn{m<2915:A,x<1526:A,s<1244:R,A}
zfg{x>459:R,m<3274:A,A}
bjn{m<513:nnv,xmv}
gz{a<2008:A,x<3451:R,s<2017:A,A}
lph{s<3046:R,A}
bf{m<1858:hb,a>3679:A,A}
kh{x>519:A,A}
bn{x>1011:A,m<1155:nmp,qvd}
jbq{x<483:R,A}
lql{x<1189:R,s<794:A,s<1096:R,A}
sqq{m<344:R,R}
lk{x>1380:R,x>555:A,rj}
bxb{s>964:A,m<2003:mfj,x>560:R,R}
hh{m<2169:R,m>2318:A,lrn}
pk{x>383:R,x>129:A,m<708:R,A}
kls{x<895:R,s<2440:A,a>1576:R,A}
tb{a<1584:A,R}
bbp{m<2468:R,m>2511:R,s>1950:R,A}
stq{s>1124:dhj,x>3727:ts,pm}
jjf{a>2228:R,s<676:R,a>2168:R,R}
dxq{m<1766:A,x<3488:A,x<3716:A,A}
scv{m>1319:A,s>1706:A,R}
cb{a>954:R,s<3281:A,A}
kj{s<2613:R,a>2986:mm,bg}
rhc{s>496:R,s>252:A,A}
kn{s<2246:A,A}
bqm{a<174:ps,x>2831:A,pb}
nv{x<846:nr,zl}
tp{m<3318:R,a>894:R,s<2534:R,R}
srq{s<2858:xg,hzm}
nr{a>3476:xzs,s>2508:qjf,md}
gj{x<2161:R,A}
czm{s>222:A,m>3220:A,R}
mqn{m<3143:A,R}
js{m<2226:dlt,zhz}
qpb{m<126:A,m>255:A,a<2135:R,R}
zzt{x>1994:gj,a>2235:R,s>2411:R,R}
kd{s>3005:A,a>1499:R,A}
lr{a>2103:xcz,kfn}
sxc{x>889:R,s>3111:R,x>824:A,R}
tf{s<2663:A,s>2689:A,m<851:R,A}
qc{a<351:A,x<934:R,R}
gbr{a>705:cb,m<2130:sh,A}
ljs{m>294:A,A}
nb{m<3714:A,s<381:jdr,gb}
rld{x<607:hlt,m<447:R,R}
rk{m>3616:A,s>3146:A,s>2420:A,A}
ddn{a<370:R,R}
hl{x>3111:prr,m>1911:gbr,ccj}
bk{s>3269:bt,x>3219:lph,gm}
bb{m>3596:R,A}
pp{m<3651:bkz,frs}
qv{x>982:qk,znt}
tqf{x>2607:R,x<2521:R,A}
mht{a>2451:A,m>1438:A,m>1341:R,R}
sgs{m>3460:A,m>3201:shc,A}
mfm{a>2176:R,s<614:R,A}
lx{a<1079:A,R}
nqj{s>3042:R,x>3012:R,qrh}
ddd{m>3779:R,A}
kt{x<2175:mp,ckn}
dxb{x>170:A,A}
zfb{a>421:R,s>878:A,R}
dlt{m<2140:np,s<1831:R,xrr}
dx{a>3306:A,m>3568:R,a>3212:A,A}
snv{x>641:R,R}
qvd{m<1570:R,A}
zd{s>2964:A,s>2728:A,R}
ff{a<230:A,R}
sg{s<993:A,m<849:A,A}
nsf{x>3378:stq,a<715:snm,dh}
vt{a>2421:mg,czm}
nvq{m>3480:A,R}
jcg{m>647:A,x>816:R,m>579:jbq,A}
znt{s<2517:vr,x<552:jfz,a<2437:rm,tx}
cjj{s<2391:R,rsx}
dp{s<2929:fk,s<3614:R,m>2016:xmc,A}
hqd{x>3367:R,s>1503:A,R}
hk{s<277:R,s>483:R,m>1358:R,btx}
sgg{m<2348:js,jzh}
nfn{a>2132:R,x>1793:R,A}
ftj{x<1389:R,R}
xcz{m<466:A,a<2325:jjf,R}
kzs{a>1910:A,x<951:R,A}
xxm{m>3336:xcs,a>2151:A,ftj}
mnn{s>3268:A,A}
rl{m>1634:A,A}
crp{s>557:R,R}
fkh{a<1419:pz,rs}
xxb{a<2370:A,A}
mh{m>3820:R,x<2083:A,a>2996:R,A}
fgb{s>2569:A,x>2450:A,R}
nk{a<162:A,m<2726:frn,xpj}
fc{x>1147:rvm,R}
lm{m<3260:ng,rsd}
cf{s>3729:rbt,m<2604:jvz,mq}
dcf{x>3774:R,s<3116:R,R}
lxx{x>1530:sl,x>518:vk,R}
tgp{x<868:kc,a<752:srj,a<1341:tm,dk}
kxv{a>891:R,R}
zq{m<604:A,A}
in{a<1805:pkg,dnl}
zjn{m>3311:A,R}
qqb{s<2931:R,x<851:R,R}
pkg{x>2464:ljb,nkb}
xg{a>149:A,m>2665:R,A}
hc{x>279:cms,s<810:ctj,ttg}
pm{s<517:R,m<1522:zfb,A}
bcc{a>2934:xlj,x<1869:tkh,pnl}
dj{m<103:R,m<138:R,A}
nhd{x<2267:px,a<3424:lh,x>2623:szv,dm}
bz{s>1704:qkp,x<3526:gr,R}
rlz{a<3140:A,a>3293:R,x<297:A,R}
vr{m<3643:R,a<2289:khd,htn}
xr{a>3318:R,s<2341:A,s<3166:fcb,tn}
cnp{m>911:R,m>568:A,tq}
cq{x<1353:hdj,kx}
zf{x<3828:A,a>1730:A,R}
vx{s>2774:srq,m<1675:jt,s<2684:hv,nk}
fnv{x>1143:R,R}
xm{s<2292:R,R}
kkp{m<2571:R,s<2085:hx,m>2800:gvm,R}
hv{s<2661:A,m>2764:A,A}
hzs{a>2161:R,x>1063:A,rnv}
dh{x<3018:xdd,jqc}
kvr{s<2242:vv,pk}
hxt{a>2221:R,A}
fct{m>3536:R,a<2575:A,R}
ndh{m<972:znf,A}
mpr{m>2022:jx,a<771:tg,s<2472:kvr,cnp}
cp{m<2848:mzh,m>2927:gbz,A}
nzd{s>238:R,x>606:R,x>549:R,R}
mmx{x>1313:R,m<3589:R,A}
vbr{a>3008:A,s<584:A,s<808:R,R}
pmh{x>3296:R,m<489:sk,mf}
fjg{a<1047:ddn,m<3101:qkm,a>1301:A,qnd}
msp{m<717:gjj,a<3625:fgb,bxp}
snl{x>3421:A,m<252:A,R}
jdt{a<3134:qcg,s>1586:hf,cxg}
xmc{x<570:A,x<1144:A,m>2053:R,R}
kx{m>382:phz,x>1822:fqr,ztt}
gbz{x<965:A,m<3013:A,m>3029:A,A}
mx{x>3328:hzl,a<3372:jmc,x>2691:ndh,msp}
frn{x<3473:A,a<285:A,R}
bcs{x<1512:A,m>603:R,A}
ttg{a>2011:R,A}
hp{m>1412:psc,x>2760:hbn,xhf}
nz{s>3208:R,s<2786:R,s>2974:A,A}
krf{s<3091:A,m>1327:A,A}
bcz{x>711:pt,a>1188:A,s<2432:A,A}
rnr{a<2207:R,R}
rj{x>314:A,s<912:A,a>3832:A,R}
dg{s>1406:A,zsq}
mzv{x>3263:R,R}
qcg{x<980:lsp,qx}
zhz{a>3088:jzq,kp}
mzf{x>1264:A,R}
btx{m>888:R,x>745:A,R}
jtv{x<1844:mlv,x>2006:R,x>1914:A,htc}
dgl{a<3453:R,s>2663:A,A}
rp{m<2155:qpz,s<1318:sn,s<1583:css,R}
tc{s<2033:A,a>1598:zf,a>1490:ph,dcf}
hr{s<3608:R,x>447:R,R}
rtb{m<2921:A,R}
djs{x<335:A,s<1702:R,m>2691:A,A}
nh{x>2140:R,m>1477:R,x>2039:A,A}
kf{a<2025:R,s<3004:A,A}
xlj{m<1564:lj,m>1698:tj,a>3333:gc,jc}
jfc{a>995:R,x<1009:A,x<1095:A,tp}
tkh{s>682:xxb,s>330:crp,a<2194:rz,mht}
gn{x<1066:A,R}
rhq{s>1782:cp,pbn}
vj{s<3790:A,m<339:R,x<2823:A,A}
tps{x>674:A,s<3265:A,A}
szv{x<2868:ft,x>2976:vkh,s>841:R,rhc}
trj{a<2273:jlj,gs}
skv{a<2338:A,s>2958:R,s<2678:A,R}
xmv{s<2988:A,s<3065:klm,kxv}
hx{m>2810:R,A}
sc{s<2986:A,R}
zqz{s<3128:fg,x>611:jrl,A}
frf{s<1691:jl,m<423:hdp,vrr}
gsd{m>2232:R,s<2763:R,A}
shl{a<2163:rd,x>3349:bp,nd}
kr{x<3615:qmz,tc}
bc{x<3311:A,s<3351:kf,xd}
xgj{s>3591:A,m<548:R,x<3697:R,A}
pnl{a>2241:nh,rcn}
chx{x<575:lt,a<897:gpt,x>917:fkh,hk}
fhs{m>700:R,A}
nrh{x>238:R,a>2784:R,a<2732:A,R}
hrz{x>1950:hm,a<902:A,m>3685:R,R}
pxb{x>1142:mzf,gdx}
xvz{s>561:ccg,R}
xcs{s<422:A,a<2161:R,A}
rx{a<3008:A,m<901:R,A}
tbr{a<2365:R,s>3452:A,s>2930:A,R}
frp{x>900:htl,s>573:sq,kkq}
md{s>1652:vz,s<1077:vbr,rlz}
ms{a>2247:fct,a>1974:A,s>2168:A,zc}
frs{x<3540:kvn,m>3878:A,xcv}
dgd{s>3214:hr,m<644:tnm,x>467:mr,R}
lq{s<3221:sc,m<3569:A,x<3563:lvc,ddd}
nnv{s>2853:tk,s>2735:snl,m>327:A,fln}
qx{a<2498:R,a>2737:A,m<1893:fxf,R}
xrr{s<3174:R,m>2190:A,x>908:A,R}
hvg{a<1985:A,A}
htl{a>2010:R,A}
lsp{s<2234:xcj,m>1926:A,skv}
rd{s<2503:R,x<3017:fdg,A}
jds{x>1157:A,ssh}
ddg{m>3417:mfm,x>942:ml,s<466:hvm,A}
kv{a<2344:A,A}
xdd{m>2260:A,a<992:gv,scv}
jc{a<3114:A,R}
sql{s<3259:br,a>3232:ggp,mh}
snm{m>2141:vhb,m<1213:pv,nhb}
vkh{s<955:R,s<1453:A,A}
vnv{a>2559:mx,m>739:shl,s<1629:lr,cht}
bkz{m<3362:gz,a>1950:hsz,R}
slm{x<964:R,s>3235:vp,x<998:R,A}
ft{m>3486:R,A}
xck{x>451:A,A}
hsz{a>2033:A,a<2000:A,m<3504:A,A}
vh{a>503:R,s<2712:R,s>2843:A,R}
pn{m<3019:fr,s<1453:qqc,x<1554:tl,fjg}
px{x<1919:A,a>3411:crq,R}
qkp{a<2827:A,m<2764:A,A}
hn{a<3478:R,dj}
gk{a>2753:nv,s>1384:qv,qtk}
ggp{x>2183:R,A}
tz{a>850:rp,nxm}
jzh{x<856:pnd,s<1629:xvz,jnk}
rvm{x<1863:R,m<286:A,A}
kcm{x<915:kls,qlk}
xp{s>2278:zk,hq}
fls{a<1668:R,A}
kg{a<833:R,s<541:R,A}
td{s<1606:fsl,s>2769:qs,a<2163:pp,dqq}
cxg{m<1949:ksd,a>3471:bxb,a<3282:ch,snv}
jkx{s<1504:A,kn}
rn{a<535:R,A}
qh{m<3052:rh,a>2744:mt,x>2911:td,pj}
nrl{x>3482:xgj,s>3672:vj,a<577:A,vl}
cht{m>330:pmh,bfr}
vg{x>366:A,R}
fcb{s>2877:R,a<2979:A,m<3367:A,A}
rv{s>2225:A,a<2143:R,A}
fdq{x>2118:A,A}
dz{a<2077:A,m>3350:A,s>221:R,R}
cs{m>3766:szs,x<3765:A,R}
jlj{x>2392:A,x>2372:A,R}
qrf{m>3565:R,s<3757:R,R}
pb{a>351:R,a>257:A,A}
qnd{a>1151:R,x<1745:R,x>1864:R,A}
ck{m>3671:sql,sgs}
mq{a<1025:A,s>3611:R,s<3520:R,R}
htn{x>503:A,m>3852:R,s>2112:R,A}
pz{a<1213:R,s<531:A,A}
shc{a<3329:R,s>2874:A,s<2537:A,R}
gnl{a<3649:A,R}
dqq{a<2368:gd,s<2264:rq,bcq}
qr{s>3033:R,s>2249:R,s>1972:R,R}
kp{a<2531:R,s<1615:R,a>2828:R,R}
xpj{s>2734:A,m<3285:R,x<3369:A,R}
sbs{x>2566:pc,x>2455:rzz,x>2351:trj,ms}
sv{a>2152:R,a>1957:R,s<2504:A,ktn}
ch{x<818:R,s<530:A,A}
dc{m>2856:A,x>364:R,a>679:A,R}
ccg{a>2984:A,a<2383:A,R}
kzq{a>2303:A,xbh}
tds{m<1004:R,s<1678:R,x<3470:R,R}
stv{x<2625:R,s>1999:R,m>887:A,R}
tn{m>3378:R,a>3123:A,A}
xrl{x>1894:cv,a>2121:A,x<1674:mn,A}
rql{x<292:A,A}
bm{s<2693:R,a>530:A,A}
jf{s<3466:A,m>3716:A,R}
rz{s<154:R,A}
nt{m>1697:R,R}
sft{s>3185:A,x>1604:dgl,x>1373:xm,pzr}
lvc{s>3545:R,s>3369:A,A}
rf{a<197:tpm,s>2658:A,s<2248:R,A}
tnm{m>562:R,x<697:R,x>882:R,A}
nd{a>2411:zj,x>2779:nm,R}
jzz{x>717:xf,x>282:A,m>3530:st,bpv}
hm{m<3674:A,s>3421:R,a<946:A,A}
dht{a>1916:R,a>1856:R,m>3310:fnv,A}
lv{a>1547:R,nt}
jzq{m>2270:R,A}
pbh{a>2740:A,R}
rqx{m>877:A,m<466:rql,fhs}
jm{m<1319:R,m>1434:A,vvl}
bd{x<1278:R,R}
phn{s>1047:R,x>1340:R,A}
htc{s<1275:R,a<2126:R,m>3702:A,R}
bs{m<2785:vm,kzs}
tv{s<3016:R,m>1424:R,A}
mn{m<3801:A,R}
ndr{a<2451:A,R}
gjq{s<3377:mqf,R}
xdq{x<1040:R,R}
tq{m>255:A,x<241:R,m<126:R,A}
ktn{m<3428:R,R}
sn{a>1291:R,R}
lqh{s>1302:A,A}
bdt{x<3511:R,R}
bfr{a>2244:A,x<3334:A,a>1974:qpb,qr}
fp{m>3697:R,a>2058:R,x>1621:R,R}
xq{m>820:mzv,m<714:A,sdc}
jl{a<3597:xdq,lk}
dsz{a<2722:kkp,bx}
nhb{a>443:R,m<1590:xjt,A}
qtc{m<857:A,A}
pv{m>556:qtc,rpq}
lp{m>2290:bz,lgs}
ml{s>883:A,a<2164:A,s<393:A,A}
fg{x<893:A,R}
kvx{x<3291:A,x>3337:hqd,x>3313:fdd,mql}
mqf{s>3110:R,x<798:R,A}
kmt{s<1459:R,m>3633:vb,A}
bcq{s<2597:qf,A}
fk{m<2037:A,R}
hnt{a<2261:R,x<687:A,x<935:A,R}
pj{x>2249:sbs,m<3497:lm,s>1474:ccb,hsh}
cjv{a>2375:R,a>2069:A,R}
bg{x<1849:A,a>2393:R,a<2075:R,R}
pdr{s>2635:hrz,a>617:kmt,x>1754:jkx,hkp}
fmj{m>2534:kft,m>2093:sgg,jdt}
tj{x<1824:A,m<1745:R,x>2008:A,R}
hlt{a>2845:R,a>2760:A,x>221:A,A}
ljb{a>1200:lpc,s<2627:nsf,a<441:fm,gfb}
sh{s<3242:A,s<3602:R,R}
zl{s>2245:prt,s>1272:pxb,a>3502:jds,tvv}
nxm{s>1200:gtr,s<965:fst,R}
nzs{m<882:sg,m>905:nx,x<886:R,R}
ssh{x>965:R,a<3788:A,A}
mql{x>3299:A,a>3451:A,A}
vrr{x<1239:dgd,sft}
gxq{m<3686:ndr,m>3886:A,x<829:A,R}
xf{s<1136:R,A}
jp{m<3305:R,R}
bt{x>3254:sr,s<3547:R,s<3826:A,R}
qtk{a>2269:rjn,m>3609:frp,x>707:bxd,hc}
fml{x>777:A,R}
lgs{a>3182:A,x>3362:R,m>2105:A,A}
szs{m>3858:R,a<2142:A,R}
gjj{x<2561:A,a>3790:A,R}
mlv{s>1239:A,m<3825:A,x<1728:A,A}
zsq{a<619:R,x<1745:A,x<2145:A,A}
qmz{m<2523:R,s<1599:R,qq}
zk{x<3150:R,zd}
rs{a>1601:A,R}
qs{a>2415:lq,bc}
gdx{s<1774:R,A}
jpp{m<764:R,m<1091:A,R}
jt{x>3303:R,x<2817:ttm,s<2710:tf,A}
klm{s>3017:A,m>799:A,m<681:R,R}
ztt{m>192:R,a>2369:R,qpk}
fln{x<3047:R,m>193:A,a<853:R,R}
br{x<2460:A,R}
hq{m<1545:A,s>849:rtb,mvx}
rbt{m<2269:A,x>339:R,a<1074:R,R}
ns{s>2422:zqz,a>2120:kzq,bs}
dk{x>1017:jh,x>954:lv,s>3140:fv,kcm}
sb{s>897:R,s<753:R,R}
jdr{s>209:R,m<3863:R,m<3923:R,A}
rjn{s>679:jzz,x<530:gl,x>1059:mfn,gxq}
gfb{m>2467:bk,m>990:hl,s>3218:cg,bjn}
ttm{s<2678:R,A}
gvm{a>2405:A,s<2926:A,m<2950:A,A}
gtc{a<2342:fp,m<3796:rk,pfs}
hb{m<1813:R,A}
zkm{m>940:cjj,s<2335:nzs,lxx}
sp{s<869:R,m>3063:R,a<1081:R,R}
gs{s<1767:A,A}
rcn{x>2139:R,R}
dpk{a>173:R,s>3240:mnn,hhf}
vc{a<1019:R,R}
prr{a>765:R,dxq}
qlq{s>3515:R,a>727:A,tps}
hzm{m>1445:R,R}
sq{m>3864:A,m<3760:R,x<438:R,A}
xjt{x<2801:R,a>256:R,R}
bxp{x>2497:R,R}
mr{m>730:R,R}
gm{s<2923:pct,m<3485:R,x>2891:R,A}
dsv{s>1297:A,m<1434:R,m>1572:R,A}
xbl{a<2315:A,a<2548:A,s>2455:R,A}
jmc{s<2500:rx,a<2842:R,x<2783:A,nz}
ckn{a<715:A,s>1703:sgk,lx}
dhj{s>1705:A,rn}
nmp{x<937:A,x<974:R,a>973:A,A}
{x=97,m=3034,a=520,s=1230}
{x=48,m=2597,a=1043,s=2427}
{x=520,m=825,a=547,s=205}
{x=90,m=1232,a=115,s=882}
{x=1532,m=1668,a=2430,s=2369}
{x=2095,m=753,a=347,s=1636}
{x=15,m=3389,a=126,s=2070}
{x=793,m=1658,a=310,s=2364}
{x=959,m=1660,a=1185,s=681}
{x=1109,m=1979,a=109,s=336}
{x=415,m=424,a=1721,s=270}
{x=323,m=1374,a=905,s=1917}
{x=1450,m=1674,a=3109,s=2981}
{x=205,m=89,a=1825,s=443}
{x=92,m=70,a=712,s=655}
{x=209,m=1050,a=320,s=1643}
{x=488,m=834,a=1222,s=520}
{x=32,m=746,a=577,s=133}
{x=1206,m=740,a=223,s=1454}
{x=109,m=978,a=3025,s=222}
{x=149,m=1568,a=186,s=367}
{x=49,m=680,a=375,s=113}
{x=1071,m=321,a=194,s=866}
{x=1099,m=246,a=767,s=3686}
{x=463,m=1245,a=132,s=180}
{x=2031,m=2121,a=127,s=99}
{x=22,m=384,a=2498,s=1219}
{x=1647,m=1199,a=1182,s=450}
{x=1383,m=1078,a=240,s=1829}
{x=481,m=995,a=475,s=428}
{x=1461,m=1352,a=186,s=246}
{x=871,m=1677,a=41,s=2389}
{x=26,m=3600,a=1,s=2609}
{x=229,m=498,a=633,s=325}
{x=1893,m=314,a=678,s=505}
{x=3819,m=1,a=101,s=734}
{x=1247,m=520,a=564,s=390}
{x=134,m=1176,a=275,s=1027}
{x=873,m=2365,a=667,s=659}
{x=271,m=189,a=332,s=826}
{x=1928,m=972,a=191,s=2033}
{x=403,m=379,a=3351,s=833}
{x=629,m=690,a=486,s=1}
{x=360,m=3135,a=352,s=583}
{x=1066,m=889,a=949,s=402}
{x=1953,m=229,a=1595,s=179}
{x=861,m=2271,a=700,s=20}
{x=9,m=1627,a=81,s=2023}
{x=313,m=1388,a=667,s=1091}
{x=1137,m=1665,a=124,s=626}
{x=1061,m=429,a=54,s=1830}
{x=815,m=51,a=550,s=1247}
{x=124,m=952,a=897,s=1886}
{x=680,m=148,a=2408,s=2}
{x=3132,m=1257,a=1604,s=1052}
{x=698,m=749,a=81,s=59}
{x=2834,m=262,a=1239,s=2597}
{x=191,m=218,a=444,s=53}
{x=1740,m=750,a=46,s=335}
{x=468,m=531,a=2898,s=1772}
{x=655,m=1360,a=2860,s=973}
{x=854,m=529,a=1226,s=550}
{x=486,m=785,a=2418,s=614}
{x=534,m=1710,a=2052,s=594}
{x=116,m=2580,a=27,s=428}
{x=778,m=1090,a=1359,s=1328}
{x=405,m=2739,a=3242,s=2159}
{x=34,m=2314,a=1055,s=857}
{x=1110,m=1263,a=216,s=2526}
{x=1177,m=284,a=1042,s=1597}
{x=251,m=3649,a=1844,s=1427}
{x=872,m=1048,a=1991,s=411}
{x=2299,m=154,a=113,s=2699}
{x=399,m=432,a=939,s=7}
{x=2885,m=756,a=344,s=96}
{x=1945,m=2586,a=1677,s=787}
{x=1497,m=1101,a=1879,s=349}
{x=1066,m=938,a=1124,s=27}
{x=285,m=370,a=2779,s=1235}
{x=210,m=203,a=1392,s=2350}
{x=3118,m=2349,a=342,s=108}
{x=1181,m=668,a=1853,s=2686}
{x=143,m=662,a=404,s=37}
{x=3342,m=2811,a=432,s=630}
{x=539,m=432,a=160,s=465}
{x=378,m=752,a=1528,s=32}
{x=579,m=903,a=1012,s=807}
{x=5,m=606,a=2425,s=2214}
{x=409,m=493,a=1110,s=3168}
{x=1662,m=1930,a=20,s=1684}
{x=49,m=2284,a=528,s=29}
{x=106,m=1201,a=1842,s=572}
{x=2,m=1241,a=489,s=2092}
{x=747,m=774,a=1023,s=51}
{x=766,m=2744,a=1260,s=35}
{x=225,m=85,a=313,s=203}
{x=1065,m=3852,a=3001,s=224}
{x=1080,m=68,a=2236,s=579}
{x=1202,m=709,a=650,s=113}
{x=1368,m=50,a=1621,s=72}
{x=142,m=761,a=557,s=154}
{x=1898,m=77,a=380,s=707}
{x=1022,m=155,a=3318,s=556}
{x=376,m=1130,a=1293,s=7}
{x=268,m=873,a=408,s=453}
{x=2057,m=1316,a=1370,s=1291}
{x=81,m=285,a=1445,s=2015}
{x=2449,m=725,a=1567,s=1198}
{x=2550,m=779,a=178,s=9}
{x=719,m=574,a=3040,s=2694}
{x=272,m=92,a=1526,s=811}
{x=10,m=354,a=285,s=476}
{x=43,m=2071,a=1017,s=501}
{x=680,m=1749,a=2515,s=3395}
{x=369,m=1441,a=444,s=820}
{x=1946,m=616,a=398,s=1840}
{x=693,m=3478,a=53,s=487}
{x=2902,m=429,a=237,s=525}
{x=442,m=209,a=2734,s=1911}
{x=3447,m=953,a=696,s=392}
{x=658,m=65,a=1036,s=821}
{x=720,m=570,a=40,s=463}
{x=1607,m=147,a=952,s=1673}
{x=1169,m=1312,a=481,s=2083}
{x=709,m=160,a=186,s=1370}
{x=1283,m=2187,a=337,s=89}
{x=2933,m=2469,a=55,s=1198}
{x=1009,m=813,a=1280,s=1980}
{x=1128,m=446,a=56,s=2315}
{x=320,m=839,a=1176,s=1555}
{x=2719,m=1776,a=2869,s=593}
{x=1236,m=2786,a=1644,s=131}
{x=1806,m=1125,a=196,s=2414}
{x=175,m=1618,a=381,s=2136}
{x=748,m=58,a=1006,s=676}
{x=449,m=56,a=852,s=428}
{x=1447,m=515,a=2256,s=550}
{x=2372,m=2045,a=845,s=2483}
{x=3147,m=1641,a=708,s=702}
{x=123,m=426,a=4,s=59}
{x=615,m=253,a=1880,s=1551}
{x=99,m=1119,a=473,s=987}
{x=3070,m=1697,a=1137,s=2525}
{x=967,m=2275,a=429,s=106}
{x=1615,m=2679,a=405,s=166}
{x=1564,m=200,a=307,s=154}
{x=74,m=2971,a=1556,s=199}
{x=3023,m=1890,a=2602,s=416}
{x=2854,m=67,a=662,s=718}
{x=95,m=97,a=214,s=252}
{x=2025,m=788,a=191,s=880}
{x=975,m=485,a=355,s=52}
{x=619,m=758,a=491,s=569}
{x=197,m=12,a=193,s=2070}
{x=839,m=652,a=20,s=24}
{x=83,m=92,a=309,s=536}
{x=3025,m=501,a=1418,s=1540}
{x=42,m=1817,a=170,s=2125}
{x=808,m=662,a=41,s=577}
{x=30,m=142,a=1692,s=474}
{x=854,m=1999,a=3126,s=1189}
{x=346,m=1370,a=1116,s=2035}
{x=233,m=752,a=516,s=1179}
{x=3217,m=3109,a=29,s=73}
{x=484,m=2314,a=225,s=2}
{x=898,m=2681,a=2313,s=1328}
{x=1095,m=1220,a=331,s=1174}
{x=3569,m=1665,a=27,s=324}
{x=170,m=2228,a=3119,s=618}
{x=17,m=186,a=1137,s=5}
{x=75,m=938,a=235,s=73}
{x=569,m=330,a=1178,s=1201}
{x=2288,m=199,a=2644,s=21}
{x=741,m=580,a=114,s=1896}
{x=234,m=524,a=1372,s=616}
{x=1027,m=27,a=905,s=1145}
{x=170,m=24,a=888,s=1257}
{x=2412,m=2908,a=327,s=627}
{x=2041,m=1036,a=1798,s=3228}
{x=887,m=164,a=75,s=2456}
{x=56,m=595,a=1643,s=86}
{x=88,m=394,a=292,s=277}
{x=1343,m=1241,a=2035,s=180}
{x=50,m=150,a=496,s=378}
{x=1414,m=828,a=1585,s=226}
{x=3243,m=117,a=1357,s=141}
{x=528,m=854,a=259,s=619}
{x=40,m=794,a=1497,s=2787}
{x=2157,m=388,a=658,s=993}
{x=911,m=1159,a=346,s=1165}
{x=105,m=916,a=84,s=2514}
{x=2577,m=1880,a=601,s=2679}
{x=2262,m=1108,a=1022,s=45}
{x=780,m=445,a=291,s=201}
{x=3173,m=535,a=1280,s=3422}
{x=1308,m=49,a=910,s=1391}
{x=944,m=158,a=3,s=1409}
{x=125,m=340,a=1970,s=3505}
{x=145,m=2289,a=1040,s=1482}
{x=1395,m=1185,a=224,s=1174}

17
day19/input_test.txt Normal file
View File

@ -0,0 +1,17 @@
in{s<1351:px,qqz}
px{a<2006:qkq,m>2090:A,rfg}
pv{a>1716:R,A}
lnx{m>1548:A,A}
rfg{s<537:gd,x>2440:R,A}
qs{s>3448:A,lnx}
qkq{x<1416:A,crn}
crn{x>2662:A,R}
qqz{s>2770:qs,m<1801:hdj,R}
gd{a>3333:R,R}
hdj{m>838:A,pv}
{x=787,m=2655,a=1222,s=2876}
{x=1679,m=44,a=2067,s=496}
{x=2036,m=264,a=79,s=2244}
{x=2461,m=1339,a=466,s=291}
{x=2127,m=1623,a=2188,s=1013}

187
day19/src/main.rs Normal file
View File

@ -0,0 +1,187 @@
use std::cmp;
use std::collections::HashMap;
use std::fs::read_to_string;
use std::ops::Range;
use std::time::Instant;
use regex::Regex;
#[derive(Copy, Clone, PartialEq)]
#[repr(u8)]
enum RuleConditionVariable {
X,
M,
A,
S,
None,
}
#[derive(Copy, Clone, PartialEq)]
#[repr(u8)]
enum RuleConditionOperation {
Less,
Greater,
}
struct Rule<'a> {
variable: RuleConditionVariable,
operation: RuleConditionOperation,
argument: i32,
result: &'a str,
}
fn check_part(workflows: &HashMap<&str, Vec<Rule>>, part: &[i32; 4]) -> bool {
let mut workflow: &Vec<Rule> = &workflows["in"];
let mut workflow_index: usize = 0;
while workflow_index < workflow.len() {
let rule = &workflow[workflow_index];
let mut passed_condition = true;
if rule.variable != RuleConditionVariable::None {
match rule.operation {
RuleConditionOperation::Less => {
passed_condition = part[rule.variable as usize] < rule.argument;
}
RuleConditionOperation::Greater => {
passed_condition = part[rule.variable as usize] > rule.argument;
}
}
}
if passed_condition {
match rule.result {
"R" => return false,
"A" => return true,
_ => {
workflow = &workflows[rule.result];
workflow_index = 0;
}
}
} else {
workflow_index += 1;
}
}
false
}
fn count_options(workflows: &HashMap<&str, Vec<Rule>>,
start: &str, parts: &[Range<i32>; 4]) -> u64 {
let workflow: &Vec<Rule> = &workflows[start];
let mut workflow_index: usize = 0;
let mut options = 0u64;
let mut checked_parts = parts.clone();
let count_ranges_options = |parts: &[Range<i32>; 4], next: &str| {
match next {
"R" => 0,
"A" => parts.iter().fold(1u64, |acc, range| {
acc * cmp::max(0, range.end - range.start) as u64
}),
_ => count_options(workflows, next, parts)
}
};
while workflow_index < workflow.len() {
let rule = &workflow[workflow_index];
if rule.variable != RuleConditionVariable::None {
let mut new_parts = checked_parts.clone();
let new_parts_var = &mut new_parts[rule.variable as usize];
let checked_parts_var = &mut checked_parts[rule.variable as usize];
match rule.operation {
RuleConditionOperation::Less => {
new_parts_var.end = rule.argument;
checked_parts_var.start = rule.argument;
}
RuleConditionOperation::Greater => {
new_parts_var.start = rule.argument + 1;
checked_parts_var.end = rule.argument + 1;
}
}
if new_parts_var.start < new_parts_var.end {
options += count_ranges_options(&new_parts, rule.result);
}
if checked_parts_var.start >= checked_parts_var.end {
return options;
}
} else {
return options + count_ranges_options(&checked_parts, rule.result);
}
workflow_index += 1;
}
panic!("No rules for remaining ranges");
}
fn main() {
let time_start = Instant::now();
let input_str = read_to_string("input.txt").unwrap();
let time_start_no_io = Instant::now();
let mut workflows: HashMap<&str, Vec<Rule>> = HashMap::new();
let mut parts: Vec<[i32; 4]> = vec![];
let mut currently_parsing_rules = true;
let rule_re = Regex::new("(?:([xmas])([><])([0-9]+):)?([a-zAR]+),?").unwrap();
let part_re = Regex::new("\\{x=([0-9]+),m=([0-9]+),a=([0-9]+),s=([0-9]+)}").unwrap();
for line in input_str.lines() {
if currently_parsing_rules {
let mut workflow_key: &str = "";
let mut rules: Vec<Rule> = vec![];
for captures in rule_re.captures_iter(line) {
if workflow_key.is_empty() {
workflow_key = captures.get(4).unwrap().as_str();
} else {
if let Some(_) = captures.get(1) {
rules.push(Rule {
variable: match captures[1].as_bytes()[0] {
b'x' => RuleConditionVariable::X,
b'm' => RuleConditionVariable::M,
b'a' => RuleConditionVariable::A,
b's' => RuleConditionVariable::S,
_ => RuleConditionVariable::None
},
operation: match captures[2].as_bytes()[0] {
b'<' => RuleConditionOperation::Less,
_ => RuleConditionOperation::Greater
},
argument: captures[3].parse::<i32>().unwrap(),
result: captures.get(4).unwrap().as_str(),
});
} else {
rules.push(Rule {
variable: RuleConditionVariable::None,
operation: RuleConditionOperation::Less,
argument: 0,
result: captures.get(4).unwrap().as_str(),
});
}
}
}
if workflow_key.is_empty() {
currently_parsing_rules = false;
continue;
} else {
// Remove useless conditions (those that give the same result as the last)
while rules.len() > 1 {
if rules[rules.len() - 1].variable == RuleConditionVariable::None
&& rules[rules.len() - 1].result == rules[rules.len() - 2].result {
rules.remove(rules.len() - 2);
} else {
break;
}
}
workflows.insert(workflow_key, rules);
}
} else {
if let Some(capture) = part_re.captures(line) {
let mut part = [0; 4];
for (i, re_match) in capture.iter().skip(1).enumerate() {
part[i] = re_match.unwrap().as_str().parse::<i32>().unwrap();
}
parts.push(part);
}
}
}
let sum1 = parts.iter()
.filter(|&part| check_part(&workflows, part))
.fold(0, |acc, part| acc + part.iter().sum::<i32>());
let sum2 = count_options(&workflows, "in", &[(1..4001), (1..4001), (1..4001), (1..4001)]);
let elapsed = time_start.elapsed().as_micros();
let elapsed_no_io = time_start_no_io.elapsed().as_micros();
println!("Time: {}us", elapsed);
println!("Time without file i/o: {}us", elapsed_no_io);
println!("Sum1: {}", sum1);
println!("Sum1: {}", sum2);
}