Compare commits

...

3 Commits

Author SHA1 Message Date
magical 61c44b283c day 19 cleanup 2023-12-19 07:06:29 +00:00
magical 7b51d4b8dd day 19 part 2 2023-12-19 06:38:56 +00:00
magical b95527ad1d day 19 part 1 2023-12-19 05:31:27 +00:00
3 changed files with 887 additions and 0 deletions

724
day19/input 100644
View File

@ -0,0 +1,724 @@
mn{s<3661:A,s>3705:A,m<1698:R,A}
jcj{x<2501:R,s<516:R,A}
lm{s>1017:R,a>470:R,x>159:A,R}
hfm{x<661:gm,fck}
gvr{x<1627:jlj,R}
xd{a<3515:A,x<1086:R,R}
gms{a<3153:tbr,x<1274:hgz,mkg}
nsv{a<1742:R,x>142:R,dvh}
gz{x<1839:R,x>1848:A,R}
lc{m<2328:A,x>3513:A,R}
qc{x<1673:A,A}
ndl{s>3705:tr,a<3474:zr,x<1760:pl,R}
vfz{a<3535:tpv,R}
ld{x<2662:kdb,x>2851:A,m<3657:gt,A}
jlj{a>2672:A,R}
nn{a<2837:mm,x>3088:zj,m>1332:zf,tn}
kfq{m>3404:R,m>3071:A,nh}
xl{m<1669:A,s>3278:kdg,pm}
tz{x>2729:A,a>1540:A,x<2269:ttv,tkd}
gf{a<1839:jjv,s>3144:tfn,x<1424:gpj,ztz}
zf{x<2559:R,a<3507:bg,a>3813:A,xsf}
rkm{x<2920:qpl,hq}
sh{s<950:R,s<1280:R,a>1876:A,A}
zm{a<3311:R,s<3539:R,R}
fd{s<1125:A,m>1688:R,A}
qr{a>1507:A,x<236:R,R}
tvj{s<1336:gqp,tv}
frn{x<3485:vfx,vgj}
sf{x<2428:R,s>1024:A,s<385:R,R}
tx{a<835:R,s>3130:skj,ct}
mrf{x>1667:A,a<3699:R,R}
jkr{m<2927:kxc,a>2049:R,sh}
sc{s>1038:A,R}
tzc{m>2622:R,s<1490:R,A}
cml{s<2768:R,R}
rp{a<3056:R,A}
cmn{m<1877:A,x>103:A,mxg}
dsf{m>720:A,A}
zvv{s>1686:df,a<1613:fc,nnt}
sb{a<157:xhk,x<1408:qdf,m<1174:ff,zp}
xk{a>390:A,x<198:R,a>189:A,A}
jf{x>441:zvv,a>2404:jqg,a>1410:bvc,mb}
ktt{a>231:R,R}
lvj{x>3711:zpn,x<3392:tlf,R}
fsj{x>3517:A,A}
vn{x>1525:jn,x<1345:zjl,s<1431:vh,gf}
nv{s>3581:R,s<3340:A,A}
rf{m>2639:A,s>3257:zm,jg}
rh{a>813:R,s>3042:A,s>2781:A,R}
dq{x<2671:rj,qz}
qpl{s<3540:mv,A}
mz{a<2856:R,a>3430:pvc,x<2330:ftt,pg}
ggm{s<2962:A,x>2214:A,A}
vf{s<349:R,x>1227:R,a<705:A,A}
mrc{a>3426:A,R}
zms{a>3329:A,R}
lf{m>2687:A,x<1481:A,m<2144:R,R}
kdb{s<3016:R,A}
ftv{m>2340:R,a<623:A,m<1159:A,A}
gph{x<123:A,R}
rhl{s>251:bc,m>3504:vfr,a<2788:hzr,zn}
kd{x>243:dc,m<3343:dvn,mjb}
fdf{m<1679:kdk,m>2987:R,gc}
ms{x<3198:R,A}
ph{m<1356:R,R}
smf{m<1642:A,m>2204:R,a>250:A,A}
crv{m>1119:vg,a>3589:djp,hqh}
cps{a<982:R,x>3117:R,x<2335:A,R}
pqh{s>328:A,m>3037:R,x>1636:A,A}
br{a>981:A,s<3008:R,A}
zdq{s>346:R,m>1682:R,a>2849:A,R}
tbr{s<2338:zfh,m>1880:ghf,nzj}
gmm{x<3087:A,A}
lzz{m<3111:ndn,fm}
pqm{a>3473:fr,R}
pmh{m<984:A,A}
dgt{s>1976:R,a>2943:A,m<250:A,A}
jvx{m<3147:R,s<322:R,A}
vhs{s>3174:dxt,zv}
dk{a>2545:A,x<2584:R,s<3184:A,R}
kkq{m<2016:R,x<1586:A,a<419:A,R}
ccn{x>1109:xjj,rb}
fsz{m<3908:R,m<3950:sml,a>3520:R,tcq}
lcr{m>849:R,a>1453:R,m<764:A,R}
vjc{a>2523:R,s>108:R,m>3085:R,R}
rz{x>1108:A,m>2183:R,m>1020:R,R}
xhk{x<1562:gkk,R}
lt{x>247:A,x<218:R,R}
sq{m<2979:xpl,s>1347:lx,m>3340:nsv,pf}
tt{x<1676:R,R}
xrp{x<177:rh,spb}
zvj{a<3736:A,s>168:R,m>520:R,A}
sth{x>1719:nbq,m>2754:lpz,s<346:cpt,kvp}
kl{x>812:A,tqn}
nzj{a<2917:zkq,a<2997:vkp,a>3090:tfb,fg}
gnt{x>1725:R,A}
tmh{m<1627:A,m<1805:A,a<756:R,A}
ttv{m>1339:A,A}
hhq{m<1659:jpj,x>1806:lh,ntr}
pk{a>2233:R,A}
lv{a<543:znq,a<825:A,x<3669:R,A}
bk{s>659:A,vf}
sj{x>1645:R,a>3807:nlm,A}
fm{a>3743:lq,s<2464:jl,s>3039:mhs,ts}
nbq{a<3565:R,hk}
ct{a<1076:A,s<2510:R,x>89:A,A}
znq{s>872:R,s>389:R,x<3462:A,R}
vkp{m>791:R,a<2954:mj,rl}
sjj{m>3095:R,s<922:R,R}
tqn{x<632:R,A}
xxd{a<937:cm,m<689:A,lcr}
gnv{s>881:R,x>1689:A,A}
cq{m>1527:A,x>369:R,A}
tp{m>3533:R,m<3498:A,A}
bl{x>1747:A,zvk}
rb{s>2690:xd,gp}
tq{x>99:A,s>780:A,gv}
tn{a>3559:lnp,m>860:dj,x>2439:xv,ghz}
fxp{x<3712:ccp,s<904:ss,shj}
rk{s>1884:kq,m>3604:lv,s>1153:fq,cdr}
hsz{a>1328:R,A}
qxn{x>1698:hhq,x<1660:sjv,tb}
cm{s>1819:A,x<2244:R,A}
gfq{s<2146:tq,a>1886:cmn,a>1662:pt,kmq}
ft{s<725:rhl,lff}
rc{s<102:R,R}
ss{x<3880:A,x>3942:R,s>475:A,A}
ztz{m>1355:lf,R}
pgd{a<3436:A,x<926:nhv,x>995:xmv,A}
tr{s<3868:A,x>1733:R,s>3944:A,R}
xv{a>3190:R,A}
hgr{m<3265:A,m<3624:A,m<3842:R,A}
qxm{s<2975:mlh,m>1465:lrh,R}
fq{m>3473:tp,m>3434:A,s>1511:A,A}
hk{a>3745:A,x>1782:R,x>1749:R,A}
gst{x<1764:A,s<2078:R,s<2479:R,A}
fqp{a<2237:mr,a<2303:R,A}
fmp{a<637:R,m>2055:R,R}
jjv{a<1298:bmj,x<1415:cd,A}
cl{x>327:R,a<662:R,A}
cvn{s<2271:R,x>1760:qx,R}
fqr{s>2475:lzt,a>3662:R,R}
jg{a>3308:A,a>3257:R,a<3243:A,R}
vm{x>1608:A,s>2267:R,R}
zzc{s<1510:xsq,s<2530:nk,xrp}
pg{x>2454:R,a<3237:A,A}
jt{a<2036:A,x>3568:R,R}
kp{s<3254:xcn,m<2368:xcv,A}
rkx{a<3478:R,x>1142:A,a>3606:R,A}
kqs{x<1646:R,a>3810:tdp,m<776:mrf,A}
mk{x<204:R,A}
mt{a<512:R,a>675:R,a<618:R,A}
cbq{a<3691:R,R}
lbg{x>1685:fll,x<1633:vm,s<2084:R,R}
nrd{x>3246:A,x>2349:R,smf}
zvk{s>3078:R,s>2987:R,a>3465:A,R}
mjb{m>3647:A,a<883:pz,mp}
db{a>1922:fqp,m>469:kqc,qj}
qbp{m<1961:A,s<3848:sp,m>2251:R,mfz}
cgg{s>166:A,R}
vfr{m>3672:R,x<3116:rc,R}
ff{a>278:jp,s>2093:ktt,m>425:R,R}
qtf{a<798:A,R}
kz{x<169:tx,m>726:fj,qh}
vtk{a<3490:A,R}
bjc{s>1024:hnt,R}
nr{x<217:A,x<248:R,A}
bvc{x>285:ths,m>2387:sq,m<1094:db,gfq}
tcq{x>1748:R,x<1691:A,R}
zd{m>3496:R,m<3436:R,A}
gl{s<3344:R,s>3741:R,m<3609:R,R}
djm{m<1932:A,A}
jbv{a>1587:A,m>698:R,s<2324:R,A}
rzh{s>2629:A,a<1890:A,x<1182:A,A}
spb{s<3380:R,A}
lcf{s>1018:A,a>721:R,fmp}
mfz{s<3933:R,R}
kxn{x>2596:R,m>3047:R,a>2293:R,A}
cnh{s<2989:R,s<3391:R,a>1818:A,R}
jqg{s<2459:hzs,vhs}
lnp{s<1688:R,s>2271:A,s>1968:R,R}
lpz{a>3507:pqh,m>2945:A,zms}
pxm{a>2777:R,a>2129:R,m<412:A,R}
ndn{a>3628:sz,m>2877:kkt,gmm}
pf{s<504:jvx,m>3148:mh,m>3049:sjj,A}
tbx{s>3338:R,x>2728:A,x<2208:A,R}
cjh{m>3506:A,m<3434:A,A}
tl{x>2730:qtf,xxd}
qs{a>2177:A,a>1953:R,a<1811:A,R}
vsh{a>3395:mf,tg}
gkk{s<2039:R,a>94:R,R}
dg{s<3005:R,A}
sjv{a<2806:gvr,m<1615:mkc,m>2717:jvk,fn}
rjl{s<1499:A,a<517:A,m>1643:R,R}
bdb{x>2480:R,R}
lz{m<2165:A,m>2321:R,s<2840:R,R}
fkh{a<3538:hvr,tkl}
ljp{s>1134:bzg,kkq}
jp{a<325:R,a>333:R,a>330:A,R}
qk{a>3005:R,m<2895:R,R}
tqs{x>1231:A,A}
jd{x<720:A,A}
pmf{x>1307:R,R}
jx{m>3503:R,R}
xcv{x>1264:A,s>3562:A,R}
ffc{s>1660:dl,x<1559:dqk,x>1746:mmg,btt}
vkk{m<3367:qqx,x<3176:tqb,a<1238:rk,dr}
kdf{s>2631:R,R}
dkq{m<2342:A,x<836:A,x<910:A,A}
zqt{x<1765:R,x>1814:R,R}
cd{a<1640:A,s<2718:A,A}
xmv{a>3790:A,x<1023:R,A}
kdg{x>1759:A,m>2736:R,R}
xvt{a>3623:nx,A}
trl{x>770:A,m>2294:jh,hsz}
zr{x>1726:A,R}
vq{m<2151:R,s>837:A,bm}
zbr{a>3598:qdp,vsh}
ts{x>2576:A,x<2156:A,R}
xb{x<1323:kdz,s<2020:A,mvt}
vr{a<3735:qdr,x>1746:dst,s<1998:pjn,A}
btt{m<2603:hg,a>189:dct,bhr}
zz{m<2544:R,a<2964:A,s<1093:R,A}
zv{x>188:jxt,x<78:hp,R}
kqc{a>1656:A,x<181:R,a<1532:R,jbv}
ksl{x>1716:A,R}
lrh{x<1401:A,a>789:R,A}
qj{s<1997:A,nzf}
nsp{x<355:R,A}
jz{a<3613:pp,lk}
fck{s>2679:A,A}
vfx{x>3110:A,m<3382:R,a<3064:R,A}
vl{s<2867:R,x<3226:tbx,m<143:fsj,A}
fdq{a<2937:R,m>1742:A,m>699:A,R}
djp{s>588:R,s<375:zvj,R}
hg{s<941:R,a<158:R,s>1333:R,A}
nhl{a<842:jdc,m>1845:vq,a<1264:tk,tz}
skj{x<80:A,R}
nnt{m<1816:zrl,a<2781:jkr,s>660:hr,kl}
knb{a>1181:qc,A}
kvp{m<2615:xc,a<3542:xvf,A}
mkg{x>1475:fgc,vxx}
ghz{s<1263:A,a>3172:R,R}
qdr{m>2023:A,x<1754:A,R}
qhd{x<255:R,a>1141:R,R}
dqk{m>3212:R,s>1016:A,pls}
rfx{s<2820:A,A}
np{x>1370:lcf,bk}
gtj{x<196:R,s>1193:A,s<927:R,R}
cc{s>2568:R,R}
zt{a>2797:R,s>2797:R,a<2702:R,A}
vxx{x>1390:xvt,a<3702:kc,xb}
rvf{m<3175:R,m<3678:gg,dk}
tg{m>3363:R,m<2905:A,m>3162:A,R}
hb{x<3265:A,m<2201:A,s>3582:A,lc}
rtx{a<714:lm,s>1097:qhd,R}
pls{m>2456:A,s>426:R,m>2194:R,A}
hrv{a<3514:R,A}
vh{x<1421:cff,kf}
ds{s>2587:rvf,kfq}
cff{a<1614:jxg,nc}
bps{m<507:rtx,jq}
zjl{m<2130:hxr,s<1643:zmk,x<1224:rx,fx}
jxt{s<2705:A,R}
tv{a>3495:tqs,m<1901:A,zck}
gg{x>3270:A,a>2494:A,R}
qv{s>1679:R,R}
dt{a>2086:R,s>126:R,R}
tfz{x<1427:R,a>497:R,x>1670:R,R}
tpn{s>1975:R,s<1639:R,a<2071:R,A}
bhr{s>992:A,x>1683:A,m<3407:A,A}
nx{s>2469:R,a<3826:R,A}
mvt{a>3819:R,s<2734:A,x<1357:A,A}
qrv{s<2662:cnk,s>3212:A,m<2188:R,A}
gp{x>1091:A,m>2260:A,R}
xsq{m<2092:tmh,s>766:gtj,a<651:xk,A}
xnx{s>1313:R,R}
nhv{s>2972:A,A}
gpj{a>2285:R,s>2372:R,tpn}
bmj{m<1925:R,a>1048:A,R}
rm{s>1123:A,A}
rj{m<1592:ggm,x>2353:fs,s>2993:A,A}
dm{a<3662:rz,x<1113:R,x>1142:xtp,xlf}
tj{a>3586:mk,a<3287:mht,R}
kc{m>2340:hrv,s>1715:A,R}
fdt{m<1287:R,a>3344:R,R}
pvc{s<1234:R,m>3049:R,a<3802:R,A}
zp{a>258:R,x>1647:A,jj}
qn{m<1271:A,A}
tgj{a<1770:R,A}
mj{s<2970:R,x<1353:A,A}
bh{s<2666:nn,a>2622:dlf,m<1714:vlj,rkm}
bc{x>2604:jx,x>2331:jcj,a<2724:A,R}
hh{a<3215:qxn,s<1521:lr,s<2817:jz,fkh}
xcn{m<1831:R,x>1275:A,m>2825:A,A}
dr{s<1876:fxp,rhj}
nlm{s<3380:A,s<3708:R,R}
fzl{x>187:R,a<1934:R,A}
ths{s<1404:bp,fms}
mht{s>1243:A,A}
dlg{m>871:A,a>1668:A,R}
vxz{s>126:R,a<3458:R,a<3681:A,A}
bm{x<2634:A,R}
cdr{x>3527:zd,cb}
sp{a<1106:A,x>2784:A,s>3808:A,A}
lg{s<901:jb,s>1546:rn,a>482:fd,ljp}
qdf{s<1591:R,a<256:A,lvs}
xz{m<1481:cps,a>972:lcp,s<3564:A,mn}
lcp{x<2839:R,a>1232:A,x>3245:R,R}
kxc{x>774:R,A}
mv{s>3013:A,x>2298:A,s<2800:R,A}
rx{m<3079:mrk,a>1474:R,R}
bbm{m<3755:R,R}
hd{x<1703:bbm,m>3786:cbq,m<3748:R,R}
mb{m>2654:kd,m>1299:zzc,s<1993:bps,kz}
fvx{s>864:dm,x>1121:jbq,vfz}
bp{s>707:nsp,cq}
gb{a<3053:R,a<3115:R,A}
tkl{x>1688:xl,m>1977:sj,kqs}
xpl{a<1817:tzc,x>169:nr,a>2176:R,R}
gm{x<546:R,s>3053:A,a>3376:A,A}
hx{s>2045:vl,x>3142:lvj,pbp}
fc{a<1041:fv,trl}
gqp{a<3558:xcj,s<462:R,s>988:R,R}
mkc{m<632:dgt,m>995:gb,s<2449:R,A}
hp{s<2877:R,m>1762:R,R}
shj{x<3833:A,a>1667:A,s<1535:R,A}
fv{s<624:ftv,s>1101:A,a>691:A,R}
rkt{m<2656:R,R}
jbq{m>1513:A,s<563:A,hzq}
sml{m>3925:R,a>3709:A,a>3380:A,A}
xtp{m<2367:A,A}
pl{x>1653:R,R}
gt{a>700:R,A}
vg{m>1872:gnv,s>989:zqt,gh}
jpj{x<1767:gnt,A}
kmq{x>151:qr,m<1575:A,s>3253:cmd,A}
hzs{m>2250:sl,a>3055:tj,dxk}
in{x>1863:xq,gx}
dj{x<2303:A,x>2600:R,A}
lh{a<2846:A,m>2459:ptx,s>1865:lz,gz}
pr{m<3049:R,R}
dz{a<713:nrd,qbp}
mrk{m>2755:A,A}
ks{x>2852:R,zlt}
tkd{x>2536:A,R}
gx{x<1056:jf,a<2531:xxv,x>1588:hh,gms}
nzf{m>296:R,a<1691:A,R}
tqb{x<2363:pb,s>2261:ld,ks}
fx{m<3263:cnh,a<1482:A,A}
cnz{a>2636:A,A}
rqc{s<2857:A,R}
tpv{s<353:R,s<530:R,s<748:A,A}
zn{m>2957:vxz,cgg}
ptx{m>3400:A,x<1841:A,s>2075:R,A}
nk{s<2082:A,s>2236:R,A}
nc{s>803:R,a<2184:A,m>1658:A,A}
mhg{a<1907:A,m>740:A,m>407:A,R}
hzr{a>2332:vjc,a<2223:dt,kxn}
fg{m>1182:rp,m<530:A,m<823:A,R}
xlf{m>1757:R,a>3792:A,A}
qz{a<1148:R,a<1473:rd,x<3400:A,R}
vvs{m<1832:gst,x>1728:xkp,x>1651:zgj,R}
px{m>1343:R,A}
cg{a>2956:R,R}
xc{m>2487:A,A}
zfh{s<1106:srk,djm}
gc{a>3568:R,R}
mf{m>3369:A,m>3034:R,s<1159:A,R}
zck{m<2862:R,a<3295:R,R}
mh{s>829:A,s<690:R,A}
zdt{m<3707:vtk,m>3837:fsz,hd}
zkq{s<3264:rqc,R}
mxg{m>2191:A,s>2784:R,a>2067:R,R}
rr{a>3120:A,a>3101:R,x<1787:R,R}
qrl{a>2765:rkt,cnz}
lvs{x>1273:A,R}
cz{s>3104:R,a<1812:A,R}
lr{m<2420:crv,s>569:zbr,m<3184:sth,zdt}
ghf{x<1244:vbq,zk}
hzq{s<705:A,a<3489:A,A}
hxr{a<1675:R,a<2007:rzh,pk}
jvk{m>3317:A,s>1927:R,a>2952:R,szx}
mp{s<2457:R,s<3073:R,A}
tk{a>1095:fsb,R}
hn{a>2033:R,s<2640:A,m<1587:dlg,cz}
nh{m>2777:R,a>2450:A,x<3023:R,A}
lq{m<3533:A,s>2891:A,s>1978:R,R}
srk{s<564:zdq,A}
jxg{x<1373:A,m>2224:A,a<1304:A,A}
dxk{x<291:gph,R}
pt{x<188:tgj,m<1898:lt,s<2956:lgr,A}
lff{x>2601:frn,m<3372:mz,bjc}
tb{s<1696:xm,x>1678:qrl,x<1672:rdg,hzb}
lzt{m>1509:R,x>1505:A,m<537:R,A}
rq{a>1733:bh,m>996:qm,bd}
tlf{x<3232:A,m<228:R,m>301:R,R}
ml{s<3209:dzn,cr}
qqx{x>3015:qv,pr}
fs{s<3056:A,a>1067:A,A}
kf{s<815:A,a>1938:R,nm}
pz{x<109:A,a<462:A,m>3455:R,R}
nm{s>1143:A,a>1477:A,a>1181:R,A}
kdk{s<1608:R,a<3613:R,A}
xxv{a>872:vn,a>348:vk,dnq}
qx{s>2554:R,a>3943:A,A}
lgr{m<2196:R,R}
zk{m>2885:qt,s>3306:A,zt}
mm{a>2237:kv,x>2878:sc,m<1672:mhg,qp}
dnq{m>1899:ffc,sb}
ntr{a<2924:R,x<1760:mqf,a<3066:A,rr}
qm{s<2346:nhl,s<3437:dq,s<3753:dtt,dz}
bd{m<353:hx,tl}
fj{x>267:cl,s>3135:A,a>576:A,A}
cmd{a<1530:R,a<1617:R,R}
cpt{m>2566:R,x<1640:A,R}
zgj{s>1980:A,a<3427:R,A}
hvr{a<3425:rf,s<3426:bl,ndl}
jq{a<541:pmh,a<926:R,A}
ccp{m>3658:R,m>3555:A,A}
dvn{s>1767:R,a>522:A,R}
vvm{s>2965:A,A}
hgz{x>1160:tvj,s<1847:fvx,ccn}
jfl{a>629:qxm,x<1525:kp,a>532:ksl,qrv}
xq{m>2576:ffn,rq}
hr{a<3242:zz,m>2967:rtl,dkq}
jl{s>1964:R,R}
pp{m>2274:mrc,m<1108:lbg,m>1498:vvs,thr}
qt{m>3464:A,R}
rtl{m>3647:A,R}
jb{x<1581:pmf,m>2361:A,R}
dl{a<118:R,a>235:R,dg}
mr{s<2296:A,A}
zpn{s>1287:R,A}
zmk{m>3101:R,a>1862:R,A}
fll{m>559:R,R}
dlf{x>3210:dcg,pqm}
jj{s>1976:R,s<735:A,R}
xjj{a<3697:rkx,A}
pjn{a<3809:A,x<1689:A,a>3843:R,R}
gzx{m>3247:A,R}
vk{s>1922:jfl,a<588:lg,np}
fms{a<1845:rfx,s<2483:dx,a<2108:R,R}
mmg{s<872:A,x<1817:R,A}
lx{m<3512:cml,s>2892:R,fzl}
hq{s>3232:qs,m>2220:jt,a>2077:A,R}
dtt{m>1833:hb,xz}
vlj{a<2140:ml,a>2383:dgd,jm}
cr{a<1904:R,m>976:A,s>3736:R,R}
lnn{a<3317:ds,lzz}
dc{x<363:A,s>1439:hgr,m>3285:A,kbg}
jm{s>3456:A,s>2930:A,x>2786:ms,R}
vbx{a>3526:R,x<1759:A,A}
fgc{x<1525:fqr,fdf}
xsf{a>3670:A,x<2866:A,A}
lgf{s>352:A,R}
mqf{x<1738:R,R}
bdx{a>1373:R,R}
pm{s>3040:R,s>2959:R,x<1767:R,A}
dgd{m<919:xs,x>3141:ph,R}
kv{m>1662:R,R}
dvh{a>2032:R,a<1895:R,s<700:R,R}
cb{m<3466:R,x<3395:A,R}
mlh{s>2509:R,A}
df{a<2667:sm,x>794:pgd,hfm}
gh{x>1717:A,a>3671:A,s>547:A,A}
dxt{m<2555:R,A}
pb{s<2328:R,a<1018:gl,m>3696:bdx,A}
dzn{x>2899:A,a>1917:A,R}
cnk{x<1638:R,s<2322:A,x<1784:A,A}
rdg{x>1665:R,x<1662:R,R}
xkp{x<1813:R,a<3429:A,A}
vgj{x<3716:R,R}
rl{m>294:A,R}
tfb{s<3203:R,x<1370:R,s<3645:A,vs}
kq{m>3723:R,a<811:mt,br}
ck{m>2095:A,a<2991:A,A}
qdp{a<3818:gzx,A}
mhs{m>3601:R,m<3327:R,x>2985:A,A}
hnt{s<1237:A,x<2124:A,A}
qh{x>294:A,vvm}
kdz{a>3816:A,s<2322:R,s<2913:R,A}
xm{s<626:fdq,a<2958:xnx,s<1218:R,R}
jh{s<911:A,m>3035:R,x>622:A,A}
bzg{s<1344:R,A}
dct{x<1655:R,s>598:A,m>3271:R,A}
pbp{m<220:sf,m>275:bdb,s<889:R,A}
thr{a<3473:fdt,s<2291:px,x>1738:qn,A}
rd{x>3336:R,a>1276:A,a<1192:A,R}
jdc{x>2745:rjl,A}
sz{s<2641:A,m<2766:R,s>3431:A,R}
gv{x>40:R,a<2021:R,m<1655:A,A}
tdp{s>3500:A,a<3931:R,A}
xs{x<3279:R,x>3661:A,A}
kbg{s>778:A,A}
jn{a<1479:knb,hn}
szx{s>690:A,m<2955:R,x<1617:A,A}
zlt{x<2589:R,a>907:A,a<376:R,R}
fsb{s>1096:A,m>1470:A,s<415:R,R}
ffn{a<2017:vkk,s<1515:ft,lnn}
bg{m>1789:A,m<1559:R,x<2819:A,R}
sl{m>3167:A,m>2576:qk,A}
xvf{m<2675:A,a>3418:A,x<1671:R,R}
fr{a>3763:R,m<1443:A,R}
kkt{a>3472:A,a>3382:A,s>2345:A,A}
xcj{s<881:A,R}
hqh{m<502:R,s>575:R,a<3429:lgf,vbx}
tfn{x<1411:R,A}
dst{a>3822:R,m>1505:A,R}
ftt{s>1217:A,a<3222:R,A}
rhj{s<3065:A,m<3720:cjh,nv}
rn{m<2545:R,a<457:R,a>540:R,tfz}
zj{m>1037:A,m>471:dsf,x>3609:R,rm}
fn{x<1616:ck,x<1634:R,R}
dcg{x<3587:R,A}
vbq{s<3443:R,R}
vs{s>3829:A,x>1496:A,m>721:R,R}
zrl{m>712:jd,pxm}
lk{a>3868:cvn,vr}
sm{x<753:cc,kdf}
dx{x<387:R,x>406:R,s<1958:A,R}
qp{s>1439:R,x<2270:R,x<2617:R,A}
hzb{m<2387:cg,tt}
{x=1353,m=3037,a=1714,s=2238}
{x=608,m=1974,a=1157,s=1316}
{x=1225,m=1440,a=80,s=1364}
{x=4,m=1245,a=948,s=147}
{x=30,m=2538,a=1716,s=823}
{x=626,m=128,a=1042,s=519}
{x=182,m=87,a=1114,s=123}
{x=3097,m=2262,a=60,s=505}
{x=700,m=1844,a=30,s=185}
{x=88,m=2157,a=39,s=1966}
{x=703,m=305,a=704,s=1759}
{x=400,m=1034,a=1947,s=1104}
{x=27,m=1959,a=87,s=1404}
{x=1654,m=351,a=1498,s=605}
{x=546,m=629,a=1120,s=776}
{x=1467,m=1402,a=2819,s=652}
{x=395,m=710,a=37,s=426}
{x=165,m=986,a=3316,s=3628}
{x=119,m=2580,a=477,s=1134}
{x=4,m=44,a=760,s=216}
{x=1633,m=3445,a=1494,s=1396}
{x=670,m=1082,a=708,s=290}
{x=2566,m=2148,a=99,s=3038}
{x=107,m=1631,a=2,s=293}
{x=2292,m=984,a=3360,s=124}
{x=2624,m=501,a=1111,s=1114}
{x=1217,m=1508,a=2880,s=1744}
{x=1705,m=623,a=271,s=3}
{x=3043,m=25,a=2091,s=1193}
{x=1566,m=53,a=418,s=6}
{x=1438,m=255,a=1726,s=1265}
{x=77,m=326,a=486,s=795}
{x=31,m=836,a=596,s=327}
{x=477,m=1056,a=1680,s=2268}
{x=898,m=647,a=66,s=244}
{x=3627,m=2071,a=96,s=625}
{x=1149,m=1690,a=79,s=237}
{x=710,m=847,a=2859,s=618}
{x=20,m=1793,a=1189,s=207}
{x=10,m=337,a=1006,s=127}
{x=184,m=113,a=945,s=1385}
{x=913,m=448,a=458,s=384}
{x=1236,m=181,a=1480,s=273}
{x=3386,m=4,a=297,s=2045}
{x=106,m=846,a=1723,s=415}
{x=1888,m=1035,a=375,s=17}
{x=496,m=3286,a=1123,s=225}
{x=1322,m=104,a=670,s=584}
{x=544,m=293,a=14,s=350}
{x=3419,m=469,a=3627,s=594}
{x=447,m=78,a=518,s=479}
{x=2602,m=700,a=536,s=1356}
{x=956,m=95,a=1599,s=492}
{x=1,m=1709,a=117,s=141}
{x=83,m=1970,a=143,s=411}
{x=479,m=1316,a=1129,s=953}
{x=1389,m=1084,a=1747,s=1196}
{x=792,m=1456,a=3617,s=278}
{x=306,m=2611,a=1080,s=601}
{x=310,m=118,a=2829,s=2395}
{x=249,m=295,a=1027,s=1016}
{x=117,m=793,a=935,s=2867}
{x=266,m=32,a=164,s=286}
{x=71,m=1881,a=474,s=223}
{x=519,m=1971,a=390,s=713}
{x=530,m=1052,a=826,s=732}
{x=2082,m=3165,a=1378,s=2921}
{x=281,m=2172,a=687,s=1294}
{x=822,m=217,a=322,s=540}
{x=53,m=2695,a=3592,s=63}
{x=323,m=219,a=1463,s=65}
{x=41,m=248,a=774,s=1178}
{x=641,m=155,a=1850,s=53}
{x=1305,m=253,a=2104,s=404}
{x=2832,m=2439,a=893,s=996}
{x=3936,m=107,a=419,s=221}
{x=1350,m=2275,a=42,s=856}
{x=1405,m=360,a=1360,s=1224}
{x=1558,m=488,a=2624,s=1172}
{x=2773,m=515,a=1302,s=115}
{x=240,m=1969,a=1655,s=164}
{x=105,m=2654,a=709,s=2241}
{x=140,m=1403,a=299,s=145}
{x=1173,m=747,a=121,s=1231}
{x=826,m=2987,a=931,s=658}
{x=752,m=8,a=3101,s=129}
{x=1980,m=131,a=1929,s=2282}
{x=433,m=2,a=1493,s=1029}
{x=104,m=317,a=856,s=1780}
{x=116,m=2665,a=584,s=835}
{x=1988,m=283,a=2314,s=569}
{x=270,m=381,a=308,s=369}
{x=1058,m=360,a=75,s=872}
{x=359,m=906,a=1329,s=144}
{x=1920,m=533,a=1340,s=63}
{x=713,m=133,a=332,s=2928}
{x=345,m=2121,a=493,s=1699}
{x=177,m=711,a=86,s=601}
{x=1141,m=890,a=2322,s=3109}
{x=52,m=189,a=1216,s=2289}
{x=671,m=13,a=14,s=783}
{x=2194,m=312,a=343,s=1076}
{x=895,m=768,a=634,s=679}
{x=294,m=2318,a=1300,s=434}
{x=72,m=59,a=1540,s=166}
{x=248,m=2740,a=183,s=1876}
{x=1749,m=525,a=1176,s=113}
{x=1446,m=3065,a=223,s=932}
{x=1863,m=448,a=2911,s=608}
{x=245,m=1250,a=19,s=696}
{x=61,m=746,a=2942,s=113}
{x=214,m=107,a=1544,s=3227}
{x=393,m=1357,a=68,s=264}
{x=16,m=1376,a=180,s=329}
{x=28,m=793,a=234,s=219}
{x=382,m=2129,a=1963,s=1348}
{x=280,m=374,a=1653,s=961}
{x=1252,m=352,a=824,s=116}
{x=133,m=192,a=970,s=735}
{x=940,m=828,a=102,s=1516}
{x=993,m=2165,a=27,s=379}
{x=514,m=257,a=1094,s=1268}
{x=317,m=3266,a=2567,s=754}
{x=2893,m=3393,a=121,s=1018}
{x=978,m=2629,a=68,s=566}
{x=436,m=225,a=1646,s=1042}
{x=2798,m=2503,a=697,s=79}
{x=160,m=800,a=189,s=2042}
{x=80,m=559,a=1355,s=557}
{x=26,m=774,a=75,s=992}
{x=252,m=1901,a=1329,s=2136}
{x=457,m=15,a=289,s=311}
{x=403,m=1377,a=399,s=1762}
{x=220,m=246,a=367,s=2416}
{x=172,m=137,a=1004,s=843}
{x=200,m=1046,a=343,s=743}
{x=220,m=80,a=389,s=683}
{x=3094,m=1241,a=71,s=1872}
{x=92,m=723,a=4,s=636}
{x=548,m=422,a=16,s=185}
{x=530,m=3498,a=619,s=399}
{x=2100,m=160,a=1497,s=1222}
{x=723,m=70,a=11,s=1267}
{x=85,m=240,a=545,s=2591}
{x=1937,m=1470,a=100,s=2233}
{x=141,m=100,a=2327,s=484}
{x=48,m=1999,a=346,s=692}
{x=81,m=728,a=777,s=1003}
{x=135,m=1121,a=1698,s=46}
{x=2398,m=720,a=222,s=2291}
{x=798,m=523,a=3130,s=834}
{x=934,m=398,a=58,s=3629}
{x=365,m=64,a=1860,s=891}
{x=743,m=203,a=1216,s=586}
{x=562,m=2230,a=428,s=1056}
{x=907,m=2499,a=2323,s=35}
{x=895,m=64,a=521,s=1616}
{x=2335,m=1661,a=705,s=1811}
{x=3875,m=2100,a=726,s=82}
{x=478,m=3106,a=1652,s=145}
{x=394,m=1255,a=391,s=256}
{x=1074,m=306,a=110,s=560}
{x=1099,m=1158,a=2338,s=1562}
{x=1030,m=2433,a=783,s=3066}
{x=2587,m=17,a=739,s=2788}
{x=1876,m=1459,a=145,s=3440}
{x=97,m=230,a=722,s=622}
{x=2634,m=222,a=1941,s=3208}
{x=1410,m=1860,a=1561,s=27}
{x=104,m=1735,a=947,s=146}
{x=323,m=576,a=139,s=1924}
{x=381,m=20,a=1266,s=2119}
{x=287,m=154,a=524,s=69}
{x=718,m=2618,a=138,s=373}
{x=864,m=416,a=1637,s=3088}
{x=848,m=1992,a=400,s=2460}
{x=1486,m=180,a=1061,s=144}
{x=1435,m=2279,a=1417,s=2800}
{x=438,m=289,a=384,s=231}
{x=853,m=157,a=2367,s=608}
{x=1214,m=631,a=195,s=620}
{x=238,m=501,a=241,s=275}
{x=458,m=255,a=1644,s=2634}
{x=2638,m=508,a=947,s=1523}
{x=1069,m=1215,a=248,s=556}
{x=746,m=1738,a=2812,s=1901}
{x=231,m=721,a=179,s=179}
{x=103,m=234,a=808,s=1723}
{x=1818,m=2372,a=64,s=10}
{x=784,m=1447,a=483,s=188}
{x=1495,m=244,a=1788,s=1054}
{x=152,m=618,a=908,s=324}
{x=3083,m=1473,a=645,s=1293}
{x=64,m=1650,a=171,s=1497}
{x=1708,m=1167,a=1002,s=628}
{x=808,m=1930,a=1475,s=2057}
{x=1690,m=89,a=1585,s=460}
{x=2422,m=1317,a=246,s=2592}
{x=526,m=250,a=410,s=709}
{x=273,m=222,a=117,s=989}

