adventofcode

git clone https://git.ce9e.org/adventofcode.git

commit
0cd28a12366c21b728a38257c6a46186223680e2
parent
a76fbf456609949af458fdc08fa7c435c7b48142
Author
Tobias Bengfort <tobias.bengfort@posteo.de>
Date
2023-12-19 11:55
2023-12-19

Diffstat

A 2023/19/input.txt 710 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2023/19/solution.rs 132 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
A 2023/19/test.txt 17 +++++++++++++++++

3 files changed, 859 insertions, 0 deletions


diff --git a/2023/19/input.txt b/2023/19/input.txt

@@ -0,0 +1,710 @@
   -1     1 brn{a>3342:A,R}
   -1     2 jls{a<887:A,s>1443:A,R}
   -1     3 pxk{m<2246:A,x>1998:R,a>170:R,R}
   -1     4 vl{s>2294:R,s>2057:A,A}
   -1     5 zjs{s>1912:A,a>838:R,x>620:A,A}
   -1     6 dzh{m>2601:rfn,a>3285:js,m<2527:scz,lt}
   -1     7 tr{x<500:R,s<1092:R,A}
   -1     8 sg{x<3252:kb,m<2286:A,mlx}
   -1     9 bcn{s>3614:hs,hnp}
   -1    10 nxl{s>346:R,m<3521:A,x>2963:R,A}
   -1    11 vk{a>2827:cgv,x<1369:txs,klk}
   -1    12 jph{m>2234:bdv,m<2211:hcg,a>3665:jzv,ks}
   -1    13 bp{s>1408:A,m<2281:A,A}
   -1    14 mn{m>2667:R,s<3064:R,A}
   -1    15 prs{s>2614:R,x>2262:R,m>2474:A,R}
   -1    16 grb{s<1246:A,x<2546:ddd,R}
   -1    17 nj{m>2749:dg,A}
   -1    18 qp{a>3378:A,x<2336:R,m<3213:R,xr}
   -1    19 kq{a>120:vm,a>72:cn,A}
   -1    20 jcg{m>2746:R,x<611:A,s>1050:R,A}
   -1    21 kb{a>3159:R,A}
   -1    22 gcz{s>845:cf,x<1421:dr,m>2297:cb,jph}
   -1    23 fs{s<1275:A,a>2135:A,a<1933:R,A}
   -1    24 mvb{m<1519:xcq,R}
   -1    25 lkh{s>2665:R,s>2539:R,A}
   -1    26 lzr{m>980:zcx,a<2062:A,a<2126:A,A}
   -1    27 sds{s<2263:lr,a>1624:A,s<2594:A,sfx}
   -1    28 qzz{a>2011:czj,R}
   -1    29 in{m>2048:npv,qmn}
   -1    30 nc{s<1052:R,s<1468:R,A}
   -1    31 zv{a>1998:R,x<2403:R,spt}
   -1    32 vfn{a>3746:A,m>2797:R,m>2774:A,A}
   -1    33 jp{m>2284:A,a>3722:R,m>2229:R,R}
   -1    34 sk{s<2821:kn,kfj}
   -1    35 pgb{m>359:pvm,zn}
   -1    36 ql{s<2431:fb,x<2455:vh,R}
   -1    37 rj{s<1283:qb,m>2800:nz,tp}
   -1    38 qps{m>242:A,a>3633:A,A}
   -1    39 sj{a>1665:R,a<877:fzq,A}
   -1    40 dc{a>3479:sgl,x<1417:A,R}
   -1    41 hmz{m<2567:A,s<3456:A,A}
   -1    42 lf{m<2572:R,R}
   -1    43 gj{m<2575:A,s>3294:tzv,s>2387:R,rqf}
   -1    44 km{a>793:R,A}
   -1    45 fz{a<2506:A,m>1196:A,a>2537:A,R}
   -1    46 nml{a>303:dj,a<110:zvt,m<2988:sl,R}
   -1    47 lzl{m<3174:A,m<3235:hq,qgr}
   -1    48 mx{m>1311:th,xtj}
   -1    49 md{s<2642:sr,m<657:sxs,m<876:np,A}
   -1    50 nz{x<3045:lqk,A}
   -1    51 kcn{m>2486:R,A}
   -1    52 qrq{a>2455:rrr,x<1402:mrm,hf}
   -1    53 dvl{a>808:R,s>1965:A,m<3110:R,A}
   -1    54 rfj{s<2379:A,m>3896:A,A}
   -1    55 mrt{m>2825:R,s<883:A,A}
   -1    56 lgp{m<3796:R,m<3924:R,A}
   -1    57 gr{m>1627:A,A}
   -1    58 msr{s>2172:lfb,rpq}
   -1    59 lm{m>3597:lb,s<2096:R,a>3112:R,A}
   -1    60 jmd{m>3270:ztq,nt}
   -1    61 qh{m<2303:lv,fk}
   -1    62 zr{s<3472:R,a>2636:A,A}
   -1    63 lh{a<3622:rxh,qn}
   -1    64 rfn{s<2236:mm,a<3135:jvh,fnx}
   -1    65 vbv{x>1976:qh,m>2209:jpg,jh}
   -1    66 gs{m>3877:R,A}
   -1    67 bmn{m<264:R,x<1479:R,s>804:A,R}
   -1    68 clc{a>2079:pk,ln}
   -1    69 jdd{x<2643:R,x<3119:R,s<885:A,A}
   -1    70 ht{s<443:R,s>730:A,x<2247:A,A}
   -1    71 hnp{m<1666:A,s>3471:R,s<3426:A,R}
   -1    72 qhj{x<3245:R,s>2513:A,mhq}
   -1    73 gk{x<2627:R,m>873:A,R}
   -1    74 cfl{x<3209:A,R}
   -1    75 fc{x<1594:vr,a<255:R,vt}
   -1    76 fxr{a<1985:ngk,s>2230:cg,zh}
   -1    77 hk{s<3179:slx,x<932:A,A}
   -1    78 slz{s>3267:A,A}
   -1    79 tdz{a<3600:A,x>1636:A,a<3742:R,A}
   -1    80 gv{s<918:A,s>990:A,s<950:A,A}
   -1    81 ngk{a>672:xb,s>2213:rm,fc}
   -1    82 fm{a<2660:qc,m<1678:tt,R}
   -1    83 ts{a<2026:xg,R}
   -1    84 fv{a>3074:R,xt}
   -1    85 cmp{s>3676:A,s>3548:A,A}
   -1    86 kgs{x>2016:A,m>3160:R,A}
   -1    87 rx{a>625:df,tsk}
   -1    88 znr{a<3387:A,A}
   -1    89 hmg{s<380:A,R}
   -1    90 xnh{s>2277:rlx,smv}
   -1    91 gdf{x>2191:lkh,s>2586:xtx,x>1119:kmd,A}
   -1    92 pjl{s<3552:R,a<3516:R,R}
   -1    93 cgv{a>3098:A,A}
   -1    94 fk{m<2388:cfl,R}
   -1    95 mt{a>2107:R,a>2053:R,m<3666:R,R}
   -1    96 fvf{s>3136:A,s<2954:R,m<3637:A,R}
   -1    97 zs{m<2196:gsh,x>2272:tf,a>3339:gcz,vk}
   -1    98 pvm{a<1940:R,s>3529:R,hcc}
   -1    99 qj{m>2119:qjg,fsb}
   -1   100 gh{x<1609:R,A}
   -1   101 fzq{m<3304:A,m<3428:A,a<346:R,A}
   -1   102 tv{a>2695:R,R}
   -1   103 jgn{a<2816:pt,s>3239:hbt,A}
   -1   104 qmz{m>2331:A,s>1823:R,A}
   -1   105 nxp{m>749:R,A}
   -1   106 fpz{x<1322:R,A}
   -1   107 xg{a>1898:R,a<1847:R,s>2053:A,A}
   -1   108 qv{a>142:R,R}
   -1   109 bmh{m>2858:R,m>2833:R,A}
   -1   110 nvx{a<1373:A,x>1979:R,a>1736:A,A}
   -1   111 fsb{a>984:A,m>2091:A,a<602:R,R}
   -1   112 lll{a<950:A,dkd}
   -1   113 sbj{s>1164:A,a>2143:R,x<1709:R,R}
   -1   114 lrf{x>2563:A,A}
   -1   115 jqt{a<3409:R,A}
   -1   116 sfp{x>2877:tx,x>2526:R,A}
   -1   117 fb{s>2348:R,a>2308:A,R}
   -1   118 chf{a<2619:A,m<2435:R,x>1094:A,R}
   -1   119 xf{x<1729:A,a<2135:A,R}
   -1   120 jz{s>1829:A,s<1124:R,s<1585:A,R}
   -1   121 kpn{s<2844:prs,a<3654:pjl,A}
   -1   122 hz{m<1894:R,a<340:R,m>1949:A,R}
   -1   123 ndk{x<2803:A,A}
   -1   124 jtm{x<1323:A,R}
   -1   125 thh{x<3100:A,s<338:R,R}
   -1   126 dgs{s>2821:km,x>3046:vl,cxm}
   -1   127 sfx{x>2576:R,A}
   -1   128 jvn{x>2299:A,x>1184:bj,klg}
   -1   129 fnx{x>1358:nj,m>2742:mbx,zst}
   -1   130 rv{m<288:A,m<427:R,x<2377:R,R}
   -1   131 lt{s>1905:njm,zzh}
   -1   132 krn{a<3220:mh,ht}
   -1   133 cb{x<1754:R,A}
   -1   134 sl{a<230:R,x<2565:A,A}
   -1   135 rqf{x<1500:A,a>2642:A,R}
   -1   136 dr{x<822:R,m<2270:gst,a>3718:rnz,jxh}
   -1   137 xr{a<2854:A,R}
   -1   138 tf{s>1067:pxh,s>710:sg,fqk}
   -1   139 kc{x<2265:A,R}
   -1   140 nxc{m<2273:R,m<2354:R,a>2596:R,R}
   -1   141 gst{s<397:A,m>2233:R,A}
   -1   142 rn{a<2631:jtm,m<3615:A,x<922:dt,jm}
   -1   143 xs{s<920:A,s>1257:A,m>3424:lgp,vsg}
   -1   144 lzp{m>2400:R,a>270:hlh,s>3370:pxk,R}
   -1   145 jvs{x<1828:qzh,m<2727:mxq,cv}
   -1   146 jj{m>3671:A,x>1061:A,R}
   -1   147 zp{s<1062:A,s>1478:R,a<2720:R,A}
   -1   148 tk{a>3566:fjx,a>3274:nmv,slz}
   -1   149 hqn{m>2561:A,x>3239:R,R}
   -1   150 vv{s>2841:A,A}
   -1   151 vrs{a<1806:npc,x<2207:xhz,x>3102:ts,lbg}
   -1   152 dj{x<1692:A,A}
   -1   153 ng{x<1352:jcg,m<2756:mhg,R}
   -1   154 lfc{s<2000:R,s<2311:A,s>2410:R,R}
   -1   155 tc{x>2349:zrk,x>1524:qkt,R}
   -1   156 dm{s<3686:brn,s<3861:thv,R}
   -1   157 vrb{s>423:R,A}
   -1   158 cxm{a>424:A,m>999:A,A}
   -1   159 dkd{s<2124:A,m<1574:R,x>2611:A,A}
   -1   160 sv{m<2777:mn,A}
   -1   161 bft{x<3237:A,a<3041:A,x<3543:A,R}
   -1   162 lfb{a<2807:fsn,tk}
   -1   163 ljp{x>1186:jg,lpm}
   -1   164 jm{x<1528:R,m>3709:A,A}
   -1   165 jvh{x<2455:hk,sv}
   -1   166 xq{s<1163:R,s>1782:A,R}
   -1   167 qn{s>850:R,a<3771:A,s>284:R,R}
   -1   168 jv{a>1232:mx,xhp}
   -1   169 rz{m>1023:jz,nxp}
   -1   170 gf{m<3732:A,A}
   -1   171 bj{s>2167:A,a<1487:R,R}
   -1   172 pp{s<1039:A,m<2559:A,x>1116:R,A}
   -1   173 kcp{x>3200:A,m<2485:tfx,x>2752:R,R}
   -1   174 hlh{s<3196:R,A}
   -1   175 kvp{x>786:mvb,bl}
   -1   176 bsm{a>1939:R,A}
   -1   177 ltx{m>3553:tn,s<3379:sj,hn}
   -1   178 ct{m>636:A,A}
   -1   179 lrc{a<1519:R,s<980:R,x>1152:A,R}
   -1   180 bz{s>2254:ghn,m<3138:sht,s>1909:fv,qp}
   -1   181 vt{x>2546:A,x<2214:R,s<1892:A,A}
   -1   182 sr{x<1300:A,R}
   -1   183 smv{m>1053:kvp,a<2499:tm,m>690:rs,jqj}
   -1   184 np{m>776:A,R}
   -1   185 pj{s>2781:R,x<3585:R,R}
   -1   186 ssr{x<1279:A,m>2468:R,x<1422:A,R}
   -1   187 cjn{x<1650:kj,x>1708:A,A}
   -1   188 pv{m<2990:lfc,m<3041:dtc,jfq}
   -1   189 pzl{m>1647:A,x<1879:R,m<1363:jr,nn}
   -1   190 zn{a<2404:R,a<2955:A,R}
   -1   191 qbn{s>3381:cmp,tdz}
   -1   192 jpg{m<2407:jsn,zgq}
   -1   193 zx{x<1007:ns,x>1267:A,s>1035:R,R}
   -1   194 clq{x<1849:chf,A}
   -1   195 dvr{s<2199:zs,sk}
   -1   196 kfk{s>3605:nh,hmz}
   -1   197 rm{x>1734:mp,a>339:gf,x>952:R,qv}
   -1   198 zlm{a<3342:A,s<1679:R,m<2645:A,A}
   -1   199 zd{x<2278:A,A}
   -1   200 qzn{x>1539:kcn,x<899:gmk,a>3677:mf,nxv}
   -1   201 spv{a>3553:A,x<796:R,A}
   -1   202 pq{a>1702:A,A}
   -1   203 jg{x>1636:R,s>883:A,A}
   -1   204 ln{m<2681:sz,x>1597:xh,fjl}
   -1   205 cm{m>2541:R,m>2529:R,R}
   -1   206 jh{x>840:cd,qj}
   -1   207 fjl{m<2771:A,R}
   -1   208 tm{m<654:ljp,rq}
   -1   209 jtv{s<981:A,R}
   -1   210 hh{a>578:A,m<2576:R,A}
   -1   211 jd{x>1334:zlm,s>1373:jq,m<2656:xmf,A}
   -1   212 vm{a<185:A,R}
   -1   213 ztd{s>1957:zfx,m<2530:vbv,a>1427:mj,nd}
   -1   214 nt{m>3040:R,x>718:R,A}
   -1   215 tn{m>3798:gcl,a<1797:st,fvf}
   -1   216 zh{s<2000:gh,lm}
   -1   217 gjp{a<2724:clq,mlh}
   -1   218 ps{m<3076:nml,s>2270:gq,a>217:lzl,kq}
   -1   219 ff{m<2438:R,m>2450:A,x<2100:R,R}
   -1   220 bt{x>2739:fg,a>921:hg,lz}
   -1   221 cvp{x>2263:A,R}
   -1   222 zst{a<3607:R,s>3076:rlv,A}
   -1   223 thv{m>1517:R,s<3794:A,R}
   -1   224 dg{x<2840:R,A}
   -1   225 tsk{s>964:kk,a<284:R,A}
   -1   226 mnt{a<3097:ff,s>3224:R,s<3050:A,spz}
   -1   227 nxv{m>2512:pp,ssr}
   -1   228 tfx{a<2681:A,m<2470:A,s>2617:A,R}
   -1   229 qkv{x<3136:A,s>1837:bk,a>2777:ms,R}
   -1   230 tcr{x<2657:ml,x<2916:jvz,R}
   -1   231 bf{a<340:R,m>838:A,A}
   -1   232 kp{m>3075:czp,pv}
   -1   233 rcb{a<3527:A,gxd}
   -1   234 njm{a>2813:pn,a>2694:db,gj}
   -1   235 bfn{a<3454:nc,a>3659:qnz,spv}
   -1   236 dl{s<860:nxl,x<2576:A,x>3419:R,A}
   -1   237 scz{s<2078:prt,a>2902:lx,m<2458:gjp,sc}
   -1   238 zrk{a<3119:A,m<2147:R,A}
   -1   239 jfq{a>944:A,R}
   -1   240 rg{a>3196:dkf,s<1001:thh,s>1451:qkv,spn}
   -1   241 vs{s<507:A,A}
   -1   242 hzh{a<1927:fdz,a>2326:kx,R}
   -1   243 xcq{s<1264:A,x<1418:A,A}
   -1   244 smd{a>2665:dm,x<1584:gr,x>1737:pzl,cjn}
   -1   245 ml{m>1562:R,R}
   -1   246 kl{s<3539:mz,zv}
   -1   247 jc{a<3448:R,m<458:qps,ct}
   -1   248 pbv{a>2642:R,x<2088:R,R}
   -1   249 pl{s>842:R,a>898:R,m<2348:A,R}
   -1   250 kj{a>1149:A,R}
   -1   251 qkj{x>755:A,x>264:R,m>2209:R,R}
   -1   252 jt{s<1011:lf,R}
   -1   253 fxx{s>1307:A,m>743:A,R}
   -1   254 qsp{m<428:A,s>603:A,a<3236:R,R}
   -1   255 mxq{x>3038:R,a<2129:R,a>2362:R,gv}
   -1   256 spt{x>3082:A,x>2723:R,a<1697:R,R}
   -1   257 vz{x>2056:ltx,m<3484:ds,nx}
   -1   258 cf{a<3691:R,a>3829:A,a<3760:jp,bp}
   -1   259 mh{a>2965:R,A}
   -1   260 nhf{a>1873:A,a<1699:A,a<1782:R,R}
   -1   261 kxc{x<3036:A,s>484:A,A}
   -1   262 jjb{a<1180:A,x>2202:R,s>2117:A,A}
   -1   263 lr{m<2641:R,A}
   -1   264 dsk{a>2376:A,m>3865:R,R}
   -1   265 lv{m>2171:R,A}
   -1   266 ddd{a>3297:A,s<1645:R,s>1987:R,A}
   -1   267 qnz{m>947:R,m>914:R,x>1098:A,A}
   -1   268 spz{s<3158:A,a<3217:R,R}
   -1   269 nh{m<2697:A,R}
   -1   270 fg{x<3208:R,A}
   -1   271 mr{s<2803:A,m>282:A,A}
   -1   272 vj{a<2886:A,m<2458:A,s<1064:A,A}
   -1   273 csb{s<2352:qkj,s>2383:R,s<2364:R,R}
   -1   274 jq{x<655:A,a<3265:R,R}
   -1   275 fj{m>2818:A,R}
   -1   276 mcj{a>1014:A,m<2170:R,s<2067:R,A}
   -1   277 pqh{x>2521:cch,m>1585:rdq,a>632:jgh,A}
   -1   278 pt{m<2485:R,x<2171:R,x<3169:A,A}
   -1   279 xhz{s<2286:gm,a>2005:A,m<3052:gln,A}
   -1   280 xtx{s>2721:R,A}
   -1   281 ddm{a<781:jtv,A}
   -1   282 jmk{s>2358:A,R}
   -1   283 bc{x<940:R,s>1238:R,R}
   -1   284 ztq{a>1950:A,A}
   -1   285 mrm{x<640:gtt,zx}
   -1   286 nmv{m>1076:R,x<2991:R,m>626:R,mr}
   -1   287 gtt{x>350:tr,x>199:cdj,s>1117:A,R}
   -1   288 fqk{x>3048:jqt,a<3367:R,s>284:R,A}
   -1   289 fr{s<1609:ddm,x>3355:pj,x>3181:qhj,dgs}
   -1   290 cd{x<1304:R,x>1558:R,A}
   -1   291 sxs{m<573:A,m<621:A,R}
   -1   292 th{x>3245:qhv,tcr}
   -1   293 lbg{m<3064:R,R}
   -1   294 hqq{a<3435:R,s<3410:A,A}
   -1   295 kpm{a<1405:R,m<3874:R,a>1632:R,A}
   -1   296 mlx{x>3700:R,s<915:A,x>3425:R,R}
   -1   297 sp{x>3196:A,s<311:A,x<2444:A,A}
   -1   298 jzv{m>2220:A,m<2216:A,R}
   -1   299 rlx{x<1120:cp,s<3205:dpm,m>935:smd,pgb}
   -1   300 klk{x>1851:A,x>1552:zp,a>2716:dnr,A}
   -1   301 fsn{a<2457:sfp,jk}
   -1   302 ghn{x<2652:A,x>3143:R,A}
   -1   303 gm{a<1988:R,A}
   -1   304 kn{s>2406:gdf,s<2291:gss,x<2256:csb,tvv}
   -1   305 mkp{a<1887:R,kxc}
   -1   306 gz{s<774:R,s<1102:R,x>2835:A,A}
   -1   307 dtc{x>2488:A,R}
   -1   308 kfj{m<2250:tc,m<2316:hqq,a>3189:qbn,pjj}
   -1   309 pfm{s<224:R,x>1157:vrb,A}
   -1   310 vd{m>3736:rfj,kg}
   -1   311 dt{m>3707:R,x<572:A,x<700:R,A}
   -1   312 zvp{x<1403:R,s>1054:R,m<2662:A,A}
   -1   313 xh{s>1392:R,x>2537:A,m<2750:A,A}
   -1   314 gkm{x>396:hnv,A}
   -1   315 pd{s<1996:A,x<2867:R,x<3439:A,A}
   -1   316 bk{a>2542:A,R}
   -1   317 fjx{x>2752:R,x>2469:gk,a>3813:cvp,vv}
   -1   318 fcn{m>2471:sds,s>2272:vlb,m<2202:klx,jvn}
   -1   319 jqj{x>1232:bvv,x>475:rf,xx}
   -1   320 pjj{a>2841:R,R}
   -1   321 mj{s>1093:clc,s<657:kst,jvs}
   -1   322 zvt{m<2975:R,s>2275:R,A}
   -1   323 ms{m<1447:A,A}
   -1   324 fd{x<2370:A,R}
   -1   325 rrr{x<1596:xs,a<3274:dl,lh}
   -1   326 lrd{a<1963:R,a>2013:A,m>2694:R,R}
   -1   327 zj{s<3209:zd,a>1906:sq,x<2414:kfk,tgv}
   -1   328 lk{s>3507:R,x>2530:nq,m<2457:fpz,R}
   -1   329 vr{x>572:A,s<1886:R,R}
   -1   330 ggg{s<2984:R,s<3128:A,R}
   -1   331 pdv{s>2449:A,s>2368:A,a<1746:R,A}
   -1   332 mhg{x<2744:R,m<2735:R,A}
   -1   333 klg{s<2159:R,m>2315:A,A}
   -1   334 rnz{m<2329:R,A}
   -1   335 ld{x>3451:A,a<1561:A,R}
   -1   336 bdv{m>2265:A,x>1794:A,a>3580:A,A}
   -1   337 rzx{m<2184:R,m<2308:A,R}
   -1   338 czn{m>584:A,rv}
   -1   339 kgr{m>3577:vs,m<3119:R,nvx}
   -1   340 fdz{a>1650:R,m<2604:A,R}
   -1   341 js{s<2242:qzn,fjt}
   -1   342 crj{m<227:R,s<2793:A,m>410:A,A}
   -1   343 pk{m<2745:R,R}
   -1   344 mz{s>3189:A,m>2232:A,R}
   -1   345 vrz{a>3637:slp,x>2160:hqn,s>2879:R,cm}
   -1   346 slp{x>1600:A,R}
   -1   347 lz{m>2616:A,hh}
   -1   348 hnv{m>1712:A,m>1568:R,a>648:R,R}
   -1   349 jgh{m<1485:R,s>1699:R,s<872:A,A}
   -1   350 zq{a<678:A,R}
   -1   351 gss{x<1901:rzx,x>2820:bft,a<3107:bqs,A}
   -1   352 nd{x<1588:rx,m>2720:rj,bt}
   -1   353 gc{m<943:R,m>1007:A,R}
   -1   354 gln{x<954:R,m>2958:A,m>2911:R,A}
   -1   355 qnv{m<1295:czn,a<549:rfl,a<790:pqh,lll}
   -1   356 kr{m>2434:R,R}
   -1   357 hq{s>1938:R,m<3214:R,A}
   -1   358 jsn{m<2299:R,a<1534:pl,x<1178:fs,sbj}
   -1   359 cdj{x>288:A,R}
   -1   360 kmd{m>2187:A,m>2106:R,R}
   -1   361 cp{m<1356:nnl,s>3389:bcn,a<1891:gkm,fm}
   -1   362 rfl{s<2240:A,m<1728:A,hz}
   -1   363 xb{s<2075:A,m<3736:qcg,x<2023:gs,kpm}
   -1   364 bl{m<1526:bsm,R}
   -1   365 fqt{x>693:R,A}
   -1   366 kx{s<365:R,x<2163:R,m<2600:A,A}
   -1   367 sqh{s>2420:A,a>2649:tv,m<2481:R,R}
   -1   368 nx{m>3762:pm,rn}
   -1   369 kk{m>2759:A,m<2677:A,x>730:R,R}
   -1   370 slx{x>1117:R,x>483:R,R}
   -1   371 sf{a>641:lk,lzp}
   -1   372 hbt{m>2498:A,a>2865:A,A}
   -1   373 czj{m<277:R,a>2101:R,a<2064:A,R}
   -1   374 rf{x<831:A,x<1053:R,A}
   -1   375 hf{x>2488:fqv,s<946:kgr,jls}
   -1   376 zvh{x>3760:A,s<1547:R,A}
   -1   377 pn{m<2566:zkc,a<3038:A,A}
   -1   378 zjc{s<3764:A,x>2644:A,A}
   -1   379 gns{m>823:R,m>777:R,R}
   -1   380 sd{s>2599:vz,s<1700:qrq,m>3290:fxr,mmt}
   -1   381 nnl{m>514:R,s<3404:crj,a>1590:R,fqt}
   -1   382 fl{a<2794:kfh,x<3266:rcb,s>1035:jc,znr}
   -1   383 qgr{a>337:A,A}
   -1   384 mhq{m>721:R,R}
   -1   385 vb{x<1268:A,x>1326:A,A}
   -1   386 npv{m>2886:sd,a<2542:ztd,m>2411:dzh,dvr}
   -1   387 rpq{m>815:rg,fl}
   -1   388 db{x<1494:A,A}
   -1   389 mmt{a>2140:bz,a>1253:vrs,a<514:ps,kp}
   -1   390 qjg{a>1444:R,x>463:R,A}
   -1   391 mlh{x>1576:kr,hx}
   -1   392 sm{m<2757:R,a<2141:R,a>2298:A,A}
   -1   393 bvv{s>1255:R,x<1719:bmn,A}
   -1   394 mbx{a>3513:vfn,m<2819:A,bmh}
   -1   395 qcg{x<2137:A,m<3509:R,m>3592:R,R}
   -1   396 qc{a>2250:R,x>639:A,A}
   -1   397 lb{x>2504:A,A}
   -1   398 mp{a<415:R,R}
   -1   399 cch{a<630:A,x>2677:R,A}
   -1   400 czp{s>2241:kgs,x<1422:zjs,m>3153:pmb,dvl}
   -1   401 gq{a<293:A,A}
   -1   402 xt{x<1922:A,x<3048:A,x>3585:A,R}
   -1   403 zzh{x<1597:bc,jt}
   -1   404 spn{x>3087:R,a>2707:A,fd}
   -1   405 vlb{m>2323:A,a>1028:pdv,x<2660:R,ndd}
   -1   406 zkc{a<3038:A,a<3172:R,s<2955:R,R}
   -1   407 nr{x<1951:R,vj}
   -1   408 cn{s>2060:A,A}
   -1   409 ndd{m<2189:R,s<2552:A,a<625:A,A}
   -1   410 fsg{s<489:A,s>691:A,s<594:R,R}
   -1   411 gmg{m>2283:A,A}
   -1   412 klx{m>2134:mcj,jjb}
   -1   413 cg{a>2687:vd,m<3644:ql,m>3779:dsk,rp}
   -1   414 xx{s<1226:qsp,a<3457:zbd,A}
   -1   415 hn{x<3059:zjc,a<1420:lcf,nxh}
   -1   416 nxh{m>3268:R,m<3061:R,x>3496:R,A}
   -1   417 qsm{a<3225:R,a<3253:A,A}
   -1   418 lgj{x>1089:gns,s<812:fsg,m>799:R,fxx}
   -1   419 zcx{m>1148:A,R}
   -1   420 npc{s<2193:A,R}
   -1   421 dpm{m>1055:hsq,x>1462:njj,m<457:pq,md}
   -1   422 rs{m>892:bfn,lgj}
   -1   423 qhv{x>3633:zvh,m<1679:ld,A}
   -1   424 dkf{s<781:A,s<1484:A,A}
   -1   425 zgq{s<784:A,s<1187:lrc,x>663:A,R}
   -1   426 qmn{x<2008:xnh,a<2168:jv,msr}
   -1   427 lcf{m>3120:A,R}
   -1   428 nq{s>3242:A,s<2983:R,R}
   -1   429 bqs{s<2248:A,a<2832:A,R}
   -1   430 cc{a>2485:R,R}
   -1   431 lx{s<2723:bm,m<2462:mnt,tz}
   -1   432 ls{x<649:A,R}
   -1   433 sln{x<2203:A,m>2647:A,x>2418:R,A}
   -1   434 rdq{a>698:A,a<603:R,s<2377:R,A}
   -1   435 prt{a>3003:zm,a<2760:pbv,nr}
   -1   436 ns{s<626:A,s>1295:R,R}
   -1   437 jr{a<1614:A,R}
   -1   438 pm{m>3874:R,m<3814:R,R}
   -1   439 hpg{m>2759:A,fh}
   -1   440 jxh{s<547:A,x>1116:R,R}
   -1   441 df{x<705:A,x<1278:A,m<2749:zvp,fj}
   -1   442 xhp{x>2916:fr,qnv}
   -1   443 dnr{x>1463:R,A}
   -1   444 sgl{x>2396:A,a<3778:A,s<1318:R,A}
   -1   445 kg{s>2376:A,a<3276:R,A}
   -1   446 scl{m>2865:R,x<2305:A,s<820:R,A}
   -1   447 ds{x>1336:ll,jmd}
   -1   448 sz{a<1833:A,a>1960:A,A}
   -1   449 fjt{m>2506:vrz,kpn}
   -1   450 znd{s<1960:A,a>1444:R,R}
   -1   451 hg{s<1136:sln,s>1670:A,R}
   -1   452 gmk{s>928:R,x<384:A,x>690:A,A}
   -1   453 txs{s<832:ls,a>2641:R,nxc}
   -1   454 tx{x<3524:R,a<2350:R,R}
   -1   455 cv{m<2804:sm,m<2840:mrt,x>2603:rc,scl}
   -1   456 tzv{a<2633:R,m>2586:A,a<2660:A,R}
   -1   457 qkt{a>3196:A,x>1972:A,s>3281:A,A}
   -1   458 hsq{m<1524:R,m<1852:A,x<1418:vb,R}
   -1   459 kv{s<1341:R,A}
   -1   460 mm{m>2787:dc,m>2723:ng,s<914:krn,jd}
   -1   461 qb{m>2820:gz,s<561:sp,R}
   -1   462 tt{m<1529:A,A}
   -1   463 vh{s<2541:R,s>2565:A,s>2553:R,R}
   -1   464 hs{a<2367:R,m<1602:R,x<684:A,A}
   -1   465 pmb{x>2897:R,R}
   -1   466 sht{a>3271:R,rcl}
   -1   467 rcl{a<2645:R,a>2957:R,R}
   -1   468 zfx{s<2783:fcn,a<1310:sf,m<2364:kl,zj}
   -1   469 zbd{a<2989:R,R}
   -1   470 mvc{m<808:znd,a<1515:ndk,m>1132:pd,gc}
   -1   471 pxh{a<3082:gmg,s>1605:qmz,kv}
   -1   472 st{x>2896:R,m>3700:R,R}
   -1   473 sc{a>2771:jgn,s>2920:zr,x>2029:kcp,sqh}
   -1   474 sq{a>2235:R,a>2057:A,m<2594:R,lrd}
   -1   475 zm{s>754:R,a<3168:lrf,x<2383:qsm,hmg}
   -1   476 fcc{x<2813:A,R}
   -1   477 ks{x<1866:R,x<2087:R,a>3475:R,R}
   -1   478 rp{m>3705:A,a<2282:mt,x>2043:cc,jj}
   -1   479 qzh{s<841:A,nhf}
   -1   480 gxd{s>1409:R,A}
   -1   481 hcc{a>2754:R,m<578:A,a<2348:R,R}
   -1   482 lqk{s<1698:R,s>1859:R,m>2841:R,R}
   -1   483 kfh{s>1352:A,A}
   -1   484 gcl{a>2466:A,R}
   -1   485 jk{a>2640:R,a>2561:fcc,fz}
   -1   486 gsh{m<2121:grb,jdd}
   -1   487 rq{x<1115:R,a<1002:bf,A}
   -1   488 jvz{s>2361:A,x>2818:R,A}
   -1   489 rc{a<2074:A,x<3176:A,x>3648:A,R}
   -1   490 rxh{s<1077:R,a>3482:A,m<3457:A,A}
   -1   491 ll{m<3123:A,xf}
   -1   492 fh{s<162:A,m>2702:A,R}
   -1   493 tgv{m>2662:R,m>2514:R,A}
   -1   494 fqv{m>3293:A,a<1586:R,R}
   -1   495 tvv{m>2198:R,a<3307:jmk,A}
   -1   496 hcg{m>2202:A,R}
   -1   497 rlv{a>3748:R,a>3685:R,m>2670:A,R}
   -1   498 mf{a>3816:R,xq}
   -1   499 hx{a<2807:R,s>3296:R,m>2437:A,R}
   -1   500 vsg{a<3230:A,s<1116:R,A}
   -1   501 tp{m>2765:zq,a>516:A,R}
   -1   502 kst{m<2671:hzh,x<2530:pfm,s>365:mkp,hpg}
   -1   503 bm{x<1908:R,R}
   -1   504 njj{a<1976:R,s>2758:ggg,s>2490:R,R}
   -1   505 tz{a<3156:kc,s>3280:R,R}
   -1   506 xmf{s>1127:A,a<3411:R,R}
   -1   507 lpm{s>1361:R,R}
   -1   508 xtj{a<1705:mvc,m<505:qzz,a<1868:rz,lzr}
   -1   509 nn{s<3625:R,a<1356:R,m>1462:A,A}
   -1   510 
   -1   511 {x=1065,m=825,a=1002,s=2038}
   -1   512 {x=1108,m=1570,a=2715,s=995}
   -1   513 {x=787,m=2716,a=64,s=918}
   -1   514 {x=131,m=39,a=821,s=527}
   -1   515 {x=390,m=1630,a=2,s=3328}
   -1   516 {x=843,m=446,a=2851,s=561}
   -1   517 {x=567,m=496,a=38,s=2250}
   -1   518 {x=127,m=313,a=2172,s=1319}
   -1   519 {x=494,m=130,a=875,s=563}
   -1   520 {x=948,m=1634,a=2547,s=29}
   -1   521 {x=833,m=431,a=2134,s=2478}
   -1   522 {x=898,m=2498,a=547,s=30}
   -1   523 {x=348,m=1293,a=846,s=851}
   -1   524 {x=234,m=1673,a=344,s=1551}
   -1   525 {x=1219,m=939,a=619,s=1537}
   -1   526 {x=1972,m=76,a=488,s=288}
   -1   527 {x=2525,m=850,a=660,s=1964}
   -1   528 {x=1878,m=2205,a=1535,s=986}
   -1   529 {x=1260,m=905,a=550,s=1618}
   -1   530 {x=365,m=885,a=3496,s=2405}
   -1   531 {x=83,m=98,a=1096,s=2337}
   -1   532 {x=3972,m=340,a=2261,s=6}
   -1   533 {x=1313,m=709,a=1825,s=5}
   -1   534 {x=854,m=1952,a=75,s=2149}
   -1   535 {x=490,m=8,a=54,s=1102}
   -1   536 {x=158,m=1191,a=443,s=419}
   -1   537 {x=47,m=641,a=1084,s=82}
   -1   538 {x=738,m=184,a=781,s=1066}
   -1   539 {x=556,m=48,a=1233,s=284}
   -1   540 {x=696,m=3569,a=1224,s=3026}
   -1   541 {x=1500,m=2037,a=352,s=400}
   -1   542 {x=337,m=27,a=695,s=1827}
   -1   543 {x=96,m=1276,a=999,s=868}
   -1   544 {x=524,m=1542,a=465,s=132}
   -1   545 {x=2352,m=50,a=1,s=1392}
   -1   546 {x=2604,m=25,a=549,s=395}
   -1   547 {x=211,m=1747,a=212,s=293}
   -1   548 {x=2099,m=494,a=3307,s=152}
   -1   549 {x=1980,m=413,a=48,s=95}
   -1   550 {x=1627,m=828,a=1046,s=59}
   -1   551 {x=471,m=1752,a=66,s=418}
   -1   552 {x=43,m=495,a=89,s=3032}
   -1   553 {x=577,m=1034,a=392,s=584}
   -1   554 {x=1060,m=1579,a=1416,s=30}
   -1   555 {x=2493,m=424,a=611,s=924}
   -1   556 {x=1703,m=965,a=228,s=1780}
   -1   557 {x=2339,m=143,a=2647,s=79}
   -1   558 {x=2677,m=1682,a=1922,s=1127}
   -1   559 {x=253,m=1493,a=360,s=1183}
   -1   560 {x=344,m=1220,a=964,s=1781}
   -1   561 {x=751,m=2234,a=1272,s=2060}
   -1   562 {x=415,m=1831,a=1080,s=1463}
   -1   563 {x=3565,m=1951,a=2107,s=531}
   -1   564 {x=979,m=762,a=2641,s=1010}
   -1   565 {x=503,m=603,a=271,s=301}
   -1   566 {x=127,m=353,a=887,s=502}
   -1   567 {x=301,m=2968,a=1046,s=2802}
   -1   568 {x=2,m=1303,a=1192,s=2492}
   -1   569 {x=163,m=18,a=911,s=623}
   -1   570 {x=538,m=21,a=218,s=1679}
   -1   571 {x=281,m=1425,a=2271,s=98}
   -1   572 {x=925,m=635,a=1166,s=1269}
   -1   573 {x=2589,m=1375,a=84,s=2312}
   -1   574 {x=681,m=855,a=2330,s=499}
   -1   575 {x=937,m=431,a=60,s=449}
   -1   576 {x=449,m=20,a=566,s=366}
   -1   577 {x=175,m=2031,a=20,s=2128}
   -1   578 {x=3776,m=1006,a=2109,s=1698}
   -1   579 {x=2729,m=707,a=1155,s=597}
   -1   580 {x=2794,m=2123,a=39,s=556}
   -1   581 {x=274,m=818,a=2552,s=725}
   -1   582 {x=1187,m=521,a=2668,s=2039}
   -1   583 {x=322,m=630,a=2322,s=924}
   -1   584 {x=325,m=1615,a=1342,s=191}
   -1   585 {x=2330,m=3095,a=968,s=622}
   -1   586 {x=386,m=553,a=2856,s=2324}
   -1   587 {x=1429,m=2482,a=293,s=178}
   -1   588 {x=1730,m=277,a=103,s=168}
   -1   589 {x=863,m=91,a=1562,s=28}
   -1   590 {x=2747,m=62,a=1326,s=520}
   -1   591 {x=572,m=216,a=161,s=405}
   -1   592 {x=1341,m=215,a=1349,s=708}
   -1   593 {x=2276,m=1408,a=384,s=1903}
   -1   594 {x=54,m=781,a=944,s=1124}
   -1   595 {x=779,m=1799,a=1951,s=3282}
   -1   596 {x=1471,m=2503,a=90,s=570}
   -1   597 {x=35,m=2218,a=66,s=402}
   -1   598 {x=767,m=21,a=3169,s=3129}
   -1   599 {x=886,m=292,a=3069,s=1774}
   -1   600 {x=1144,m=60,a=54,s=899}
   -1   601 {x=488,m=637,a=11,s=507}
   -1   602 {x=1769,m=339,a=1521,s=978}
   -1   603 {x=634,m=300,a=438,s=1819}
   -1   604 {x=584,m=113,a=1324,s=889}
   -1   605 {x=872,m=119,a=1941,s=804}
   -1   606 {x=25,m=231,a=488,s=1696}
   -1   607 {x=267,m=257,a=798,s=203}
   -1   608 {x=63,m=27,a=2067,s=3378}
   -1   609 {x=46,m=1007,a=427,s=3493}
   -1   610 {x=748,m=735,a=1429,s=49}
   -1   611 {x=1767,m=177,a=64,s=1281}
   -1   612 {x=547,m=95,a=685,s=48}
   -1   613 {x=824,m=610,a=215,s=244}
   -1   614 {x=447,m=1137,a=2254,s=834}
   -1   615 {x=269,m=750,a=1078,s=1787}
   -1   616 {x=2830,m=138,a=1009,s=153}
   -1   617 {x=3005,m=523,a=804,s=181}
   -1   618 {x=328,m=2325,a=2498,s=1919}
   -1   619 {x=690,m=42,a=3749,s=1000}
   -1   620 {x=1348,m=332,a=3277,s=1621}
   -1   621 {x=259,m=414,a=3105,s=1851}
   -1   622 {x=350,m=2033,a=185,s=917}
   -1   623 {x=371,m=872,a=2002,s=33}
   -1   624 {x=408,m=486,a=40,s=1297}
   -1   625 {x=105,m=201,a=914,s=512}
   -1   626 {x=412,m=1559,a=1124,s=385}
   -1   627 {x=2286,m=863,a=870,s=1639}
   -1   628 {x=326,m=3217,a=1704,s=152}
   -1   629 {x=2590,m=2552,a=1053,s=767}
   -1   630 {x=1969,m=1574,a=698,s=1802}
   -1   631 {x=144,m=2271,a=2230,s=1154}
   -1   632 {x=163,m=2394,a=2393,s=2536}
   -1   633 {x=111,m=55,a=66,s=1050}
   -1   634 {x=2419,m=567,a=365,s=2870}
   -1   635 {x=675,m=2524,a=1051,s=1230}
   -1   636 {x=289,m=21,a=413,s=309}
   -1   637 {x=3093,m=337,a=623,s=106}
   -1   638 {x=608,m=64,a=1961,s=354}
   -1   639 {x=501,m=792,a=69,s=25}
   -1   640 {x=2296,m=214,a=92,s=748}
   -1   641 {x=349,m=861,a=872,s=15}
   -1   642 {x=3303,m=3688,a=217,s=104}
   -1   643 {x=1973,m=152,a=825,s=573}
   -1   644 {x=2342,m=2066,a=205,s=72}
   -1   645 {x=1989,m=55,a=32,s=1454}
   -1   646 {x=2325,m=2275,a=25,s=42}
   -1   647 {x=229,m=117,a=2282,s=1426}
   -1   648 {x=1161,m=1640,a=1337,s=52}
   -1   649 {x=20,m=68,a=2647,s=312}
   -1   650 {x=772,m=1009,a=473,s=1476}
   -1   651 {x=1096,m=443,a=303,s=50}
   -1   652 {x=856,m=3787,a=1871,s=666}
   -1   653 {x=1736,m=1722,a=171,s=3004}
   -1   654 {x=896,m=665,a=1633,s=117}
   -1   655 {x=167,m=543,a=928,s=554}
   -1   656 {x=56,m=2365,a=642,s=974}
   -1   657 {x=36,m=53,a=1328,s=17}
   -1   658 {x=242,m=1517,a=1178,s=458}
   -1   659 {x=3863,m=539,a=2501,s=748}
   -1   660 {x=389,m=936,a=938,s=2437}
   -1   661 {x=62,m=2277,a=1906,s=2242}
   -1   662 {x=950,m=410,a=297,s=476}
   -1   663 {x=3599,m=813,a=12,s=1348}
   -1   664 {x=210,m=2617,a=86,s=3035}
   -1   665 {x=528,m=57,a=858,s=424}
   -1   666 {x=1287,m=880,a=2338,s=138}
   -1   667 {x=59,m=769,a=631,s=2770}
   -1   668 {x=984,m=3556,a=2484,s=483}
   -1   669 {x=908,m=2431,a=282,s=601}
   -1   670 {x=608,m=299,a=1085,s=504}
   -1   671 {x=3333,m=454,a=1227,s=129}
   -1   672 {x=993,m=952,a=860,s=161}
   -1   673 {x=296,m=935,a=967,s=985}
   -1   674 {x=2984,m=7,a=1728,s=738}
   -1   675 {x=3,m=2257,a=1460,s=1664}
   -1   676 {x=56,m=869,a=188,s=2882}
   -1   677 {x=1686,m=295,a=10,s=2973}
   -1   678 {x=38,m=517,a=1597,s=935}
   -1   679 {x=885,m=1334,a=2046,s=1128}
   -1   680 {x=2131,m=970,a=909,s=419}
   -1   681 {x=98,m=1162,a=1478,s=750}
   -1   682 {x=161,m=1484,a=1036,s=423}
   -1   683 {x=1801,m=917,a=253,s=415}
   -1   684 {x=3460,m=471,a=1183,s=2267}
   -1   685 {x=2025,m=197,a=963,s=46}
   -1   686 {x=133,m=283,a=2460,s=214}
   -1   687 {x=339,m=624,a=1371,s=1042}
   -1   688 {x=660,m=685,a=98,s=307}
   -1   689 {x=1021,m=959,a=1197,s=287}
   -1   690 {x=2882,m=939,a=1095,s=284}
   -1   691 {x=474,m=33,a=79,s=817}
   -1   692 {x=317,m=385,a=1461,s=369}
   -1   693 {x=890,m=3413,a=478,s=1210}
   -1   694 {x=20,m=481,a=151,s=1095}
   -1   695 {x=231,m=517,a=1915,s=551}
   -1   696 {x=532,m=898,a=687,s=1302}
   -1   697 {x=7,m=415,a=114,s=461}
   -1   698 {x=285,m=353,a=2247,s=91}
   -1   699 {x=510,m=635,a=222,s=906}
   -1   700 {x=567,m=426,a=1318,s=597}
   -1   701 {x=1779,m=518,a=3349,s=441}
   -1   702 {x=513,m=1636,a=2020,s=203}
   -1   703 {x=1553,m=1136,a=738,s=137}
   -1   704 {x=1195,m=320,a=692,s=3486}
   -1   705 {x=1692,m=1715,a=1541,s=1538}
   -1   706 {x=128,m=492,a=104,s=682}
   -1   707 {x=157,m=960,a=1801,s=282}
   -1   708 {x=301,m=1944,a=3292,s=362}
   -1   709 {x=222,m=738,a=1020,s=479}
   -1   710 {x=12,m=762,a=1286,s=401}

