summaryrefslogtreecommitdiff
path: root/2023
diff options
context:
space:
mode:
Diffstat (limited to '2023')
-rw-r--r--2023/day19.rs140
-rw-r--r--2023/in/day19.pzl770
-rw-r--r--2023/in/day19.ref17
3 files changed, 927 insertions, 0 deletions
diff --git a/2023/day19.rs b/2023/day19.rs
new file mode 100644
index 0000000..f8ad1d8
--- /dev/null
+++ b/2023/day19.rs
@@ -0,0 +1,140 @@
+#![allow(dead_code)]
+#![allow(unused_variables)]
+#![allow(unused_mut)]
+use std::cmp::Ordering;
+use std::collections::HashMap;
+use std::env;
+use std::fs::File;
+use std::io::Read;
+
+#[derive(Debug, Clone)]
+struct Comp {
+ i: usize,
+ comp: Ordering,
+ val: i32,
+ next: String,
+}
+
+type Comps = Vec<Comp>;
+
+fn name_to_num(c: char) -> usize {
+ match c {
+ 'x' => return 0,
+ 'm' => return 1,
+ 'a' => return 2,
+ 's' => return 3,
+ _ => panic!(),
+ }
+}
+
+fn parse_comp(s: &str) -> Comp {
+ let mut c: Comp = Comp {
+ i: 0,
+ comp: Ordering::Equal,
+ val: 0,
+ next: "".to_string(),
+ };
+
+ if !s.contains(":") {
+ c.i = 0;
+ c.comp = Ordering::Greater;
+ c.val = -1;
+ c.next = s.to_string();
+ return c;
+ }
+
+ let (a, b) = s.split_once(":").unwrap();
+
+ if a.contains("<") {
+ let (i, val) = a.split_once("<").unwrap();
+ c.comp = Ordering::Less;
+ c.i = name_to_num(i.chars().next().unwrap());
+ c.val = val.parse().unwrap();
+ } else if a.contains(">") {
+ let (i, val) = a.split_once(">").unwrap();
+ c.comp = Ordering::Greater;
+ c.i = name_to_num(i.chars().next().unwrap());
+ c.val = val.parse().unwrap();
+ } else {
+ panic!();
+ }
+ c.next = b.to_string();
+
+ return c;
+}
+
+fn parse_wf(s: &str) -> (&str, Comps) {
+ let (a, b) = s.split_once('{').unwrap();
+ let b = b.trim_end_matches('}');
+
+ let mut comps: Comps = Vec::new();
+ for comp in b.split(',') {
+ comps.push(parse_comp(comp));
+ }
+
+ (a, comps)
+}
+
+fn parse_vals(mut s: &str) -> Vec<i32> {
+ let mut vec: Vec<i32> = Vec::new();
+ s = &s[1..s.len() - 1];
+ for mut v in s.split(',') {
+ v = &v[2..];
+ let v: u32 = v.parse().unwrap();
+ vec.push(v as i32);
+ }
+ vec
+}
+
+fn rec(wf: &str, part: &Vec<i32>, wfs: &HashMap<&str, Comps>) -> bool {
+ if wf == "R" {
+ return false;
+ } else if wf == "A" {
+ return true;
+ }
+
+ let comps = wfs.get(wf).unwrap();
+ for comp in comps {
+ if part[comp.i].cmp(&comp.val) == comp.comp {
+ return rec(&comp.next, part, wfs);
+ }
+ }
+ panic!();
+}
+
+fn main() {
+ let args: Vec<String> = env::args().collect();
+ let filename = if args.len() == 1 {
+ "in/".to_owned() + args[0].split('/').last().unwrap() + ".pzl"
+ } else {
+ args[1].clone()
+ };
+ let mut f = File::open(filename).expect("cannot open file");
+ let mut content = String::new();
+ f.read_to_string(&mut content).expect("cannot read file");
+ let mut paragraph = content.trim_end().split("\n\n");
+
+ let mut workflows: HashMap<&str, Comps> = HashMap::new();
+ for line in paragraph.next().unwrap().split('\n') {
+ let (key, val) = parse_wf(line);
+ workflows.insert(key, val);
+ }
+
+ let mut parts: Vec<Vec<i32>> = Vec::new();
+ for line in paragraph.next().unwrap().split('\n') {
+ parts.push(parse_vals(line));
+ }
+
+ let mut res1 = 0;
+
+ for part in parts {
+ if rec("in", &part, &workflows) {
+ res1 += part.iter().fold(0, |x, y| x + y);
+ }
+ }
+
+ let mut res2 = 0;
+
+ println!("res1: {}", res1);
+ println!("res2: {}", res2);
+}
diff --git a/2023/in/day19.pzl b/2023/in/day19.pzl
new file mode 100644
index 0000000..3491bfd
--- /dev/null
+++ b/2023/in/day19.pzl
@@ -0,0 +1,770 @@
+vr{a>3414:A,R}
+lx{x>2140:A,A}
+vkm{s>411:A,a>443:R,A}
+nr{x>1463:R,A}
+xd{m>375:R,x<2704:R,R}
+zq{s<2226:A,R}
+sgf{m>923:kq,a<801:sc,x<3251:tt,gm}
+pqh{m>3259:R,a>1418:R,s<3015:A,R}
+cg{m<3220:R,m<3292:A,a>856:R,R}
+lsf{a>424:R,R}
+cbn{m>2375:pvh,qgf}
+tl{x<3706:mf,x<3839:srt,s<2265:vdg,fjb}
+rlp{s<657:R,a<2605:A,a>2875:A,A}
+hgt{s>3010:A,A}
+lbp{a<1791:R,x>2941:dbs,s>3208:A,sxh}
+dc{a<559:R,R}
+pqm{m<1994:R,A}
+kg{x<2866:zv,a<532:mfx,dc}
+zz{x<204:A,m>3750:A,ct}
+mq{s<3238:xzl,qfs}
+csg{m<1938:A,m<1995:R,A}
+dr{a>3338:fl,a>3276:vc,A}
+gc{m>3488:A,m<2931:R,x<1506:R,R}
+pqx{x<1518:R,x<1605:R,s<3006:R,R}
+cc{a>1777:pdz,s>358:nfp,rd}
+cmb{m<758:kbc,a>2913:vdt,a>2448:dm,kv}
+xq{m<3071:tlf,s<1142:vdf,s>1530:gv,bbc}
+cn{m>919:slj,a>3064:fr,zll}
+cfd{m>1470:A,s>2179:A,m<840:hg,zcf}
+dm{a>2757:mmz,m>1033:xz,a>2638:gbh,R}
+rrm{x>716:xg,x<586:dzv,mjb}
+xhl{m>3908:R,a>1503:A,a>1326:R,A}
+zg{m>710:A,m<549:R,R}
+pls{s>1189:mv,a<1598:zs,s>762:ms,cc}
+tps{a<940:mj,x<3337:A,sm}
+lvq{x<1898:R,s<2829:A,m>3485:A,R}
+mqt{m>1462:R,A}
+in{a>1983:bz,m<1782:js,m>2851:hl,ktm}
+gx{s<1066:A,R}
+sv{x<2026:R,x>2775:bqt,nc}
+fsg{a<152:A,s<3348:R,R}
+zrk{a>875:A,m<416:R,R}
+tmx{s>3571:R,m>238:R,R}
+btg{x>3104:A,R}
+fj{x<1633:ltm,kgs}
+bs{a<1535:R,R}
+kdr{x>1967:R,R}
+vbl{a<600:mpb,s>1964:zr,ptr}
+crk{a>3107:tz,x>801:R,A}
+lc{m>3491:kr,xq}
+kqx{m>2976:kdd,m>2909:nps,a<1520:bv,cts}
+lv{a<1310:A,x>2652:A,A}
+zxs{m<875:A,ccd}
+szl{s>466:kjx,a<454:jcc,A}
+ghm{s>833:R,R}
+fzt{x<1870:psf,a<1621:gr,m<3600:lvq,ddt}
+hqv{s<948:A,a<507:A,a<738:szr,A}
+fmj{m<2475:R,s<2910:A,a>251:A,R}
+zsg{a>2629:R,A}
+cgx{x<1207:jv,kqh}
+lt{a<3161:A,m<3426:A,x<2128:A,R}
+qsz{m>3289:R,x>2566:xf,R}
+pc{s<3779:R,m<783:btp,mh}
+vt{x>3274:R,x<2529:R,hqd}
+rk{a<639:R,mqt}
+xdl{m<3533:R,R}
+vbp{s>3091:zrk,x>2865:A,qz}
+nx{s>3353:R,fmj}
+hmg{m<2202:A,R}
+gv{x<1581:R,s<1739:A,x>1695:dzj,R}
+mfq{s<1846:A,s>2187:A,R}
+zl{a<3740:qtg,A}
+sr{m>1500:rcj,qnb}
+kpc{a>741:gk,kgj}
+prc{m>3259:R,a<1739:A,a>1851:A,R}
+sqj{x>1393:pqx,x<1312:rs,x>1340:R,R}
+dbh{x<2248:cj,qx}
+zk{s>1944:A,x<2918:A,A}
+bdh{x>3416:R,A}
+bfj{a>2398:R,a<2234:A,R}
+qkl{x<1740:pp,a<435:xx,mk}
+bb{m>935:R,m>508:A,x>2922:A,R}
+skb{s>1570:A,m<3271:A,x>3470:A,R}
+zxh{m<3566:A,R}
+zhx{x<1421:xv,A}
+pd{m<3229:A,R}
+gs{m>3374:vk,m<3046:kqx,kt}
+jjr{x>2310:lmr,jdq}
+hd{s>3385:R,a>1113:R,x>314:R,A}
+vfj{m<1168:xql,fb}
+dnt{s<3071:A,A}
+tjx{a>1534:A,A}
+dtm{a<714:zhx,m<3352:zm,slv}
+cq{a>3174:A,A}
+psn{a<1284:cjj,x>1844:xn,jqj}
+xh{a<1317:A,x>2843:A,R}
+sgt{s>3564:A,A}
+lgz{x<2895:R,A}
+fzq{x>2802:kf,a>605:R,R}
+gps{a<822:A,a>839:A,x<2994:A,A}
+mbq{x<2602:vtd,R}
+cts{m<2887:R,R}
+bd{m<3096:R,R}
+gk{a<949:R,a>1097:A,x<2044:R,R}
+ds{s>927:A,m>1055:R,R}
+mps{x<1131:R,A}
+slv{x>1497:vgh,a<983:hgt,a<1095:tmr,bsj}
+gdn{x>1376:R,A}
+jj{m<3028:A,x<1518:R,A}
+bg{m>3463:R,A}
+fq{a<873:A,R}
+blg{x<476:A,x<743:R,A}
+gqs{a>1049:A,a>1029:R,a<1023:R,A}
+szr{x>825:R,a<642:A,a>675:A,R}
+jdq{a>691:R,m<2018:R,x>1015:A,A}
+jk{a>415:A,A}
+xvx{m<3391:R,a>1694:A,A}
+pb{s>2785:R,R}
+gf{m<1294:A,a<1958:R,R}
+kgr{m>2635:hrg,a<1461:zq,R}
+cs{x>2439:A,a<219:A,A}
+qnb{m<1281:tjx,a<1711:A,ztp}
+zvk{s<1182:R,R}
+snd{a<680:A,a<723:R,A}
+tnt{x<876:R,s<3391:A,x<1365:R,A}
+ddt{m<3788:A,s>2800:R,R}
+zx{s>3399:R,x>984:R,pfj}
+tp{a>731:A,A}
+ztl{a>1938:A,m<676:A,x<997:R,R}
+mpb{s>2483:kg,zhk}
+jb{s>1027:R,A}
+hv{x<1034:R,nr}
+slj{s<1035:A,s<1462:vx,s<1617:mx,A}
+nxp{x>2789:zvk,s>1209:kd,cs}
+mds{x>353:R,R}
+hl{x<1920:dlb,xlj}
+rcj{a<1686:R,x>1892:bpc,s<1510:R,hsl}
+sg{x>2708:rm,R}
+kkf{m<1967:R,m<1976:gxd,a>763:mfq,A}
+vp{m<2517:nd,x>1859:srv,s>810:pg,szl}
+zxf{m<1614:ftg,m>1724:A,R}
+vqs{m>736:A,m<362:R,A}
+tn{s<2744:R,m<3203:R,m>3300:A,R}
+hsd{x<2643:R,A}
+tss{s>922:R,a<1019:A,a>1154:A,R}
+tlr{a<3231:R,x>2029:A,A}
+qqg{x<2873:R,x>3359:R,s>3047:A,fq}
+tbh{x>1566:A,x>1286:R,x>1138:R,A}
+dzj{m>3298:A,A}
+sbx{m<3341:R,a<991:A,A}
+zs{a<1423:A,a<1498:nb,A}
+lgq{a<1200:dtm,x<1546:hp,brm}
+ql{m<880:kpc,lmm}
+zn{s<1750:A,x<901:R,m<3644:A,A}
+mjs{x>2426:fxr,s<2233:A,s>2497:A,R}
+tbs{x<3370:A,a>2833:R,m>1245:A,R}
+mp{a>3625:A,x<819:A,R}
+hjp{x<429:A,x>774:A,R}
+dzv{m<3698:R,a<837:ztm,ltt}
+bqt{x<3520:A,R}
+bn{m<3802:R,x<278:A,x<324:A,R}
+mkq{m>321:R,s>686:R,s<253:A,R}
+tz{x>883:R,m>3465:A,R}
+rm{m<683:R,a<1520:R,A}
+gcp{s>3097:A,pb}
+kp{a<632:bt,a>666:qmk,a<651:xd,lzh}
+jg{s<2959:A,A}
+mg{x>1316:xdl,xvx}
+qp{a>3467:R,A}
+fp{x<1546:R,A}
+sp{a>3712:A,s<1594:R,R}
+vjs{m>2044:A,A}
+zc{a>2110:A,s>243:A,a>2028:A,A}
+nk{m<1119:A,m>1895:A,m>1627:A,R}
+vk{a<1458:zj,s>1515:bf,rb}
+fz{m<513:R,a<685:pvs,m>702:sst,zrt}
+qc{x>626:R,a>446:R,R}
+pvz{m<924:A,m>1466:A,R}
+xql{x>3205:nt,dnt}
+hk{s>901:nvv,sx}
+shp{a>552:lrf,x<2379:cd,fhn}
+gqb{x<2096:rx,zxh}
+hgv{x<2779:R,s>1337:A,R}
+kz{a<3763:sp,lp}
+jmc{a>932:psn,x<1954:cgx,a>579:sgf,vfj}
+ptr{m>3398:cks,m<3105:hr,dh}
+vq{a>1722:A,s<3208:R,s>3621:A,R}
+jm{x<1649:R,a>1786:A,x<1723:R,R}
+sx{x>1431:R,x<659:R,R}
+rjz{a>2733:R,s<3280:R,R}
+ns{m>3790:A,A}
+vz{m>2278:kgr,hvp}
+xnx{s<1150:R,R}
+xx{a<173:kk,a<325:dsn,R}
+mj{m<3015:A,R}
+zvd{s<2061:tbs,m<1477:sl,kl}
+jx{x>145:bn,xnq}
+nc{m>683:A,x<2504:R,a>997:R,A}
+nnq{m>2255:qtq,mdj}
+kdd{a<1665:dd,s>2337:R,m<3014:A,A}
+hqk{s<3409:A,s>3722:A,R}
+jhf{x<2557:A,a<730:R,A}
+vdg{x<3930:ghm,m<3341:R,a<949:dmx,A}
+vg{a<1470:A,x>2764:pdt,prc}
+lmm{s<1595:rk,qpv}
+kf{x>3482:A,m<2709:R,R}
+gml{a>3626:kz,m<3322:fvs,jmr}
+hsj{x<3421:R,x<3726:R,s<1156:A,R}
+qx{a<1612:vz,nnq}
+mjb{a>1017:A,a>433:mqz,pf}
+dpv{m>3697:A,s<872:A,m>3573:R,fkv}
+dmx{m<3718:A,x>3961:A,a>916:A,A}
+fc{m>722:A,m<376:R,m<538:R,A}
+cxd{s<1218:snb,a>1837:A,m>2273:A,A}
+jv{s>3082:kkd,s<2674:hjp,xvb}
+tnv{x>800:R,s<1826:R,a<692:A,A}
+kl{s<2444:R,s>2526:R,R}
+zf{a>334:R,A}
+kt{s>2518:rph,vg}
+dhk{a<1618:R,R}
+bhl{m<3024:R,R}
+ppg{x>3162:R,A}
+nvv{a<2532:A,m>2216:A,A}
+xvb{x>458:fc,vhq}
+flg{s>3250:tmx,x<3592:bdh,mxc}
+thh{s<1567:A,R}
+xdj{m<3434:zxn,x<356:hpx,rrm}
+zr{x>2998:smv,x<2379:gqb,s<2997:ml,tdr}
+fjb{a<961:R,A}
+pz{x<1962:A,R}
+nkj{x>2911:A,m<3767:R,x>2553:R,A}
+bf{x<2727:tq,m<3716:R,x<3522:btg,sb}
+hpx{s<1574:zz,a>1130:mn,jx}
+skq{m<3265:kdr,a<3095:dfl,lgh}
+mdj{m>2009:R,A}
+hfl{x<2221:hv,a>525:qqg,nx}
+qcg{a<743:px,s>2697:vd,R}
+brm{x<1786:vbq,m>3294:fzt,x>1840:cr,hgf}
+fhx{a<833:A,s<2988:jq,m<453:A,A}
+tqd{x>3713:R,a>3304:A,A}
+qg{x<3734:A,s<3427:A,R}
+fxs{a<1567:R,m>3691:A,a<1626:A,R}
+js{s>2419:jmc,bld}
+mv{s>1609:R,s>1439:R,a<1646:A,cx}
+gxd{a<556:A,m<1972:A,R}
+bfx{m>2202:R,A}
+xm{m<3293:R,m<3313:R,s>1326:A,A}
+qcc{a>1359:R,m>3131:A,A}
+kqh{x>1651:dqd,m<1113:vqs,m>1461:sqj,hj}
+st{x<3852:R,A}
+bt{s<3362:R,x>2509:R,m<415:A,A}
+kbc{x<670:mkq,A}
+mnc{a>759:R,a>697:A,a<654:R,A}
+mqz{s<2072:A,m>3722:R,R}
+fn{x<1666:R,R}
+zrt{m>590:A,a<749:R,a<766:R,R}
+dl{x<2405:gt,m>1832:bfx,a>3717:hsj,sh}
+xnl{a>524:R,s<2581:qlz,rrx}
+qpv{s<2019:cmf,a<695:A,m<1257:R,R}
+dlj{x<192:R,A}
+rg{m>848:zdx,a<1237:nl,hsd}
+lf{a<3204:lcd,x<910:cfd,a<3565:dr,zl}
+nps{m>2943:dhk,x<2837:R,A}
+pk{s<3133:R,s<3500:A,R}
+hb{x<2063:R,a<3400:R,m<384:R,A}
+tt{x>2490:vbp,s<3152:cmp,qq}
+sh{s<1092:R,a>3463:A,s<1392:R,R}
+tpl{m>3508:gz,m>2949:R,s>1047:fp,A}
+sst{m>832:A,A}
+qvs{x>2274:ksm,lf}
+nq{s<3159:A,R}
+qgf{m>2065:hbj,s<2483:sd,qkl}
+lk{m<1052:R,m>1945:R,R}
+qv{s<3357:A,A}
+blv{x>3046:dtj,s>3114:A,R}
+lg{m>2254:qlv,cmr}
+nh{x>431:R,a>1433:A,A}
+pps{a>1893:A,R}
+qk{x<3254:jtz,m>3294:nvz,tps}
+qlv{s>1566:rpb,s>575:R,x<1750:jzd,R}
+qq{m>375:zg,a<867:R,m<250:lx,R}
+rx{x<2021:A,x<2053:R,m<3343:A,A}
+jmr{m>3710:xnx,s<1515:tlr,x<1654:gnn,A}
+lcd{x<793:nk,a<2779:R,A}
+sl{a<3170:R,x<3352:A,s>2348:R,R}
+nl{m>394:A,R}
+rt{a>1895:ztl,tnt}
+mlt{s>1178:A,x>2340:A,s>610:A,A}
+srt{x>3764:fbh,m>3302:A,A}
+pg{s<1473:R,m>2572:A,qc}
+btc{m>2364:R,m<2104:rqj,a<1891:hmg,mr}
+md{a<2896:rh,m<2539:A,hn}
+zxn{x<618:ctj,s>1748:bgt,a<1183:hqv,bts}
+qbd{a>1300:R,a>1195:R,A}
+gm{a<888:fhx,m<490:flg,ckn}
+sb{x<3829:A,x<3943:A,x>3979:A,R}
+fpv{x>2671:A,x>2630:A,a>2602:R,lk}
+cmr{a>1618:ndl,x>1648:nvs,rqg}
+fr{x>2491:R,hb}
+zll{x<2443:xvp,zsg}
+xg{a>1229:zn,x<905:tnv,db}
+llt{m<1846:R,A}
+mjq{x<1653:xqn,fzq}
+vj{x<2815:R,R}
+kfh{s<3145:A,s>3678:R,A}
+ckn{a>910:A,x>3622:R,a<902:dx,pcn}
+zcf{s>1918:R,x<546:A,a<3666:R,A}
+ms{m<585:R,s<953:ghg,x>1498:fpr,A}
+nbz{a<400:R,A}
+svg{m>2523:kx,s<1755:bm,qvs}
+dfl{m<3731:R,A}
+qs{m>3253:R,a>1665:R,A}
+hg{x<510:A,s<2024:R,m<479:R,A}
+qtg{m>1184:R,s<2253:R,m>704:R,R}
+psf{a<1654:A,R}
+ck{x>804:R,s<2886:mds,bd}
+jz{s>1351:A,s<637:A,m>3673:R,A}
+pdt{a<1696:R,A}
+dsn{x<3241:R,m>1921:A,R}
+cr{s<3051:R,ntj}
+rqg{m<2046:A,x<1469:R,x>1558:R,R}
+ggf{a<802:A,s<1148:R,x<3200:R,A}
+dh{a>758:gps,jb}
+cjd{s>1079:R,s<695:A,s<830:A,R}
+pdz{a>1874:R,A}
+jtg{m<3797:A,R}
+jsf{m<2622:rzd,x<1372:fx,x>2301:kpl,nm}
+zm{a<963:R,s>3171:jj,m>3023:tn,lb}
+ctj{s<2660:cg,hd}
+dlb{x<1015:xdj,s>1984:lgq,lc}
+vgh{a<978:R,A}
+sd{m<1949:pz,s<926:jjr,m>1989:ht,kkf}
+ccd{m>1353:A,a>1394:A,A}
+fxr{a>2560:A,m>1609:R,A}
+xt{a>300:R,a<166:A,x<2401:A,A}
+rd{m>441:A,a>1690:R,m<260:R,R}
+ccs{s<838:A,R}
+ztm{a>542:A,m<3852:A,A}
+pcn{s>3269:A,a<907:R,A}
+hp{s>2757:mg,qrq}
+ldc{x>3475:A,s<3762:dz,dn}
+lzh{s<3256:R,a<658:R,R}
+gnn{m<3490:A,s>1926:R,a<3250:A,R}
+scp{x>764:R,a>1806:R,R}
+vtd{s>785:R,m<1742:A,A}
+jqj{a>1728:rt,a<1550:zxs,mps}
+hsl{x>1037:R,x>580:A,A}
+gxg{m>1274:R,s<3369:R,m<937:R,R}
+rh{a<2411:A,x<2226:R,x<2849:R,R}
+hrd{s<3098:tp,jhf}
+nvz{m>3703:R,s<2096:hs,kfx}
+kx{a<3022:tqs,gml}
+xv{x>1180:R,A}
+tmr{s>2918:R,R}
+lnc{x>3019:A,m>3500:R,a>3032:nq,R}
+bpc{m<1680:R,x<3257:A,a<1791:A,R}
+fkv{a>828:A,s<1349:A,m<3525:R,R}
+dqd{x<1784:jf,s<3044:zf,pvz}
+vkn{m>3521:A,a>420:A,s<2784:R,R}
+kpl{x<3416:lnc,lh}
+bts{x>848:R,x<712:cjd,a<1645:R,scp}
+psz{a>1926:gf,x>3134:gxg,s<3215:pps,A}
+qtq{s<2450:A,s<3447:shm,a<1787:ppg,str}
+dmp{x<447:A,R}
+lgh{m>3647:R,a<3490:R,a<3775:A,A}
+xzl{m>1524:R,m>1326:A,s<2750:R,R}
+srv{m<2556:R,s<843:vkm,s<1416:ggf,A}
+mr{m<2264:R,A}
+th{s<835:R,m>3729:R,x>2872:R,R}
+jzd{s>258:R,m>2563:A,A}
+sk{a<1710:fxs,ns}
+cjj{a<1060:sv,a>1170:rg,x>2037:mt,zx}
+jf{m>928:R,A}
+mf{a>973:hvz,R}
+vd{x>3203:A,s<2797:A,R}
+hrg{a<1371:A,a>1483:A,R}
+nt{m>670:qg,a<362:A,A}
+qmk{a>675:A,s>3143:A,a<671:R,R}
+rzd{a<2988:zdk,nn}
+kd{a<309:R,s<1769:R,R}
+xqn{m<2720:gvf,R}
+lrf{m>2123:A,R}
+kgs{x<3178:md,ldc}
+zqf{x>2658:R,x>2351:R,m<3669:R,A}
+lq{x<3090:prq,x>3401:tl,qk}
+zh{m>985:sr,pls}
+hvz{s>2459:A,R}
+tdr{x>2697:A,a<745:A,a>790:zt,lvb}
+hqd{a>113:R,R}
+qz{x>2674:R,x<2580:A,R}
+cmd{a>3700:R,R}
+gr{m>3628:A,R}
+kkd{s<3400:R,m<714:jk,dmp}
+qfs{x>3836:R,m<1400:A,x<3759:R,R}
+shm{a>1800:A,a<1730:R,a>1770:A,R}
+zt{m>3276:R,m<3120:R,a>831:R,R}
+ghg{a<1820:R,A}
+tbx{x<3172:A,a<196:R,R}
+zdk{m<1472:lsb,A}
+kr{a>1320:sk,dpv}
+pfj{s>3032:R,R}
+cf{x>1919:lt,fd}
+bbc{x>1594:R,m<3225:gdn,a>1201:A,A}
+lsb{x<2500:R,a<2407:R,a>2649:R,A}
+sm{m>3048:A,a>1017:R,A}
+sjv{a>429:hzr,a>402:vkn,R}
+mh{a>2662:A,A}
+kgj{m>485:A,s>920:nbz,A}
+sxh{m>1060:R,s>2864:R,R}
+jq{m<596:A,R}
+rpb{a>1574:A,A}
+grp{a>3284:dl,m>1831:hk,m<1617:rlp,mbq}
+dxh{m<3650:nfh,m>3848:nxp,m>3717:nkj,ntv}
+jtz{m>3480:jz,s<2415:R,R}
+hs{m>3505:A,s>1154:R,a<1005:A,A}
+cmf{s<1821:R,a<458:R,s<1920:R,R}
+zv{x>2271:R,A}
+fd{m<3519:R,x>1581:R,a>2722:R,A}
+dbs{s>3121:R,x>3421:A,m<1352:R,A}
+xsc{s<3091:R,x>792:A,s<3555:A,R}
+rht{x>607:R,m>2014:R,a>503:A,A}
+lz{x>3564:xm,x<3325:A,skb}
+zdx{s>3219:A,x<2480:R,x<3484:A,R}
+kv{x>1016:ds,R}
+snb{s>574:R,a>1880:A,x>923:R,R}
+mn{s>3187:R,s>2164:bs,m<3739:dlj,xhl}
+mxc{m<242:A,x<3746:R,A}
+px{a>644:A,s<2728:R,x>3287:R,R}
+hbj{m<2211:shp,m>2308:nqq,xnl}
+bsj{s>3147:A,R}
+qd{s>3693:R,a<3660:qp,s>3612:A,vjs}
+zhk{x<2632:mlt,R}
+ksm{x>2854:zvd,a>3133:tv,x>2578:fpv,mjs}
+rnp{x<1831:A,A}
+vdt{x<769:A,a<3443:cq,s>619:R,cmd}
+xnq{m>3721:A,R}
+qcs{s>3317:R,a<1598:A,s<2533:A,A}
+vdf{a<883:A,m>3275:R,tbh}
+xvp{a<2548:R,x>1951:A,s>1071:A,A}
+xjp{a<76:A,fsg}
+nm{s>2996:cf,skq}
+rkn{s<3726:A,A}
+tgd{x>2757:R,xt}
+str{x>3224:A,m>2530:R,A}
+ht{m<2033:fn,A}
+pf{x<659:R,A}
+kfx{x>3352:A,s>3192:R,a<1007:R,A}
+fb{x<3282:mzr,a<202:xjp,x>3702:mq,fbl}
+hmm{x<3203:tgd,m<3096:grd,m>3217:lz,np}
+hr{m>2968:R,R}
+fvs{x>1734:A,s>1359:vr,a<3421:bkc,A}
+mx{m<1237:R,m<1330:A,m<1387:A,A}
+dtj{m<3403:R,m<3689:R,a<346:A,A}
+cqs{a<986:R,a>1025:fs,A}
+bv{s>2301:hqk,A}
+nfp{x>2587:R,A}
+mlc{a<1713:R,A}
+lmr{a<556:A,s>441:R,a<924:R,R}
+xf{m<3026:A,a>912:R,m>3139:A,R}
+vbq{m>3572:jtg,a>1680:jm,x>1650:pd,pqh}
+zmg{x<2959:R,m<1833:A,A}
+cx{a<1868:A,a>1928:A,m<412:R,A}
+vfz{s<720:R,m>3667:R,m<3658:A,A}
+gz{s<1382:A,A}
+qlz{m<2261:A,m>2278:R,x<1617:R,R}
+lh{a<2877:bfj,m<3524:R,s<3202:tqd,A}
+xlj{a>1080:gs,a<466:bjt,a>868:lq,vbl}
+gbh{s>602:A,R}
+lvb{m>3613:R,a>766:R,A}
+hj{m>1236:pk,m>1173:A,A}
+nd{a<571:A,x>1952:A,tss}
+qrq{s>2394:R,R}
+ltm{a>3281:qd,m>2147:dbd,pc}
+pcv{x<2504:rmd,R}
+vx{m>1249:R,m<1122:A,A}
+kk{a>102:A,R}
+hrm{x<3482:R,R}
+rb{m<3705:mlc,A}
+ct{m>3575:R,s<923:A,m>3498:R,R}
+bbl{m<2954:R,x>1234:A,x<1131:R,R}
+hzr{a>444:A,R}
+smv{m<3555:A,R}
+hn{a>3443:R,s<3762:A,R}
+bld{a<1301:ql,zh}
+mzr{s>3296:A,A}
+pq{x>714:A,a>2725:A,s>3201:A,R}
+vc{m<1661:A,s<2236:R,m>1963:A,R}
+fl{a<3463:R,R}
+pt{s<3499:jsf,fj}
+xs{a>1018:gqs,x<2524:sbx,m>3346:th,R}
+rp{s>3756:R,R}
+rs{m<1607:R,x<1267:A,m>1707:R,A}
+mmz{x<746:A,m<1213:R,m<1326:R,A}
+fhn{x<3152:A,s<2125:A,x<3527:R,A}
+dx{a>893:A,s>3322:A,R}
+np{a<206:R,ccs}
+xjt{a<2267:A,a>2500:R,R}
+bz{s<2656:svg,pt}
+bjt{s>2419:gq,m<3336:hmm,dxh}
+pdn{x>3155:mnc,R}
+nqq{a<653:rnp,R}
+kjx{s<660:A,R}
+rqj{m>1961:A,a>1896:R,R}
+hq{m<240:R,a<1873:kfh,a>1916:vj,A}
+btp{m>271:R,m<99:R,R}
+bkc{x>1069:R,m>2900:A,m>2668:R,A}
+tlf{x>1415:A,s<1196:bbl,m<2985:R,R}
+rmd{x<2173:R,m>3498:A,A}
+ndl{m<1968:R,a>1791:R,R}
+ml{a<771:snd,R}
+tqs{a>2458:tpl,s>1393:sj,gb}
+gvf{x>914:R,a<781:A,A}
+cj{x<1186:lsd,lg}
+cmp{s>2743:jg,a<860:R,m>312:R,A}
+hgf{m<3130:vq,m>3236:A,qcs}
+vhq{s<2884:A,a<584:R,x<224:A,A}
+dbd{x>1077:rp,a>2743:R,xjt}
+fpr{x<2722:A,a>1735:R,a<1670:R,A}
+mfx{a>500:A,A}
+kq{m<1491:gcp,s>3146:zxf,s<2894:qcg,pdn}
+db{x<945:R,R}
+lp{x>2173:A,R}
+fs{s>2533:R,x<2621:A,R}
+nn{x<1662:mp,bb}
+tq{s<2467:R,m<3674:A,R}
+nb{s>529:R,x<1923:R,s>292:A,A}
+ztp{a>1837:A,R}
+lsd{a<1724:jmb,x<412:btc,s<1937:cxd,xsc}
+prq{s>1741:cqs,a>956:xs,s<904:qsz,pcv}
+fx{s<3176:ck,s<3348:dq,crk}
+hvp{a<1406:xh,x<3381:A,m<2017:A,A}
+cd{x>1361:R,A}
+rrx{s<3496:R,a<348:R,R}
+grd{a<238:hrm,x>3713:st,m>2992:R,thh}
+ntj{s>3380:A,R}
+dn{a<2690:A,A}
+gq{a<278:vt,a<382:blv,s>3001:cmc,sjv}
+gt{x<1389:R,s>897:A,R}
+lb{s<2723:R,A}
+sj{x>1458:zk,s<1859:R,bhl}
+nvs{s<1811:R,R}
+pvs{s<3335:R,a>628:R,R}
+ntv{m>3686:gx,s<1154:vfz,zqf}
+rph{x>3245:qs,s<3035:R,x>2642:lgz,sgt}
+ltt{m>3838:A,m>3769:A,A}
+pvh{m>2607:mjq,s>2408:hfl,vp}
+jmb{m<2232:A,m<2528:blg,nh}
+fbl{s>3421:R,x>3561:R,A}
+bgt{a>1011:qcc,s<2773:A,qv}
+mk{s<3271:csg,a<971:rkn,m<1911:zmg,pqm}
+ktm{a<1247:cbn,dbh}
+dd{m<3002:R,a<1464:A,A}
+nfh{m<3471:tbx,m<3540:A,R}
+dz{a>3220:R,m>2286:R,x>3358:R,A}
+bm{m>1464:grp,x>1525:cn,cmb}
+tv{x<2655:A,a>3616:R,A}
+fbh{a<948:A,R}
+jcc{m<2572:R,m>2595:A,s>252:R,A}
+ftg{s<3673:A,x>3286:R,m<1558:A,A}
+dq{s>3243:rjz,a<3153:pq,bg}
+gb{a>2230:R,s<668:zc,gc}
+pp{m<1968:llt,rht}
+zj{m>3662:lv,m<3521:hgv,s>1468:qbd,A}
+xn{a<1704:sg,m<680:hq,a<1861:lbp,psz}
+sc{x>3263:fz,a>688:hrd,kp}
+cks{m<3797:R,a>741:A,A}
+cmc{m>3299:A,x>2953:R,lsf}
+xz{s>683:R,a>2623:A,A}
+mt{m<826:A,R}
+
+{x=674,m=504,a=708,s=190}
+{x=1977,m=955,a=492,s=199}
+{x=973,m=239,a=1114,s=895}
+{x=2492,m=586,a=261,s=366}
+{x=246,m=458,a=409,s=2758}
+{x=11,m=2756,a=201,s=610}
+{x=1982,m=303,a=852,s=1034}
+{x=292,m=1674,a=455,s=987}
+{x=1931,m=11,a=677,s=2542}
+{x=94,m=649,a=499,s=3519}
+{x=1580,m=2150,a=279,s=1677}
+{x=2417,m=89,a=461,s=2054}
+{x=2336,m=1850,a=701,s=620}
+{x=156,m=382,a=2737,s=1918}
+{x=755,m=2961,a=18,s=90}
+{x=1947,m=2548,a=553,s=212}
+{x=751,m=44,a=164,s=1889}
+{x=3169,m=674,a=1021,s=2474}
+{x=1497,m=181,a=119,s=1587}
+{x=539,m=544,a=419,s=316}
+{x=6,m=401,a=197,s=1127}
+{x=1000,m=1923,a=1216,s=303}
+{x=337,m=2847,a=28,s=196}
+{x=1160,m=1659,a=2631,s=1362}
+{x=2529,m=1084,a=782,s=295}
+{x=166,m=2057,a=1125,s=408}
+{x=403,m=1340,a=240,s=87}
+{x=995,m=32,a=700,s=2418}
+{x=2101,m=185,a=1065,s=113}
+{x=2401,m=197,a=919,s=75}
+{x=1923,m=264,a=1242,s=1135}
+{x=1933,m=333,a=1498,s=1729}
+{x=1538,m=1014,a=848,s=269}
+{x=327,m=85,a=1567,s=2822}
+{x=432,m=757,a=212,s=808}
+{x=57,m=1258,a=238,s=717}
+{x=70,m=2015,a=1416,s=1303}
+{x=257,m=511,a=129,s=951}
+{x=238,m=1033,a=604,s=3386}
+{x=658,m=81,a=791,s=185}
+{x=3388,m=3054,a=324,s=633}
+{x=623,m=249,a=254,s=1479}
+{x=866,m=2012,a=304,s=355}
+{x=812,m=1109,a=1275,s=44}
+{x=98,m=1284,a=451,s=2276}
+{x=1247,m=299,a=2631,s=2892}
+{x=290,m=134,a=289,s=214}
+{x=92,m=1430,a=2197,s=2446}
+{x=527,m=2690,a=1252,s=398}
+{x=1384,m=428,a=2041,s=983}
+{x=132,m=582,a=135,s=700}
+{x=9,m=3777,a=225,s=722}
+{x=985,m=804,a=616,s=1369}
+{x=918,m=1500,a=83,s=706}
+{x=95,m=3210,a=636,s=3462}
+{x=43,m=745,a=298,s=684}
+{x=757,m=55,a=1412,s=373}
+{x=1510,m=1041,a=1845,s=875}
+{x=616,m=3062,a=15,s=347}
+{x=2,m=2623,a=2602,s=813}
+{x=603,m=265,a=2180,s=2416}
+{x=1929,m=185,a=104,s=2}
+{x=1553,m=628,a=1445,s=1909}
+{x=5,m=684,a=131,s=225}
+{x=504,m=299,a=397,s=2108}
+{x=677,m=1117,a=1555,s=23}
+{x=2374,m=67,a=744,s=738}
+{x=583,m=751,a=49,s=1063}
+{x=1024,m=83,a=41,s=3129}
+{x=1644,m=41,a=1396,s=1262}
+{x=1425,m=918,a=550,s=1209}
+{x=2566,m=593,a=1715,s=120}
+{x=79,m=3043,a=1607,s=17}
+{x=38,m=553,a=138,s=1260}
+{x=344,m=773,a=624,s=714}
+{x=433,m=1373,a=1018,s=1720}
+{x=2791,m=505,a=2,s=1289}
+{x=2566,m=1484,a=1736,s=1326}
+{x=589,m=72,a=669,s=987}
+{x=147,m=2890,a=186,s=2412}
+{x=2993,m=370,a=337,s=1676}
+{x=13,m=740,a=965,s=2421}
+{x=226,m=997,a=1655,s=224}
+{x=169,m=1064,a=747,s=292}
+{x=421,m=2632,a=305,s=1308}
+{x=1890,m=75,a=1397,s=1701}
+{x=606,m=506,a=1084,s=2742}
+{x=1657,m=1864,a=853,s=3122}
+{x=1045,m=160,a=538,s=1130}
+{x=455,m=17,a=73,s=349}
+{x=93,m=2149,a=415,s=2065}
+{x=1188,m=62,a=1063,s=997}
+{x=470,m=18,a=791,s=3445}
+{x=1721,m=1686,a=2238,s=259}
+{x=239,m=2291,a=483,s=11}
+{x=2027,m=81,a=3275,s=96}
+{x=819,m=46,a=453,s=449}
+{x=117,m=1088,a=1230,s=773}
+{x=252,m=742,a=514,s=986}
+{x=205,m=22,a=2211,s=809}
+{x=115,m=1837,a=237,s=1455}
+{x=534,m=557,a=615,s=499}
+{x=281,m=115,a=276,s=487}
+{x=1251,m=1574,a=2895,s=279}
+{x=1198,m=22,a=739,s=2758}
+{x=265,m=1510,a=57,s=491}
+{x=1969,m=2065,a=751,s=1838}
+{x=685,m=68,a=1972,s=1377}
+{x=950,m=811,a=84,s=2}
+{x=1086,m=2871,a=2039,s=565}
+{x=2717,m=537,a=3939,s=483}
+{x=601,m=853,a=232,s=1089}
+{x=1569,m=44,a=1186,s=542}
+{x=1092,m=2131,a=1038,s=197}
+{x=58,m=812,a=2388,s=1182}
+{x=930,m=36,a=1376,s=3343}
+{x=848,m=232,a=1115,s=929}
+{x=568,m=386,a=971,s=1750}
+{x=451,m=635,a=1297,s=203}
+{x=99,m=49,a=506,s=308}
+{x=358,m=1180,a=517,s=420}
+{x=175,m=401,a=1410,s=649}
+{x=979,m=1784,a=598,s=115}
+{x=889,m=1439,a=13,s=1879}
+{x=400,m=1053,a=59,s=639}
+{x=3143,m=175,a=504,s=205}
+{x=994,m=398,a=184,s=885}
+{x=491,m=958,a=286,s=593}
+{x=1497,m=1865,a=1612,s=346}
+{x=1202,m=1779,a=758,s=297}
+{x=2601,m=2275,a=677,s=1262}
+{x=882,m=1044,a=1383,s=572}
+{x=412,m=508,a=328,s=1150}
+{x=2492,m=994,a=2541,s=1180}
+{x=3773,m=1018,a=416,s=602}
+{x=1046,m=156,a=7,s=398}
+{x=100,m=414,a=408,s=1308}
+{x=2398,m=53,a=997,s=679}
+{x=3306,m=745,a=1497,s=2100}
+{x=1409,m=472,a=626,s=1220}
+{x=313,m=425,a=2505,s=1729}
+{x=572,m=262,a=345,s=588}
+{x=125,m=196,a=142,s=1155}
+{x=1865,m=650,a=195,s=1986}
+{x=326,m=556,a=996,s=2082}
+{x=1146,m=2905,a=3842,s=563}
+{x=266,m=1916,a=1820,s=168}
+{x=312,m=1281,a=1392,s=1117}
+{x=134,m=60,a=1445,s=1930}
+{x=172,m=457,a=147,s=407}
+{x=109,m=684,a=2070,s=30}
+{x=3067,m=2067,a=1842,s=581}
+{x=1848,m=1989,a=94,s=360}
+{x=1226,m=1920,a=161,s=924}
+{x=1556,m=75,a=3280,s=838}
+{x=313,m=265,a=1420,s=3463}
+{x=593,m=898,a=798,s=2173}
+{x=792,m=69,a=583,s=1191}
+{x=510,m=1318,a=3384,s=39}
+{x=707,m=1060,a=69,s=1165}
+{x=87,m=711,a=1788,s=3063}
+{x=111,m=674,a=521,s=311}
+{x=2429,m=180,a=423,s=469}
+{x=10,m=1406,a=1553,s=37}
+{x=2552,m=2002,a=29,s=27}
+{x=1292,m=459,a=25,s=668}
+{x=135,m=2835,a=3638,s=989}
+{x=2770,m=697,a=1741,s=244}
+{x=1180,m=1643,a=342,s=1597}
+{x=778,m=849,a=1024,s=44}
+{x=180,m=294,a=1821,s=1508}
+{x=640,m=1349,a=251,s=678}
+{x=478,m=223,a=173,s=2054}
+{x=68,m=292,a=493,s=2233}
+{x=826,m=83,a=156,s=664}
+{x=37,m=275,a=376,s=3953}
+{x=36,m=1172,a=294,s=961}
+{x=809,m=1526,a=1070,s=2408}
+{x=794,m=838,a=52,s=461}
+{x=719,m=672,a=2313,s=285}
+{x=422,m=206,a=1187,s=38}
+{x=260,m=44,a=1419,s=907}
+{x=626,m=642,a=1119,s=242}
+{x=409,m=21,a=1514,s=1736}
+{x=512,m=42,a=300,s=1166}
+{x=2017,m=1748,a=499,s=1428}
+{x=985,m=238,a=549,s=686}
+{x=324,m=339,a=2028,s=427}
+{x=1835,m=103,a=253,s=53}
+{x=218,m=1176,a=96,s=1588}
+{x=1012,m=2361,a=1186,s=807}
+{x=215,m=614,a=405,s=1814}
+{x=994,m=1458,a=185,s=1300}
+{x=524,m=407,a=437,s=538}
+{x=51,m=967,a=856,s=1887}
+{x=1331,m=2397,a=1318,s=1620}
+{x=1162,m=1564,a=1,s=424}
+{x=1725,m=1047,a=873,s=744}
+{x=1276,m=1541,a=686,s=942}
+{x=880,m=412,a=2187,s=1720}
diff --git a/2023/in/day19.ref b/2023/in/day19.ref
new file mode 100644
index 0000000..e5b5d64
--- /dev/null
+++ b/2023/in/day19.ref
@@ -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}