17
day19/sample1.in 100644
View File

@ -0,0 +1,17 @@
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}
in{s<1351:px,qqz}
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}

146
day19/sol.tcl 100755
View File

@ -0,0 +1,146 @@
#!/usr/bin/env tclsh
source ../prelude.tcl
proc read-workflows input {
set flows [dict create]
while {[gets $input line] >= 0} {
if {$line eq ""} break
set line [string map [list \{ @ \} @] $line]
must_regexp {([a-z]+)@([^@]*)@} $line _ name rulestr
set rules {}
foreach r [split $rulestr ","] {
if {[string first : $r] >= 0} {
lassign [split $r :] cond dest
set cond [regsub -all {([xmas])} $cond {$\1}]
lappend rules $cond $dest
} else {
lappend rules default $r
}
}
dict set flows $name $rules
}
return $flows
}
proc read-values input {
set values {}
while {[gets $input line] >= 0} {
set line [trim [regsub -all {[^a-z0-9]} $line { }]]
lappend values [dict create {*}[split $line]]
}
return $values
}
proc filter {flows value} {
set f in
while {[dict exists $flows $f]} {
set rules [dict get $flows $f]
foreach {cond dest} $rules {
if {$cond eq "default" || [dict with value {expr $cond}]} {
set f $dest
break
}
}
}
return $f
}
proc filter-all flows {
lappend state(in) [dict create x {1 4000} m {1 4000} a {1 4000} s {1 4000}]
#set state(in) {
# {x {787 787} m {2655 2655} a {1222 1222} s {2876 2876}}
# {x {1679 1679} m {44 44} a {2067 2067} s {496 496}}
# {x {2036 2036} m {264 264} a {79 79} s {2244 2244}}
# {x {2461 2461} m {1339 1339} a {466 466} s {291 291}}
# {x {2127 2127} m {1623 1623} a {2188 2188} s {1013 1013}}
#}
set flows [dict create {*}[replace $flows "$" ""]]
#puts $flows
set done 0
while {!$done} {
#puts [array get state]
# break if everything is in the accept or reject state
set done 1
foreach {f ranges} [array get state] {
if {$f eq "A" || $f eq "R"} continue
set done 0
unset state($f)
foreach range $ranges {
set rules [dict get $flows $f]
foreach {cond dest} $rules {
if {$cond eq "default"} {
lappend state($dest) $range
break
}
if {[string first < $cond] >= 0} {
lassign [split $cond <] var cutoff
lassign [dict get $range $var] min max
if {$cutoff > $max} {
# entire range already lower than required
lappend state($dest) $range
break
}
if {$min >= $cutoff} {
# entire range above required value
continue
}
# split range
lappend state($dest) [dict replace $range $var [list $min [expr {$cutoff-1}]]]
dict set range $var [list $cutoff $max]
continue
}
if {[string first > $cond] >= 0} {
lassign [split $cond >] var cutoff
lassign [dict get $range $var] min max
if {$cutoff < $min} {
# entire range already greater than required
lappend state($dest) $range
break
}
if {$max <= $cutoff} {
# entire range below required value
continue
}
# split range
lappend state($dest) [dict replace $range $var [list [expr {$cutoff+1}] $max]]
dict set range $var [list $min $cutoff]
continue
}
error "unhandled rule $cond:$dest"
}
}
}
}
return $state(A)
}
proc solve input {
set flows [read-workflows $input]
set values [read-values $input]
#puts $flows
puts $values
# part 1
foreach v $values {
set f [filter $flows $v]
set score [ladd [lextract $v 2 1]]
puts "$v : $f : $score"
if {$f eq "A"} { incr part1 $score }
}
puts "part 1 = $part1"
# part 2
foreach r [filter-all $flows] {
set combos [lmul [lmap {min max} [join [dict values $r]] {
if {$min > $max} {
error "invalid range: $min $max"
}
expr {$max - $min + 1}
}]]
incr part2 $combos
puts "A: $r = $combos"
}
puts "part 2 = $part2"
}
solve stdin