diff --git a/src/day19/1.rs b/src/day19/1.rs index 9bf5537..0462db6 100644 --- a/src/day19/1.rs +++ b/src/day19/1.rs @@ -1,7 +1,7 @@ #![feature(test)] extern crate test; -use std::collections::{BinaryHeap, HashSet}; +use std::collections::HashSet; const INPUTS: [&[u8]; 2] = [ include_bytes!("./sample.txt"), @@ -224,7 +224,7 @@ const fn find_cost(costs: &[u16], i: u16) -> [u16; 3] { } fn main() { - for input in INPUTS.iter().take(1) { + for input in INPUTS.iter() { let output = parse(input); let score = solution(output); println!("{}", score); diff --git a/src/day21/1.rs b/src/day21/1.rs index e69de29..045a74b 100644 --- a/src/day21/1.rs +++ b/src/day21/1.rs @@ -0,0 +1,117 @@ +#![feature(test)] + +use std::collections::HashMap; +extern crate test; + +const INPUTS: [&str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")]; + +#[derive(Debug, Clone, Copy)] +enum Operation { + Divide, + Multiply, + Add, + Subtract, +} + +#[derive(Debug, Clone)] +struct Monkey { + operand1: Operand, + op: Option, + operand2: Option, +} + +#[derive(Debug, Clone)] +enum Operand { + Number(i64), + Reference(String), +} + +fn parse(input: &'static str) -> HashMap { + input + .lines() + .filter(|c| !c.is_empty()) + .flat_map(|line| { + line.split_once(':').map(|(name, values)| { + let mut tokens = values.trim().splitn(3, ' '); + + let operand1 = tokens.next(); + + let op = tokens + .next() + .map(|token| { + Some(match token { + "*" => Operation::Multiply, + "/" => Operation::Divide, + "-" => Operation::Subtract, + "+" => Operation::Add, + _ => unreachable!(), + }) + }) + .unwrap_or(None); + + let operand2 = tokens + .next() + .map(|token| Some(Operand::Reference(token.to_string()))) + .unwrap_or(None); + + let operand1 = if operand2.is_some() { + Operand::Reference(operand1.unwrap().to_string()) + } else { + Operand::Number( + operand1 + .unwrap() + .bytes() + .fold(0, |a, x| (a * 10) + (x - b'0') as i64), + ) + }; + + ( + name.to_string(), + Monkey { + operand1, + op, + operand2, + }, + ) + }) + }) + .collect() +} + +fn solution(input: HashMap) -> i64 { + resolve(&input, "root") +} + +fn resolve(input: &HashMap, key: &str) -> i64 { + if let Some(v) = input.get(key) { + match (&v.operand1, &v.op, &v.operand2) { + (Operand::Number(v), None, _) => *v, + (Operand::Reference(op1), Some(op), Some(Operand::Reference(op2))) => match op { + Operation::Divide => resolve(input, op1) / resolve(input, op2), + Operation::Multiply => resolve(input, op1) * resolve(input, op2), + Operation::Add => resolve(input, op1) + resolve(input, op2), + Operation::Subtract => resolve(input, op1) - resolve(input, op2), + }, + + (_, _, _) => unreachable!(), + } + } else { + unreachable!() + } +} + +fn main() { + for input in INPUTS.iter() { + let output = parse(input); + let score = solution(output); + println!("{}", score); + } +} +#[bench] +fn solution_bench(b: &mut test::Bencher) { + b.iter(|| { + let input = parse(INPUTS[1]); + let result = solution(input); + test::black_box(result); + }) +} diff --git a/src/day21/2.rs b/src/day21/2.rs index e69de29..3e4d513 100644 --- a/src/day21/2.rs +++ b/src/day21/2.rs @@ -0,0 +1,237 @@ +#![feature(box_patterns)] +#![feature(test)] + +use std::collections::HashMap; +extern crate test; + +const INPUTS: [&str; 2] = [include_str!("./sample.txt"), include_str!("./input.txt")]; + +#[derive(Debug, Clone, Copy)] +enum Operation { + Divide, + Multiply, + Add, + Subtract, +} + +#[derive(Debug)] +struct Monkey { + operand1: Operand, + op: Option, + operand2: Option, +} + +#[derive(Debug)] +enum Operand { + Number(i64), + Reference(String), +} + +fn parse(input: &'static str) -> HashMap { + input + .lines() + .filter(|c| !c.is_empty()) + .flat_map(|line| { + line.split_once(':').map(|(name, values)| { + let mut tokens = values.trim().splitn(3, ' '); + + let operand1 = tokens.next(); + + let op = tokens + .next() + .map(|token| { + Some(match token { + "*" => Operation::Multiply, + "/" => Operation::Divide, + "-" => Operation::Subtract, + "+" => Operation::Add, + _ => unreachable!(), + }) + }) + .unwrap_or(None); + + let operand2 = tokens + .next() + .map(|token| Some(Operand::Reference(token.to_string()))) + .unwrap_or(None); + + let operand1 = if operand2.is_some() { + Operand::Reference(operand1.unwrap().to_string()) + } else { + Operand::Number( + operand1 + .unwrap() + .bytes() + .fold(0, |a, x| (a * 10) + (x - b'0') as i64), + ) + }; + + ( + name.to_string(), + Monkey { + operand1, + op, + operand2, + }, + ) + }) + }) + .collect() +} + +fn solution(input: HashMap) -> i64 { + let root = input.get("root").unwrap(); + + let (op1, op2) = match (&root.operand1, &root.operand2) { + (Operand::Reference(v), Some(Operand::Reference(c))) => (v.clone(), c.clone()), + (_, _) => unreachable!(), + }; + + let answer = 0; + + match (resolve(&input, &op1), resolve(&input, &op2)) { + (a, Computation::Known(b)) => { + let r = std::i64::MAX; + + let mut pmid = 0; + for step in (0..=13).rev() { + let mut prev = None; + let l = pmid; + let s = 10usize.pow(step); + + for mid in (l..=r).step_by(s) { + let value = rev_resolve(a.clone(), mid); + + if let Some(p) = prev { + if p < b && value > b || p > b && value < b { + pmid = mid - s as i64; + + break; + } else if p == b { + return mid - s as i64; + } + } + prev = Some(value); + } + } + } + (Computation::Known(b), a) => { + let r = std::i64::MAX; + + let mut pmid = 0; + for step in (0..=13).rev() { + let mut prev = None; + let l = pmid; + let s = 10usize.pow(step); + + for mid in (l..=r).step_by(s) { + let value = rev_resolve(a.clone(), mid); + + if let Some(p) = prev { + if p < b && value > b || p > b && value < b { + pmid = mid - s as i64; + + break; + } else if p == b { + return mid - s as i64; + } + } + prev = Some(value); + } + } + } + + (_, _) => unreachable!(), + } + + answer +} + +fn rev_resolve(computation: Computation, num: i64) -> i64 { + match computation { + Computation::Known(v) => v, + Computation::Unknown => num, + Computation::Lazy(op1, op, op2) => match (op1, op, op2) { + (box Computation::Known(a), Operation::Divide, box Computation::Known(b)) => a / b, + (box Computation::Known(a), Operation::Divide, box b) => a / rev_resolve(b, num), + (a, Operation::Divide, box Computation::Known(b)) => rev_resolve(*a, num) / b, + + (box Computation::Known(a), Operation::Multiply, box Computation::Known(b)) => a * b, + (box Computation::Known(a), Operation::Multiply, box b) => a * rev_resolve(b, num), + (a, Operation::Multiply, box Computation::Known(b)) => rev_resolve(*a, num) * b, + + (box Computation::Known(a), Operation::Add, box Computation::Known(b)) => a + b, + (box Computation::Known(a), Operation::Add, box b) => a + rev_resolve(b, num), + (a, Operation::Add, box Computation::Known(b)) => rev_resolve(*a, num) + b, + + (box Computation::Known(a), Operation::Subtract, box Computation::Known(b)) => a - b, + (box Computation::Known(a), Operation::Subtract, box b) => a - rev_resolve(b, num), + (a, Operation::Subtract, box Computation::Known(b)) => rev_resolve(*a, num) - b, + + (_, _, _) => unreachable!(), + }, + } +} + +#[derive(Debug, Clone)] +enum Computation { + Known(i64), + Unknown, + Lazy(Box, Operation, Box), +} + +fn resolve(input: &HashMap, key: &str) -> Computation { + if let Some(v) = input.get(key) { + match (&v.operand1, &v.op, &v.operand2) { + (Operand::Number(v), None, _) => Computation::Known(*v), + (Operand::Reference(op1), Some(op), Some(Operand::Reference(op2))) => { + if op1 == "humn" { + Computation::Lazy( + Box::new(Computation::Unknown), + *op, + Box::new(resolve(input, op2)), + ) + } else if op2 == "humn" { + Computation::Lazy( + Box::new(resolve(input, op1)), + *op, + Box::new(Computation::Unknown), + ) + } else { + match (resolve(input, op1), resolve(input, op2)) { + (Computation::Known(a), Computation::Known(b)) => { + Computation::Known(match op { + Operation::Divide => a / b, + Operation::Multiply => a * b, + Operation::Add => a + b, + Operation::Subtract => a - b, + }) + } + + (a, b) => Computation::Lazy(Box::new(a), *op, Box::new(b)), + } + } + } + + (_, _, _) => unreachable!(), + } + } else { + unreachable!() + } +} + +fn main() { + for input in INPUTS.iter() { + let output = parse(input); + let score = solution(output); + println!("{}", score); + } +} +#[bench] +fn solution_bench(b: &mut test::Bencher) { + b.iter(|| { + let input = parse(INPUTS[1]); + let result = solution(input); + test::black_box(result); + }) +} diff --git a/src/day21/input.txt b/src/day21/input.txt new file mode 100644 index 0000000..09a294a --- /dev/null +++ b/src/day21/input.txt @@ -0,0 +1,1677 @@ +rmmz: 2 +vdjz: 4 +rqbd: 3 +zvqw: 4 +sshm: qhnd * lrcj +dtzl: rnbs + gppj +gnzq: 5 +zlpv: pmng * wgvj +nqgr: 4 +tftg: 1 +fhjc: sbpb / nhcr +fwbm: jcch * qhlj +wtlq: 3 +nzhf: fjzn * bnws +nqpq: 2 +jqzv: 2 +crrj: vnbv / grww +glpw: 8 +cnbg: jmbp * jnqv +bdcm: 2 +bcww: 11 +wrbf: 2 +hpvb: zswl * qpbz +qffb: jvqz + qgtf +mfmc: hnbn * twwv +cnzj: qqdn * pvtb +wbnh: cshj * snvw +swds: bmlj + scdn +twtb: 3 +dlgc: gfbw + djgh +bvzn: 2 +gwpm: rrll + zshp +rtnf: qbwf + bqnn +sdmb: 15 +mtjq: 2 +dpmg: 3 +drct: bvfr + rtmh +zrpj: gfml * tsms +gwlm: 2 +msdr: 3 +fqbl: wbbf + pbgr +zwqw: lnqm - nzdj +lbvn: zwbh + btbn +dggg: bnmf / trpv +bjwg: trdj + lpqs +bnzl: vfhg * pjds +qtmp: 2 +llpf: 2 +zwqn: lfhb + spcf +trpt: mdrm * qdrc +lzgm: jzvg + qlzg +swhh: 2 +tpnf: 15 +rgrp: 7 +zswl: 3 +gzbv: djgb + dvwj +ppfs: 5 +nfhf: 5 +pgrc: pdmb * qgwg +jjwr: 6 +fvsf: 2 +qmvq: hlzp * zvvd +twjq: 2 +twsj: 5 +mwrc: 2 +sbpb: djpm * pfpt +cbjq: ztqg - tzls +mgsl: 2 +vzgd: qmcb + wfbz +qrll: 2 +slpm: fbpz * jjwr +rffd: mfmc / csdf +jjbm: slpc * bncr +pjds: cpqv + ldtj +btfl: qvfg + lqdf +sfcv: 7 +vtnq: 5 +fzdp: fzrd * slww +cwjp: 9 +mpnj: 2 +wnbb: zssf + qnld +nfgv: lzhf + mqzw +pszs: 4 +chpt: 2 +bhpw: cnbg + zrnz +dfps: 5 +pzqv: 3 +fjzz: 8 +ffqr: 16 +bqvg: lrqh + wpdn +qlmg: mpvz + wpvg +lfhb: jscq + bpnt +pqqj: 2 +qhtv: 5 +wchl: ffqr + mdnp +vcwt: llfg + wjtc +nfbp: 2 +bbcn: 8 +smld: 2 +mvmj: lqdc * bhmz +mqph: jjgt + vtjg +brmz: mpfm + zcgs +ttdb: zncl + nqpv +bcsc: 6 +frjj: 9 +jcjf: lgpg + qmvq +pmfh: 3 +drrf: 9 +lmht: 7 +sstg: vrct + wfjn +swhz: zvvp * dbvt +rtpz: nnsc + zmlh +qrzq: 2 +rtmt: 12 +pmds: 3 +vfzw: jhlw * vmzc +smhv: ffnt * gtwp +vdzv: 5 +btqb: 3 +wclq: rwth + drln +vzrz: bsvc + vmjn +ztct: zscd / lhml +zvvd: tcqz - cmnv +mfrc: jmcp + lpvs +sdrn: 9 +jfvq: pgdw + vbvt +qjrs: qvpw + cpdf +tnnt: psfr + hjlz +fqlp: bblh + dbfm +nwhm: 3 +rlcw: 2 +rwjc: ljzj + zdrh +tfqh: 5 +crqg: 3 +nrps: lrdn + hmfb +pmng: gzrs + vtns +gmzt: tlmq * bfzd +fhdz: 6 +fwzf: 4 +tzls: fnqf + fpcs +pvtb: 2 +gpdf: zslv * qwqc +zcgs: jlmb * crnb +clbn: 2 +wghf: fwbm - jcjf +vffj: frjp + mrtq +gfbw: csfh + rlvd +tzth: tvtj * bnvg +vwhb: 2 +scwp: 3 +rpbm: 3 +zdhf: 2 +fdmf: 3 +lqdf: 2 +rndt: wtbs + lrsc +jnzr: 5 +qpqs: bcng / nwdv +tmhg: vtvn - nzbp +dtfz: bdgd * dfdl +pnvc: brqb * drrq +mfnh: rdhg * rmvq +vjgb: 3 +czvm: 18 +qhnd: 3 +dhfw: jmcf + vjjw +nqpv: bhvg + zmvz +rhcv: ddtd / jqzv +lqqh: 5 +mspl: 5 +ngps: 11 +bcmp: 2 +nlsw: gnjq * vzrz +mhlj: 4 +bqnn: pgrc - bwff +fbqs: 11 +cnln: sqml * wlqd +vjbz: 5 +vhhz: pwpn * dsng +crmb: 5 +wbgs: 3 +qhvn: 3 +lsnd: 1 +hhcv: 2 +vmjn: 12 +fbtc: 2 +jgnj: 4 +jmcp: 2 +mfhg: 2 +ztdn: 2 +zttf: 3 +tjwt: 16 +lzzh: 11 +rnns: frrn * pnmc +ffnn: 3 +wpvg: qvpv * frqq +wjds: 3 +nnmh: 5 +jswz: vthd - jjrh +qjqw: 2 +bndd: 7 +mdpg: 2 +wtwb: 2 +nbfg: vwvc * rbtb +nmts: pfml * jqqs +nvjf: mddc * lrbp +gqgh: wzsh * tqzv +btqt: qbzv + wtrh +cblz: 5 +nvpd: 3 +vldc: 2 +drhw: dngq * nmlt +bpjf: ndlf + tjwt +dpgl: 2 +ggnd: 3 +qzpn: 2 +ttvz: 2 +qwqc: 3 +zhmb: 15 +nzdj: svvh + qplw +rrnp: qrnj + hmvq +mbvg: sgzh / mdpg +mlbw: jwwv * jhzw +wvfb: mvmj + phjj +tzhp: 15 +zjcn: pgfr * dgvh +wbbf: ghvn * dfrb +mfsz: fpvs * lzgm +bfpq: tmhg * nvlv +vpvl: blnq * jfsr +pnrv: lfrb - qwnt +lbgc: bzdh * wszm +pbdd: dcpm * nrsd +jsrb: 13 +bbzt: 8 +mhdn: bsmm * rzzg +jpcd: 2 +ldzb: nqpr * qnds +nmlg: 2 +pnpc: 5 +rbqt: 5 +dsqb: mrjc / ftqd +zhqg: lpjr * zttf +dphz: 3 +gbzd: ttvz * tsjq +cldm: 4 +ftbq: 5 +rzff: gdpg + cgvs +tzcd: 1 +gzwh: bjfh * qtfp +qgnb: vdgt + zwwb +jzvg: 5 +qqwz: pnwh * wlmv +jbtg: 9 +rrgh: 2 +bvfr: jzcd + gjbv +mwdl: rlcw * jffq +chfs: mrlq - cgvv +gwmr: hbwh * wzdj +qcml: 3 +zbhj: ctqb * hfbg +zshp: wphq * hzpr +pvcs: 4 +sszh: 2 +jdsc: 15 +ndnm: 8 +lrlz: 1 +wpbs: 2 +bcpn: 7 +glts: gpdf - vznc +qnld: jrvp * smnv +hrtv: bdcm * cgnr +zbbf: shtz + fvsb +vvbz: bqht * zwqn +vvjg: zgzs * sbpp +lrlg: 10 +zpht: 10 +ndtz: cnzj + qsml +stcv: 3 +jjrh: mlwr * dqjz +hsbr: dbcs / zngg +wtrh: sclr + chsm +jfqs: 15 +hjgd: 12 +hgnr: 9 +brqb: 4 +ndsm: tmhl + ddln +fjgh: cbjl + pchr +tptf: 3 +njcj: ppll * psfp +jjvz: vhqz + fmvw +grww: 2 +jvqf: 2 +sgvm: vhwz * gzgm +zscd: dshq * tbwl +mgjl: 3 +bfgp: jbvq * ppcl +mpst: zzpd * qcnn +wjzd: vwht * pzcc +wqdj: zvmv + sntb +csdf: 2 +cgwj: 3 +rccr: 2 +vsgw: 3 +pvwn: fpwz * wnjc +mfql: 3 +dspn: qlvz + bcsc +llcn: 4 +dcph: 4 +npcs: lrvc + mcfr +wgvj: 4 +bblh: 1 +dmrn: 9 +qbzv: 1 +lrdn: 3 +wzfr: nltq + lrlz +bwnc: 2 +dswn: 11 +bnws: 2 +cdnp: zvst * cwjp +fddw: zhgt * mfst +nbbd: flvw * thlz +lbzc: jfrn * gdgd +sntb: bhrb * lhgv +vzts: 6 +jvfw: hlms + lwlc +mqcv: 2 +jhzw: 5 +lhpf: dqzt * fjld +znjr: 2 +wrvl: pdbt * qlvg +cdwt: 6 +vtjg: stcr * bvzn +dvnh: brqv * jdmt +pcgq: jtcf * qssh +nhjt: 2 +pmqh: dflc * rzsn +zrwb: gtqh * fwjg +zphs: bcww + sbtd +nmvn: vrpp * mdht +sbvl: 3 +bcdf: rhwm * zbhj +jhwn: mgjl * tprm +ftjv: 3 +ncnm: vzcr * wqfg +bgwj: qlqt / dnwd +hrbr: gvmj + vspf +qljb: 3 +vdsz: 3 +nhpf: rdpg + qrll +gvfn: drnb / fhmz +ppts: zhrs * lccp +fvhm: 7 +rrqr: 2 +lnqm: rwjc + vnvr +qwnz: hfbh + vdbp +cgvr: 3 +lvrc: 4 +vcfm: 5 +zhgt: 3 +nvdh: 3 +llfg: cgcc * nqhg +wjgf: 2 +nztj: wqfz + tdlw +shpt: 2 +gzmv: 3 +tqzv: rtpz + glqr +pdmb: 2 +fpcs: 5 +mwmp: 6 +hcfs: 2 +bshp: chvq + pdbc +gppj: 1 +pzpp: 5 +ltnz: dswn * tsqc +wzdj: 3 +frst: 5 +scdn: 6 +fpsh: 2 +gzwm: 2 +jmbs: lwlb * sqcb +rqsw: 5 +bnvg: 3 +tfwb: 2 +snwm: 6 +zvrq: 5 +vnpq: djjs + rmrj +cfbh: 4 +ntnh: jvfw * jzdn +jnwv: tlnz * zqpw +npvl: sbqm * zmmd +tpwq: jnll / flhf +flhs: qcml + zmdq +pnvd: cwvl + dgpr +zvvp: 3 +fcql: 20 +jrvp: 17 +wbvt: bftg + tlzh +vwht: 3 +pzvr: 3 +qncp: 3 +bcgz: tpjp / bngr +dcbt: rctr + wltv +csgr: wrvl / znjr +rsdv: vcwt * mqcv +fnqf: 2 +hzrc: jdbp + jnwv +cdvw: sjfs + fzvh +bsvc: pwln / nrjc +tlwr: 3 +hjmr: 3 +spjg: 5 +mqgl: mqlt * jlnf +mzzd: 3 +dqnv: mhnm * zhqg +lqcm: ffqs / zvrq +sqzp: 5 +drvt: hhws * llpf +ghvn: vrjj + vfrh +hfbh: 16 +wtlg: 19 +dsgt: hhcv * npcs +vvzh: 6 +sclr: dddm * nttr +jqqs: znlh + ffnn +zprq: jmnj * mwqc +dczh: vvvb * wcpr +lpzb: bqvg + mlgj +dqsv: pmfh * zrbc +hgzs: 3 +vrpp: 10 +snbm: 4 +tdrq: hqdv * csln +tbwl: sdmb * zrfw +jdmt: btwt - gwpm +fzgj: 4 +vnvr: pmqh * pwlt +mcht: 2 +ztrt: vlhc * swds +bncr: wpcs - pcgq +nqsl: qcfn + fsgb +cclc: hjfj + cfdl +ztpd: dzlc + zcgn +lfrb: rbsf * hzjj +pvfv: 2 +swpl: 2 +csnf: 1 +ptdz: 2 +nvhn: 2 +rdhg: nnhm * wpbs +jclb: 2 +cscm: lclg * mrwz +fcgj: hmrz * nwbt +hgwm: mspl * rmfv +rqbq: 2 +wjtc: fszd + tpmp +dpvl: 8 +nwdv: 3 +zcgn: lzzh * brfc +jvrt: bhzq / rqsw +zmdq: sdwj + mwdl +rtsd: rcmc + jtjd +nqzz: 11 +dshq: rtnf * chvn +mddc: 2 +rpwz: 3 +pmlg: 8 +blmp: vwmr * ndpf +hqbb: 2 +chtt: 2 +cchg: 2 +bntz: tvrd * ncsp +gvgp: 3 +vvhm: mspb * dpgl +nlcv: 5 +rwcd: qffb + nzcv +rfcq: 6 +zgdb: 2 +mggl: cchg * crcm +mwjg: vjwz * vsmt +rbbh: 13 +mqlt: gwlm * mqvg +ddtd: qcnv + wjzv +hpmm: 3 +cjlm: 6 +cpdf: jjbm * mtnb +gqrp: tdrq + djrh +zmtg: 8 +vwdl: hzmn * nqms +ggpn: 11 +mtfr: jlqg * dlgc +nsfm: 4 +cftm: 18 +wcdm: tsbf * wgvv +jcch: 2 +zqjp: tzhp - nldv +wjmq: 6 +cbgj: mdjm * tqfr +jmnj: ppts + fqbl +tlnz: vfgt * vdjz +fqjd: 2 +ngzp: 11 +trdj: 10 +qrch: nfhf + vhtl +hmrz: qjrs * rtsd +rvnh: 3 +humn: 4481 +jstb: 5 +vqlt: 2 +vlqd: ndgh * zptr +vjjw: mrlc / pvfv +mnlp: svdw + mtjq +jtcf: 4 +lwlc: qqtm * cnvb +jdgq: 2 +vznc: 2 +dcfw: qvvc * wqdj +fqwz: twtb + vtnq +hhbn: 4 +wrpp: 14 +mmnw: 3 +rdpb: 10 +hcsc: 5 +nfvj: 4 +qznt: zfjw * wfld +flvw: 5 +wphq: 5 +bpwd: 2 +cbfh: 2 +bcbw: jtvm * cdnm +dvwj: zwgg * dspn +tnbt: qdfp * bpwd +qlzt: 12 +rjfh: 5 +cprt: 3 +qgwg: jrgs + sphc +zpbt: swfp / mldc +drln: 6 +jdcd: 3 +jzcd: nvjl - swpl +sbpp: 17 +ttwm: 5 +rdbs: wsml * drrf +pfpt: pmrt * fvsf +rfbw: ntpj + vwpq +bqld: zqjp + rbzl +rrmg: 19 +rbsf: 3 +mlgj: vvgt + dmsz +jfcd: bsqn / blgf +sjrh: 7 +djjd: fddw + svvq +jhgd: fjnh * bbzt +nlts: fjgh - cnln +ppwc: lhpf - zprq +gptt: 2 +bvvl: 20 +ssnq: cfmw + wfnm +gmhz: 4 +nnsc: cvqf + vpvl +zbzf: nlth * dhfw +jhvm: 16 +mrrt: 7 +pmrt: mwrc * mnhc +rddj: fbcd / tfwb +wszm: hsbr + rscq +pbgr: glqw * qqnm +hzlh: 2 +qnbn: jpvr - bgzz +hrcp: fjvg * vjbz +dnwd: lqrf * flhd +rvlz: 3 +stcr: cblz + nfnw +ptvh: 3 +vmnc: 5 +bmwf: rpbm * cvgt +jzdn: 2 +djrh: ccjf * fqgl +lwlb: 5 +bqht: cldm * btqb +brfj: prbr + qqwz +rlqm: 2 +mdht: jflm - trpt +lbbj: 2 +blnq: 6 +chfz: 3 +sqsc: 5 +mwrt: slnh + thcc +nvrb: 3 +lgrj: qnvn * tnbt +pvcn: qhwm * smld +fbgc: 2 +mqnl: drlt * bbhp +bdtp: gzpf * qdnl +wdwf: fhjc - zpbt +hhjc: qbvr + fmwn +jzlv: cftm * rhtv +smwb: dgbr + rbbh +bhvg: lpfz + bjnj +zmmd: smsm + jfcd +mdld: zzqd + bdmw +qlqt: zfbq + ntqb +dgbr: sbwd * cgvr +rwsm: 10 +jnll: nztj * vzgb +dbht: jdcd * rccr +bhmz: 3 +mrlq: bbjs + drdl +fzdg: 2 +jbsh: 2 +svzv: 2 +zjmw: 3 +tcgm: 2 +nzcv: 6 +rmrj: mtsv + snlb +bjnj: 2 +qsml: 18 +mfts: mwjg * pjsp +ffqs: rhcv - rrnt +dbcw: gtbs * mbvg +wpcs: phbh * mnhf +rvhs: 2 +qmcb: 17 +hlms: 11 +vwpq: 2 +wslz: szhq / hstj +jpvr: sflt + drvt +hcdz: nfhw * qgjf +svvq: twdf * rhqj +lgpg: wglc + gwmr +mlwr: zfmv + hbqm +hbqm: 1 +fgbm: lltp + fwmw +cjlh: btfl * mpnj +tlmq: fqwz * lwhp +zzqd: vnpq / rlqm +drdl: hzlh * btqt +sdjb: ssnq * gzwm +ntmt: 3 +rwth: tdjh + cstb +jjgt: crqg * dmrn +mpvz: ppwc * chpt +qbmm: rqpj + rfcm +zdrh: csml + cvvv +trft: lbbv * nlgg +dqjz: 7 +gfrq: 4 +vvgt: zrwb / rfcq +tsft: sstg + ngfs +gzpf: 2 +tfpw: gmln * hqbd +cddt: 6 +rlbp: 1 +ndph: ztzq * jgzl +blbc: jfvq * cprt +cvhn: jdgq * llcn +zncl: mwrt + dbgp +rthb: 2 +jfld: 4 +gdgd: 7 +lrsc: vdzv * czst +gzgm: 4 +bhrb: pnvc / smdh +bsmm: 2 +qnds: sbvl * szmm +bhzq: zhmb * qfss +vwvc: 17 +qmgt: 3 +gfml: 4 +tjqj: glpw * zsns +vlmc: 4 +qlnr: ndph + twtq +fvph: 3 +jgzl: drct + vwdt +wnjc: 2 +ffbb: 2 +hzmn: pgbv + rwbg +rpbj: shrh * jvqf +sqmd: 2 +ndcd: sdgs * spjg +mmbs: 3 +mhbr: wggq + grcv +nsqq: cvfw * ffmp +wgvv: 2 +rvmp: nnzp * dbcw +dwnz: 2 +jvtz: fctt + bfpq +nzzv: jbcl * llnl +cqcg: 3 +nrvw: 2 +qqtm: 3 +fvng: 19 +phrv: 3 +tlzh: 11 +twjs: ltnz - ltsv +lhgv: nwqz + qflq +rctr: mhdn * mvnc +snlb: 4 +dfgh: 7 +tvtj: 13 +flcb: 2 +nqpr: 3 +jmbp: 4 +rcmc: bpjf / qrzq +mnpl: pbdd - qpct +twcj: 3 +nlth: 2 +drrq: 13 +fszd: bmwf + qspw +mlrz: 2 +jvgd: dvnh - mpjj +jtvw: nzhf - wfnl +ftvm: 3 +cgcz: njcj - bjbr +dfzw: 2 +tdhw: rzjm * qrgn +qwnt: 2 +mspb: dggg + ghtd +fhmz: 2 +dqzt: 5 +brfc: dczh - tfpw +hstj: 2 +rzjm: 5 +jbcl: 3 +zhpq: gpzn * cnmq +hmrs: ltqr * hslj +mtdh: 8 +lwhp: 5 +wnvf: 8 +qqdn: 3 +wrmw: fwrh * rbmm +gzrs: jclb * zjpc +nzwc: 3 +wflc: cbgj / qllm +gtwp: 3 +trbs: 2 +zsns: 2 +vvvb: wrpp - qrsg +cstb: dfps * svwg +gcmv: whbb * mfnh +vrjj: lbbj * jgnj +rrll: scdt * zjmw +wgsb: jqrl * jlwb +scdt: vlmc * qfln +wqqv: nrps * pnwz +szhq: nchp * ndtz +tqzf: 3 +wpqd: jqsn * przh +vmzc: nhpf * gcqh +pjlz: 2 +mdjm: 3 +qgjf: pgvq + spgw +qnhq: rncj * rllb +hfbg: 2 +jfsr: 8 +nfhw: 2 +cstm: rgzs * nbcb +ghvl: dbfd + qbmm +tzcl: 2 +pzzg: ltmj - mfts +cdqv: dfgh + mnlp +wcpr: 5 +jdrg: qmpm + hlmn +gtqh: 8 +hlmn: rdnj + sjcd +hnqc: mfsz / hbzt +sphc: vrcl * nhfw +bnlr: qhvn * vvzh +dbfd: bcnp / ffvs +hpzh: snwm + rrnp +ghqp: 5 +dfql: dzwg * snbl +hbzt: shwr + rthb +chsm: crmb * scwp +lpjq: wlpd * fcgs +plfd: sqsc * hvsd +vbvt: ghqp * qmjq +rdpg: 7 +vhds: 12 +rmfv: 5 +smft: crmw * msdr +wlpd: 2 +cvvw: 2 +bsqn: wlfp + sdjb +svcp: jfmb + rwsm +qflq: scrz * dtfz +bwwc: 3 +wqfg: qmzt * chfz +lbqn: 5 +zbhw: wcdm + hhjc +jlnf: 3 +nlst: wmzt + twjs +zfjw: tbdh + rmmz +wfms: 2 +fjps: 5 +djpm: pznf * qlnr +snsc: 2 +hnlj: 5 +pvfm: 2 +cwhc: 3 +blgg: 15 +jmwl: rdpb * zpht +wbsb: jcdb * ngbz +jwwv: 2 +jdsd: 5 +rsnp: 3 +rrnt: jnnp * dmtd +nfnw: 2 +mpfm: mfrc * qrch +mnzz: lwld + jbwd +lfjp: 3 +qvfg: fdmf * svst +mjmv: cdwt + pzvr +lclg: 8 +pcvv: rvmp + hmrs +wsml: 3 +gvbp: 3 +mpjj: 10 +vcqw: jjjj * brmz +lhvt: pmds * tqzf +qpdv: 15 +mrlc: zbhw * svzv +bdmw: fpsh * hwvf +vntv: npvl * mbqs +cfdl: mfhg * gzbv +gvww: 2 +dqhh: gzwh * thpg +mtnb: mqph * bnfp +wlfp: ntsl + lfhp +zslv: 3 +lqrr: hhbn * gmzh +qfzb: nhjt + mjmt +ltzm: 12 +qcnn: mnpl - wsnf +bhvr: lflj + rfjw +wnzr: jbrp * nnmh +zglw: flcb * cqmq +svdw: 4 +pfml: bnlr + ndcd +zpqd: 2 +fjnh: 5 +rhqj: qrpv + ngzp +szmm: 3 +ztwb: 9 +npnf: 1 +wltv: rqfq - hncq +bwff: dwdd + qhzd +slnh: ljnf * tnfz +ppwz: hqbb * nlts +hgls: wnzr / wwtj +dbvt: 3 +wrst: qdrg + bnfz +rzzg: rpbj + fsrm +prbr: hpzh - zmtg +bvdb: 2 +jlmb: cmtm - qbjm +rbpq: wnbb * glts +jwjj: 15 +dhts: 8 +dcpm: 3 +qvpv: grcn * cgwj +bbhp: 2 +sjfs: ztpd - bnzl +wqpv: fzgj * rvvn +sdhj: 2 +wfbz: 2 +mdnp: gvfn * tfqh +ctjq: tgvp * wjzd +mbqs: rrmg * rnnq +wcfp: 3 +ftzm: 3 +nwbt: bhpw * bhgh +bmsf: fnws / bcmp +cmnt: bvjd + lccn +wqfz: 4 +jrgs: hjgd + mpst +gmzh: drhw / sdsl +pnvs: bmsf * qljb +gcvn: wqqv + dqnv +qbvr: ltds - vsgw +phbh: snsc * flhs +shtz: pnrv + pvcs +smsm: 4 +gznh: 7 +tjch: ncrt * rrgh +bpnt: ccfw + dfql +lljf: 3 +qfsz: 2 +dgvh: 3 +lvbp: hdrj + trbs +cdvv: 4 +qlzg: 2 +rwbg: 2 +snff: 4 +flrw: 3 +tdnf: 4 +nzlr: 2 +ftzc: 2 +pznf: cllb * zzcv +zjvz: znfq * chlt +nvjl: ngzt * wbgs +qtvv: 2 +hdff: 4 +swmh: vrbh + jdjq +ghfr: 2 +ghtd: cfzf * gnsc +mfmt: cdqv * chfs +pgtq: phwc * gbgs +frjp: 17 +bnfz: 2 +qfqz: mswh * slds +djmr: 2 +crcm: lsnd + zbqq +ngbg: jgld * lhfr +sbqm: 3 +wlqd: 2 +jfrn: 3 +jbqf: cdvw * dnvm +zhrs: pjjj + fngd +lvtv: nvjf / nmlg +vclb: bbcn + jqhr +qtgd: 2 +hqbd: 4 +qqnm: nsqq - rfbw +nvjh: 6 +jcgh: pmwl * hcqw +bgzz: swsv * qldj +slds: 2 +lwsn: hcfs + rswn +bhgh: hcsc * mzzd +bjbr: 3 +tgvp: smft / cnhr +dbfm: 9 +msmm: djmr * bshp +llqs: mmps + pwqg +qqpl: 5 +pfdc: mwmp + zvqs +qlvg: 2 +wzdv: 3 +glqr: qqpl * blgg +vdgt: 5 +qrnj: fjrq * nwhm +fbrf: 3 +gvmj: ngbg / vsqt +nrjc: 2 +sdsl: 2 +mqvg: tbqq - bzqw +chvq: jdsd + cgcz +lrzn: gfrq + drgv +crrm: 2 +pgbv: swhz + dqld +brqv: 2 +gmln: 2 +wcmz: 3 +hbhz: 18 +vrcl: 5 +hqdv: 5 +nchp: dtzl + qpdv +bfvd: 7 +nnhm: pzpp * dwnz +thpg: 4 +jpzw: 3 +vrmt: lqrr - smrq +hnbn: 2 +tsbf: lljf + mqnl +nbpq: 2 +csml: lbtn * zspm +cnmq: 8 +qbwf: vvhm - dsqb +jbrp: 11 +bbzc: ffbb * lqft +pgfr: 3 +fmwn: 2 +lrvc: 10 +stqc: 5 +ngzt: rlbp + fbjn +mdrm: jhwn + lmht +mrtq: rzcm * nqgr +lpvs: 9 +lqfq: 3 +rnnq: 3 +jdfj: 15 +tqst: cjbz + rvhn +dnzc: mmbs * qlmw +lwld: 1 +sgjm: 8 +bfzd: 17 +dchw: 4 +rlrb: tftg + qbqm +pchr: trft + bcbw +lvhm: dhqh * dchw +mswh: 5 +sdgs: 5 +snfj: 1 +sdwj: 2 +qmqt: wttp / cgnv +przh: wqlh + nqzz +qrpv: sqmd * tpdj +pjsp: 5 +hpmw: zdsr * rlrb +jhlw: 9 +ntqb: gzmv * pzzg +qpct: 3 +rvvn: rrqr * wflc +lmcj: szcv + lqcm +bvjd: 2 +fngd: wjds * nrvw +fnws: jmwl + rtgr +frqq: 4 +ltsv: 3 +cmnv: 7 +wdqj: vhrn * hpmw +cjbz: qlzt * fqjd +rqpj: tqst * ptdz +lbtn: 8 +dbgp: lbzn * jqtj +qbjm: 12 +ljzj: 15 +mrvr: 3 +nght: 2 +djff: 12 +jmqh: 14 +vcpt: ppwz * zvqw +vsqt: 5 +tfjw: bhvr * vjgb +hwvf: vszg + lvrc +qgtf: 6 +mmtj: 6 +blgf: 3 +mvmz: qpqb * cvhn +svhz: jqcf * nzzv +wfds: 3 +pnmc: 13 +szvb: mdld + bfgp +bnwj: 2 +dnvm: msmm - tqfz +fwrh: wdqj - dqnp +cspp: mggl + rndt +lltp: rwcd * wfds +smrq: lrlg + bwqm +rgzs: 3 +crmw: ntmt + cjlh +dncw: 5 +rvjf: mttr * frlv +wlmv: 4 +fqbj: pfdc * rqbd +fwjg: vdsz * brfj +gnsc: 2 +gtwd: 2 +qdnl: nmvn - wpqd +pjjj: bnjt + fhdz +ntsl: 1 +glqw: 3 +wmzt: 3 +vjzr: swmh + svhz +ncgd: 3 +bngr: 5 +qtfp: 2 +bdqg: 2 +hzpr: 5 +tctd: 13 +jlqg: 4 +qhlj: gcvn + bntz +jtvm: 9 +szcv: jswz + lbvn +sfmn: wchl + cscm +lfhp: nght * wcfp +root: bsbd + fcgj +jbwd: 6 +zrnr: 2 +hrmz: mthn * dncw +rfjw: 13 +hpdh: 2 +jqrl: pvwn + hjmr +vgsm: 5 +mvgg: nbfg + mtfr +hcqw: 14 +cdtq: rjrt / mffc +spgw: wbvt * clbn +wfjn: 5 +hrtz: llqs * rvlz +rzsn: 5 +fbcd: mfmt + humn +vhwz: mtwg + fbgc +lvcn: 4 +grdf: dbht + sgvm +pdbc: rsnp * djqq +qssh: 5 +wnjl: 9 +btwt: tzth * hrtv +hplt: 11 +mwwr: bsnq * crrm +smqg: 14 +dqcj: blbc + bghp +ptwr: 7 +mttr: hnqc * wfms +pzcc: 5 +jscq: 1 +hzcm: 4 +tsjq: nsfm * hpdh +fsgb: vhhz + jhgd +plvw: zpqd * rffd +tcqz: dqhh + mlrz +mqzp: 2 +tldn: rjfh * zwqw +rwmq: tdnf * jdrg +vnft: mqrm + tjch +ztqg: wtwb * bqld +fjvg: snfj + gbzd +nzdz: sfcv + qtgd +qrgn: 5 +tbqq: jplv * rmzw +tdjh: wrst * wnjl +qwqw: 5 +pdbt: 11 +bnmb: cvnr * nvrb +lslq: 1 +twwv: 19 +rzcm: 6 +jtjd: 6 +htgm: 3 +pjss: 2 +mrwz: 12 +djqq: 4 +jmcf: 12 +hmqr: zrpj - nttd +lqdc: 5 +gpzn: hpvb + tpwq +pgdw: 4 +mwgb: nvdh * mrrt +wggq: bgwj + tldn +mwqc: 2 +bnfp: 13 +pwlt: 5 +hlzp: phrv + hrmz +qplw: ncgd * cmnt +vhqz: pgtq - ncnm +zptr: 3 +gtbs: 13 +zwwb: pqqj * dpqz +hmfb: 4 +mffc: 3 +lqgr: 9 +bcqm: vjzr + jzlv +cbdr: wbsb + cspp +bssd: 2 +dmsz: vwdl + rmqt +fpwz: ltsl * fbqs +rbmm: 2 +rvhn: ttwm * tctd +hqjt: 7 +bftg: ftjv * lghm +ppjl: lfpz / nlcv +nzbp: chtt * hnst +rwzt: ltgf * qwqq +zwgg: 5 +frlv: 3 +vmgn: 1 +tvrd: qnhq + ldzb +wfld: 8 +pnwz: stlr / fbrf +ndmd: 2 +fmbj: slmm * twsj +jqcf: 3 +jqsn: 15 +wzsh: 3 +hjqq: 11 +cvqf: mpws * sdrn +wrll: 2 +vtns: jvrt / cjvp +wsnf: 4 +qfjg: 1 +rsqz: bbzc - vfwd +dddm: 2 +ftmn: wcmz * hrtz +bcnd: 13 +qgtc: 3 +vthd: zbzf * mmnw +mvnc: 2 +ndpf: 10 +pwlh: hbhz + rtmt +cfzf: rlqh + qfrg +qldj: 2 +ftqd: nssr * mqzp +lhml: 7 +mrmm: pszs * cjlm +crnb: ndnm + lslq +qpbz: 3 +qspw: 4 +jtrg: 7 +nwwb: hfvj * snmq +rgpt: 4 +spcf: cdvv * wpgm +brqh: bndd + nbbd +qfrg: hdff * qmgt +ddmr: fhzm + qvbn +lpqs: 1 +zvqs: 11 +dfdl: 3 +vnbv: ldbp * frjl +bwqm: 19 +zjpc: 4 +btbn: cvvw * hnlf +bpgp: nqlh - gqgh +jbsn: 3 +tdlw: 3 +fsrm: pzqv * zjcn +rjrt: nzwc * gcmz +wpdn: rsdv * wcfj +dzvg: 2 +rdfn: rbqt * btzg +zrnz: cbjq * jmbs +djgb: mrnr + ttdb +pwln: vqlt * mnrr +vfgt: 7 +tbdh: dzvg * stcv +jlwb: 3 +cshj: pwgj + rpbg +lzhf: 5 +hncq: 11 +nqms: 5 +lhfr: fgbm / mstm +ltdq: 4 +zssf: 5 +dqld: sjrh * zdhf +grcv: pnvs * gvgp +zfbq: ggbp * plfd +lmjg: 4 +lncn: 1 +qmjq: 5 +rnbs: vtgj + dpmg +mstm: 2 +pnwh: 2 +ccfw: 8 +tsqc: 2 +gqpj: hqjt + fwzf +tnfz: qrln * nvpd +rhwm: 4 +bcnp: dcfw / nzlr +fvrg: 3 +vtgj: 5 +wwtj: 5 +slmm: crrj + bcgz +mjmt: 4 +zzpd: 2 +wttp: lbgc - gnrj +qdfp: qlvw * hmfd +psfr: wfbp * wzdv +rlqh: ptwr * lvbp +mgsz: qqpt * hgls +cjvp: 2 +hrjj: 2 +fjrq: 6 +qmpm: bwwc * hcdz +lddq: rjbz + ppsl +snbl: vwhb * szwj +bghp: wgcm * tfdv +zdnh: 11 +cbqn: ppfs * fjps +pbzb: 2 +rmzw: ftvm + mhlj +qpqb: ptnv + vhds +jffq: 3 +rscq: bcdf + tfjw +wjzv: vcqw / nqpq +ngbz: 2 +hdrj: 5 +slpc: jstb + lncn +bmzw: 5 +cmtm: twcj * tjqj +pwqg: 17 +dgpr: bpgp / lmjg +trpv: 7 +qnvn: 2 +gcqh: 3 +bdgd: 2 +dbcs: nrqv - zlpv +nrqv: fvph * hzrc +cnvb: hrjj * lbqn +cvgt: qhtv * vgsm +tqlp: 2 +sgpj: 11 +swsv: 7 +hndh: 2 +smwv: gssz + rgrp +dwdd: fzdp / gtwd +jszj: gqrp + tpnf +ncrt: ntnh + mwgb +rpbg: 1 +jvsz: ndmd * hrbr +ffvs: 2 +mnhf: 3 +hbwh: ggpn + pbzb +tpmp: qjqw * hzvm +nttr: 3 +ldbg: cprm * wrbf +ntpj: 4 +lbbv: 3 +vrct: 2 +lccn: 5 +nrsd: 10 +fvzw: mwwr + vmgn +vgjq: 2 +dptm: 6 +ggbp: wbnh + jhvm +qdrg: 5 +hcpf: 4 +zrbc: 3 +tpjw: shcg / hjmp +jnqv: wwqp + jcgh +fzrd: 2 +cbjl: jdfj * bnwj +bnjt: 1 +czpd: 4 +fjld: tpjw + ghvl +sbwd: 4 +rqfq: lhmd * nfvj +pwpn: 3 +ztzq: nqsl - vzts +ltqr: dqcj + qbgj +nlgg: rvhs * rqss +ltsl: 2 +zgzs: 3 +mqrm: cqcg * cbdr +fhtw: fcql + brqh +zdfg: blmp + qwcl +dzwg: 4 +czst: smwb - pvcn +ncsp: rddj - zhpq +bsnq: 3 +sflt: qtvv + ftmn +vsmt: pwlh + gztl +vszg: smqg / dfzw +tqfz: wmdp / mwms +fhzm: lfjp + rjtc +wgcm: dsgt / tqlp +zsvh: grdf + svcp +hjfj: lmcj * hndh +pqsr: 2 +lrbp: wgsb / htgm +twdf: 2 +jdbp: pnvd * ghfr +smdh: 4 +cjhz: pvfm * gbtc +psfp: 3 +cqmq: 13 +nvlv: 17 +lrqh: gmzt + gmpl +wqlh: 16 +qrsg: 3 +zzcv: 14 +sgzh: mvgg * zgdb +vrbh: wqpv / gwhs +drlt: 5 +shrh: 13 +qrln: 2 +hslj: mgsz * jddd +mtsv: 3 +hmfd: 2 +grcn: 13 +fctt: smhv * qzpn +lhmd: vszd + nfgv +rtgr: nvhn * szvb +zmvz: fqbj * swhh +jdjq: 4 +vhzf: 2 +fmvc: fjcg * dhts +dzlc: rbpq + vntv +fbjn: tvrz / nvjh +ppcl: 3 +jjjj: 2 +wfnm: fvrg * tzcl +dflc: 2 +ffnt: mzfn + vcpt +zbnt: 3 +dqnh: 2 +slww: stzl + pcwz +djjs: ltzm + qfjg +sqml: 7 +lghm: 2 +bsbd: rzff * wdwf +gwhs: czpd * jbsh +zqpw: jsrb + jwjj +drgv: 3 +rswn: 5 +gnjq: 2 +sjcd: bcpn * fvzw +fzml: 11 +mthn: 2 +cgnr: 4 +ldbp: vrmt + gptt +lqrf: 2 +gjbv: djff * stqc +ljnf: rtjb * wtnp +hjmp: 6 +mrnr: 2 +zspm: 5 +qlvz: gjzv + hpmm +tfdv: 2 +vtvn: hrcp * wtlq +qlmw: vcfm + pqsr +hsmp: rpwz * wclq +wcfj: 2 +brst: 5 +fnrh: 2 +qhzd: fqlp + jpzw +mmps: jfld * lqgr +lpfz: lqfq * wgbc +bjcs: mhbr / vgjq +tbqc: 2 +qhwm: 3 +hzvm: npnf + nhnp +nqhg: tcjb + hgzs +bzdh: 2 +gbtc: 3 +wfnl: 5 +ndlf: cdnp + ddmr +nmlt: pnpc * hnlj +nhfw: tbqc + dnzc +rtbm: 3 +fbpz: sqzp + pjrt +rjtc: tjtl + wtlg +vspf: bnmb + ndsm +dhqh: dhpp * zsvh +ddln: 1 +lbzn: 2 +vhrn: bjcs - vnft +cgcc: 6 +cgvs: 7 +jqtj: 5 +wqnp: 12 +dmtd: fjzz + sgpj +rlvd: vlqd / mgsl +cvvv: bqtp * pnwv +rjdp: qfzb + csnf +hmvq: 17 +vjtf: lbzc * djjd +gbgs: mqfd - fmbj +wgbc: 3 +vdbp: 1 +vtdp: 10 +cgvv: bfvd * pbhg +vfhg: nlsw - qgnb +pcwz: dptm * frjj +zngg: 4 +scrz: 2 +tvrz: wslz / dpvl +mqzw: 2 +zfmv: 10 +gdmv: 5 +cgnv: 2 +qlvw: rfcv + nlst +fjzn: hgnr + lqml +vzgb: 12 +dsng: 5 +pbvh: 3 +qbqm: 10 +vwdt: lgrj / pmlg +lhsw: lpjq + rdbs +hzjj: 3 +jplv: 3 +zmlh: nfbp * fhtw +zwbh: sshm * rjdp +mhnm: bwnc + fzwr +wmdp: tdhw - gjmt +pbhg: 2 +qmzt: 9 +dlws: bssd * rtbm +rbzl: pjlz * qfqz +tpjp: jdsc * wqnp +vlgn: 2 +phwc: 10 +bcng: ctjq + bdtp +cvnr: qtmp + bmzw +bmlj: fvng + czvm +llhb: 3 +nbcb: rnns + ldbg +ffmp: plzd + tzcd +nnzp: lhsw * tlwr +szlh: 2 +gztl: 11 +mtwg: hcpf * pjss +mpws: pnfb * pbvh +fqgl: 3 +qqpt: 5 +bqtp: 2 +nttd: 9 +svvh: shpt * fmvc +drnb: lqqh * mlbw +ptnv: csgr + plvw +wtnp: 3 +ndgh: 4 +lrgv: 2 +nrqr: vvbz + vfzw +hfvj: 2 +ctqb: tsft * lrgv +nqlh: zdfg * sdhj +nhnp: 13 +tcjb: 12 +mnhc: szlh * pcvv +jnnp: 3 +zbqq: mtdh * frst +gjzv: brst * twjq +shwr: 5 +gmpl: qlmg / cddt +lfpz: mvmz + hsmp +tmhl: jbsn * fhjz +wglc: 14 +ppll: 5 +ccbp: 4 +jflm: cclc / rgpt +mwms: 2 +svwg: 4 +qfss: 10 +tjtl: 7 +vwmr: lvtv + tvgm +cllb: 3 +nssr: 3 +qcfn: lvcn * wjmq +rmvq: 2 +rbtb: mgmw / gvww +jcdb: mjmv * zbnt +cdpw: ngps * hmqr +zdsr: 2 +plzd: rvnh * sszh +phjj: hzcm * bvdb +bnmf: jtvw * rdfn +twtq: jbqf - ztct +qwcl: jjvz / tptf +ccjf: 13 +mrjc: fnrh * cstm +thlz: 2 +thcc: ljtp + ztwb +fjcg: 2 +flhd: 3 +gnrj: ppjl * mmtj +hnlf: 5 +tprm: 2 +vlhc: 13 +tvgm: gdmv * dqsv +qvpw: gqpj * jvtz +vfwd: 5 +pmwl: lwsn * lddq +rzbj: 17 +rncj: 5 +znfq: 2 +rjbz: gznh * mcht +hhws: vclb + ftbq +qfln: 3 +ltmj: wghf / zjvz +csln: 17 +snvw: 3 +ltgf: 3 +wfbp: 2 +hjlz: qmqt + jvgd +zvst: 3 +qvvc: 8 +bjfh: 3 +mzfn: cdpw * ftzm +dqnp: bcqm / wjgf +stlr: vzgd * gvbp +cvfw: 3 +rtmh: 15 +rqss: 3 +jddd: dcph + mrvr +gggh: 3 +gssz: nwwb * vmnc +tsms: gnzq * rqbq +lrcj: 19 +pnfb: 3 +rtjb: 2 +zvmv: fvhm * gmhz +dfrb: fbtc + bppp +mcfr: 1 +pjrt: 1 +ltds: wrll * wnvf +fvsb: qncp * cfbh +nldv: 4 +cdnm: 3 +jwqg: 2 +jvqz: 1 +sqdd: rzbj + mqgl +cwvl: jszj + rvjf +qcnv: nrqr + wrmw +fhjz: 2 +svst: qgtc + snbm +qdrc: 17 +cfmw: 1 +jgld: 5 +bppp: llhb * qwqw +wwqp: vjtf + rwmq +cprm: 4 +fcgs: 7 +swfp: tnnt + lvhm +frjl: 2 +nwqz: 1 +mldc: 3 +mgmw: pfvz * hjqq +mnrr: vvjg / gggh +hvtv: qznt * wzfr +tpdj: 9 +znlh: 4 +qbgj: mhzn + nmts +cnhr: 3 +djgh: bdqg + nzdz +lccp: 3 +frrn: 3 +bbjs: 7 +gdpg: 8 +pnwv: lhvt * ggnd +vhtl: snff * vldc +vjwz: 2 +qwqq: 2 +rdnj: smwv + dcbt +nltq: cbqn - lrzn +fpvs: jvsz / fzdg +shcg: qpqs - snhd +stzl: rwzt + mnzz +rfcv: qwnz * mfql +snhd: jtrg * sqdd +gjmt: 3 +btzg: 5 +vfrh: 9 +lpjr: bvvl + rmvt +nzbz: dqnh * hplt +dhpp: 2 +hvsd: 3 +ldtj: 2 +chlt: 4 +rhtv: fzml * jnzr +wpgm: 5 +csfh: 2 +mhzn: zglw * slpm +wtbs: ltdq * vhzf +cpqv: 15 +dngq: 2 +vszd: 12 +pgvq: ptvh * hgwm +smnv: 3 +zrfw: 7 +jbvq: 7 +rmqt: gcmv / vlgn +pfvz: 2 +fmvw: qnbn * jpcd +jqhr: 4 +szwj: 3 +tqfr: mrmm + bcnd +rmvt: 3 +qllm: 3 +gcmz: zrnr * vffj +sqcb: sfmn + hvtv +chvn: 3 +fzvh: ztrt * nbpq +sbtd: 3 +hnst: wvfb + zphs +ljtp: 16 +lqml: 4 +dpqz: 3 +pwgj: flrw * cbfh +qvbn: 2 +ppsl: dlws + bjwg +jfmb: jbtg * cwhc +bzqw: 2 +nhcr: 3 +llnl: 3 +fzwr: 5 +mfst: cdtq / qfsz +flhf: 3 +whbb: 8 +rllb: 3 +rfcm: rsqz * ztdn +lqft: tcgm * nzbz +snmq: jwqg + zdnh +fwmw: jfqs + sgjm +ngfs: ccbp * dphz +mqfd: lpzb / ftzc +lflj: vtdp * cjhz +vzcr: jmqh + zbbf diff --git a/src/day21/sample.txt b/src/day21/sample.txt new file mode 100644 index 0000000..e14be60 --- /dev/null +++ b/src/day21/sample.txt @@ -0,0 +1,15 @@ +root: pppw + sjmn +dbpl: 5 +cczh: sllz + lgvd +zczc: 2 +ptdq: humn - dvpt +dvpt: 3 +lfqf: 4 +humn: 5 +ljgn: 2 +sjmn: drzm * dbpl +sllz: 4 +pppw: cczh / lfqf +lgvd: ljgn * ptdq +drzm: hmdt - zczc +hmdt: 32