diff --git a/2023/19/solution.rs b/2023/19/solution.rs

@@ -0,0 +1,132 @@
   -1     1 use std::collections::HashMap;
   -1     2 
   -1     3 #[path = "../lib.rs"]
   -1     4 mod lib;
   -1     5 
   -1     6 #[derive(Debug)]
   -1     7 enum Rule {
   -1     8     Less(usize, u64, String),
   -1     9     More(usize, u64, String),
   -1    10     Always(String),
   -1    11 }
   -1    12 
   -1    13 fn get_cat(s: &str) -> Option<usize> {
   -1    14     return match s {
   -1    15         "x" => Some(0),
   -1    16         "m" => Some(1),
   -1    17         "a" => Some(2),
   -1    18         "s" => Some(3),
   -1    19         _ => None,
   -1    20     };
   -1    21 }
   -1    22 
   -1    23 fn parse_rule(s: &str) -> Option<Rule> {
   -1    24     if let Some((c, rest)) = s.split_once('>') {
   -1    25         let (k, target) = rest.split_once(':')?;
   -1    26         return Some(Rule::More(
   -1    27             get_cat(c)?,
   -1    28             k.parse().ok()?,
   -1    29             target.to_string(),
   -1    30         ));
   -1    31     } else if let Some((c, rest)) = s.split_once('<') {
   -1    32         let (k, target) = rest.split_once(':')?;
   -1    33         return Some(Rule::Less(
   -1    34             get_cat(c)?,
   -1    35             k.parse().ok()?,
   -1    36             target.to_string(),
   -1    37         ));
   -1    38     } else {
   -1    39         return Some(Rule::Always(s.to_string()));
   -1    40     }
   -1    41 }
   -1    42 
   -1    43 fn parse_workflow(line: &str, workflows: &mut HashMap<String, Vec<Rule>>) -> Option<()> {
   -1    44     let mut rules = vec![];
   -1    45     let (name, rules_s) = line.strip_suffix('}')?.split_once('{')?;
   -1    46     for s in rules_s.split(',') {
   -1    47         rules.push(parse_rule(s)?);
   -1    48     }
   -1    49     workflows.insert(name.to_string(), rules);
   -1    50     return Some(());
   -1    51 }
   -1    52 
   -1    53 fn parse_part(line: &str) -> Option<[[u64; 2]; 4]> {
   -1    54     let mut result = [[0, 0]; 4];
   -1    55     for s in line.strip_prefix('{')?.strip_suffix('}')?.split(',') {
   -1    56         let (c, k) = s.split_once('=')?;
   -1    57         let kk = k.parse().ok()?;
   -1    58         result[get_cat(c)?] = [kk, kk + 1];
   -1    59     }
   -1    60     return Some(result);
   -1    61 }
   -1    62 
   -1    63 fn apply_workflows(part: [[u64; 2]; 4], workflows: &HashMap<String, Vec<Rule>>, name: &str) -> u64 {
   -1    64     if name == "A" {
   -1    65         return part.iter().map(|[a, b]| b - a).product();
   -1    66     } else if name == "R" {
   -1    67         return 0;
   -1    68     }
   -1    69 
   -1    70     let mut sum = 0;
   -1    71     let mut mpart = part.clone();
   -1    72     let workflow = workflows.get(name).unwrap();
   -1    73 
   -1    74     for rule in workflow.iter() {
   -1    75         match rule {
   -1    76             Rule::Less(c, k, target) => {
   -1    77                 if mpart[*c][0] < *k {
   -1    78                     if mpart[*c][1] <= *k {
   -1    79                         sum += apply_workflows(mpart, workflows, target);
   -1    80                         return sum;
   -1    81                     } else {
   -1    82                         let mut p = mpart.clone();
   -1    83                         p[*c][1] = *k;
   -1    84                         mpart[*c][0] = *k;
   -1    85                         sum += apply_workflows(p, workflows, target);
   -1    86                     }
   -1    87                 }
   -1    88             }
   -1    89             Rule::More(c, k, target) => {
   -1    90                 if mpart[*c][1] > *k {
   -1    91                     if mpart[*c][0] >= *k {
   -1    92                         sum += apply_workflows(mpart, workflows, target);
   -1    93                         return sum;
   -1    94                     } else {
   -1    95                         let mut p = mpart.clone();
   -1    96                         p[*c][0] = *k + 1;
   -1    97                         mpart[*c][1] = *k + 1;
   -1    98                         sum += apply_workflows(p, workflows, target);
   -1    99                     }
   -1   100                 }
   -1   101             }
   -1   102             Rule::Always(target) => {
   -1   103                 sum += apply_workflows(mpart, workflows, target);
   -1   104                 return sum;
   -1   105             }
   -1   106         }
   -1   107     }
   -1   108 
   -1   109     unreachable!();
   -1   110 }
   -1   111 
   -1   112 fn main() {
   -1   113     let mut workflows = HashMap::new();
   -1   114     let mut rules_done = false;
   -1   115     let mut sum = 0;
   -1   116 
   -1   117     for line in lib::iter_input() {
   -1   118         if rules_done {
   -1   119             let part = parse_part(&line).unwrap();
   -1   120             if apply_workflows(part, &workflows, "in") != 0 {
   -1   121                 sum += part.iter().map(|[a, _]| a).sum::<u64>();
   -1   122             }
   -1   123         } else if line == "" {
   -1   124             rules_done = true;
   -1   125         } else {
   -1   126             parse_workflow(&line, &mut workflows).unwrap();
   -1   127         }
   -1   128     }
   -1   129 
   -1   130     println!("part1: {}", sum);
   -1   131     println!("part2: {}", apply_workflows([[1, 4001]; 4], &workflows, "in"));
   -1   132 }

diff --git a/2023/19/test.txt b/2023/19/test.txt

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