chore: add day 19 pt 1 #15
							
								
								
									
										17
									
								
								day19/example.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										17
									
								
								day19/example.txt
									
									
									
									
									
										Normal 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}
 | 
				
			||||||
							
								
								
									
										780
									
								
								day19/input.txt
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										780
									
								
								day19/input.txt
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,780 @@
 | 
				
			|||||||
 | 
					ztj{s<2703:A,m<1025:vk,ztl}
 | 
				
			||||||
 | 
					nqt{a>3513:R,s>2424:R,m>929:R,A}
 | 
				
			||||||
 | 
					mr{s>2281:R,A}
 | 
				
			||||||
 | 
					gf{x>2746:R,a<3379:jcl,R}
 | 
				
			||||||
 | 
					gkv{x>2579:qlx,s>322:rxv,R}
 | 
				
			||||||
 | 
					gdl{x<2917:A,s>82:A,s<54:R,R}
 | 
				
			||||||
 | 
					hzc{m<1277:R,m>1355:A,x>953:A,R}
 | 
				
			||||||
 | 
					xs{x>2337:ft,m>1444:A,R}
 | 
				
			||||||
 | 
					hs{m<235:A,a<2424:A,x<3026:pvh,hqk}
 | 
				
			||||||
 | 
					cls{a<1361:zch,s<3630:tnh,a<2359:px,spb}
 | 
				
			||||||
 | 
					gq{m<1157:A,R}
 | 
				
			||||||
 | 
					hc{m<2726:A,s>1302:A,R}
 | 
				
			||||||
 | 
					lt{x>3157:A,a<3669:R,R}
 | 
				
			||||||
 | 
					sf{x<3199:R,s>2680:jrl,x>3718:jh,R}
 | 
				
			||||||
 | 
					hr{m>1737:A,A}
 | 
				
			||||||
 | 
					bgg{x<171:A,x<283:R,R}
 | 
				
			||||||
 | 
					pgb{m<1624:ksc,x>2675:bzc,bzn}
 | 
				
			||||||
 | 
					zm{m<2599:sjc,m>3497:A,m<2946:A,A}
 | 
				
			||||||
 | 
					gbb{x>860:bxv,a<2306:br,msc}
 | 
				
			||||||
 | 
					gsl{x>53:A,A}
 | 
				
			||||||
 | 
					zs{x<1669:kp,x<2690:ns,s>2951:cls,tvv}
 | 
				
			||||||
 | 
					qhq{x<1264:A,m<1728:A,R}
 | 
				
			||||||
 | 
					gg{s<239:A,s>340:R,x>3642:A,R}
 | 
				
			||||||
 | 
					ktx{m>2620:R,m>2073:R,a<3539:R,R}
 | 
				
			||||||
 | 
					xg{x<3497:fp,sgc}
 | 
				
			||||||
 | 
					pms{m<3366:R,x>3570:A,R}
 | 
				
			||||||
 | 
					gsb{x>2077:A,A}
 | 
				
			||||||
 | 
					xf{s>3779:A,R}
 | 
				
			||||||
 | 
					tfs{s>3844:rb,s<3703:scg,bk}
 | 
				
			||||||
 | 
					bgb{a>2837:R,a>2812:A,A}
 | 
				
			||||||
 | 
					nvk{s<2358:mr,x>2818:nqt,x<2757:lf,R}
 | 
				
			||||||
 | 
					fg{a>1961:A,x<68:R,R}
 | 
				
			||||||
 | 
					cfz{x>1567:A,m>951:A,a<2959:R,A}
 | 
				
			||||||
 | 
					ljt{m>950:A,m<557:R,m<745:A,R}
 | 
				
			||||||
 | 
					zcq{m>1403:th,fd}
 | 
				
			||||||
 | 
					tbv{a>1532:R,R}
 | 
				
			||||||
 | 
					dq{m>960:R,csz}
 | 
				
			||||||
 | 
					tvv{a<2619:zh,m>1623:kb,vh}
 | 
				
			||||||
 | 
					dzz{s>3136:R,s<2702:A,a>2889:R,R}
 | 
				
			||||||
 | 
					lg{a<66:A,s>784:A,s>263:A,A}
 | 
				
			||||||
 | 
					zfk{s<463:R,x>3180:A,R}
 | 
				
			||||||
 | 
					bdh{s>356:A,s>193:A,m>482:R,R}
 | 
				
			||||||
 | 
					tc{m>3454:R,x>3211:A,A}
 | 
				
			||||||
 | 
					tz{x>3191:R,a<1319:R,R}
 | 
				
			||||||
 | 
					cpn{m<2478:A,a<2228:A,a>3262:A,A}
 | 
				
			||||||
 | 
					qmt{x<2144:R,flt}
 | 
				
			||||||
 | 
					nsp{m<379:R,R}
 | 
				
			||||||
 | 
					sxt{s<1011:A,a>1135:A,rl}
 | 
				
			||||||
 | 
					bjg{m>973:lz,x>243:hh,a>1789:xl,xmg}
 | 
				
			||||||
 | 
					cj{x>2137:nst,m<3002:A,s>3193:jc,pfr}
 | 
				
			||||||
 | 
					lmc{a>2967:A,A}
 | 
				
			||||||
 | 
					tv{m>1493:A,m<769:A,R}
 | 
				
			||||||
 | 
					khc{m>2346:mbr,s>596:kvr,a<274:fzh,tb}
 | 
				
			||||||
 | 
					zbk{s>1140:qrt,x>1818:pv,a>540:gt,gxc}
 | 
				
			||||||
 | 
					kk{s>3728:R,s>3683:R,m<562:A,A}
 | 
				
			||||||
 | 
					jv{m<848:zpq,a>1225:fsv,ztj}
 | 
				
			||||||
 | 
					shb{a<242:A,m>2625:R,R}
 | 
				
			||||||
 | 
					fhg{m>1372:R,A}
 | 
				
			||||||
 | 
					dg{x>1246:qd,s<3289:lbf,a<1032:zzp,ks}
 | 
				
			||||||
 | 
					cfq{s>2689:A,s>2613:R,A}
 | 
				
			||||||
 | 
					gl{m>2798:cqm,s>3029:cnl,m>2233:A,qc}
 | 
				
			||||||
 | 
					tkv{m<1884:A,A}
 | 
				
			||||||
 | 
					fdm{m<1549:tgt,x<2498:kdf,s>528:jz,lt}
 | 
				
			||||||
 | 
					vx{x<2948:xc,mgp}
 | 
				
			||||||
 | 
					bs{m<687:A,R}
 | 
				
			||||||
 | 
					kp{x>609:dkr,tqc}
 | 
				
			||||||
 | 
					xpj{x<934:A,a>1772:A,A}
 | 
				
			||||||
 | 
					rhd{x>956:A,a<2471:A,a<3414:A,A}
 | 
				
			||||||
 | 
					srg{m>1381:A,s<264:A,A}
 | 
				
			||||||
 | 
					szv{s>453:mff,nzj}
 | 
				
			||||||
 | 
					ldl{a>3906:A,A}
 | 
				
			||||||
 | 
					rxv{m<1632:R,m>1700:R,R}
 | 
				
			||||||
 | 
					ch{s<3588:A,a<639:A,R}
 | 
				
			||||||
 | 
					sc{s>2789:A,a<1419:R,R}
 | 
				
			||||||
 | 
					gk{m>415:R,x>508:A,a<3053:R,R}
 | 
				
			||||||
 | 
					rs{s<1893:R,m>2997:R,x<2049:R,R}
 | 
				
			||||||
 | 
					ncn{s<722:R,m>3562:A,s>773:jm,vr}
 | 
				
			||||||
 | 
					kz{x>3160:A,A}
 | 
				
			||||||
 | 
					xxt{s>1035:R,a<942:R,R}
 | 
				
			||||||
 | 
					pfr{m<3520:A,A}
 | 
				
			||||||
 | 
					nh{a<638:mv,s>865:vm,nrf}
 | 
				
			||||||
 | 
					sg{s>3051:vps,m>2918:A,zhs}
 | 
				
			||||||
 | 
					xnj{x>3494:A,m>584:A,a<1897:A,R}
 | 
				
			||||||
 | 
					jg{s<2380:R,a<2211:A,A}
 | 
				
			||||||
 | 
					cqm{s<3107:R,a>3295:R,m>3224:R,A}
 | 
				
			||||||
 | 
					hgv{m<203:A,s>107:R,A}
 | 
				
			||||||
 | 
					vqt{x<2609:xkn,bnt}
 | 
				
			||||||
 | 
					ft{s>3154:A,m>1087:R,A}
 | 
				
			||||||
 | 
					qv{a>621:A,a>259:xp,m<2439:fbv,kpq}
 | 
				
			||||||
 | 
					lzv{x<2186:gpt,lsb}
 | 
				
			||||||
 | 
					lx{x>3655:A,s>2359:A,s>2271:R,R}
 | 
				
			||||||
 | 
					xfj{s<407:sxx,R}
 | 
				
			||||||
 | 
					tnh{x<3164:vx,js}
 | 
				
			||||||
 | 
					mbr{s<671:A,R}
 | 
				
			||||||
 | 
					tbn{m<2151:A,x<3001:R,R}
 | 
				
			||||||
 | 
					zhp{m<3768:fgp,x>3307:rv,kj}
 | 
				
			||||||
 | 
					qd{s<3201:A,s>3491:hgt,x>1468:A,R}
 | 
				
			||||||
 | 
					qdk{s<1950:R,R}
 | 
				
			||||||
 | 
					vn{s>2814:A,m>386:A,A}
 | 
				
			||||||
 | 
					lv{x>3090:A,s>2406:znh,R}
 | 
				
			||||||
 | 
					km{m>2029:A,m>1871:A,s<2456:A,R}
 | 
				
			||||||
 | 
					ppc{m>2718:R,x<2889:A,x>3361:A,R}
 | 
				
			||||||
 | 
					bk{a<3189:A,m>846:R,R}
 | 
				
			||||||
 | 
					ht{s>2582:jts,x<3333:hx,rgx}
 | 
				
			||||||
 | 
					bb{x<3122:A,x>3258:R,m>3625:A,A}
 | 
				
			||||||
 | 
					fd{m>650:R,x<450:A,a<2254:gb,gk}
 | 
				
			||||||
 | 
					dcf{s>1084:tzp,gbb}
 | 
				
			||||||
 | 
					pm{x>3659:A,m<3539:R,A}
 | 
				
			||||||
 | 
					hj{a>3260:hrn,A}
 | 
				
			||||||
 | 
					ds{m>767:A,m>718:A,R}
 | 
				
			||||||
 | 
					ccv{a<2781:R,a<2905:hd,s<1781:A,qdk}
 | 
				
			||||||
 | 
					vh{s<2473:lpg,m>643:cmn,s>2647:vkk,ht}
 | 
				
			||||||
 | 
					zld{x<3737:A,xst}
 | 
				
			||||||
 | 
					djf{x<748:R,R}
 | 
				
			||||||
 | 
					jfx{m>1768:gz,m>802:jfs,m<437:cl,snl}
 | 
				
			||||||
 | 
					vft{x<2121:dn,m<2486:kf,x<2180:qmt,vsj}
 | 
				
			||||||
 | 
					bc{m<369:hs,a<2050:dfd,m>584:mx,vqt}
 | 
				
			||||||
 | 
					dn{a<799:vbr,m<1868:A,s<1387:skb,rs}
 | 
				
			||||||
 | 
					kxl{a<1795:A,s>3664:A,s<3514:R,R}
 | 
				
			||||||
 | 
					bh{x>3971:A,R}
 | 
				
			||||||
 | 
					pv{x>1877:R,s<517:R,m>2313:R,A}
 | 
				
			||||||
 | 
					vzj{s<1879:cth,vc}
 | 
				
			||||||
 | 
					fc{a<2156:ths,zbc}
 | 
				
			||||||
 | 
					cs{a>2745:A,x>2067:A,s>2357:R,A}
 | 
				
			||||||
 | 
					nsj{a>2800:A,m<2010:R,R}
 | 
				
			||||||
 | 
					lsb{a>2810:R,x>2463:A,m>2877:R,bz}
 | 
				
			||||||
 | 
					nl{x<2336:A,x>2529:A,A}
 | 
				
			||||||
 | 
					pk{m<2800:A,s>3027:R,x<487:A,A}
 | 
				
			||||||
 | 
					bzn{m<1838:R,A}
 | 
				
			||||||
 | 
					qrt{s>1765:R,s>1529:A,s>1302:zdc,kzp}
 | 
				
			||||||
 | 
					srn{m<3131:zbr,a>3269:phc,x<2610:R,xd}
 | 
				
			||||||
 | 
					lz{m<1282:pzk,s>1085:gld,A}
 | 
				
			||||||
 | 
					spb{x<3144:krj,sx}
 | 
				
			||||||
 | 
					mqz{m>467:sm,m<282:R,s<969:hhs,jfp}
 | 
				
			||||||
 | 
					mff{s<632:A,x>625:R,dzt}
 | 
				
			||||||
 | 
					hgt{m<2577:A,s<3667:A,s>3805:R,R}
 | 
				
			||||||
 | 
					xpv{a<3077:R,R}
 | 
				
			||||||
 | 
					rf{m>3497:gv,a>334:vhk,A}
 | 
				
			||||||
 | 
					rsc{s>1811:A,jk}
 | 
				
			||||||
 | 
					vkl{a>1095:A,a<912:R,R}
 | 
				
			||||||
 | 
					mpn{a>3161:pdk,x>3461:zld,ff}
 | 
				
			||||||
 | 
					pzk{s>1180:R,m>1114:R,x>299:A,R}
 | 
				
			||||||
 | 
					vf{x<492:R,s<3334:R,R}
 | 
				
			||||||
 | 
					kjv{m<719:bc,vhc}
 | 
				
			||||||
 | 
					ks{m>2088:kxl,a>1906:ll,gq}
 | 
				
			||||||
 | 
					vm{m>1632:vb,qcr}
 | 
				
			||||||
 | 
					ph{a<2292:qzf,A}
 | 
				
			||||||
 | 
					xn{x<2461:qln,R}
 | 
				
			||||||
 | 
					px{a<1762:xg,x>3186:jfx,fc}
 | 
				
			||||||
 | 
					fzz{x<3174:mq,a>1103:nn,m<533:bgn,mdq}
 | 
				
			||||||
 | 
					xl{x>116:lmr,m<712:nvq,a>2807:jmf,R}
 | 
				
			||||||
 | 
					br{s>958:xxt,x<537:bnn,a<1228:R,ssr}
 | 
				
			||||||
 | 
					mcl{x>3441:R,s<2530:R,R}
 | 
				
			||||||
 | 
					gn{a<3598:R,a>3777:A,x>861:A,R}
 | 
				
			||||||
 | 
					scg{a>3029:A,s>3661:A,R}
 | 
				
			||||||
 | 
					kr{m<471:R,hz}
 | 
				
			||||||
 | 
					xfc{s>3354:R,R}
 | 
				
			||||||
 | 
					th{a>1860:vf,a>789:pk,mt}
 | 
				
			||||||
 | 
					nm{s<2242:A,x>3062:kz,R}
 | 
				
			||||||
 | 
					xp{m<2732:R,a<441:R,A}
 | 
				
			||||||
 | 
					fzh{a>101:A,x>3191:R,A}
 | 
				
			||||||
 | 
					bn{x<3725:R,a>499:R,R}
 | 
				
			||||||
 | 
					kmh{s>1727:A,a>1678:A,a<1550:A,A}
 | 
				
			||||||
 | 
					dj{m<2927:R,m>3578:A,x>1056:R,A}
 | 
				
			||||||
 | 
					jz{x>3123:A,a>3678:A,x>2902:R,R}
 | 
				
			||||||
 | 
					qq{m<3557:A,m>3852:A,a<1950:R,A}
 | 
				
			||||||
 | 
					nrv{m>1238:qcd,mqz}
 | 
				
			||||||
 | 
					pmd{x>3502:R,gdl}
 | 
				
			||||||
 | 
					ll{s>3570:A,s<3419:R,x>946:A,R}
 | 
				
			||||||
 | 
					td{x<1875:A,a>1161:A,A}
 | 
				
			||||||
 | 
					jt{m>1937:A,s<430:tkv,R}
 | 
				
			||||||
 | 
					pp{s<1233:mzr,m>2932:vsl,ccv}
 | 
				
			||||||
 | 
					ssr{s<903:R,R}
 | 
				
			||||||
 | 
					qcd{m>1677:R,R}
 | 
				
			||||||
 | 
					sv{x<3042:fv,s<3775:tc,m<3706:ct,dm}
 | 
				
			||||||
 | 
					qsg{x>3287:vvt,dbq}
 | 
				
			||||||
 | 
					cdt{x<3342:kx,a>1677:btj,nth}
 | 
				
			||||||
 | 
					jrl{m>1242:A,m>940:R,m<793:R,R}
 | 
				
			||||||
 | 
					dzt{s<732:A,A}
 | 
				
			||||||
 | 
					dk{m>1342:rmq,hdt}
 | 
				
			||||||
 | 
					rn{x<3645:A,R}
 | 
				
			||||||
 | 
					fx{s>1211:jpn,s>785:nrv,m<1357:pd,dcg}
 | 
				
			||||||
 | 
					nvh{a<2086:kmh,x<2940:A,m<2730:R,pms}
 | 
				
			||||||
 | 
					cb{x<581:sd,psf}
 | 
				
			||||||
 | 
					mq{m>678:A,x>2970:qf,a<881:A,ck}
 | 
				
			||||||
 | 
					qfn{s>298:A,R}
 | 
				
			||||||
 | 
					rss{s>1618:rsl,frj}
 | 
				
			||||||
 | 
					sp{x<3759:R,a>512:A,m>3807:R,R}
 | 
				
			||||||
 | 
					dns{m>270:A,x<2335:R,s>3567:R,R}
 | 
				
			||||||
 | 
					dsr{x<2503:R,m>969:A,x>3358:R,A}
 | 
				
			||||||
 | 
					jfs{s>3760:R,R}
 | 
				
			||||||
 | 
					zpq{x<2139:td,s>2466:nl,A}
 | 
				
			||||||
 | 
					vk{s<2893:A,a<803:A,s>2986:R,A}
 | 
				
			||||||
 | 
					rbn{a>3902:zp,m>472:A,R}
 | 
				
			||||||
 | 
					tvn{m<2544:R,A}
 | 
				
			||||||
 | 
					lqf{a<3601:rnx,a<3691:A,fz}
 | 
				
			||||||
 | 
					ls{m<1384:A,R}
 | 
				
			||||||
 | 
					rnk{a>3786:R,m<2367:A,zl}
 | 
				
			||||||
 | 
					pdk{x>3398:R,s>2636:tnq,a>3510:xt,km}
 | 
				
			||||||
 | 
					gm{x>1475:sg,zdv}
 | 
				
			||||||
 | 
					ps{s>2886:A,A}
 | 
				
			||||||
 | 
					ndh{a<979:fkj,a>1636:A,s>2743:tz,nf}
 | 
				
			||||||
 | 
					zhs{s>2501:R,a<3309:A,s>2306:A,R}
 | 
				
			||||||
 | 
					zht{a>1418:A,A}
 | 
				
			||||||
 | 
					fn{x>3198:A,a>3957:R,m>3278:A,A}
 | 
				
			||||||
 | 
					xc{m>1714:xfc,a>2574:cmr,A}
 | 
				
			||||||
 | 
					gld{m<1414:R,x<381:A,m<1444:A,R}
 | 
				
			||||||
 | 
					pz{m>3006:R,A}
 | 
				
			||||||
 | 
					fkp{a>3424:R,m<3526:A,A}
 | 
				
			||||||
 | 
					fqc{a<2473:tv,m>2350:cj,a<2565:xs,vv}
 | 
				
			||||||
 | 
					bnt{s>1011:R,x>3453:A,R}
 | 
				
			||||||
 | 
					xzq{a<3766:lqf,a<3888:kgd,s<1399:zmt,lp}
 | 
				
			||||||
 | 
					clh{a<1003:A,s>3818:A,ntv}
 | 
				
			||||||
 | 
					rq{s>2799:R,m<1088:A,A}
 | 
				
			||||||
 | 
					jfp{s<1113:A,R}
 | 
				
			||||||
 | 
					hh{x<466:A,R}
 | 
				
			||||||
 | 
					md{s>1194:R,R}
 | 
				
			||||||
 | 
					hm{a>1759:gsb,R}
 | 
				
			||||||
 | 
					vb{s>1454:A,s<1082:kxs,a>1134:A,hc}
 | 
				
			||||||
 | 
					rsl{a<3803:gh,st}
 | 
				
			||||||
 | 
					tjb{x>2545:A,x>1949:A,R}
 | 
				
			||||||
 | 
					zsp{s<3356:R,A}
 | 
				
			||||||
 | 
					bg{x>1362:A,R}
 | 
				
			||||||
 | 
					lbf{m>1460:A,mnr}
 | 
				
			||||||
 | 
					bt{s<856:R,s>1189:ppc,x>2845:R,R}
 | 
				
			||||||
 | 
					ct{a<1119:A,x>3291:A,m<3487:A,A}
 | 
				
			||||||
 | 
					drn{s>2455:R,x>3658:A,x>3401:R,A}
 | 
				
			||||||
 | 
					xst{m>2109:R,a>2952:A,a<2839:R,R}
 | 
				
			||||||
 | 
					pr{a>3195:xxm,R}
 | 
				
			||||||
 | 
					rnx{s<926:A,a>3544:R,A}
 | 
				
			||||||
 | 
					ngl{a<2849:kzb,x>1007:R,vq}
 | 
				
			||||||
 | 
					fhq{m<1694:R,m>3210:A,a>1513:A,A}
 | 
				
			||||||
 | 
					ttd{x>952:R,m>216:R,m>132:R,A}
 | 
				
			||||||
 | 
					tg{a>447:R,m<3009:R,s<3685:R,A}
 | 
				
			||||||
 | 
					cgl{x>2271:A,s>3239:R,s<2541:cs,A}
 | 
				
			||||||
 | 
					jh{a>3871:R,s<2611:A,R}
 | 
				
			||||||
 | 
					vlx{m>2576:A,a<3152:R,m>1231:A,R}
 | 
				
			||||||
 | 
					fh{s>1137:R,s<937:R,djf}
 | 
				
			||||||
 | 
					xz{x<2419:sl,x<3456:rt,m>3040:fs,crn}
 | 
				
			||||||
 | 
					pj{a<887:sq,s<3315:A,R}
 | 
				
			||||||
 | 
					kjt{m<990:hqc,nkr}
 | 
				
			||||||
 | 
					tb{m>1009:A,A}
 | 
				
			||||||
 | 
					ppm{a<1310:R,a<1850:R,a<2261:R,R}
 | 
				
			||||||
 | 
					jm{x<1054:R,a<579:R,A}
 | 
				
			||||||
 | 
					fsf{x<3020:R,R}
 | 
				
			||||||
 | 
					xxm{a<3299:R,R}
 | 
				
			||||||
 | 
					pvh{s>929:A,R}
 | 
				
			||||||
 | 
					bfx{a<3017:A,a>3351:gn,grz}
 | 
				
			||||||
 | 
					fp{x<2966:tbv,x<3308:R,R}
 | 
				
			||||||
 | 
					krr{x<677:tvn,A}
 | 
				
			||||||
 | 
					vdz{m<3388:R,x<844:A,R}
 | 
				
			||||||
 | 
					hzf{s>385:R,s<196:A,A}
 | 
				
			||||||
 | 
					jjf{x>3217:A,m<616:qfn,dr}
 | 
				
			||||||
 | 
					nq{x>2432:lg,m<1705:A,R}
 | 
				
			||||||
 | 
					cmn{a<3539:rtg,a>3754:sf,dv}
 | 
				
			||||||
 | 
					sq{a>365:R,m>2615:A,s>3324:A,A}
 | 
				
			||||||
 | 
					xqf{x<554:A,m>1924:A,x>1244:A,R}
 | 
				
			||||||
 | 
					gxc{a<350:A,s>506:fhg,vl}
 | 
				
			||||||
 | 
					qx{a<3727:A,R}
 | 
				
			||||||
 | 
					nzq{m<1027:R,s>1843:R,A}
 | 
				
			||||||
 | 
					rv{a<3212:R,x>3734:R,m>3888:tq,tn}
 | 
				
			||||||
 | 
					lrn{m>1353:kq,s<3039:jv,gx}
 | 
				
			||||||
 | 
					nf{m>2662:A,x<3529:A,m>2179:A,R}
 | 
				
			||||||
 | 
					zlz{a<750:mc,clh}
 | 
				
			||||||
 | 
					kf{a>756:A,R}
 | 
				
			||||||
 | 
					gj{m<1030:A,a>1937:R,R}
 | 
				
			||||||
 | 
					gb{s<3174:A,s<3470:A,A}
 | 
				
			||||||
 | 
					tnq{x>3001:A,R}
 | 
				
			||||||
 | 
					zqv{m>691:A,R}
 | 
				
			||||||
 | 
					kj{x<2954:psp,x>3147:mg,a>3127:mjb,A}
 | 
				
			||||||
 | 
					tgn{a>1711:lkc,s>541:qt,R}
 | 
				
			||||||
 | 
					npt{x<772:R,x>900:R,s<1084:R,A}
 | 
				
			||||||
 | 
					cx{x>3400:lxp,lbv}
 | 
				
			||||||
 | 
					vvt{s>278:R,A}
 | 
				
			||||||
 | 
					vqq{x<3192:R,A}
 | 
				
			||||||
 | 
					tq{s>2456:R,s<2301:R,x>3451:A,A}
 | 
				
			||||||
 | 
					xxx{m<2342:R,A}
 | 
				
			||||||
 | 
					dkr{a<2409:dg,m<1437:lvf,x>1274:gm,qdc}
 | 
				
			||||||
 | 
					fs{s>1657:pbv,m<3482:A,m>3677:R,R}
 | 
				
			||||||
 | 
					tpg{m<1159:A,x>3135:R,gmf}
 | 
				
			||||||
 | 
					qln{a<2906:A,a>2928:R,a<2918:R,A}
 | 
				
			||||||
 | 
					lvf{x<1270:bfx,x<1455:bzz,qk}
 | 
				
			||||||
 | 
					xlq{m<334:A,s>1515:A,A}
 | 
				
			||||||
 | 
					sx{m<1833:tfs,hf}
 | 
				
			||||||
 | 
					gpt{a>2836:zxd,a>2730:R,A}
 | 
				
			||||||
 | 
					krn{x>1155:ckd,s<1260:A,m>2770:A,zht}
 | 
				
			||||||
 | 
					sk{m>348:R,x>1377:A,m>153:A,R}
 | 
				
			||||||
 | 
					rl{a<984:R,R}
 | 
				
			||||||
 | 
					ntd{a<819:dns,qnm}
 | 
				
			||||||
 | 
					grz{x>890:A,a<3172:A,A}
 | 
				
			||||||
 | 
					kt{x>967:A,R}
 | 
				
			||||||
 | 
					qs{m<1546:A,R}
 | 
				
			||||||
 | 
					js{x>3672:qmv,a>2929:hdn,hcs}
 | 
				
			||||||
 | 
					bzz{m<647:sk,bg}
 | 
				
			||||||
 | 
					vv{s>2934:sj,R}
 | 
				
			||||||
 | 
					lbp{s>2775:R,R}
 | 
				
			||||||
 | 
					zxd{x>1854:A,R}
 | 
				
			||||||
 | 
					crn{s>1724:R,rn}
 | 
				
			||||||
 | 
					jc{x>1851:R,s<3672:A,m<3477:A,R}
 | 
				
			||||||
 | 
					xxh{m>1324:qqn,qm}
 | 
				
			||||||
 | 
					pn{s<976:A,m<2297:R,A}
 | 
				
			||||||
 | 
					fv{s>3818:A,s<3658:R,s<3743:R,A}
 | 
				
			||||||
 | 
					ck{x>2824:R,m<316:R,A}
 | 
				
			||||||
 | 
					vdp{x<3490:A,A}
 | 
				
			||||||
 | 
					xq{m>184:A,x>3334:A,A}
 | 
				
			||||||
 | 
					fz{m>3339:R,m>2690:R,x>2493:R,R}
 | 
				
			||||||
 | 
					jf{m<1773:R,x>659:R,A}
 | 
				
			||||||
 | 
					xd{a<3143:A,R}
 | 
				
			||||||
 | 
					svq{a<3528:A,R}
 | 
				
			||||||
 | 
					cl{x>3473:A,R}
 | 
				
			||||||
 | 
					qf{x>3076:A,R}
 | 
				
			||||||
 | 
					ktb{m<3197:A,s<704:R,s>1154:A,A}
 | 
				
			||||||
 | 
					gbj{m<158:R,m<302:R,m>336:R,R}
 | 
				
			||||||
 | 
					ff{s<2459:lmc,s>2743:R,nsj}
 | 
				
			||||||
 | 
					rcn{s>3821:R,x>2847:A,a<2261:R,A}
 | 
				
			||||||
 | 
					xkn{x>2134:R,x>1785:A,A}
 | 
				
			||||||
 | 
					pf{a>3576:A,s>3815:A,s>3737:R,R}
 | 
				
			||||||
 | 
					ntv{s<3659:R,A}
 | 
				
			||||||
 | 
					psf{m>575:R,a<2611:A,m>319:R,R}
 | 
				
			||||||
 | 
					fqz{a>3321:bx,vdp}
 | 
				
			||||||
 | 
					tzp{x<554:ph,a>2615:lm,krn}
 | 
				
			||||||
 | 
					pht{s>625:fh,x>606:ffn,sxb}
 | 
				
			||||||
 | 
					zz{m<1836:ql,s>1299:hp,m<3200:shb,A}
 | 
				
			||||||
 | 
					snl{s>3863:R,a<2001:xnj,kk}
 | 
				
			||||||
 | 
					qdc{a<3128:ngl,a>3442:rnk,x<874:zm,gl}
 | 
				
			||||||
 | 
					rsz{m>1017:R,x<2038:A,m<443:R,dzz}
 | 
				
			||||||
 | 
					frj{m>1063:md,a>3826:rbn,s>1317:lb,zkk}
 | 
				
			||||||
 | 
					bbt{a>3364:A,a<3152:R,R}
 | 
				
			||||||
 | 
					lpg{x>3231:fqz,x<2909:nvk,s<2283:nm,lv}
 | 
				
			||||||
 | 
					sd{s<1984:R,a>1624:A,m<729:A,A}
 | 
				
			||||||
 | 
					spq{x<3000:A,s>148:A,R}
 | 
				
			||||||
 | 
					fsv{s<2728:gj,m<1078:fpf,s>2917:R,R}
 | 
				
			||||||
 | 
					rmq{s<3098:A,x<182:fg,cpn}
 | 
				
			||||||
 | 
					msc{x>326:A,xxx}
 | 
				
			||||||
 | 
					drg{a>1618:hzf,s>486:zjl,a>619:hzc,A}
 | 
				
			||||||
 | 
					hx{x>3100:R,m<249:hnq,R}
 | 
				
			||||||
 | 
					ksc{a>3214:A,x>2913:R,R}
 | 
				
			||||||
 | 
					kxs{x<3497:R,s>949:A,A}
 | 
				
			||||||
 | 
					xv{s>311:A,R}
 | 
				
			||||||
 | 
					kd{x<3492:A,ppm}
 | 
				
			||||||
 | 
					st{s<1839:R,m>810:R,pgj}
 | 
				
			||||||
 | 
					ntb{m>3358:spq,m>2731:zhg,s<116:R,A}
 | 
				
			||||||
 | 
					lqz{a>3814:A,A}
 | 
				
			||||||
 | 
					fb{x>2177:tg,bjd}
 | 
				
			||||||
 | 
					dcg{a<3359:pgb,rch}
 | 
				
			||||||
 | 
					khp{a<2918:A,x>3796:R,m>378:R,A}
 | 
				
			||||||
 | 
					hhs{x<3165:A,R}
 | 
				
			||||||
 | 
					bnn{a<1158:R,x<228:A,A}
 | 
				
			||||||
 | 
					nx{m>469:R,x>3876:R,x<3760:A,A}
 | 
				
			||||||
 | 
					vl{m>1539:A,a>468:A,s>326:R,A}
 | 
				
			||||||
 | 
					qmv{s<3328:R,A}
 | 
				
			||||||
 | 
					rt{m<2818:fbx,R}
 | 
				
			||||||
 | 
					hcs{x<3425:zsp,mk}
 | 
				
			||||||
 | 
					mn{m<2363:A,R}
 | 
				
			||||||
 | 
					sm{m<839:A,x>2835:A,s>1035:A,A}
 | 
				
			||||||
 | 
					zn{x<2270:R,a>798:R,s>3678:R,A}
 | 
				
			||||||
 | 
					qqn{m>1794:jt,a<3748:fdm,gkv}
 | 
				
			||||||
 | 
					hdn{s>3198:A,s>3046:R,ngq}
 | 
				
			||||||
 | 
					mg{x>3205:R,s<2688:R,A}
 | 
				
			||||||
 | 
					sgc{x<3807:fhq,x<3919:A,bh}
 | 
				
			||||||
 | 
					qhl{m>2988:A,x>3259:drn,xpv}
 | 
				
			||||||
 | 
					zbr{x<2841:R,m>2724:R,R}
 | 
				
			||||||
 | 
					rjb{x>2706:R,R}
 | 
				
			||||||
 | 
					qp{m>1140:drg,tgn}
 | 
				
			||||||
 | 
					kkk{s>1408:vzj,m<1501:dnp,s<833:dmc,dcf}
 | 
				
			||||||
 | 
					cmr{a>3290:R,m>1084:R,m>506:R,A}
 | 
				
			||||||
 | 
					lbv{m<3300:R,a<923:A,s<2435:bb,qq}
 | 
				
			||||||
 | 
					mjb{m<3900:R,a>3686:A,R}
 | 
				
			||||||
 | 
					clg{s>1434:nvh,m>3229:rsh,bt}
 | 
				
			||||||
 | 
					hrn{a>3478:R,a>3380:R,m>1194:R,A}
 | 
				
			||||||
 | 
					zhd{s>1275:R,m>3076:R,m<2721:A,R}
 | 
				
			||||||
 | 
					hnq{x>2834:A,R}
 | 
				
			||||||
 | 
					tbt{x>3131:A,m<3435:R,A}
 | 
				
			||||||
 | 
					phc{a>3375:A,a<3306:R,A}
 | 
				
			||||||
 | 
					vq{x<800:R,s>2917:R,x<922:R,R}
 | 
				
			||||||
 | 
					kq{s<3392:sc,a>1260:hm,m>2319:fb,htk}
 | 
				
			||||||
 | 
					fbx{a>3317:A,m<2345:A,R}
 | 
				
			||||||
 | 
					cm{m<2219:R,m>2264:R,R}
 | 
				
			||||||
 | 
					csz{s>3528:R,A}
 | 
				
			||||||
 | 
					nst{x>2459:A,A}
 | 
				
			||||||
 | 
					lf{a<3121:R,x<2716:R,m<818:R,A}
 | 
				
			||||||
 | 
					xsp{x<2980:R,a>2817:A,A}
 | 
				
			||||||
 | 
					qm{x<2949:kr,x<3428:jjf,s<456:jtt,jqn}
 | 
				
			||||||
 | 
					qt{s<744:A,x<1059:R,s>816:R,A}
 | 
				
			||||||
 | 
					zc{x>3545:qx,a>3625:vn,A}
 | 
				
			||||||
 | 
					cxk{a>1449:ntt,s>1617:xbr,s>1504:R,xqf}
 | 
				
			||||||
 | 
					cg{x>2245:zx,x<1956:zbk,vft}
 | 
				
			||||||
 | 
					zkk{m<649:A,a>3680:R,R}
 | 
				
			||||||
 | 
					bx{a<3661:A,x<3529:A,a>3778:R,R}
 | 
				
			||||||
 | 
					mv{s>1300:rsc,khc}
 | 
				
			||||||
 | 
					qjt{x<3376:A,R}
 | 
				
			||||||
 | 
					mgp{x>3029:zq,A}
 | 
				
			||||||
 | 
					fpf{a>1769:R,x>2049:A,s<2923:A,R}
 | 
				
			||||||
 | 
					lhc{s>1662:A,m>1543:A,a<3599:tl,vfn}
 | 
				
			||||||
 | 
					mzr{a<2819:R,R}
 | 
				
			||||||
 | 
					psp{s<2611:A,a>3354:A,a>3056:A,A}
 | 
				
			||||||
 | 
					vc{m<1333:cb,mp}
 | 
				
			||||||
 | 
					bzc{m<1850:R,m<1953:A,R}
 | 
				
			||||||
 | 
					kb{m<2614:mpn,m>3380:zhp,gqd}
 | 
				
			||||||
 | 
					dv{a<3677:cfq,x<3383:R,s<2710:R,rq}
 | 
				
			||||||
 | 
					xh{s<2524:A,R}
 | 
				
			||||||
 | 
					vr{s>754:A,x<643:A,A}
 | 
				
			||||||
 | 
					sj{s<3498:R,s<3711:R,m<1518:A,R}
 | 
				
			||||||
 | 
					bq{a<1413:R,m>3189:A,a<1750:R,R}
 | 
				
			||||||
 | 
					bgn{m<197:A,m<353:gbq,xh}
 | 
				
			||||||
 | 
					jl{x>2858:R,m<476:R,R}
 | 
				
			||||||
 | 
					vbr{x<2055:R,m>2096:A,R}
 | 
				
			||||||
 | 
					ngq{a>3426:R,s<3009:A,a<3210:A,R}
 | 
				
			||||||
 | 
					krj{x>2852:pjd,gf}
 | 
				
			||||||
 | 
					dp{m>1430:A,A}
 | 
				
			||||||
 | 
					xkm{m<1913:kjv,vz}
 | 
				
			||||||
 | 
					vg{x>224:R,a>1513:A,m<323:A,R}
 | 
				
			||||||
 | 
					jmf{s<1182:A,a>3547:A,A}
 | 
				
			||||||
 | 
					vqr{a>3441:ljt,A}
 | 
				
			||||||
 | 
					ckd{m>3131:R,a<1567:R,m>2271:R,A}
 | 
				
			||||||
 | 
					bp{s>3270:A,s>3133:R,R}
 | 
				
			||||||
 | 
					pc{x>3663:A,m<491:R,A}
 | 
				
			||||||
 | 
					mx{m>663:bs,m<622:tjb,gkn}
 | 
				
			||||||
 | 
					qhh{x<1947:A,m>3589:A,R}
 | 
				
			||||||
 | 
					ths{a>2010:dp,R}
 | 
				
			||||||
 | 
					znh{m>662:A,x>2990:R,R}
 | 
				
			||||||
 | 
					fph{a>2941:R,s<1649:R,R}
 | 
				
			||||||
 | 
					nkr{x<1012:npt,m>1326:A,s>1224:R,R}
 | 
				
			||||||
 | 
					zbc{x>2881:R,x>2784:rcn,x>2722:xf,rjb}
 | 
				
			||||||
 | 
					hp{s>1600:R,s>1465:R,a>263:R,R}
 | 
				
			||||||
 | 
					kdf{s>420:R,m>1639:R,x>2176:A,R}
 | 
				
			||||||
 | 
					hkl{s<3823:bn,m>3668:sp,s>3936:A,A}
 | 
				
			||||||
 | 
					lp{m>3026:tbt,s>1876:R,bj}
 | 
				
			||||||
 | 
					zmt{a>3930:fn,a<3915:bcz,ktb}
 | 
				
			||||||
 | 
					jqn{a<3862:pc,m<761:R,a<3938:ldl,A}
 | 
				
			||||||
 | 
					hms{x>3072:A,s<1921:R,A}
 | 
				
			||||||
 | 
					sn{s>774:A,s>753:R,x>547:A,A}
 | 
				
			||||||
 | 
					kx{m>1998:tbn,A}
 | 
				
			||||||
 | 
					mqc{m<2308:A,m>3052:A,m>2635:R,A}
 | 
				
			||||||
 | 
					qdj{a>2946:zgm,a<2669:fqc,m>2271:lzv,ndr}
 | 
				
			||||||
 | 
					xt{a>3826:A,x<3063:A,A}
 | 
				
			||||||
 | 
					kvr{m>1390:R,x>3294:A,R}
 | 
				
			||||||
 | 
					hz{x>2278:A,x<1949:A,A}
 | 
				
			||||||
 | 
					fkj{x<3168:A,s<2741:R,R}
 | 
				
			||||||
 | 
					tn{m<3831:R,s>2560:R,A}
 | 
				
			||||||
 | 
					zjl{s>694:R,R}
 | 
				
			||||||
 | 
					ndr{a<2827:cgl,x<2240:rsz,xn}
 | 
				
			||||||
 | 
					btj{m<1813:qs,m<2042:jg,cm}
 | 
				
			||||||
 | 
					bjd{x<1891:A,s>3600:A,A}
 | 
				
			||||||
 | 
					gjg{m>2075:rjd,a<3588:fx,s<809:xxh,rss}
 | 
				
			||||||
 | 
					zch{s<3538:hl,m<2003:zlz,dz}
 | 
				
			||||||
 | 
					nrf{s>428:vkl,s>146:qsg,a>957:pmd,dxn}
 | 
				
			||||||
 | 
					vhc{s>1085:tpg,jxf}
 | 
				
			||||||
 | 
					lb{m<643:xlq,a>3717:svn,m>911:dsr,ds}
 | 
				
			||||||
 | 
					zdc{x>1803:R,A}
 | 
				
			||||||
 | 
					bzj{s>3689:A,m<2560:R,R}
 | 
				
			||||||
 | 
					flt{s>1360:A,x>2163:A,A}
 | 
				
			||||||
 | 
					qg{s>1039:A,A}
 | 
				
			||||||
 | 
					dm{m<3816:A,s<3853:R,A}
 | 
				
			||||||
 | 
					xmg{m>752:A,x>137:jzj,gsl}
 | 
				
			||||||
 | 
					bcz{a<3903:R,R}
 | 
				
			||||||
 | 
					lkc{a>3188:A,m<900:A,m>1018:A,R}
 | 
				
			||||||
 | 
					jxf{s<527:srg,A}
 | 
				
			||||||
 | 
					gx{m>486:dq,ntd}
 | 
				
			||||||
 | 
					bd{s>2400:A,x>3671:A,s>2281:R,A}
 | 
				
			||||||
 | 
					qc{s<2673:R,A}
 | 
				
			||||||
 | 
					lm{a<3182:dj,a>3635:lqz,a>3407:R,R}
 | 
				
			||||||
 | 
					qnm{m<247:R,a>1687:R,m>389:A,A}
 | 
				
			||||||
 | 
					zq{s>3263:R,s>3111:R,R}
 | 
				
			||||||
 | 
					mk{s>3246:A,m>2016:R,s<3088:A,R}
 | 
				
			||||||
 | 
					rql{a<3077:xsp,s>2761:jl,s>2722:R,A}
 | 
				
			||||||
 | 
					vj{s<2785:ndh,kd}
 | 
				
			||||||
 | 
					in{s>2178:zs,skv}
 | 
				
			||||||
 | 
					xrc{s>712:sn,A}
 | 
				
			||||||
 | 
					jp{a<2589:R,A}
 | 
				
			||||||
 | 
					pgj{a>3929:R,x>2479:A,A}
 | 
				
			||||||
 | 
					jts{x>3530:R,A}
 | 
				
			||||||
 | 
					gv{s>3739:A,R}
 | 
				
			||||||
 | 
					mnr{s>2737:R,A}
 | 
				
			||||||
 | 
					tgt{m>1439:R,s>292:R,A}
 | 
				
			||||||
 | 
					xvs{a<2848:A,A}
 | 
				
			||||||
 | 
					vps{a>3227:A,x<1588:R,A}
 | 
				
			||||||
 | 
					jzj{m<672:A,s<1122:R,R}
 | 
				
			||||||
 | 
					zzp{x<901:ch,R}
 | 
				
			||||||
 | 
					sl{s>1542:A,s>1296:R,x>1931:A,zxz}
 | 
				
			||||||
 | 
					rjd{a>3500:xzq,s<1086:qj,xz}
 | 
				
			||||||
 | 
					kgd{s>1426:A,a>3812:A,R}
 | 
				
			||||||
 | 
					dmc{m<2947:szv,kqx}
 | 
				
			||||||
 | 
					hbk{m<3419:A,R}
 | 
				
			||||||
 | 
					htk{a<729:R,a>1042:A,a>861:R,zn}
 | 
				
			||||||
 | 
					zp{s<1255:A,A}
 | 
				
			||||||
 | 
					qlx{m>1631:R,x>3329:R,R}
 | 
				
			||||||
 | 
					skv{x<1606:kkk,a<1440:ggv,a<3018:xkm,gjg}
 | 
				
			||||||
 | 
					zl{m>3149:A,a>3596:A,R}
 | 
				
			||||||
 | 
					sjc{m>2149:A,A}
 | 
				
			||||||
 | 
					ggv{x>2600:nh,cg}
 | 
				
			||||||
 | 
					pd{a<3356:pr,x<2700:xfj,a<3465:zbd,xv}
 | 
				
			||||||
 | 
					vhk{a<614:A,a>735:A,m>3340:A,R}
 | 
				
			||||||
 | 
					bz{x<2317:R,s<3304:A,A}
 | 
				
			||||||
 | 
					zbd{m>889:zfk,bdh}
 | 
				
			||||||
 | 
					vsj{a<598:zhd,R}
 | 
				
			||||||
 | 
					qzf{a>1455:R,x>340:A,s<1196:R,R}
 | 
				
			||||||
 | 
					dz{m<3157:qv,x>3473:hkl,a>877:sv,rf}
 | 
				
			||||||
 | 
					rtg{a>2957:R,A}
 | 
				
			||||||
 | 
					qk{a>3252:svq,s>3213:R,m>548:cfz,R}
 | 
				
			||||||
 | 
					zx{a>871:sxt,a>314:mn,a>186:zz,nq}
 | 
				
			||||||
 | 
					kcd{x<2880:R,s>94:R,R}
 | 
				
			||||||
 | 
					hqc{m<796:R,m>890:rhd,a<2192:A,xvs}
 | 
				
			||||||
 | 
					ffn{m>350:jp,a<2088:ttd,a>2817:R,R}
 | 
				
			||||||
 | 
					sz{m<1599:R,x>2121:ktx,m<3075:bbt,qhh}
 | 
				
			||||||
 | 
					jtt{a<3836:zqv,m<876:gg,A}
 | 
				
			||||||
 | 
					lmr{a<2718:A,a<3149:R,R}
 | 
				
			||||||
 | 
					zdv{s>3010:R,lr}
 | 
				
			||||||
 | 
					jcl{m<1659:A,R}
 | 
				
			||||||
 | 
					mdq{a<479:R,A}
 | 
				
			||||||
 | 
					dnp{m<537:pht,s<885:qp,x<582:bjg,kjt}
 | 
				
			||||||
 | 
					lxp{m>2932:A,lx}
 | 
				
			||||||
 | 
					kqx{s<513:hbk,a<1592:ncn,a>3119:xrc,kt}
 | 
				
			||||||
 | 
					cnl{x<1035:R,m<2338:A,R}
 | 
				
			||||||
 | 
					mp{m<2347:xpj,a>2221:vdz,bq}
 | 
				
			||||||
 | 
					rgx{s<2542:R,R}
 | 
				
			||||||
 | 
					rb{s<3903:A,A}
 | 
				
			||||||
 | 
					jk{m>2376:R,x>3391:R,m<1198:R,R}
 | 
				
			||||||
 | 
					zgm{s>3092:bzj,sz}
 | 
				
			||||||
 | 
					gt{a>1014:R,m<2365:ls,R}
 | 
				
			||||||
 | 
					jpn{s>1819:hj,a>3326:vqr,ljm}
 | 
				
			||||||
 | 
					nzj{s>254:R,m>2156:R,x<991:jf,qhq}
 | 
				
			||||||
 | 
					gh{m>856:A,nsp}
 | 
				
			||||||
 | 
					kpq{a<110:A,x>3312:R,x<3090:R,R}
 | 
				
			||||||
 | 
					hl{x<3177:pj,bp}
 | 
				
			||||||
 | 
					gs{a<180:R,s>3703:R,R}
 | 
				
			||||||
 | 
					gz{m>3188:R,R}
 | 
				
			||||||
 | 
					lft{s>2829:ps,gbj}
 | 
				
			||||||
 | 
					kzb{m>2754:A,a<2674:A,A}
 | 
				
			||||||
 | 
					vz{a>2453:pp,clg}
 | 
				
			||||||
 | 
					tqc{x<360:dk,zcq}
 | 
				
			||||||
 | 
					bxv{a<2317:A,m<2884:pn,fkp}
 | 
				
			||||||
 | 
					ztl{a<590:R,x<2295:R,x>2529:R,R}
 | 
				
			||||||
 | 
					vkk{a>3382:zc,x>3140:xrl,m<384:lft,rql}
 | 
				
			||||||
 | 
					fbv{s<3805:R,s>3881:R,a>172:R,R}
 | 
				
			||||||
 | 
					gbq{m>279:A,x<3717:R,x<3898:A,R}
 | 
				
			||||||
 | 
					svn{s<1485:R,A}
 | 
				
			||||||
 | 
					skb{s>589:R,s>295:R,x>2063:A,A}
 | 
				
			||||||
 | 
					mc{a>272:A,x>3488:gs,s>3786:A,fsf}
 | 
				
			||||||
 | 
					pbv{x<3811:R,a>3290:A,m<3444:R,A}
 | 
				
			||||||
 | 
					gkn{s<1377:A,A}
 | 
				
			||||||
 | 
					nth{a<1084:bd,A}
 | 
				
			||||||
 | 
					vsl{a<2799:A,a<2901:bgb,fph}
 | 
				
			||||||
 | 
					lr{x<1407:A,s>2654:R,s<2373:A,R}
 | 
				
			||||||
 | 
					dbq{m<1824:R,s>291:R,A}
 | 
				
			||||||
 | 
					hdt{s>3011:R,s>2681:A,bgg}
 | 
				
			||||||
 | 
					nvq{m>597:R,x>47:R,A}
 | 
				
			||||||
 | 
					qj{s>674:pz,s>313:srn,ntb}
 | 
				
			||||||
 | 
					fgp{a>3257:R,mcl}
 | 
				
			||||||
 | 
					pjd{s<3848:vlx,A}
 | 
				
			||||||
 | 
					gmf{s<1729:A,A}
 | 
				
			||||||
 | 
					kzp{x>1746:A,x>1670:A,m>2460:A,A}
 | 
				
			||||||
 | 
					tl{m<888:A,m<1289:A,R}
 | 
				
			||||||
 | 
					zh{m<1334:fzz,s>2674:vj,m<2347:cdt,cx}
 | 
				
			||||||
 | 
					ql{s<1432:A,a>258:R,A}
 | 
				
			||||||
 | 
					rch{s<485:R,vqq}
 | 
				
			||||||
 | 
					hf{a<3208:R,pf}
 | 
				
			||||||
 | 
					bj{x<2870:R,m<2489:A,R}
 | 
				
			||||||
 | 
					zhg{x>3190:A,s>144:R,m<2941:A,R}
 | 
				
			||||||
 | 
					rsh{x<3060:R,a<1833:pm,R}
 | 
				
			||||||
 | 
					ntt{a>1930:R,a<1611:A,A}
 | 
				
			||||||
 | 
					hd{s>1811:A,R}
 | 
				
			||||||
 | 
					dfd{x<2726:A,qg}
 | 
				
			||||||
 | 
					gqd{a>3471:qjt,qhl}
 | 
				
			||||||
 | 
					xrl{x>3598:khp,m>284:lbp,m<100:R,xq}
 | 
				
			||||||
 | 
					zxz{m<2818:A,R}
 | 
				
			||||||
 | 
					vfn{s>1502:R,x>955:R,s>1440:A,R}
 | 
				
			||||||
 | 
					dr{s<370:A,x>3070:R,R}
 | 
				
			||||||
 | 
					cth{a<2210:cxk,a>3174:lhc,krr}
 | 
				
			||||||
 | 
					xbr{m<1775:R,m>3200:A,A}
 | 
				
			||||||
 | 
					nn{m>718:R,x>3641:nx,A}
 | 
				
			||||||
 | 
					dxn{s<55:hr,x>3309:A,a<824:kcd,mqc}
 | 
				
			||||||
 | 
					mt{a<423:R,a>555:R,R}
 | 
				
			||||||
 | 
					hqk{a>2663:A,s<888:R,a<2564:R,A}
 | 
				
			||||||
 | 
					ns{a<2307:lrn,qdj}
 | 
				
			||||||
 | 
					sxb{s>318:vg,hgv}
 | 
				
			||||||
 | 
					ljm{s<1457:A,m>763:A,s>1648:R,A}
 | 
				
			||||||
 | 
					qcr{s<1460:R,m<548:hms,a>1054:A,nzq}
 | 
				
			||||||
 | 
					sxx{a>3455:A,R}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					{x=378,m=450,a=211,s=36}
 | 
				
			||||||
 | 
					{x=220,m=1090,a=338,s=879}
 | 
				
			||||||
 | 
					{x=117,m=124,a=2136,s=128}
 | 
				
			||||||
 | 
					{x=1392,m=1408,a=126,s=16}
 | 
				
			||||||
 | 
					{x=2038,m=278,a=901,s=1801}
 | 
				
			||||||
 | 
					{x=323,m=1703,a=964,s=571}
 | 
				
			||||||
 | 
					{x=265,m=358,a=456,s=34}
 | 
				
			||||||
 | 
					{x=1513,m=144,a=525,s=1341}
 | 
				
			||||||
 | 
					{x=355,m=2036,a=814,s=1179}
 | 
				
			||||||
 | 
					{x=937,m=701,a=2026,s=1349}
 | 
				
			||||||
 | 
					{x=1292,m=766,a=2805,s=16}
 | 
				
			||||||
 | 
					{x=319,m=26,a=83,s=1193}
 | 
				
			||||||
 | 
					{x=600,m=5,a=242,s=76}
 | 
				
			||||||
 | 
					{x=117,m=1415,a=1636,s=1057}
 | 
				
			||||||
 | 
					{x=87,m=1530,a=1686,s=386}
 | 
				
			||||||
 | 
					{x=36,m=957,a=1712,s=300}
 | 
				
			||||||
 | 
					{x=2570,m=49,a=661,s=442}
 | 
				
			||||||
 | 
					{x=643,m=698,a=1593,s=854}
 | 
				
			||||||
 | 
					{x=1450,m=1410,a=289,s=1342}
 | 
				
			||||||
 | 
					{x=1690,m=376,a=584,s=3715}
 | 
				
			||||||
 | 
					{x=1942,m=570,a=1726,s=1192}
 | 
				
			||||||
 | 
					{x=420,m=475,a=1410,s=863}
 | 
				
			||||||
 | 
					{x=550,m=662,a=2140,s=105}
 | 
				
			||||||
 | 
					{x=241,m=2370,a=756,s=26}
 | 
				
			||||||
 | 
					{x=705,m=425,a=1000,s=160}
 | 
				
			||||||
 | 
					{x=1763,m=914,a=197,s=555}
 | 
				
			||||||
 | 
					{x=2267,m=323,a=70,s=147}
 | 
				
			||||||
 | 
					{x=497,m=392,a=1959,s=360}
 | 
				
			||||||
 | 
					{x=428,m=1375,a=415,s=236}
 | 
				
			||||||
 | 
					{x=1800,m=96,a=403,s=1227}
 | 
				
			||||||
 | 
					{x=216,m=381,a=1217,s=1031}
 | 
				
			||||||
 | 
					{x=3129,m=304,a=811,s=1753}
 | 
				
			||||||
 | 
					{x=555,m=59,a=3254,s=2896}
 | 
				
			||||||
 | 
					{x=397,m=1518,a=740,s=496}
 | 
				
			||||||
 | 
					{x=905,m=217,a=1234,s=2319}
 | 
				
			||||||
 | 
					{x=283,m=2490,a=309,s=1156}
 | 
				
			||||||
 | 
					{x=1777,m=624,a=96,s=2053}
 | 
				
			||||||
 | 
					{x=1031,m=481,a=1014,s=198}
 | 
				
			||||||
 | 
					{x=155,m=205,a=2460,s=832}
 | 
				
			||||||
 | 
					{x=123,m=25,a=3962,s=3662}
 | 
				
			||||||
 | 
					{x=3242,m=396,a=519,s=150}
 | 
				
			||||||
 | 
					{x=2632,m=1307,a=3594,s=1714}
 | 
				
			||||||
 | 
					{x=147,m=285,a=1020,s=40}
 | 
				
			||||||
 | 
					{x=1498,m=1133,a=241,s=1263}
 | 
				
			||||||
 | 
					{x=1977,m=323,a=1594,s=241}
 | 
				
			||||||
 | 
					{x=807,m=1042,a=702,s=295}
 | 
				
			||||||
 | 
					{x=70,m=455,a=1328,s=108}
 | 
				
			||||||
 | 
					{x=2392,m=27,a=158,s=44}
 | 
				
			||||||
 | 
					{x=528,m=671,a=2003,s=935}
 | 
				
			||||||
 | 
					{x=1539,m=2002,a=168,s=479}
 | 
				
			||||||
 | 
					{x=2121,m=195,a=901,s=1116}
 | 
				
			||||||
 | 
					{x=251,m=51,a=380,s=745}
 | 
				
			||||||
 | 
					{x=793,m=1959,a=598,s=605}
 | 
				
			||||||
 | 
					{x=137,m=261,a=714,s=1548}
 | 
				
			||||||
 | 
					{x=2783,m=486,a=2065,s=914}
 | 
				
			||||||
 | 
					{x=574,m=387,a=250,s=28}
 | 
				
			||||||
 | 
					{x=3,m=829,a=1862,s=2}
 | 
				
			||||||
 | 
					{x=846,m=2476,a=841,s=1810}
 | 
				
			||||||
 | 
					{x=1020,m=114,a=463,s=323}
 | 
				
			||||||
 | 
					{x=4,m=970,a=192,s=142}
 | 
				
			||||||
 | 
					{x=942,m=2297,a=125,s=1638}
 | 
				
			||||||
 | 
					{x=1664,m=2275,a=2086,s=290}
 | 
				
			||||||
 | 
					{x=682,m=93,a=143,s=2033}
 | 
				
			||||||
 | 
					{x=1613,m=356,a=463,s=632}
 | 
				
			||||||
 | 
					{x=633,m=268,a=150,s=798}
 | 
				
			||||||
 | 
					{x=1743,m=1455,a=56,s=487}
 | 
				
			||||||
 | 
					{x=2774,m=103,a=739,s=77}
 | 
				
			||||||
 | 
					{x=1760,m=2631,a=81,s=138}
 | 
				
			||||||
 | 
					{x=461,m=1688,a=1543,s=1712}
 | 
				
			||||||
 | 
					{x=1182,m=14,a=566,s=3270}
 | 
				
			||||||
 | 
					{x=680,m=467,a=1920,s=297}
 | 
				
			||||||
 | 
					{x=1281,m=2355,a=704,s=1340}
 | 
				
			||||||
 | 
					{x=142,m=65,a=589,s=20}
 | 
				
			||||||
 | 
					{x=1412,m=559,a=677,s=2106}
 | 
				
			||||||
 | 
					{x=905,m=2761,a=1526,s=648}
 | 
				
			||||||
 | 
					{x=399,m=667,a=1901,s=27}
 | 
				
			||||||
 | 
					{x=2241,m=3411,a=1786,s=321}
 | 
				
			||||||
 | 
					{x=1395,m=1278,a=508,s=1112}
 | 
				
			||||||
 | 
					{x=363,m=35,a=218,s=1280}
 | 
				
			||||||
 | 
					{x=829,m=115,a=304,s=192}
 | 
				
			||||||
 | 
					{x=1397,m=599,a=861,s=838}
 | 
				
			||||||
 | 
					{x=824,m=2140,a=88,s=1736}
 | 
				
			||||||
 | 
					{x=661,m=276,a=502,s=731}
 | 
				
			||||||
 | 
					{x=585,m=14,a=705,s=473}
 | 
				
			||||||
 | 
					{x=747,m=95,a=829,s=805}
 | 
				
			||||||
 | 
					{x=2006,m=323,a=982,s=168}
 | 
				
			||||||
 | 
					{x=795,m=193,a=473,s=1531}
 | 
				
			||||||
 | 
					{x=687,m=428,a=972,s=1154}
 | 
				
			||||||
 | 
					{x=254,m=426,a=281,s=552}
 | 
				
			||||||
 | 
					{x=171,m=369,a=382,s=1369}
 | 
				
			||||||
 | 
					{x=964,m=10,a=322,s=2007}
 | 
				
			||||||
 | 
					{x=1960,m=183,a=2153,s=1967}
 | 
				
			||||||
 | 
					{x=2315,m=170,a=41,s=727}
 | 
				
			||||||
 | 
					{x=189,m=901,a=307,s=3026}
 | 
				
			||||||
 | 
					{x=757,m=1235,a=1316,s=335}
 | 
				
			||||||
 | 
					{x=836,m=3023,a=453,s=2355}
 | 
				
			||||||
 | 
					{x=2187,m=2140,a=683,s=2560}
 | 
				
			||||||
 | 
					{x=1772,m=468,a=1812,s=1329}
 | 
				
			||||||
 | 
					{x=783,m=601,a=1339,s=3291}
 | 
				
			||||||
 | 
					{x=570,m=172,a=1794,s=120}
 | 
				
			||||||
 | 
					{x=1207,m=1572,a=700,s=758}
 | 
				
			||||||
 | 
					{x=1961,m=3652,a=702,s=153}
 | 
				
			||||||
 | 
					{x=1094,m=435,a=19,s=938}
 | 
				
			||||||
 | 
					{x=3328,m=166,a=247,s=216}
 | 
				
			||||||
 | 
					{x=1500,m=2012,a=1561,s=59}
 | 
				
			||||||
 | 
					{x=12,m=2269,a=8,s=796}
 | 
				
			||||||
 | 
					{x=193,m=1137,a=328,s=13}
 | 
				
			||||||
 | 
					{x=120,m=1179,a=59,s=1829}
 | 
				
			||||||
 | 
					{x=499,m=650,a=1049,s=1803}
 | 
				
			||||||
 | 
					{x=2761,m=1431,a=389,s=1322}
 | 
				
			||||||
 | 
					{x=456,m=2766,a=2165,s=348}
 | 
				
			||||||
 | 
					{x=2387,m=12,a=2140,s=556}
 | 
				
			||||||
 | 
					{x=387,m=7,a=1514,s=1137}
 | 
				
			||||||
 | 
					{x=1111,m=608,a=581,s=965}
 | 
				
			||||||
 | 
					{x=1055,m=181,a=754,s=67}
 | 
				
			||||||
 | 
					{x=74,m=2582,a=66,s=546}
 | 
				
			||||||
 | 
					{x=5,m=956,a=1013,s=657}
 | 
				
			||||||
 | 
					{x=262,m=189,a=2496,s=233}
 | 
				
			||||||
 | 
					{x=518,m=2821,a=851,s=825}
 | 
				
			||||||
 | 
					{x=351,m=1981,a=221,s=34}
 | 
				
			||||||
 | 
					{x=995,m=165,a=36,s=2286}
 | 
				
			||||||
 | 
					{x=1636,m=335,a=936,s=447}
 | 
				
			||||||
 | 
					{x=763,m=692,a=1527,s=210}
 | 
				
			||||||
 | 
					{x=301,m=559,a=1815,s=2640}
 | 
				
			||||||
 | 
					{x=959,m=2852,a=232,s=53}
 | 
				
			||||||
 | 
					{x=136,m=153,a=206,s=11}
 | 
				
			||||||
 | 
					{x=1533,m=42,a=2014,s=136}
 | 
				
			||||||
 | 
					{x=341,m=378,a=37,s=577}
 | 
				
			||||||
 | 
					{x=220,m=1451,a=185,s=421}
 | 
				
			||||||
 | 
					{x=1086,m=3265,a=1184,s=2960}
 | 
				
			||||||
 | 
					{x=143,m=2701,a=602,s=173}
 | 
				
			||||||
 | 
					{x=628,m=1016,a=1642,s=223}
 | 
				
			||||||
 | 
					{x=597,m=641,a=1331,s=651}
 | 
				
			||||||
 | 
					{x=809,m=1843,a=1111,s=2189}
 | 
				
			||||||
 | 
					{x=1385,m=1352,a=238,s=1969}
 | 
				
			||||||
 | 
					{x=515,m=1374,a=125,s=913}
 | 
				
			||||||
 | 
					{x=798,m=2743,a=1798,s=1045}
 | 
				
			||||||
 | 
					{x=2999,m=1787,a=1168,s=188}
 | 
				
			||||||
 | 
					{x=57,m=77,a=2652,s=56}
 | 
				
			||||||
 | 
					{x=1231,m=304,a=1288,s=523}
 | 
				
			||||||
 | 
					{x=1031,m=381,a=558,s=267}
 | 
				
			||||||
 | 
					{x=721,m=883,a=2995,s=22}
 | 
				
			||||||
 | 
					{x=304,m=846,a=1525,s=30}
 | 
				
			||||||
 | 
					{x=446,m=2969,a=412,s=674}
 | 
				
			||||||
 | 
					{x=187,m=418,a=1187,s=571}
 | 
				
			||||||
 | 
					{x=810,m=515,a=819,s=1393}
 | 
				
			||||||
 | 
					{x=740,m=3392,a=1128,s=1114}
 | 
				
			||||||
 | 
					{x=137,m=631,a=1208,s=1707}
 | 
				
			||||||
 | 
					{x=653,m=2468,a=952,s=811}
 | 
				
			||||||
 | 
					{x=33,m=70,a=518,s=464}
 | 
				
			||||||
 | 
					{x=3318,m=2,a=3661,s=64}
 | 
				
			||||||
 | 
					{x=50,m=548,a=1657,s=704}
 | 
				
			||||||
 | 
					{x=2272,m=2684,a=1597,s=2220}
 | 
				
			||||||
 | 
					{x=185,m=339,a=460,s=517}
 | 
				
			||||||
 | 
					{x=8,m=1651,a=1810,s=354}
 | 
				
			||||||
 | 
					{x=548,m=833,a=1703,s=759}
 | 
				
			||||||
 | 
					{x=551,m=358,a=390,s=468}
 | 
				
			||||||
 | 
					{x=202,m=2260,a=597,s=632}
 | 
				
			||||||
 | 
					{x=453,m=1811,a=754,s=2449}
 | 
				
			||||||
 | 
					{x=353,m=101,a=1835,s=72}
 | 
				
			||||||
 | 
					{x=1451,m=453,a=162,s=13}
 | 
				
			||||||
 | 
					{x=125,m=2120,a=627,s=981}
 | 
				
			||||||
 | 
					{x=5,m=283,a=1755,s=194}
 | 
				
			||||||
 | 
					{x=973,m=835,a=62,s=1184}
 | 
				
			||||||
 | 
					{x=346,m=1348,a=442,s=210}
 | 
				
			||||||
 | 
					{x=4,m=1242,a=136,s=196}
 | 
				
			||||||
 | 
					{x=2388,m=1336,a=1991,s=2873}
 | 
				
			||||||
 | 
					{x=561,m=2335,a=1059,s=627}
 | 
				
			||||||
 | 
					{x=838,m=3226,a=159,s=1053}
 | 
				
			||||||
 | 
					{x=2578,m=49,a=1920,s=2432}
 | 
				
			||||||
 | 
					{x=710,m=342,a=182,s=534}
 | 
				
			||||||
 | 
					{x=1997,m=1509,a=946,s=1849}
 | 
				
			||||||
 | 
					{x=810,m=249,a=495,s=257}
 | 
				
			||||||
 | 
					{x=363,m=274,a=2742,s=25}
 | 
				
			||||||
 | 
					{x=506,m=565,a=2584,s=731}
 | 
				
			||||||
 | 
					{x=508,m=2073,a=21,s=1826}
 | 
				
			||||||
 | 
					{x=1413,m=780,a=779,s=378}
 | 
				
			||||||
 | 
					{x=1097,m=47,a=98,s=402}
 | 
				
			||||||
 | 
					{x=536,m=2,a=2710,s=1499}
 | 
				
			||||||
 | 
					{x=548,m=2845,a=2095,s=555}
 | 
				
			||||||
 | 
					{x=2963,m=2206,a=1920,s=875}
 | 
				
			||||||
 | 
					{x=1783,m=367,a=1245,s=594}
 | 
				
			||||||
 | 
					{x=409,m=18,a=408,s=119}
 | 
				
			||||||
 | 
					{x=1554,m=3613,a=3002,s=87}
 | 
				
			||||||
 | 
					{x=232,m=197,a=63,s=1372}
 | 
				
			||||||
 | 
					{x=412,m=1355,a=1673,s=1667}
 | 
				
			||||||
 | 
					{x=261,m=142,a=123,s=1187}
 | 
				
			||||||
 | 
					{x=1396,m=779,a=287,s=60}
 | 
				
			||||||
 | 
					{x=28,m=1350,a=585,s=861}
 | 
				
			||||||
 | 
					{x=1123,m=329,a=1166,s=62}
 | 
				
			||||||
 | 
					{x=2292,m=73,a=123,s=596}
 | 
				
			||||||
 | 
					{x=2400,m=1430,a=390,s=1313}
 | 
				
			||||||
 | 
					{x=638,m=2856,a=44,s=488}
 | 
				
			||||||
 | 
					{x=294,m=1534,a=1075,s=1914}
 | 
				
			||||||
 | 
					{x=1233,m=71,a=253,s=3058}
 | 
				
			||||||
 | 
					{x=1536,m=805,a=158,s=738}
 | 
				
			||||||
 | 
					{x=2903,m=119,a=2344,s=2387}
 | 
				
			||||||
 | 
					{x=142,m=1768,a=940,s=881}
 | 
				
			||||||
 | 
					{x=301,m=2748,a=739,s=766}
 | 
				
			||||||
 | 
					{x=127,m=18,a=141,s=1398}
 | 
				
			||||||
							
								
								
									
										255
									
								
								day19/main.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										255
									
								
								day19/main.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,255 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						_ "embed"
 | 
				
			||||||
 | 
						"fmt"
 | 
				
			||||||
 | 
						"strings"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						aoc "go.sour.is/advent-of-code"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					// var log = aoc.Log
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func main() { aoc.MustResult(aoc.Runner(run)) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type result struct {
 | 
				
			||||||
 | 
						valuePT1 int
 | 
				
			||||||
 | 
						valuePT2 uint
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (r result) String() string { return fmt.Sprintf("%#v", r) }
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func run(scan *bufio.Scanner) (*result, error) {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var workflows = make(map[string][]rule)
 | 
				
			||||||
 | 
						var parts []part
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for scan.Scan() {
 | 
				
			||||||
 | 
							text := strings.TrimSuffix(scan.Text(), "}")
 | 
				
			||||||
 | 
							if len(text) == 0 {
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// Is Part
 | 
				
			||||||
 | 
							if p, ok := scanPart(text); ok {
 | 
				
			||||||
 | 
								parts = append(parts, p)
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							if name, r, ok := scanRule(text); ok {
 | 
				
			||||||
 | 
								workflows[name] = r
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var result result
 | 
				
			||||||
 | 
						result.valuePT1 = solveWorkflow(parts, workflows)
 | 
				
			||||||
 | 
						result.valuePT2 = solveRanges(workflows)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return &result, nil
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type part struct {
 | 
				
			||||||
 | 
						x, m, a, s int
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func (p part) String() string {
 | 
				
			||||||
 | 
						return fmt.Sprintf("{x:%v m:%v a:%v s:%v}", p.x, p.m, p.a, p.s)
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func scanPart(text string) (part, bool) {
 | 
				
			||||||
 | 
						var p part
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// Is Part
 | 
				
			||||||
 | 
						if text[0] == '{' {
 | 
				
			||||||
 | 
							for _, s := range strings.Split(text[1:], ",") {
 | 
				
			||||||
 | 
								a, b, _ := strings.Cut(s, "=")
 | 
				
			||||||
 | 
								i := aoc.Atoi(b)
 | 
				
			||||||
 | 
								switch a {
 | 
				
			||||||
 | 
								case "x":
 | 
				
			||||||
 | 
									p.x = i
 | 
				
			||||||
 | 
								case "m":
 | 
				
			||||||
 | 
									p.m = i
 | 
				
			||||||
 | 
								case "a":
 | 
				
			||||||
 | 
									p.a = i
 | 
				
			||||||
 | 
								case "s":
 | 
				
			||||||
 | 
									p.s = i
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							return p, true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return p, false
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type rule struct {
 | 
				
			||||||
 | 
						match string
 | 
				
			||||||
 | 
						op    string
 | 
				
			||||||
 | 
						value int
 | 
				
			||||||
 | 
						queue string
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func scanRule(text string) (string, []rule, bool) {
 | 
				
			||||||
 | 
						name, text, _ := strings.Cut(text, "{")
 | 
				
			||||||
 | 
						var r []rule
 | 
				
			||||||
 | 
						for _, s := range strings.Split(text, ",") {
 | 
				
			||||||
 | 
							if a, b, ok := strings.Cut(s, "<"); ok {
 | 
				
			||||||
 | 
								b, c, _ := strings.Cut(b, ":")
 | 
				
			||||||
 | 
								r = append(r, rule{
 | 
				
			||||||
 | 
									match: a,
 | 
				
			||||||
 | 
									op:    "<",
 | 
				
			||||||
 | 
									value: aoc.Atoi(b),
 | 
				
			||||||
 | 
									queue: c,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
							if a, b, ok := strings.Cut(s, ">"); ok {
 | 
				
			||||||
 | 
								b, c, _ := strings.Cut(b, ":")
 | 
				
			||||||
 | 
								r = append(r, rule{
 | 
				
			||||||
 | 
									match: a,
 | 
				
			||||||
 | 
									op:    ">",
 | 
				
			||||||
 | 
									value: aoc.Atoi(b),
 | 
				
			||||||
 | 
									queue: c,
 | 
				
			||||||
 | 
								})
 | 
				
			||||||
 | 
								continue
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
							// default queue comes last
 | 
				
			||||||
 | 
							r = append(r, rule{queue: s})
 | 
				
			||||||
 | 
							break
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return name, r, len(r) > 0
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					func (r rule) Match(p part) bool {
 | 
				
			||||||
 | 
						var value int
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						switch r.match {
 | 
				
			||||||
 | 
						case "x":
 | 
				
			||||||
 | 
							value = p.x
 | 
				
			||||||
 | 
						case "m":
 | 
				
			||||||
 | 
							value = p.m
 | 
				
			||||||
 | 
						case "a":
 | 
				
			||||||
 | 
							value = p.a
 | 
				
			||||||
 | 
						case "s":
 | 
				
			||||||
 | 
							value = p.s
 | 
				
			||||||
 | 
						default:
 | 
				
			||||||
 | 
							return true // default to new queue
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						if r.op == ">" && value > r.value {
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						} else if r.op == "<" && value < r.value {
 | 
				
			||||||
 | 
							return true
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return false // no match
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func solveWorkflow(parts []part, workflows map[string][]rule) int {
 | 
				
			||||||
 | 
						// var rejected []part
 | 
				
			||||||
 | 
						var accepted []part
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for _, p := range parts {
 | 
				
			||||||
 | 
							workflow := "in"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						nextStep:
 | 
				
			||||||
 | 
							for workflow != "" {
 | 
				
			||||||
 | 
								for _, r := range workflows[workflow] {
 | 
				
			||||||
 | 
									if !r.Match(p) {
 | 
				
			||||||
 | 
										continue
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									workflow = r.queue
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									if workflow == "A" {
 | 
				
			||||||
 | 
										accepted = append(accepted, p)
 | 
				
			||||||
 | 
										workflow = ""
 | 
				
			||||||
 | 
										break nextStep
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
									if workflow == "R" {
 | 
				
			||||||
 | 
										// rejected = append(rejected, p)
 | 
				
			||||||
 | 
										workflow = ""
 | 
				
			||||||
 | 
										break nextStep
 | 
				
			||||||
 | 
									}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
									continue nextStep
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						sum := 0
 | 
				
			||||||
 | 
						for _, p := range accepted {
 | 
				
			||||||
 | 
							sum += p.x
 | 
				
			||||||
 | 
							sum += p.m
 | 
				
			||||||
 | 
							sum += p.a
 | 
				
			||||||
 | 
							sum += p.s
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
						return sum
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func solveRanges(workflows map[string][]rule) uint {
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						pq := aoc.PriorityQueue(func(a, b queue) bool { return false })
 | 
				
			||||||
 | 
						pq.Enqueue(queue{
 | 
				
			||||||
 | 
							"in",
 | 
				
			||||||
 | 
							block{
 | 
				
			||||||
 | 
								ranger{1, 4000},
 | 
				
			||||||
 | 
								ranger{1, 4000},
 | 
				
			||||||
 | 
								ranger{1, 4000},
 | 
				
			||||||
 | 
								ranger{1, 4000},
 | 
				
			||||||
 | 
							}})
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var accepted []block
 | 
				
			||||||
 | 
						// var rejected []block
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						for !pq.IsEmpty() {
 | 
				
			||||||
 | 
							current, _ := pq.Dequeue()
 | 
				
			||||||
 | 
							for _, rule := range workflows[current.name] {
 | 
				
			||||||
 | 
								next := queue{name: rule.queue, block: current.block}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								switch rule.match {
 | 
				
			||||||
 | 
								case "x":
 | 
				
			||||||
 | 
									current.x, next.x = split(current.x, rule.value, rule.op == ">")
 | 
				
			||||||
 | 
								case "m":
 | 
				
			||||||
 | 
									current.m, next.m = split(current.m, rule.value, rule.op == ">")
 | 
				
			||||||
 | 
								case "a":
 | 
				
			||||||
 | 
									current.a, next.a = split(current.a, rule.value, rule.op == ">")
 | 
				
			||||||
 | 
								case "s":
 | 
				
			||||||
 | 
									current.s, next.s = split(current.s, rule.value, rule.op == ">")
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								switch next.name {
 | 
				
			||||||
 | 
								case "R":
 | 
				
			||||||
 | 
									// rejected = append(rejected, next.block)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								case "A":
 | 
				
			||||||
 | 
									accepted = append(accepted, next.block)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
								default:
 | 
				
			||||||
 | 
									pq.Enqueue(next)
 | 
				
			||||||
 | 
								}
 | 
				
			||||||
 | 
							}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						var sum uint
 | 
				
			||||||
 | 
						for _, a := range accepted {
 | 
				
			||||||
 | 
							sum += uint((a.x[1]-a.x[0]+1) * (a.m[1]-a.m[0]+1) * (a.a[1]-a.a[0]+1) * (a.s[1]-a.s[0]+1))
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						return sum
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					type ranger [2]int
 | 
				
			||||||
 | 
					type block struct {
 | 
				
			||||||
 | 
						x, m, a, s ranger
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					type queue struct {
 | 
				
			||||||
 | 
						name string
 | 
				
			||||||
 | 
						block
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func split(a ranger, n int, gt bool) (current ranger, next ranger) {
 | 
				
			||||||
 | 
						if gt { // x > N => [0,N] [N++,inf]
 | 
				
			||||||
 | 
							return ranger{a[0], n}, ranger{n + 1, a[1]}
 | 
				
			||||||
 | 
						}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						// x < N => [N,inf] [0,N--]
 | 
				
			||||||
 | 
						return ranger{n, a[1]}, ranger{a[0], n - 1}
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
							
								
								
									
										41
									
								
								day19/main_test.go
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										41
									
								
								day19/main_test.go
									
									
									
									
									
										Normal file
									
								
							@ -0,0 +1,41 @@
 | 
				
			|||||||
 | 
					package main
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					import (
 | 
				
			||||||
 | 
						"bufio"
 | 
				
			||||||
 | 
						"bytes"
 | 
				
			||||||
 | 
						"testing"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						_ "embed"
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						"github.com/matryer/is"
 | 
				
			||||||
 | 
					)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//go:embed example.txt
 | 
				
			||||||
 | 
					var example []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					//go:embed input.txt
 | 
				
			||||||
 | 
					var input []byte
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestExample(t *testing.T) {
 | 
				
			||||||
 | 
						is := is.New(t)
 | 
				
			||||||
 | 
						scan := bufio.NewScanner(bytes.NewReader(example))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result, err := run(scan)
 | 
				
			||||||
 | 
						is.NoErr(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						t.Log(result)
 | 
				
			||||||
 | 
						is.Equal(result.valuePT1, 19114)
 | 
				
			||||||
 | 
						is.Equal(result.valuePT2, uint(167409079868000))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					func TestSolution(t *testing.T) {
 | 
				
			||||||
 | 
						is := is.New(t)
 | 
				
			||||||
 | 
						scan := bufio.NewScanner(bytes.NewReader(input))
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						result, err := run(scan)
 | 
				
			||||||
 | 
						is.NoErr(err)
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
						t.Log(result)
 | 
				
			||||||
 | 
						is.Equal(result.valuePT1, 377025)
 | 
				
			||||||
 | 
						is.Equal(result.valuePT2, uint(135506683246673))
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user