diff --git a/README.md b/README.md index 05be71f..f27e357 100644 --- a/README.md +++ b/README.md @@ -4,6 +4,6 @@ These are my solutions for [Advent of Code 2022](https://adventofcode.com/). Tha If you look at the code and see ways I could improve it, please do not hesitate to contact me. I am always grateful for everything that makes me a better programmer. -Also, if you ever look for a programmer and think my code is any good, please also contact me at once. +Also, if you ever look for a programmer and think my code is any good, please consider contacting me. All code is published under the [Unlicense](https://unlicense.org/) diff --git a/data/day21/example01.txt b/data/day21/example01.txt new file mode 100644 index 0000000..7993b87 --- /dev/null +++ b/data/day21/example01.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 \ No newline at end of file diff --git a/data/day21/input.txt b/data/day21/input.txt new file mode 100644 index 0000000..3b8b262 --- /dev/null +++ b/data/day21/input.txt @@ -0,0 +1,1579 @@ +lfrh: 2 +tctr: vzhm - qtbn +smdc: vlzv * jdlj +jcph: vrdq + rzvq +gsds: jpch + wfpj +hpqm: vjzp * dnzm +gdbq: gptj * rdcl +hsdr: zjnq + qrzb +jwhr: 15 +gsvq: 2 +lwgs: vjjm * pclt +bdjp: 14 +lgbd: 3 +zpvj: lzgm * gfcg +mhjg: 2 +pjsc: tvqp - tvws +fmdp: bfrr * jvsj +vvvt: 2 +vbpf: bszc * qvdg +gcqp: 3 +wvmh: vzrw + bffp +blhv: 2 +vlcb: 13 +zfcc: 2 +vzww: mrhw + mwzv +npgb: bfcw * gqbp +cqwv: zlsl * qcgr +lmbr: sprw * cjnt +cfzp: 9 +pnvb: 2 +zqwh: 3 +pghh: cjfv * whzt +mrmm: 3 +nmwl: nffr + dssp +zfhl: vfqb * fpnc +rlvn: 2 +hgft: 4 +hhjz: 3 +ljfd: vphz * jntq +cnrj: 6 +plnm: cpcl * hblz +sdbh: 6 +hznw: 2 +rbfq: 3 +vzhm: schw / mgmf +hjmj: wlzd / ffrl +wjwd: fcnr - djfc +tvvg: 3 +bffp: gwnd + tmzz +bblr: dwtq * hbht +jrdb: 5 +mzvb: 5 +zjnq: mvhh + sbfm +mjlp: 6 +fzfd: wsvj * bjbl +vfts: 1 +slrt: 5 +jtjj: 17 +rrqg: cbmz * svmw +mgln: 4 +bhrt: vrns * mzfp +cfwn: 5 +ljdt: 5 +wbqn: zhbt + wvmh +mrzq: hbfr * dqfg +sjjr: 6 +grqd: mlgb / bqqb +pjgr: 3 +qwmh: nvrp * rcmf +hdtn: 4 +rwjv: 2 +bzhz: jwzp * fwsf +bbjv: mbdg * mblh +sbfm: nqvg * rgmw +jmpr: vhdq + plmw +vchq: 5 +hjld: 2 +pdqq: bccr * wprn +qtfs: 3 +slnh: 2 +mgmf: 4 +lfgt: rhfc + mcvj +rgcr: zpqg + zmvt +qqmp: cwgd / zrmg +rhfc: 17 +thrp: 3 +qvgr: rvjn * tgvf +mbdg: 5 +rhbr: zvlr * swjv +smrm: 3 +wmrd: 2 +gmbt: 11 +vjnw: dclh + cdqq +jjqw: 4 +fdtg: 5 +dwtp: 15 +fftf: mzvb * nhdf +jcjq: 4 +lchh: pqzm * lwms +zrts: 2 +dqzj: cwhc * rlvn +jbbr: 6 +pgcb: jvmh * prnw +ndds: jfbl + vcdn +tvmm: fcml * zdgb +rzvq: bprb * bwhf +spjc: fwgp * jtjq +trns: dprf + rpml +dbgc: cnrz * mhcc +cqbn: 2 +dvdh: qtjr * bcjr +gdnq: 4 +hrgn: pctw * dzrh +blvv: bhff - gwst +mcrg: 8 +rdzt: fbvv * qjsq +pmdl: wffq - mnln +jlzc: 2 +vwqt: 3 +ddjs: brlc / stln +njjn: dqdq + bzhz +tdvb: 3 +dlrq: 1 +wmps: 2 +twrb: 2 +srrm: pmwj * ccsl +tprs: tnjl + bplf +ltnm: wddp * jjqw +qhrc: 1 +rmqs: tvhd * qqmp +zldc: 2 +rppw: psqr * fgpl +vrns: 5 +ntwt: 2 +lvqc: 5 +hmgj: 5 +drjs: 5 +brmq: vrhz - vqrm +zlsl: 2 +mtgb: 2 +wrjc: 2 +jsvm: rdzt + mgms +dnqj: thgb / bvlc +dhvh: hwmn + bmqq +wzzn: 1 +hdzj: scnb * sgnz +vhrp: zrfv + rslc +hjjp: lwcb + zggc +hjvl: sthz * njrn +qqgp: 8 +vqtl: tmbp + nvnr +zmfs: 11 +vlth: 1 +hbfr: 3 +hzhd: 19 +zzsp: vhqm * dggl +rrmb: 2 +grgg: 3 +dvjz: 11 +hhjw: 7 +gnnn: 3 +snjz: 6 +pppv: 7 +cfnh: lllj + wfwd +gzpd: 2 +jwsd: 3 +vqvf: zrwp / mtgb +pmzv: 4 +mwdv: 2 +jrhg: lvlb + zslv +gcqw: 3 +gptj: 2 +ctvz: wndz * bwjc +mfld: 2 +tsgd: 17 +lrdm: zbtr * jfmv +rttr: 2 +bfcw: ztsc * rdrd +bjbl: 2 +zqvf: rphg + vfrh +nfbq: 2 +dndn: 2 +thzd: 4 +qtjr: ftbg * hdtn +znbp: gvcq * wgzz +fdhh: vvvc * rfdr +fdnn: qdsj * pppv +wlds: 3 +dflt: 2 +rnlm: 5 +llmd: zlpt + llrn +svtv: trns * cjwp +tmgc: nhjc * tbwf +bvmr: 2 +pwsv: 4 +fgvh: bsqw * tgls +stdj: rfsq / mhjg +rpqb: ptfs * tcpn +lqpq: lzbr * wdpm +jrvv: vdqn + gdgh +sghs: fbjr + fqzq +lbtl: rgnc + hdjc +brhw: njvb * mdmr +llnz: pjgr * lqvr +humn: 2820 +hflj: 7 +qlpt: svwh * ngcc +jgwv: 8 +hjtn: gqnj * rphf +bcvs: qmsj + lrtb +djfc: sgrr * njbv +gdgh: 14 +vcdn: 1 +blcr: zghw / mwnm +wgzz: 2 +mrgl: 3 +vbqd: 2 +bltg: 11 +plpf: 2 +zlpt: 13 +jqzw: 2 +dnvz: frqf + fzfd +vwwn: tgtq * wcnm +tzws: nbjc - smzs +ltwd: 2 +ccwj: mfjt * bdpw +ljzt: swbr * rfjz +swsb: jgrb + hwqn +gjhb: sbmj * lgsh +fgwv: 13 +rsrd: 2 +pqzm: 2 +tcwc: 13 +fbvh: crrr - fgvh +nsqm: wrjv * wtng +vhdq: jmbw * tcpj +nqjr: mfsw + zfhl +fznr: btnz + slnh +tsmd: 4 +vtjp: wfrz + hnzn +vfld: rvvl + twrb +qnhb: qtzp * fznr +vtfw: gsdt + tcwc +fttw: fstd / qpdj +bjct: cdgr - fchd +rszw: 3 +zmdq: 2 +lzbr: vqvf + tmlz +slts: 10 +vnps: jzrg + rdsl +ffrl: 2 +pnzb: gndq + sfvv +hwdf: 4 +rnnh: 3 +swbr: 17 +bvdl: 6 +jpch: 5 +whjr: hddj / pllm +ccwg: njjs + hcvm +cprn: 2 +mtpd: 4 +tvws: rgjt * fwqm +bwlh: 10 +zjdj: 5 +trlr: rcnc * pjnl +fqzq: qmnd + phtd +zmwd: csrw + whnl +sgrr: 3 +rdjb: 2 +wfpj: 4 +fbvg: 3 +mtmg: zbhw * qfmd +jjcn: rclc * rzhf +ccsl: 5 +rtcp: bmhb * shpp +rrcb: 2 +rdrd: sbql + lpwl +wsvj: dsnp + tjrp +lgsh: 10 +mmvh: pzqf * jltn +fprh: 3 +lfvl: wtvg * vsnb +zggc: gqfw * trnh +wprn: 2 +hqnd: tdvb * mtwq +sqzf: znbp - mdpb +mnln: 4 +prnw: dlhd * cfwn +gfbn: 4 +dfbv: 2 +lhgq: 2 +zljc: 7 +vdqn: bzdc * dzvn +jdlj: 2 +dgdw: vsjh * wrjc +sdmw: zvln * jhfw +nrgr: 20 +dtmq: sqjc * cznn +wfbn: rrcb * pwzf +dphv: rlng + gmbt +bvvb: 9 +wlnh: ccgp + nldd +whnh: 4 +bhjz: wfgl + bbqz +bmqq: 11 +rgbj: pdqq + vjnw +fwsc: dhrl * dcdh +cbmz: jsvm * jrdb +jnwt: 6 +tbsz: phps + zrjz +zcvt: 2 +qtff: 8 +hsmq: wzwb + llnz +hvqs: 3 +zbtr: 2 +bcpt: 2 +rqrd: 3 +bfvh: dphw * cbls +dnzm: 5 +cltm: rrmr * qglq +nqlh: nmwl / nfbq +hcjt: zrlf + tqds +tcqp: slls * wlds +nqbt: vffg * svml +wnls: 3 +grhv: 2 +cdqp: hlcg * hrfh +njrn: 7 +trtp: rmqf * bvdl +gfcg: ncsw * qrds +dftt: rjvc + qcsf +scgq: 10 +hjqj: 2 +wfwd: vbcs * nsjf +zntw: nwqj * gznn +wfsv: 1 +mfgl: ffmn + gbsf +cdbd: pdjt * phdb +mdwt: 9 +tcng: 9 +ghff: 4 +rhjb: 2 +wqmr: rtdt + jrvv +hscm: 19 +zhbt: nprf * hntn +svwh: 8 +mpsl: qrzs / ljdt +bvzr: 5 +zrjz: fpzh * nwtw +hcnz: nczn * rjss +qtfd: 2 +rhqg: hfdh + qghj +phps: hdzj * bslm +crdb: ztwn * lqgb +nmjj: ltdd * fbft +dnqv: 4 +rphg: 1 +grnd: fvmj * prrc +hrfh: 2 +dggl: 19 +hntn: 3 +shqv: ssps * fvqd +bzdc: 2 +tmbp: qqnl * fcgf +zmlv: wjcm + mjqg +ccgp: nqbt + cdtr +swjv: 8 +ccst: cjsg / csgj +qlzg: zwbp + ztlf +ndtt: 2 +hqlg: dwpj + cnlh +plmw: 5 +rgnc: 2 +bplf: tbvg / jtwm +stln: 2 +zmgp: 2 +gdnn: 3 +rzhf: smng + nsvr +dqfg: 3 +htgv: zqjt / lqjv +bszc: 2 +prpv: 14 +qcgr: 3 +sshh: qsql * vlzq +grhg: hwpj * gwdv +szrs: dflt * sghr +lfnp: 8 +rpjs: 2 +tpvf: 2 +nspf: pnbb * tgdq +hnvc: 2 +njmd: 4 +lpwl: nrrd * jqzw +wtcj: 5 +rmqf: 3 +hvbm: 4 +qtzp: 4 +vgzw: 4 +lqgb: 4 +vzrw: 4 +mjwh: 2 +hmvl: 1 +rtdt: zdmq * lgtt +gwnd: 5 +zdzr: 3 +wqmc: rpbh * brmq +fcsq: nwnp * pbrs +thvd: 7 +vqlm: 19 +nwnp: hqvh + mbqh +zdbw: vlth + ndrw +hbht: 7 +ctbl: dfbv * jtjj +hmwp: 3 +hblz: mmdc * nzqw +fjvf: 9 +zcwz: htgv * hnbc +zrtl: 7 +qcsh: 4 +gfbl: 3 +jgrw: jdbz * cvht +gvcv: 13 +htsg: 2 +dzcz: pldv * blhv +mfmr: 7 +wdpm: bdrs + dhdn +mmhn: pdvr * lpzv +rzmr: zzrj * lcqs +bwhf: vfts + tpnv +lnvp: 11 +qjbc: tsgd * rwzr +gdwj: 9 +fqhz: zvjz * fjhs +wnvv: fgbv * spjc +sprw: vtjp + nsrq +rpvn: 2 +nmms: cltm - jtwp +zdgb: jnsc + nsrj +msjv: nwnn * zspd +gjbs: fgfr * vwsh +jdbz: 16 +mqgm: vwqt * ldbj +qqgz: ncvq + vpwh +lqls: lsfl * qsmn +fbqz: wpmw + njmd +jtjq: 5 +ddsr: vvvt * qcmm +vfrh: pctc * bznm +shvg: 7 +vfqb: 5 +gdsj: 2 +pzsw: bphq * hnrz +zlmq: gtjh * smrm +npwd: 2 +mjqg: rsrd * htch +rwrs: vcwv * pdhf +bpjw: cmfb * gszg +jfvm: lnvw + mwfr +pclt: 2 +mmpr: 3 +rlng: wztw * cjrz +ptwf: sdnh / wfzq +slls: 3 +blmd: rmzb * hqhc +crrr: dftt * nmjj +zvqj: 7 +lmjq: 1 +vvvc: 3 +ppvs: wqmr * svmj +lwms: jqqj * bltg +qlqd: jtfd + gfbn +rdcl: prqg + bvvb +rhcs: mrgl * ccwg +wbnz: 19 +hnzt: 5 +wrgl: 2 +nctf: 4 +frgv: sbzt + spfm +shwn: 2 +tgdq: 2 +hbll: 3 +fzsw: vflf + nlmd +mpjr: 2 +hpqv: 2 +ncwg: gplg * bhjz +lsfl: 2 +dcrt: 5 +ffmn: vqms * jdfq +nvnr: dqzj * rtgt +dttr: 11 +qglq: tnbg + zshl +fzms: vqtl * qhpl +hmtl: 20 +tppv: 2 +rgvf: pmdl + njbn +wdrs: mmhn + vzgr +cznn: 5 +jdfq: 2 +ctsv: 5 +lfqp: 5 +jpzl: 2 +wmjj: 7 +schw: rdvv * trtp +sqwd: 15 +mlgb: bnjd + cdrv +fwgp: 5 +szml: hggs * lqjl +spzb: vgwl + lphj +rpbh: fbqz * fqhz +dhrl: vnjs * frvj +rlnb: vbrd * tmgc +gblm: qbwf * ctsv +zspj: dmws * rhcs +brvh: cbdq * mmpr +jjnl: 2 +lzrh: hlgt * qztq +nblv: 2 +qjwh: ltvp * pqpl +cqmh: 6 +pdhf: wjdh * hqnd +gdjl: tdpn + srrd +ctrv: 3 +mzfp: jqnt * tprs +sjhz: zgml * dwtp +zvvv: slzm * lfnp +zvzn: 18 +lczp: 3 +prrc: 7 +tpmd: fpll * lqzz +jnjz: pctp * ntzh +zgml: 3 +bfcz: plsp * jphn +gpvw: tcpp + vrjn +vngl: ptnz * tvvg +zlfr: zcdr * drjs +rjvq: 15 +lpjt: ndtf + wbqn +pbrs: 4 +hqvh: 6 +cjwp: 2 +rmvs: vrnf * jjnl +svmj: 3 +ftpr: msjv + tpmd +ldtq: wggt * cbwn +wjdh: 2 +bcjr: 4 +ldbj: mzgc + wzzn +dcdh: 3 +zqmz: rhvs * dnbh +cdgr: hggv * jlrd +rnqr: 4 +gsdt: 6 +nwqj: mdpl + hmtl +qwjr: 3 +brpw: lfvl * nttq +znfm: 1 +ztwn: 2 +qqwm: cwtt + hvqs +ngwd: vwfl + jnwt +ppns: 3 +zmzp: 2 +wfrz: 9 +ttpl: htfl - dgjp +rfhd: 1 +dqwq: 8 +qngf: rfhd + cnrj +mmdc: 2 +cdqq: vvff * hmvf +nttq: mmvh + nbcc +qtdr: ctrv * jvtt +blpn: prcf * nghv +hgqz: 10 +tssw: 2 +cgft: zwbc + njzj +cjsg: jrqn - dbmz +qrds: jhrw + tcng +fbzv: vlnv + dsqg +nsrq: tdvn * hpqv +jntq: 2 +cndn: jsrh / jsbz +wjcm: 1 +gvcq: zmhl + wfrd +wsvh: 5 +zmvt: fprh * hbjd +rphf: 2 +hrbp: bclp * rgrd +bdmt: 4 +nfgc: htsg * nlsl +frnd: 2 +fpzh: 15 +dsqg: 8 +vccp: 2 +hvph: fzvc * jnnm +rdlf: rwfh * shvg +njfj: mpjr * zvvv +hbfj: 2 +dbtp: 8 +cttj: 13 +nldv: prpv / zcvt +djlz: 2 +psht: ldtq / rtmm +vbmt: lqhv + ltnm +tqfw: 17 +mtbz: hptq + dqwd +vbwd: 4 +ncsw: 3 +cpmg: 4 +vrjn: jtfp * qrwj +mfjt: jlwc + cfwp +vrdq: mpsl / gpqv +gqbw: 2 +lwcl: 2 +zqjt: dszq * hwdf +nhdf: 2 +spqc: hlcl - tzds +rjmh: 2 +mclp: wghm + whzr +gwst: cpvr * jfwn +svgz: 1 +lnvw: fdhh * gqbw +qdsj: 5 +bpzv: 3 +hqbm: 2 +qvrr: nfgc + sjhz +frvc: 4 +wzqh: 2 +tjrt: hsmd * dnfb +lpzv: 2 +vlzv: prmm * srzn +mstb: sjnz * lvqc +wfgl: fmfd * tlbz +lqzz: 2 +tmrv: jnsn * spqc +lgtt: 5 +vsjh: tlzl * gnzj +hbjd: qnml + wzcs +zjlt: 7 +tjvc: ghsc - dttr +njvb: 3 +llss: 2 +tdpn: hqbm * zjfg +dqdq: ljsn * cdqp +jqrw: 5 +bsqw: hghw + cpff +qsql: zljc + pwsv +cjwv: 3 +dljv: 4 +qmpl: 2 +mfsw: 1 +dnss: hwwg * lbtl +nffr: brws * szmd +mdmr: 3 +zwbp: rdft * rspn +ncwn: szvg * bdmt +dcwb: tczf * bpzv +qrzs: hpqm * gqjq +zqdv: 4 +trnh: 4 +jbjv: msrs - mzdv +gnjb: tsbh + wgpp +tcpj: 19 +wdrd: 11 +sgnz: nrcl + grnd +dcfh: 1 +wwpg: 3 +flpp: 17 +ssfv: 6 +wjgv: 2 +qrpq: 18 +hsrz: dlrq + lqls +fbjr: 2 +vhhz: 2 +fcnr: jcph / pgll +qwwz: 2 +fgfr: 3 +tlvr: 3 +dbsh: 4 +qjsq: 7 +tgtq: 6 +mdrq: 4 +wgrr: 4 +ljnh: bpjw * fpzb +rfjz: 3 +vrgh: qwvc + mcns +jtfp: 5 +hsgh: 3 +rcmf: 5 +wggt: 7 +hvrb: 2 +tzds: 1 +nrnp: trlr * hvbm +rpml: jlzr + ctbl +vgvz: 3 +jnsc: 3 +pdpc: 13 +mjdf: fzmj + dnss +fbvv: 2 +wzwb: 2 +dfmj: zlfr + lqqq +qfmd: 4 +pzqs: 5 +qrtb: 2 +lphj: 4 +hqhc: 5 +wpmw: 4 +pgjs: 3 +qqnl: gcqp * vncb +htbf: lclr * tlhv +zslv: bhtw - grhg +fwsf: blpn + tjft +zghw: wjwv + njvq +tsjc: 5 +rslc: hhjz * lvnd +msrs: jnlp + hwmm +fgpl: pnfz * hflj +lhqg: tqgz / hltb +crmv: 13 +rspn: 2 +rvwm: 7 +ffjg: 2 +szdn: gvjj + mzjz +nfvp: vdhh * gglq +tbrr: 3 +nzqw: svtv + gtrg +mlsb: thvd + hjlr +ftnv: npzn + lfgt +ndts: 2 +hdll: zrts + lpjt +nqfz: 2 +wndz: 5 +wgpp: 4 +zzwn: hrgn + vwwn +gbtd: 3 +btpn: 2 +fhdh: vbmt / qrtb +wcnm: tbrr * dbsh +zwqt: bpdh * vbjg +cwgd: gnrt + vgfr +jsbz: 2 +bfqq: 2 +zzjd: 3 +nbds: 4 +hdjc: llzw * qncn +dtzf: jlzc * wcdz +cqdc: svcv * brdf +gnhh: ppzd * lwcl +cspf: 4 +trsr: 2 +cpcl: 2 +dwpj: 13 +ztlf: ttnc * qqgz +wztw: 2 +gqfw: cvcw * cfwv +tsbh: vnjc * pbjb +svmw: zjlt * qvrr +tmlz: cgft + gdnq +zzsh: 2 +vpwh: jdrd * lmsw +hwwg: 3 +hqqd: 5 +vwft: 11 +tslp: lhgq * hjjp +bnjd: lcgq * sqzf +rfdr: plnm + cnzp +fmcj: 2 +tlzl: 3 +qscj: 5 +bqmz: qjmr * hsrz +vwfl: 5 +frqf: ddqt + rrjf +cpcb: sshh + dzcz +cfzm: gmgl * cbpf +qmnd: qwjr * vhhz +jjgz: 2 +zbhw: lhcj / rwjv +wjdt: 2 +wffq: 14 +nrdc: fttw + rcsf +cdtr: qjbc / djlz +mcvj: 14 +lctv: ccqv + rmqs +czlt: 5 +qcmm: 14 +pnfz: 9 +vrlp: zvqj * bfrt +prtj: 6 +vbjg: tnql / dtnc +qwvc: pfgq / mjwh +pdvr: qvgr / cspf +bvlc: 2 +cnth: 18 +pndd: vczv * cndn +zzpb: 3 +tzbs: 6 +rrrv: pzgq + llqp +dsnp: tsjc * zmfs +dqvl: gdzf * szwb +lqjl: 3 +gqnj: 4 +rcsf: rzmr + jjcn +wsqf: 9 +qfbj: 7 +mrhw: cftb * jgwm +qtpn: 13 +nqtc: 2 +ppgr: 3 +rvvn: ngwd + cnth +wcdz: 3 +vsjg: wrrs * thrp +hddj: dzlj + dgbw +lqhv: bjct * rplr +jmgt: njfj + dmhj +bmpv: dbpc + bbjv +qwzp: shjj + blhs +qqzm: jcqz + gjbs +rnzw: 4 +tpvl: 5 +mhcc: 4 +cjnt: 3 +cvcw: 19 +mdcs: 2 +dcsl: fncg - zjdj +lpvg: pchp * zldc +gplg: 3 +mmth: 2 +zvcl: ppvs + mtmg +zfcr: vccp * mbml +whzt: bclt + gdwj +root: lvvf + rqgq +gvcj: 3 +rfsq: vlrs * ftpr +crlb: qbsh + tqwt +gszg: 3 +zpdw: 5 +ltdd: 2 +bdpw: plvm + ftnv +szmd: 2 +cwsn: 2 +nbcc: dbgc - rtlp +gznn: qwmh + fjbb +pmmw: qwwz * jmgt +nwnn: gsds - npwd +mwfz: rppw + rdfv +hggs: 3 +lqqq: 3 +hctg: 4 +zjgh: 11 +qmsj: wgff * mwdv +fnsd: 2 +tlhv: wcdq + rpqb +dbmz: blcr * dvnw +qhsh: lwgs / pnvb +jlwc: hjmj * wjsw +wtng: pdsr + nmnt +pbdf: 6 +lfsm: mfgl * zvcl +wddp: lrdm / mmcv +vqms: wfsv + snjz +ddqt: vrgh + vrlp +gtjh: 3 +dfhg: dbtp * twcd +pchp: hhjw * dphv +dmws: cnpn * mrmm +htch: 7 +fcml: 6 +jqnt: 5 +mtnp: 5 +nshb: zwnr + zspj +lhcj: gnhh * gzpd +fnpl: mnsb + mcrg +fzvc: 2 +jcqz: 1 +vlnv: hvph + bbpz +swmj: jphw - qrpq +mqhh: 4 +tjft: wsvh + ndtt +hjlr: 10 +gmgl: hgft * jpzl +blhs: 5 +rqrl: nnpm + mmth +fbft: 4 +zrmg: 3 +glqv: 2 +vjwc: 3 +pdtj: jzhc - wmjg +jnsn: zvzn + nsjg +vfcl: 20 +jhjl: jqrw * gsvq +psqr: 3 +hnrz: 3 +nmnt: 6 +lclr: 3 +vhqm: 14 +llqp: 8 +vjjm: nrnp + rvtz +lwcb: rmvs + dhvh +cfwp: mfbz / bgbr +mblh: qdqg + sngl +qghj: 5 +hmvf: 2 +qdwd: nfvp - lftj +dnfb: fbzv - rdlf +rgrd: 3 +zfrs: dcrt * rwnd +qjfv: 2 +rbdj: smdc * rttr +tfvc: 3 +qjmr: 2 +nsrj: jbjv * nblv +hlcl: gnjb / trsr +hwmt: 5 +jgrb: mtrn * ltwd +pfgq: qmpl * qsmg +hnbc: cpmg + vsjg +fqcw: tpvl * vlpp +jfmv: rgnq + bqmz +jzhc: wnvv / fjwf +pnbb: bqct - znfm +wtvg: 7 +tsqv: cfnh / crdb +lmsw: bvzr + nmrp +zzrj: 11 +grnm: tcrm * pbhv +cjfv: cfzp - gvcj +dtfw: 4 +jhsl: dnqj - mrqj +ccjt: 3 +nssz: 5 +prqg: 2 +jfwn: crmv * tppv +slzm: 4 +cwhc: 17 +bclt: 2 +htfl: tssw * gfbs +hqmq: tlvr * tnlg +zsrr: hszs - lrqr +dzlj: wlnh - dzbn +ldmj: 5 +tmpw: hwmt + qhrc +tvcf: 3 +gsdm: nctf + rjvq +zrwp: qgfb / lfqp +ndtf: 9 +shjp: rqrl + cfzm +zrrv: cwsn * tpfs +rfbf: 6 +pctw: 11 +pllm: 2 +lrjl: tzbs + fqcw +hltb: 2 +bmhb: 5 +jtwp: pvnt / slrt +rdsl: pdtj + zjgh +vswr: srrm * lmdg +tqgz: jhhg * qlqd +zjfg: 19 +nsjg: hnzt * tfnf +lqzb: jpwv + ljnh +jfbl: bgcf * rrmb +dwtq: 5 +lmdg: 15 +zgdd: hrqc + jwsd +vchf: 4 +jdrd: grlq * qgvj +wgff: 5 +bmtp: 2 +jwwp: 14 +sbmj: 5 +rhtg: 8 +thjw: 3 +vlrs: 2 +lrrv: 7 +jvsj: 2 +bqqb: 2 +srvl: mlhh - dnvz +fqff: cbwr * wdbq +nghv: 2 +qpcl: 2 +dmst: lzrh / wzqh +nvrl: 3 +qfmj: 5 +ldtt: 3 +nzpt: nlzs + rpjs +cbpf: 3 +hlgv: 13 +cdpd: ppgr * bqdf +plvm: sdmw / gzpn +trqr: 2 +rqgq: ccwj * wqmc +tjnc: 2 +sfvv: 1 +rvwg: 4 +dssp: hjtn * qhcs +vwsh: cttj * hbfj +tbvg: dfng * fgsw +sghr: qnhb / hctg +fdmq: nqtc * djfq +rwfh: 2 +wcwn: 8 +btps: 2 +bwnq: 2 +jbqz: zrtl + vfds +jvtt: 19 +dzrh: rjqq + tvjq +bnmr: jwlh * cgvt +gwcm: 9 +dlhd: 2 +gqjq: pjsc + zzsp +cftb: 2 +tmts: nvrl * fgwv +smth: stdj + grqd +vjzp: 2 +hrqc: 4 +qcsf: vjqt / zdzr +njjs: hrbp * shrr +nprf: 7 +mtrn: 3 +fcgf: njzb / jzqv +ssps: 2 +phtd: 5 +vpch: 5 +vlzq: 7 +fdpc: 5 +jrqp: 1 +srzn: frnd * hnds +mwzv: lscv * qngf +bqhj: 14 +npzn: fwnr * mgpc +dzvn: rsmn * gdnn +jqqj: fddq / ssfv +cgvt: lmjq + rqnh +nppf: lqpq - tjrt +lllj: qfbj * vwft +njzb: wsqf * cjlg +lqbg: hggc + zcwz +blhn: 3 +jlrd: 3 +njbv: pdpc * vlcb +jlzr: zfqn - svgz +gzpn: 4 +ptrw: 2 +cnzp: tmrv * lggd +prmm: 4 +lqvr: 3 +zrlf: 3 +whgw: 3 +gfbs: cccg + zfrj +twcd: 17 +wmwt: 1 +mzqf: 3 +gpqv: 2 +jvmh: lfrh + zgdd +sfbr: 14 +rgmw: znpd * hqlg +vgfr: lhqg + hscm +mzdv: 20 +vbtp: 2 +jrqn: fnsd * zfcr +svfz: sjsn * hpdj +hsmd: 3 +qgvj: 4 +jdmf: qvfc * vpch +hggv: whjr - pmmw +rjqq: 1 +hfdg: nsqm + mzqf +dqwd: lswl / vqzn +fjwf: 2 +tvjq: 10 +dbsg: cvmb + ntlh +ntpp: gtrh / fmcj +tgls: prbd * mtnp +wjsw: pmlp * dnqv +grcz: wdrs * jjgz +dprf: lltv * dndn +fncg: nrgr + jwwp +gwvz: ppns * djls +bdtv: djwm * ccst +brws: fhdh - hcnz +wwqc: ntwt * tsqv +rdvv: ltfc * dwfc +zshl: dtmq * cqdc +nddz: fgjf * lgbd +bftw: fwsc + pndd +hldc: 2 +qmhv: 1 +bdrs: 1 +tnbg: nfsp * qdwd +shpm: fzms + srpw +qtdz: 1 +jnlp: zqmz - crlb +thgb: rtcp + gwvz +pbhv: 2 +rjss: 7 +wlzd: nppf * ltlj +bcbn: 2 +dszq: hshg * fwrb +mfbz: grlr * lchh +wbzc: 3 +jhgj: 1 +mnsb: 15 +vsnb: 2 +fzmj: swsb + qppw +rtmm: 2 +rmzb: 2 +rvtz: spzb + hjvl +cpvr: 4 +btmb: qgrv * ljfd +djfq: cdbd + bhfv +pbjb: 4 +rqnh: mvpv * thzd +tcpp: tmts - qwdl +bslm: npbm + thjw +tgsr: 3 +cfwv: 3 +pjnl: 3 +tlbz: lnpr + pgcb +qnml: 11 +hlgt: 2 +dhdn: 6 +srnn: 2 +sfsn: dbsg + dgdw +pzqf: 2 +lswl: czgw * grnm +lzgm: 14 +rgjt: 2 +vnjs: tmpw + qtdz +vtbj: fdpc + wmwt +rrmr: tslp * pdmr +vlfz: 2 +hwqn: whsq + lftw +dgbw: jrhg / wbzc +gtrg: pwmd * zmwd +scsn: 8 +zmhl: fbvh / mfld +vfds: 2 +zrfv: ffjg * dtmd +mbqh: 7 +hdsz: pjpg - hmvl +qwdl: 3 +bfrt: bnmr / qtfd +cftr: 3 +bbpz: ftqv + hjld +jhhg: 4 +fddq: pbdf * rrrv +zgwh: wjwd * qsqc +qhcs: swmj + qhvw +ftbf: nwcs / pjbg +frvj: 9 +qqsv: mgln + vwqh +rjvc: tfvc * bmpv +clmg: cdpd * rgcr +smzs: nspf * cwqd +hszs: bcvs / hjqj +vntb: 1 +wrjv: 3 +vvcm: zmzp + slts +tfjp: 3 +tfnf: 5 +wttp: tfjp * ljzt +gtcf: wmrd * gdjl +bnpm: zcvp * rnqr +ltfc: 2 +vdbj: wwqc / bcpt +rnnd: cqmh + qfwd +tqwt: 1 +tpfs: shnr + dfmj +jphw: rnnd * hmgj +lvlb: qhsh * zfcc +zhcg: 3 +fjhs: 2 +jgwm: qlpt + tctr +zwbc: 19 +mbml: pghh + rgvf +wfrd: vlfz * mtbz +nvrp: 5 +vdpd: 7 +rrjf: gtcf / ptrw +mgms: lczp * blhn +jspd: 2 +nrrd: shqv - vntb +dtmd: mrzq + frvc +tczf: 12 +tpnv: qqgp + vfcl +zdcv: tjvc - fmdp +fwjl: 2 +nldd: qtcq + jrqp +tgvf: 4 +gdzf: 2 +drvj: 20 +vgwl: 2 +szvg: qwhc - fdtg +gndq: 19 +bclp: 3 +hptq: rhqg + dqwq +qgfb: dcsl * jhjl +zpqg: llmd * qhsf +ccqv: wwpg * dcnm +nlsl: mstb + hdnj +sdnh: bdtv + hcnj +ttcc: vbqd * hfgh +mvpv: vbwd + wqrh +ccwt: 2 +dwfc: vqlm + lctv +ldww: hfdg + blmd +dbvc: 17 +qsmg: btpn * hsmq +wdbq: 2 +ppzd: 4 +ntlh: 1 +qztq: dqvl / hznw +qpdj: 2 +fvqd: 6 +ptnz: 2 +ftqv: gbtd + vvcm +nlmd: zmlv + lpvg +dgjp: grcz + ttcc +srpw: vzww + jnjz +dclp: 2 +rclc: 4 +nrcl: wgsr * llss +cnlh: 10 +bgcf: 3 +tcpn: 2 +vspl: bfqq + mfmr +bqdf: 2 +ltps: 1 +dfng: zmdq * bnpm +fstd: fdmq - brpw +bfrr: ngtn + hgqz +llrn: cgbn * wrgl +mpvs: rhjb * pzsw +jtwm: 2 +mjth: sfbr / nqfz +wngz: 1 +tqds: ghff * jsnt +tnlg: tzws * vchq +ztsc: 2 +rwnd: 2 +dcnm: ldww / dvhd +wzcs: 6 +njzj: 6 +qbwf: gsdm + mdwn +sngl: qjfv * cqwv +llzw: 3 +zwgv: 7 +lrtb: bdjp * mjlp +ndrw: 6 +cbdq: tjnc + vspl +jzrg: blwz + qfmj +lvvf: rhtg * nmms +vqrm: mdcs * lfsm +ngcc: dtzf + pgwt +rdft: nqlh - tvmm +rdfv: cbpw * bmtp +lrlm: 6 +rrnh: 7 +qvdg: 6 +phdb: 5 +tgng: 3 +jhrw: 4 +plnt: 3 +fgbv: 2 +qwhc: dljv + rbdj +tnjl: 7 +cfrh: 4 +lltv: tsmd * mtpd +shrr: 2 +vdhh: 3 +nwtw: zfrs + qtfs +sjnz: rhbj + tccp +csgj: 6 +wcdq: ldmj * vgvz +bdmv: gcqw + lrlm +btnz: 15 +lcqs: 5 +fwnr: 5 +fpzb: 3 +whzr: gthg * htbf +dzbn: sqwd + bfcz +cjlg: 15 +vjsz: 5 +jltn: 11 +sthz: 5 +svml: brvh + rnzw +cvmb: 12 +gglq: jfvm + rrqg +fgsw: 2 +sjbc: hqmq / ccjt +znpd: 19 +cgbn: 5 +lqjv: 4 +nfsp: ndds * szdn +cccg: zmgp * dgqj +cmfb: gdbq / btps +vphz: 11 +qzrn: 7 +bccr: bqhj - vjwc +ttnc: 2 +cwqd: 2 +djwm: 3 +nczn: gjfw * gtfs +nmrp: cppg * fnpl +plwb: 2 +pglg: fzcp * zcvl +czgw: 3 +svcv: 2 +hnds: 4 +pctc: 5 +ggwb: btmb + ntpp +hdnj: rjmh * hzhd +vczv: 2 +mgpc: 2 +wjwv: tgsr * hcjt +rzdh: 2 +lphz: 3 +gqbp: 4 +vzgr: zzpb * vhdw +vqzn: 6 +cjrz: lnzc * bwnq +zcvl: qjwh / dclp +dvhd: 2 +dhnm: nddz - tbsz +jnnm: jdmf - tzqz +bprb: humn - zntw +wrrs: wtcj + vbpf +mvrz: qmhv + prtj +lcgq: 2 +zspd: 3 +vjrr: 7 +zdcs: pdrl * ggbr +qsqc: 9 +hlcg: qzfw - dcfh +ntzh: jgwv + bblr +shjj: rfbf * whnh +pmwj: 5 +scnb: 2 +nsjf: ddsr + tvcf +pjbg: 2 +pdrl: pmzv + qtpn +pldv: zbrj + rhbr +ljdn: 20 +jzqv: 5 +gtfs: 4 +tjrp: dtfw * qzrn +rtgt: 4 +mdfj: wfbn - brhw +bbqz: shjp * sfsn +nbjc: zqwh * vnps +zvjz: zdbw - wngz +bphq: 9 +mmcv: 2 +pblt: 9 +cbwn: 2 +hfdh: 2 +qhcr: 14 +fvmj: 5 +cbwr: gdsj * rvvn +rvjn: dvjz * plwb +bhtw: smth * plpf +fmfd: vjsz + ftbf +jphn: 3 +tnql: zcbc * lrrv +nwcs: rgbj * shwn +rhvs: dvdh + jwhr +pdsr: 5 +lvnd: zlmq + ccwt +crbt: 2 +dphw: 3 +lrqr: 10 +chcs: 2 +ncvq: zsrr * cprn +mcns: 15 +mphh: 5 +ggbr: 3 +shpp: 3 +gnrt: bvmr * cjwv +sczm: gblm - hdsz +sbzt: 4 +mdpb: lqbg / vgzw +tvqp: zhcg * cpcb +nnpm: vtbj + jhsl +lnzc: 5 +mrqj: 4 +csrw: rdjb * nqjr +lftj: ndts * shpm +gtrh: cjst + dwzb +zcdr: 2 +hshg: 2 +qncn: 7 +hwpj: gwcm * gfbl +qzfw: 8 +rvvl: lwnj * whgw +zwnr: wbnz * jbqz +fzcp: 2 +vlpp: 2 +cjst: mplm + zgwh +vflf: svfz + njjn +fwqm: lnhm + szrs +pdmr: mphh * msnj +blwz: tqfw * cqbn +qsmn: grgg * nldv +nhjc: 4 +tzqz: 4 +vcwv: mvrz * hmwp +prbd: 2 +zcvp: 8 +vbcs: 5 +qppw: 3 +hpdj: 3 +tdvn: 13 +szwb: jgrw + scrs +hcnj: mclp + zpvj +dtnc: 2 +hghw: qwzp + scgq +ngtn: 3 +ppjl: ggwb / vbtp +ltvp: 2 +bpdh: tcqp * nssz +bwjc: 5 +hnzn: 2 +nhtp: 4 +njbn: 13 +jhfw: 18 +tmzz: 2 +qrzb: qqzm * vchf +mvhh: hdll + mwfz +jtfd: vnrt * fjvf +dmhj: fzsw / wjdt +hcvm: flpp - nbds +zfrj: crbt * nrdc +bhff: ttpl / hldc +rplr: 2 +cppg: 2 +pwzf: zzsh * qtff +whnl: trqr + dbvc +pdjt: hbll * rqrd +nsvr: ctvz - scsn +vffg: 3 +fpll: 4 +qbsh: mqgm + rvwm +dqzv: 2 +bznm: 2 +nqvg: 2 +bqct: srnn * psht +npbm: 4 +rwzr: rszw + zpdw +nlzs: tpvf * ttbb +sjsn: vtfw * lphz +fpnc: 2 +pgwt: 3 +wqrh: 3 +gvjj: 10 +mdwn: 4 +smng: 6 +zvlr: 2 +wghm: srvl * hnvc +vncb: 3 +rtlp: 3 +qhpl: dqzv * dmst +pzgq: 3 +jmbw: 2 +gnzj: 3 +pctp: fwjl * jmpr +lggd: bwlh - ldtt +wmjg: 2 +mlhh: qlzg / rvwg +prrq: 2 +lftw: fbvg * mdwt +grlr: pgjs * sczm +bhfv: dhnm / bcvw +vhdw: 3 +qvfc: 3 +scrs: gvcv + rlnb +trpr: 2 +ltlj: 2 +dvnw: 2 +tccp: 3 +gbsf: sghs + njdv +shnr: 4 +djls: 5 +spfm: 2 +vbrd: 2 +dnbh: 2 +wfzq: 5 +cdrv: hsdr / trpr +whsq: vdbj + vfld +hwmn: npgb / wmps +cvht: 2 +vrhz: ncwg * gnnn +wgsr: 3 +qhvw: hdzv / rzdh +cpff: zdcv - zqvf +qtbn: fdnn * pglg +ljsn: glqv * hsgh +zbrj: plnt * rrnh +ttbb: lnvp * qpcl +dclh: fcsq / wgrr +prcf: 5 +mtwq: 3 +cnrz: qcsh + vngl +gwdv: mdfj + chcs +fjbb: wjgv * wnls +hggc: mmgg * rnnh +tvhd: qscj * zwgv +jwlh: 2 +qdqg: 13 +dbpc: pblt + qtdr +ghsc: qhcr * vjrr +qfwd: ltps + sjjr +mwnm: 5 +pjpg: hqqd * zzjd +msnj: 2 +fgjf: ppjl - wttp +bcvw: 5 +ftbg: 2 +jwzp: 2 +vnrt: 3 +rgnq: 15 +njvq: qqsv * mdrq +cbpw: rnlm + dcwb +lscv: bhrt + zwqt +jsnt: 10 +dwzb: mjdf + dfhg +dgqj: fqff + vswr +hdzv: bcbn * gpvw +njdv: 16 +zcbc: 12 +cwtt: 4 +cnpn: 2 +vjqt: blvv + sjbc +vnjc: 5 +plsp: 4 +lwnj: 3 +mdpl: 11 +srrd: 15 +zdmq: 3 +vrnf: qqwm + nzpt +pgll: 7 +fwrb: rbfq + zqdv +qhsf: 2 +sqjc: lqzb * zzwn +pqpl: ljdn + tgng +tbwf: 2 +rcnc: 11 +qtcq: 12 +gjfw: 2 +hfgh: pnzb + frgv +qgrv: cfrh * jbbr +mzgc: 6 +jsrh: vhrp * grhv +cbls: 2 +jpwv: nhtp * mjth +vwqh: 10 +ptfs: vdpd * jcjq +zvln: mqhh * czlt +mplm: prrq * bftw +brdf: nshb + ddjs +bgbr: 2 +mmgg: bfvh * bdmv +mwfr: ncwn * clmg +rhbj: 4 +lnhm: blbw + wmjj +gthg: 3 +rsmn: 3 +pvnt: ptwf + rwrs +grlq: 2 +pmlp: 7 +pwmd: mpvs + pzqs +mzjz: mlsb + drvj +sbql: wcwn - jhgj +lnpr: rpvn * sdbh +brlc: lrjl * gjhb +qrwj: 7 +hwmm: jspd * wdrd +tcrm: hlgv + zrrv +fchd: lmbr * szml +vvff: 4 +blbw: cftr * fftf +zfqn: zdcs * hvrb \ No newline at end of file diff --git a/data/day22/example01.txt b/data/day22/example01.txt new file mode 100644 index 0000000..6e06946 --- /dev/null +++ b/data/day22/example01.txt @@ -0,0 +1,14 @@ + ...# + .#.. + #... + .... +...#.......# +........#... +..#....#.... +..........#. + ...#.... + .....#.. + .#...... + ......#. + +10R5L5R10L4R5L5 \ No newline at end of file diff --git a/data/day22/input.txt b/data/day22/input.txt new file mode 100644 index 0000000..851f4a1 --- /dev/null +++ b/data/day22/input.txt @@ -0,0 +1,202 @@ + ........................#.#...........#........#.#.......#......#......#........#..#........#....... + ....#.........#....##....#......#................................................................#.. + ....#...#.#................##...#..#.....#.#..#.............#...........#...#..##......##.....#.#... + .#.......#.........#...##....#.............#..#...#....#..........#.......#.............#........... + .##..............#.#.#.....#........#.##.#.........#.........#.......#.....#........#.....#.#....... + ........#.........................#..........#..............#.........#...#...............#........# + ......#...#...........##.................#.....#....##.....#.............#.......#..#........#...... + .............#.........#.#.....#.......#....#.............#..#.##.......#....#...............#...... + #.............................#........#........#.......#...........#..#....#................#...... + .......................##...#.#.........#..............#............................................ + ...........................#.#...#..#....#..#.....#.........................#...............#......# + ..#..#......#.#..................................##.......#.............#....#.#.................... + ....#.....#.#..................#..................#...#........#..#............................#.#.. + ...................#.#........#.........#.#...........#......#............#..#...................... + ..............##..###.................................................#.......##.................... + .....#.#.....#.......#..........#...#.##....#.........#.....#.........#.........................##.. + .#.......#................#.....#.....#..##........#..................#.....##.........#.....#...... + ........#................#.....#..##.....#..............................#...#.............#...#..#.. + .#.................##.#.......#........................#.#...................#.#...#........#.#..... + .........#..#...................................#...#...........#..#.#.............#...#............ + #..#......#........#.......................#...................#......................#............. + ...........................#.............#.......#.....#......#..#.......#...#........#.#...#..#.... + ....#.#...........#................##...............#...#...#......#..#............................. + ......#.........##...##..................#.........#.................#.............................. + ....................#......................#.#......#.......#.....#..#.............................. + ...................#....#....................#................................................#..... + #..#......#...........#....................#................#.......#...#...........#.........#..... + ..............#............#....................#.#..#.............#.............#..#...........#... + ..........#..#.##..........#....................#....#...#......................#.................#. + ............#...............#......##............................................#........#......... + ....#..#...................#..#......#.....#...#.#....#.........#..#........#...........#.........#. + ..........#...........#.#......................#..........................#.#....................... + #................#.....#...#.......................#...............#........#.#.....#..........#.... + .......#...........................#......................#...#.#..............#.....#.............. + ...#.....#.....................#.........#....#.....#....#........##.........#.#.#.................# + ####............#.#............#...#........#....#...#.......#..................#............##..... + ..........................#...................................#...............#........#...#........ + .......#....#.........................#...#............................#.......................#.... + ........#.....................#..#...#.............#..##.#...#....#..#..........#.#.............#... + ....#............#...#............#.............................#...................#....#......#.#. + ........#.........#...#.#........#..#.......#..........#..........#..#...#..........#............... + ........#.............................#...............#............#.......................#..#..#.. + #............#.....#..................#.............##.#............#...#..#.#........#............. + ............................#..........................#.........#.................#.......#....#... + ..#.#..............................................#...................#......#..#........#........# + ..#.....#.#............#.#.#.#.............#...........................#...........#.#.#...#........ + ....#...#.........##.........#..#......#...........#.........##......................#.............. + .#.....#................#............##..#........#....#.#...............#.##...#...........#......# + ...#.......#...........................#..................#.#..##.#...#.#........................... + ..............................#.....#...#.......#.........#...........#.......#..................... + ...........#.....#........#.........#.....#.....#. + ...........#.........#....................#....... + ...........#...........#.........................# + ...#......#......#............#................... + ........#............................#.#.........# + #..................#...................#.#........ + ...#................#...#...#..#.......#.#......#. + ...#.......#............#...#..................... + ........#.................##...................... + .#...#.........#..........#.......#.......#....... + ..................##.##.........#................. + .#.#..............................#.....##..#..#.. + ..........................#....##...#.......#.#... + .........#....#.....#..........................#.. + .......#.....#.................#.#.##............. + .............#..........#.....#................... + .......#.#.........#.....#................###.#... + .................................#................ + ..............#...#..#............................ + .............#........#..........#....#........... + ................#..........#..#...##....#........# + .......#.#.......................#....#..........# + .................................................. + ...........................#.......#...#.....#.... + ........##..............#.#...#.......##..#....... + .....................#.....#........#............. + ...#.......................#.......#.....#..#..#.. + ..##...........#................#.#............... + .........................#.#....#.#.........##.... + ..#......#........#...#....#..#...#.............#. + .....#.......#............###...................#. + ...#............#...........#.......#......#...... + .........#.....##..........##............#........ + ..#..##...#..................#.#.........#....#... + .......#....#............................#..#..... + ...#....#...........#.#........#.................# + ......#........#.....#........#................... + ............#..........#....#..#...........#...... + ................#....#.....#........#...........#. + ...##....#................#.#.....#.............#. + ..............................................#..# + ..#..#..#..#..#................................... + .............#..............................#..... + ..#...#....#...........##......#..............#... + .........##....#...........................#.....# + ...........................##.........#........#.. + ......#.............#........#..........#....#.... + ................................#............#.... + ...........#..#...........#...#.#.........#....... + ...................#.#.#........#.............##.. +.#..........#..............................#..........#...#.#..#...#.......#............##.......... +..##...........#.........#.........................##......#.............#................#......... +#.#.........#.....#.#............#.........#.#.#....##..............#........#.#..#................. +..............................#..#.......................................#....##.....#........#..... +............................##....#..##.....###.....#.......##...#...............................#.. +...........#....#...........#.......#..........#.........#........#.............#.........#......... +.............................#...........................#.........#..................#....##....... +.................#...................#...........#.............#...............#.................... +..............#................#.............#......#....#..........#.#..#.......................#.. +.#........#...##.......#.#...#......#...........#...................#....#......##...#.............. +............#..#.#......#..#.................#....#.....#.#..#.......................#.............. +#.#..#.#.........#........#...........#.#.....#...#..#........#..#........#.......#.#.......#....... +.......##.......#.........#..#.......#...........#...............#.................................. +...........#.........#.................#.......#..#.#......#...............#.#...................... +.............#........#..........##.......................#...#..............#....................#. +......#...#.#....#......#........#.......#.................#.....#....#..#..#.....#.......#......... +.......#.##.............##.#...##....#.#........#.........#..............#...#......#............... +...#..................#.#.......#.............#.............#......................................# +.#............#..........#...........#.#.............#..#.......................................#... +.....#.##...#...#...............#.....................#...#.#.....#....................#............ +........#......................................#...........#......#..#..##...........#....#..#...... +..#...................#................#.................................#.......................... +.#.......................#.......#......#.........................#................................. +...#...#...................#...........#....#........#....#..............#.......#.................. +.....#....................#..........#..#........#...........................#..#...#.......#...#..# +.........#...........#...#...#............#...................#.............#....................#.# +..#....#.....#.#.......#................#...#.............#.............##......#.................## +....##...#...............##..........#....#.........#.....#...............#........#...............# +.....#.................#.......#.................#.............#.#....#....................#.#...... +.........#...#...#......................................#.....................#..................... +.........#..............#.....#.............................#....#.....#............#.............#. +............#.#......#.....#...........................#........##.......................#....#..#.. +........................#.............#..........#.#...........#..#....................#.##....#.... +........##.#....#................##.........................#........#...........#.......#.........# +.#..........#....#...........#...........#..........................#.........##...........#........ +...#....#..#.................................#......#.........#.#....#.........##.....#.......#..... +#.....#....#......#...#.........#...........#..#............###........#...........##......##.#...#. +.......#.#.....#....................................#....#....................##.#.................. +#....................................##.....................##....#...........#..........#.......... +.........................#......#....#...........#..#......#.........#........#..#...............#.. +...#....#.........#..................#..................................#.....#.......#.#.#......... +........................#....................#..#...............#............#......#............#.# +#.................#......................#..........#.........#.......................#.......#..... +..#....................#.................#.....#..........#...............##.#............#......... +...........................#......#..............#.....#...#......................................#. +..................#..#..#...................#..#...#......#..#.........#..##..#...#....#............ +...#........#.#......#....#...................#........#.#...#..................#............#...... +....................#..........#..#........#....#.......#..........................#.........#...... +.......#...#..........................#........##............#..#................................#.. +........##.......#................#.....##..#...........##.............#...##........#.....#.......# +#.................#....#..............#...#....... +..............................#..................# +#........................#....##...#........##.... +............#..................................... +............#....................................# +...#.#..............#..............#.............. +...........................##....................# +......#.#.......#..................#.....#...##..# +......#..............#..#.............#........... +.....#.....##.....#............................... +.............................#....#...#........... +........#......................................... +................#..........................##..... +.#............##.#..............#.#...#........#.. +.......#....#...#.....##.#...#...#................ +................#.#...................##.......... +..............................#................... +..............##.................#..........#..#.. +..#..................................#............ +..........................................#..#.... +...#......#...#....#..............#.............#. +.#....#..#...............................#........ +.......#.#.....................#.......#.......... +....#................#............................ +.......##.....##....#................#............ +...#........#........#......#...#.#.........#..... +......##.#................#...............#.#..... +....#.#........#................#...........##.... +..#......................#....#.................#. +..................#.............#..........#...... +....#.....#....................................... +....#.......##..#.#..#.......................#.... +.................#...........#.....#.....#......#. +.......#.........#.......#.##....#........#....... +................#.......#...................#..... +#.#..................................#......#.#... +#........#..##.......##..#........#............#.. +#..............................................#.. +.#.....#.......#..##........#..#..............#... +.........#.......#...#.....#.#...#................ +.................................#..........#..... +#...#..............##..............#....#......... +.............................#........#....#...#.. +...#....#..............#...........#......#....... +....#......................#.......#...#.......... +...#.............#......#.#.......#..#.......#..## +.......#...........................#............#. +........#.......................#................. +..........#..#...#......##.........#........##.... +.#.....#....###.............#.##.................. + +16L48L13R34L44L21R31R17R42R37R48L39L40R16R29L12R23R8L42R19L26L31L34R8L37R35R22R22L34R4L11R28L42L30L42L24L40R31L14L2L46L1L15R45R4L44R6L13R20L38R16R26L8L6R15L47R10L13R30R27L21L5R16R23R24L23L13L3R14R3R41R17R18R35R45R50L10R28R28R23R29R43R33R6R10R3R49R48R17R18R10L10R36L24R43L41L15R35L16R47R27L1R24L6R50R30L35R46R9L5R8L49R45L9R41L29L25L46R17L47L32R25L7R24R33L23L20L12R43L16L8R38L9L30L33R4R41L6L41L49L36L34L41R12L12R41R23R29L24R39L17L9R4R17L10L30R43R27L29R39R44L16L24R28L14L14L45L6R4L26R17L22L28L31L33R14L21R24L10R20L17R5R18L41L20L1R39R23R8R21L47R21L12R5R1L14L23R50L2L43L45L14L15L50R18R21L39L24R8R7L13R33L15L40R29L34R38R42L5L17R28R49R35L45L4L1R8L33R22L12R37R26L48R45L47R39R35L50R18L22L19R31R10L7L10L27L28R6R28L48R28L44L11L37R48R33L13L23L45L7R34L24R10R47R21R39L11R12R14R7R39L50R39R40R50R3L20L15R6L14R31R30L19R14L2L23R6R5R50R42L4L13R18L45R4R44R15R28R27L35L25R15R18L37R31L38L23L21L36L7R17R24L22L18R19L43L7L1R26L6R42R2R38L9L30R13R37R34L41R20L39R44R11R27L48R30R37L19L30L34L44R17R50R49L46L37L15R35R42R25L19L44L40R5L47R19R44L6R39L1R11R42L27L37R37L41R6R36L47L4R31R34R3R32R7L46R8R3R48L33R39L29R43R40R39L5L25R42L37R15R32R50L36R38L29L30R6L22L17R28R21L42L44L41R35L40L45L22R28R24L2R29L14L7R31L40L14L13L21R12L40L23R34R22L37L24R34L23R33L41R26R18R34L27L15L21L29R21R30R10L10L19L45L42R3R9R18L39R14L21R6L24R44L7R16R24L23L14L28R34R33L26L44R36L23L17L40L23R10L49L8L2L22L45R34L46L1R41L37R26L22L31R12R29R24R44R26L22R20R9L6L36R23R21R44L26R9R32L9R23R15L10L28L48L41R45R35L30L25R41R29L25R23R3R29L30L28L34L29R40L30R40L3R19L36R11L26R48L17L48R12R32R35L26L42R15R6R42R8L49R30R3R14L16L44L8R10L50R18R32R1R29R34R32L24R50R44L13R48L4R20L14L50L15L21R47R3L7R37L15R42R5L40R27L18R3R44L4R47R7R35L46R40R45R24R23R48R9R48R21R7L15L42R27R14R30R48L5L38R5R16L25R22L28R48R17L27R10L25L13R6L7L21R47L43L41R33R6R40R31L32L20L1L16L19R23L28R16R44L26R21R9R29L6L37L31L16L9R37L24L4L19L20R40L3L38L39R17L38L21L26R6R19R12L34L15L31L23L1R8L35R13L23L2L21L20L22R16L49R41R30R13L46R26R50R1R42R40R40R42L22L19R31R4L4L1L45R8L39R3L42R4L44L29R10L17R19L24L43L50R28R8R3L49L8R25R11R14R41L39L47R28R45L34L29R49R38L43L3R15R38L17L37R49R11L8L15L28R3L1R7R1R1L7R17L47L1R28L49L18L20R43R30L20L37R18L3L16R32L9R48L21L22R35L46L31R20L13L16R46R9R49L32L38R42L13L1R16R10L14L45L27L1R4R10R6L38R42L25L33L15L11R17R34L12R47L46R41L42L19L26R22R28R37L26R41L21R8L25R18R26R37R18L38R5R3R8L25R20R2R38R50R17L36L9L6R44R23R5L38L37L1L1L30R28L19L33L25R35R23R32L50L46L42L4L9R12L46L7L2L2R45R11L19R2R47R33R11R25R42R8R41L24R36R7L45L29L20L35L28R3R43R33R25R25L1R33R2R34R25R24R35L46R6L48R37L21R45R5L41L44R32R46L17R5R19R47R39L4R20R26R8R24L30L15R29R5R7R33R30L49R34L48L2L47R1L15L1L25L47R15L14R1R15R20R42R10R44L7L46L28L15R42L3L44L49R14L28R43R33R33R26R3R9R36R24L1L45L26L25L39L15L1R40R47R30L7R25L50R38R6L33R48R28L2L11L41L14R43L48L11L47L39L18R15L23R26R44L27L17L45L21R6R16L37L6L37R50L39L34R34L19R19R32R14R43L16L19L20L44L40L11R49R2L19L17R1L42R9L21L5R2R47L39L29L25L41R19R43R26L41R49R46R9L2R38L22R43R6L5L14R29R27R34R43L25L46R22R13R1R18R28L24R34L45R27L43R6L32L12L35L39L38R16R39L13L36R22L19L20R33L3R13R15R28L45L5R25R9R32L32L34L23R25R43R13L23L45R34R46L9R13R15R9R16R21L38L7L32R1R22R34R44R18L39R43R5R7L19L16L39L26L28L23R41L32R18R22R41L46L34R6L44L29R25R26L5L18R6R44R48R22L47L50R29R24R41L8R48L5R50L49L38R47L39R7L15R23R36R14R48R17R14R32L25L36R10L36R17L30L22R15L19L10L3L24R36R1L6L26L39L48R15L3L26R11R49R2R46R28R18R13L50R39L5R29L31L40L44L43R49L6L26L33L49L30R48R10L4R6L26L15L18L31R20L48R7R17L40R36L41R49L25L21L5R48R19R3L48R46R22R22L50L39R18R17L13L4R5L28R10R40L30R40R19R11R49R9R32L25R48R47L26L40L38R44R22L22R37R3L16R34R11R48L47R2L29R48R31L4R44L40R20L40R30R15R11R43L30R5R40L45R42R39R19R49L41R26L18R17R15L39L26L10R15L30L38L44L47R35R42R40L26R46R11R22R25R28L12R35R1R38L2R40R3L5L15R18R21R46R1R26R42L7L38L11R4L17R45L46L11R39R45R27L8L35R3L50R25R14R3R5R46L6L31R40L28R12L35L1L33L32R49R48L16L20L3R20R50R8L29R44L12R17L12R4L7R2R1R50L30L4L17R12R43L17R4L20L32R46R39L42L18L30L19R15R37L14L5L3R36L31L16L10L10L26R45R19R38L30R49L6L25L30R27L41L17R27R47L37L28R22L44R18L48L44R2L33R2R9L13L1R13L30R43L50R17R32R14R28L1R29L6L2L37R40R12R1L16R32L31L35R10R4R18R41L15L29R3R43L24L29R43L37R33R16L5L12L32R43R43R2R39R41R20R39R6L35R21R44R44L25L31L7L49R42R20L24L3L7R26R35L4L46L37L33R38L33R25L4L1L50L19R3R3R9L25L2R15L7L10R37L5L18R50L23R4L16L19R8R5R36L25L27R18R26L50L46R10R31R31R30R29L24L8L14R40R4R47R5R37R46R35R48L14R23R1L21L47R45R10L8L15R48R15R11L24L39L3R7L38L8L47R37R10R38L34R42R26L17R24R30R41L11L9R50L16L48R5L7R44L11L6R11R22R44R50L5R18R38L46L35L45R9L45L19R22L40R21R23R29L14R35L47R8L8R27R33R22L3L2R19L7R41L33L46L26R9L9L22L15L45L36L46L28R40R10L40R26L47L1R47L25R3R44L35R21L36L43R28L4L21R20L6R2R1R42R10L11R33R44L1R37R48L26L46R11R45L22R18L34R43L26L41L27L14R9R14L2R41R19R47L1R42L11R17R21L12L33L10L30R43R46R47L9R17L14L15L6L43R44L22L40L50L2L19R30L38R48L1R23L32R33R31L45R5L47R1R19R15L40L17R7L10R19R40L29R26R10R21R47L33L22R23L10L1R29R39R14L35L21R18R25L20L46R15L42R6R33R26R10R9R31R32L48R49L15R48L39L41L12L35R24L2L9L27R34L32R6R25L16R47L24R14L48R2R39L2L19L21L23R50R29L44L16R15L14L50R39L13R15L19R46R16R38L8R34R44L46L38L49R7L5R32R47R4R29L24R7R4L30R34R8R15L4R34L25L24L8L10L6R36L18R21R13R50R17L12L50R48L2R31L22L12R31L1L39R19L8R43L15L37L32L34R15R48R39R26L40R20L26L33R21L39R8L38R10L14R41L35R32R23R19R25R26R25L27R26L43R12L45L15L19L39R14L26L9R25R16R33R44R33L17L37R13R29L18L24L2L39L32R17R46L41R31R23R5R17R26R6L36L40R5L33R4R43L45L45R26R47L2L35L36L42R8R32L35L30R42R50R10L44L9L46L25L45L7R18L15R22L47R44L41R41L1R36R19L16R33R40R45R31L23R34L47R13L42L2L32L23R40L14L19R29R50R47L11R40L26L13L1L39R29R43R40R41R4L24R45L8L47L23L45R13L47L25L35L5L23R5L7L5R47R16L34L36L22L31L8R5R21L44R41L41L46R5L7R11R7R44R10L15L48L22L11L9R36L34R25L34R33R33L17R2L50L45L14R12R17L10L47L15R33R25R1R46R20R3L5R42R13R27L22L8L37R3R2R46L3L12R27L5L4R33L18R4R26L30R5L44L10 \ No newline at end of file diff --git a/data/day23/example01.txt b/data/day23/example01.txt new file mode 100644 index 0000000..7ac3ba9 --- /dev/null +++ b/data/day23/example01.txt @@ -0,0 +1,7 @@ +....#.. +..###.# +#...#.# +.#...## +#.###.. +##.#.## +.#..#.. \ No newline at end of file diff --git a/data/day23/example02.txt b/data/day23/example02.txt new file mode 100644 index 0000000..e2a080c --- /dev/null +++ b/data/day23/example02.txt @@ -0,0 +1,6 @@ +..... +..##. +..#.. +..... +..##. +..... \ No newline at end of file diff --git a/data/day23/input.txt b/data/day23/input.txt new file mode 100644 index 0000000..fe9b65e --- /dev/null +++ b/data/day23/input.txt @@ -0,0 +1,70 @@ +###.###..#.....#..#.##..##.#...###.#####..#.##.#####.###..######.#.#.# +....##.#.#.#......#.###..##..###...#.#...####.##...#.#....#.##.##....# +#..#.#.#.##.........#####....#..##.......#.#.#.##....#.#....##..##..## +#.##.##....#.##.#.###.#...#..#.##.####.#.#.#.#.###.###.####....#.#.#.# +.#.#.#####.##...##.##..#..#.#..####.#..#.#.#######..#.##.#.###.#.....# +..#..#....###.#....###.##.#..#..#.#..#.#.#...##...#....##....#..##...# +###..........#..#.###....##.##...#####.###.#.##...#.##.....#.##.#.#### +#.###.####...#..#.##.....#.####.##..##...#..##.....#...###..##.######. +.....#.####..##.#...#..##.###..#.##.####..#...#.###..##..#.#.###...#.# +.#.#.#..##.##..#.#.##.#.##.#.##..##.##.#..##.#.##..#####.#.###.#.##..# +###.#.###.##.##....#.#.#...##...#.#..#.#..#.#..##.#....#####...#...### +.#.#.#.#.#..#....###.#.##.#.#.####..#.#.#...#.#.#.###....#....#...##.. +#.#....#........#....######...#....#..#.###...#.....###..###...##..#.. +.###.##....#.#.#.###..###....#.#.#..###.##..#..#..#####.#.###.#..##..# +..###.##..####.....#...##.#....#...###..#.###.#...##....####........#. +#####.##..#..##..###....#.##....#.#...##.########...#.#.#..##..##..### +.##..#...##.....###.#...#..###.######.#.#...#...##..#.....#..#.##..#.# +.#####..#.######.#..#..#.#.#.##....##..#.......#....#.##.#.#..##...#.# +.#.##..#..###..#.######........##.##.##..#....#.###.######.##.#.#..##. +##.##.#..####.#....###.#..##..#...#.#####.#..#...#....##...#.###..#.## +#....##..#...#.#.###.#.#...##.#.#..###...####..##.#..##.#.#####.....## +.##.#..#.##.##.#.##.....#######..#...#.##.####...#.....#.##..#...##... +#.#.#.#####...#####..#.##....#.#.####.#..#.##..#.#.#...#..##.#...##... +#.#.#.#..#.#.#..#..###.#.....#.#.#..#.#####.#.#..#...#.###.###...#.#.. +.####..####.#.#..#...##.##.#....#.#.....#.##.###..#...###.###.#....##. +....##.#.##.###.#..##.#..#.......##...#.###...#.......#..####.#.#.#### +....#.#......####..#.#..#..#..#.##..#..#..###..#.#.##.#.##..###..#..#. +.##.#.....##.#..#..#..####..#.#.#...###.##.##.##...#..##..##.##...##.. +#..####..#...#.#....##...##..#.....##.#######..#.####...##..######.#.. +..#.##.##....##.#######..##...#..#..###.....##.#.#..#.#...##..###.#### +#####......##..#.#..#......#..####.####...#####..######...##.###..##.. +###..##.#.##....##..######.#.#.#......#..##.#.##.#.##...#.##...###..## +.....#.#.#.##..#.#####.##.#.#.....#.#..#.###.##..#.###.##..##.###....# +.###.####..####.###....####.#.##..##..#.....##.###.##.######.#..#.#... +.#.#######.#.#.###....#####..#.#.#..#.#.#.#.#..##..#..#...##..##..#.#. +.##..####..#.#...###.#...#....####...###.#..#.#.....#.#.##.#..##.#.#.. +.#.#.#.#####..##.####..#..##......#..#.###.#..#....#...#....#...#.#### +..##.##.###.#..#..#.#..#.###......##.#..#..#.#.####.#.#.#.####.##..... +##.#..#..##.#######..#..#....##..#...########.##.#.#...##...##.##..... +.#...#####.#..##.##.###.####.....###.#......########.#..##.##.#....### +...####.###....##..#..#....#..##.####..##..#..###.......#.#.###.##...# +.#.#......#####...##....#.#..#######.######.#.#.##.#..###..#....##..#. +..###.#.#####..##.#.####....#.###..#..#.##.#####.##..##.##..##..#.##.# +.####.#.######.###.###..#......#...#...#..#..##.###.##.#.####.#.#.##.# +#####.###.##.#########..###..#.#.##.#..#..##...#.###.#.#......###..##. +###...###.##.#.###.#.##.####.#######..##.#....#####.###.#..#.#...###.. +.######...#...#..###......#.#.##........#..##.#.#.##.#....###.....##.# +#.#.....##.##.##..##..##.#.##.###.##.###.##.#.##.###....##..#.#.##.... +#.####.##...##....#.#.....#.#.###..#..####.....#.##..##...##.###.#..## +#####.##.#...#....#..###.##..##...#....#....##.#.#....#####....####.## +####...##...#.###.##.##.#####...#.....##..#####...########..####...... +#.#..##.##.#.######.###.#.##.......#......####..##.#.#.#..##.###.#..#. +#..#..########..##..#.######..#.#...#..#.#####.###.####......##..###.# +#..#.#...#..#....#..##.##.#..###.####.###########.#..#.###.#.##.###..# +##.#..#..#.....#.##.#..######..#..#...#.#...###.#.#.#.#.#.########...# +..###.#.##......###..#...##......#####.#.#....####.....##.#..#.#..#.#. +..######....#..##.#.#..#.##.#..##.##.#....##....###.#.##.##..##....### +.#####....##....###.#.#######.....##.###.#..#.#.#..###...#.##..#..#.#. +#..#####...#..##..#..#..#....#.##....#..##.......##..#....#.#..#.#.### +#.#..#####...#...#...##.#....#..##.#.##....#####.....#.##.....#..#.### +##.#.#....#...#.####....###....#...#.##...##.#....#.#.#.##......##.### +...##.#.#..#.###..#.#...##.#...##.#...##...#..###.#.###...###..#..##.# +.#####...#.#..###.#.##.##.#.##..##.#.#.....##....#.#..#.#.#..#####.### +#.####.####..###......##.....#.#.....##.#..##.##.#....###.....####..## +#..#####...#....#...###..##...###..####..####..#...#####.#####..#.###. +####.###.###....####....##..#..####...#....###.##.#.##...##.......#### +.#.###....####..#..#.###.##.##.####..##.#..###..#..#.#.#..#..#.##..##. +....##......####.####.######...###.....###.#.#..##.#.##.......#...#... +##.###.##...#.....#.##.#.......####.##.###..###.#.#..#.##..#.####....# +....#..##.#...##.##.#.#.#..#.#..#..#.####....#####..#.....#####.#..... \ No newline at end of file diff --git a/data/day24/example01.txt b/data/day24/example01.txt new file mode 100644 index 0000000..6b9b892 --- /dev/null +++ b/data/day24/example01.txt @@ -0,0 +1,6 @@ +#.###### +#>>.<^<# +#.<..<<# +#>v.><># +#<^v^^># +######.# \ No newline at end of file diff --git a/data/day24/example02.txt b/data/day24/example02.txt new file mode 100644 index 0000000..1f3bf6d --- /dev/null +++ b/data/day24/example02.txt @@ -0,0 +1,7 @@ +#.##### +#.....# +#>....# +#.....# +#...v.# +#.....# +#####.# \ No newline at end of file diff --git a/data/day24/input.txt b/data/day24/input.txt new file mode 100644 index 0000000..b665c96 --- /dev/null +++ b/data/day24/input.txt @@ -0,0 +1,37 @@ +#.#################################################################################################### +#>^v^v>><.>>><>^v<>^v>v<>^<<>>v>>.>>^<>^.<>v.>v^>vvvv<<<<>>^v^^^>><><.^^^.<<<>><^v^vv^v<.v.v>>.vv<# +#>^><>^v^<>.<.<.vvv<^>>>v^<>>^^^><.>>>>v<<>^.>.^^<<.<><.>>>^^^>>.<># +#<.vvv^^v>^<<^^^>.^<..v.v<<^>vv<>>>v^>vv<>v<^^^^v>.<.vv>v>^<^^<>^>v^<^.^^v><>.><># +#>..<^^<>>v>><>vv^^<.v^<<^<>>vvv.vvv<>v>><<.>^>><^v.v.<>^>v># +#>^^v><^<^>^^^><^>><^^.vv>v<>v<>^>^v>>.>>^<^v^v^>v^<.vvv^^<.>>.^>><<.vvv.># +#>v^>^<>v^>>^^<>.><^v<^vvv>vv<.><>v>v<..<^>>v^v<<<v^.<<<^^^^.^v^<<>^vvv>^><.^v<^<>vv><<^<>^<^<<# +#.^vvv^^v<>v<.<<<>^><<^>^vv<<>^<<>^v.>>.<>>^<^<^>v^v>^vv.# +#^<^><^..>^.>>v>>vv<^<.>.^v^^<^v<^<.^vv>v>^>^v>>>>^^^v>^^>>>v^<# +#><>v^>^v<.<.>.<^.<>>^^>v^vvv<<^>vv<^^>^<^>v<.^.v<<.v.v^v>v><>..^^<.v^^<.<<<<<><>v><<>v><>^^^.<.<<>^v>v^>^>>>>v>.^>.v>.^>^.v<^<>v.v>v^v^^>^v>>>.<^v^^.>>>>^<>>>^>vvv^>^><<# +#>v^.v>>><>^>><>.^<^v.>.^<^>>^v<.<^^v<^><..vv<>^.^>^<^<^>><>.><<># +#>.<^^v^><<<.v^<>v^vv<^^.<>>.^>^.v.>^>.<<>v<>^v<<>vvv.v<>v>vvv^<>v^>^v<<<><# +#.>><<>vv>v..<<^^vv^>^<>^^v>v^vv>.><>^<^^>><>>v<^v^^><>.^.vv>v.^^>^vv<><.>>^^<^<><>v>.# +#><v<><^<<^><..<^>v<<^.^^<.^^v<>>^v>.^^^<v>><><.<>>^v<^.v>>vv^^^^<><>v.>.^<^v<# +#<.>vvv^.vv.>.^v<>>^^vv>.>^v^>>>vv^<^v.v^>>>>><>v>v<>v^^>.^^v>^v><<>vv^<><>>v<^# +#<^v<>>.<<>^>v<<.v^v.<^v.^<><>v<>.vv^>vv<<^^<^^^><<>^>.^v<<<^<^<^^>>vv.vv^^<<^^^v^^^^.vvv^^^^v^>^^^v<^v><<^^^.<>^><.^><^<>.v>^vv^v<<^<.<^.^>vv>^v>^<.# +#<.vv>><.<>>>><<^^<><^^v..>v<^^v><^><<^^^<<>^^>.>v><^v^v^<<.^>># +#<^vv<<>^^<<^.^vv.><^>v.>^vv.<^v^^<^<>v<<>^v^>v^^^><^>>^.>.<<^<# +#>>..^^^>^^.<>>>^><>^<<.v.^v^^<^<><>..>^<>.>^^^vv.v>.<.^^^^<^v<.# +#>>vvv^v^v^>v<^>v<.^>^^^<^<>^.><^v<<>..v><>v^>^>><^^<>.v>>>v<^v.v>v.>^vv^.^<# +#<^<>.^<>>^<^v>.^v.><.<^>.>^<>^^>>^^^.<^<>><>^>^.v^^v>vv<^.^>><.<>^.^<>.>>>v>v# +#<^^vv<<^<^.<^>^>.>><^<^^^<<>.v>v>v>v.^<v<<<>v<>^>>>.^><^^<>>>^<><^.^.v^^v^^>..# +#..v>vv^><^>^^^><>.^^><^<><>^>>^v<>><.>^>v^>^v<>><><^>v>.v^v>v<><.^^.>.v.^<# +#.v<^v.<<^v^vv<^v^>^^v^<>^>>vv<^^v^^^^<.^v<>^<<^v^<<>>.vvv.>>^v>>>vv<<><^v>># +#<..v>vv>v>>^v^vv<v<^^^>v<^^^^^>>><v<>.>v^v<><.<^.^^.# +#>>>>>^^.><^<>^<>v>.<^vv^^<>>^v><^<^>vv^<.>^v>.v>>>^.^>^v^^^^><<>><<^<.<^v<# +#<.v.^>.^<.v<^^<.<^<<^.^<>><^<<^<><.<>.><<<><^v^^v<><^<>>^>^^>vv>^<.^<>.>>>^v<# +#<>v^>^^v>>^<^>v>>>.>^.><>..>^v>><>v<>^>.^v<<<<^>v>v>^^>^<<>^>vv><<v^^vvv^<.v^<^v>^># +#><vv^<>^^v<>v<^^^^><>^^>^<<<>v.vv^<><<><.^<<<^>>^vv<.v^^>vv><<<>v.<><^^^v.# +#<><^<^^vvv^>><><<<.<.^<>>^v^>>vvv>>v..><<^^.v<><^^><^>>^<v>vvvvv...^><<^<<.>>vvv^v<^<>.^v^<^v<^^>>v<.>v.v>^>>v^<<.v<^<..>.v<<..^^^v>v<.^<.>v^v^^># +#<^>v<>^<>vv>.><^v<^.><<^v>v<^<<<>v><>^v><<vv<>vv>><>>^><>>v^.^v<.v^^v<># +#<^<^><<>v..>v^>v>.v<<<^<<^<.<.^>>vv^.v^.^^>^^<<^^>.vv<.>.^^<>.<>># +#>v>>vv<.v<><^^v>^>>>>^>vv><vv^.>>v^^vv^v^.>^v<>>>^^^>..vv^.^><..>>v<>^>^^<<.v<>v^^^v>^v># +####################################################################################################.# \ No newline at end of file diff --git a/data/day25/example01.txt b/data/day25/example01.txt new file mode 100644 index 0000000..237ef0c --- /dev/null +++ b/data/day25/example01.txt @@ -0,0 +1,13 @@ +1=-0-2 +12111 +2=0= +21 +2=01 +111 +20012 +112 +1=-1= +1-12 +12 +1= +122 \ No newline at end of file diff --git a/data/day25/input.txt b/data/day25/input.txt new file mode 100644 index 0000000..b5ab655 --- /dev/null +++ b/data/day25/input.txt @@ -0,0 +1,135 @@ +1-- +1- +1--02 +1122-=2-==0-0=1-2 +2=1-==-1022=10 +1==-02211022=000 +101==210-21=2 +11010==0==221=0=02 +11=1101020=02-11 +1=== +10-2 +10=02=-=02 +1-1--112-202--0 +11-=-0-002=0112-1 +2--0-2=02=-22 +1001-2 +1=101=2=2102-201--1 +1-2==1100-- +2-01=--=1-11 +101-=0010-210== +1=-21-022121110 +1==21 +22==1 +2-0-=2=1 +2--0=10-00--2- +1--1=011-2 +1-100-2 +11-1 +112 +222200110-11110-2= +1==2-210-1122=-2022 +2==1-20-2-=-21 +21=1-=0=-1-=-=-12 +210---=-1===-===00 +1--21=01-022=2- +11-= +21-2 +2-22-0 +1==- +1-----01 +1-0-21- +211212-22-12--=2 +1=220=10=20200-0 +21-=11-==20=1 +102-2==2-==-0 +1=0=01- +22=1--0111 +1-----=1==00===0- +20==-1-121- +1=--2--21-202=21 +1-0122=--= +2==-2--===-=-1=-012 +2220=-00-10- +1==0=---10212-1- +1221=-022120 +100112 +2-=0=220-=01-1=12- +1=00 +2122121=2 +2-== +12-21===10220 +1=0 +22-1=--01-==0 +1-2-2202=1=02 +11-===21- +1-22=0102-=-222-1 +1021=0=21=0=11=2-2 +1===2222=0-0= +20=2-=0= +1=2==02-1-100200 +1=1211211---- +12=1=1---=20 +2--2=2=1100020200 +1=0-002-11-10---- +1=1=-1=-0 +1-21=1=02=21=20 +1-=0-002-0=--=0= +20-===-1= +220021012 +12===1001=--=2=1- +1=-02 +21 +2=200222122 +1-2=110111=012=1- +1=02= +101==1-=1=0001 +1=22--1-021 +120 +201-0211 +1-1012211--2=-1= +12=10202=20 +11-22=2=2=-0==1=00 +11=- +12-1--2222 +22 +1120--0== +10=-0=001- +1=00200200= +1-20 +1-0- +10112-202=-011 +11-2= +1-=10=1-0=-21==11200 +11 +12-0-=01--12 +1-=1121-=0 +120-21=-1=10121= +1102-22 +21= +1==--1==---1-== +12=0--=2210-1== +22210=1-=0 +1102-20-1 +1=1=2102 +11--=2==-0 +2=0=1= +21-0-10= +12-212-2=-==102-- +1==0100210-= +12210-0-1 +1=0-2-0= +10-1=211=1-2= +201-0-- +1--2=00=-1-211 +121=-22100=210-- +122-0-1- +2=211 +2=1-=2-2-0001=-1 +1102--11=0=1=10==2 +1==01121-2--0=12 +2=21-20=-0-0 +2-212=21-02=1-2-02 +2=1-0 +10-0-=20 +2=2=201 \ No newline at end of file diff --git a/rest.txt b/rest.txt deleted file mode 100644 index 1a55fd3..0000000 --- a/rest.txt +++ /dev/null @@ -1,5005 +0,0 @@ - -0: 0 -1: -9978 -2: 5025 -3: 197 -4: -3116 -5: 190 -6: 7028 -7: 2129 -8: 4153 -9: -5433 -10: 5136 -11: -9998 -12: 6162 -13: -6987 -14: -2392 -15: -4714 -16: 8424 -17: -9967 -18: -2362 -19: -4665 -20: 5276 -21: -4962 -22: 5041 -23: 2795 -24: 9103 -25: -9856 -26: -886 -27: 353 -28: 5353 -29: -901 -30: 5041 -31: 5333 -32: -5052 -33: -4937 -34: -3908 -35: -6346 -36: -4872 -37: -4823 -38: 9186 -39: 142 -40: -8281 -41: -6894 -42: -5198 -43: 426 -44: -9243 -45: -4891 -46: 5182 -47: -785 -48: 1317 -49: -600 -50: -4951 -51: 5236 -52: 5316 -53: 9658 -54: -4815 -55: 4100 -56: 4097 -57: 9438 -58: 6579 -59: 73 -60: -6022 -61: 9273 -62: -4892 -63: 5275 -64: 126 -65: -8108 -66: 4337 -67: 2151 -68: 9987 -69: 4157 -70: 5470 -71: 203 -72: 1986 -73: 9049 -74: 4838 -75: 5051 -76: -9442 -77: 302 -78: -44 -79: 5434 -80: 7512 -81: 7925 -82: 9961 -83: -9997 -84: -7595 -85: -4416 -86: -4541 -87: -6356 -88: -4609 -89: -2271 -90: 9125 -91: -4938 -92: 474 -93: -6606 -94: -4269 -95: -8469 -96: 5647 -97: 9156 -98: -6817 -99: -4925 -100: -4352 -101: 4598 -102: -4189 -103: 5135 -104: 9594 -105: 8452 -106: 8165 -107: -9998 -108: -5011 -109: 5637 -110: 375 -111: 3200 -112: -8236 -113: 7665 -114: 8532 -115: -4882 -116: 2132 -117: -3457 -118: 4873 -119: 6792 -120: -4804 -121: 1361 -122: -9341 -123: -8903 -124: -996 -125: 1760 -126: 2230 -127: 5455 -128: -9957 -129: 99 -130: -9561 -131: 4540 -132: -8870 -133: 5724 -134: 1350 -135: -4651 -136: 4373 -137: -9900 -138: -9351 -139: -9360 -140: 4967 -141: 662 -142: 4534 -143: 5 -144: -9346 -145: 259 -146: 6240 -147: -9481 -148: 5142 -149: 9236 -150: 259 -151: 4343 -152: -331 -153: 3228 -154: 4390 -155: 5690 -156: 5744 -157: 9312 -158: -1187 -159: 7231 -160: -5802 -161: -9516 -162: 188 -163: -1721 -164: -3527 -165: 5101 -166: -4599 -167: 9942 -168: -9580 -169: -5521 -170: -531 -171: -4557 -172: 5782 -173: -242 -174: 275 -175: 2842 -176: -581 -177: -4392 -178: -4128 -179: -4924 -180: -9346 -181: -4416 -182: 6514 -183: -63 -184: 6224 -185: -2573 -186: -9130 -187: -3139 -188: 3671 -189: 3241 -190: -9508 -191: 1482 -192: -1279 -193: 3245 -194: -4841 -195: 260 -196: -4171 -197: 4089 -198: -3603 -199: 855 -200: 280 -201: 707 -202: -8471 -203: -9276 -204: -7354 -205: 4685 -206: 5921 -207: -2137 -208: -4214 -209: -4769 -210: -8668 -211: 9603 -212: 5548 -213: 8073 -214: -5138 -215: 186 -216: -3317 -217: 4166 -218: 5212 -219: 9397 -220: -1348 -221: 5395 -222: 4855 -223: 5190 -224: 4988 -225: -4888 -226: 4695 -227: -7070 -228: 725 -229: -9592 -230: 6579 -231: 552 -232: 510 -233: -4468 -234: 257 -235: -8398 -236: 8016 -237: -9876 -238: -8950 -239: -25 -240: 498 -241: -9350 -242: 696 -243: -4488 -244: 1568 -245: -4028 -246: -1011 -247: -1707 -248: 5487 -249: -9439 -250: -5865 -251: 5287 -252: 5223 -253: -7624 -254: -7139 -255: 5404 -256: 5468 -257: -5066 -258: -289 -259: 373 -260: -4891 -261: -5180 -262: -4996 -263: 58 -264: 678 -265: 417 -266: -4940 -267: 4940 -268: 3677 -269: -7650 -270: 950 -271: -9604 -272: 9877 -273: 9603 -274: 466 -275: -885 -276: -9221 -277: 5461 -278: 5578 -279: 5689 -280: 8707 -281: -9351 -282: -522 -283: 358 -284: -1502 -285: -4673 -286: -11 -287: 4041 -288: 7027 -289: 2720 -290: 5903 -291: 2738 -292: -4275 -293: -2556 -294: -9250 -295: -9332 -296: -4340 -297: -9100 -298: 469 -299: -5069 -300: -9302 -301: 5280 -302: 4382 -303: -39 -304: -4644 -305: 3140 -306: 1119 -307: -9459 -308: 9959 -309: -3106 -310: -9969 -311: -3989 -312: 3972 -313: 6889 -314: 7292 -315: -6056 -316: 5259 -317: -4403 -318: -9066 -319: -8875 -320: 9236 -321: -9869 -322: -9557 -323: 4986 -324: -8864 -325: -1363 -326: -9638 -327: -9002 -328: 5287 -329: 5780 -330: 4042 -331: -9296 -332: 5584 -333: -9100 -334: -2975 -335: 5054 -336: 4409 -337: 5906 -338: 213 -339: 4840 -340: -9827 -341: 5546 -342: -9162 -343: 3670 -344: 6199 -345: 9451 -346: -4001 -347: -4985 -348: -4275 -349: 5827 -350: -140 -351: -6727 -352: 4021 -353: -355 -354: 9447 -355: -5952 -356: -829 -357: -4790 -358: -312 -359: 674 -360: 2093 -361: 5901 -362: 2745 -363: 535 -364: -2820 -365: 701 -366: 4550 -367: 9702 -368: 7822 -369: 5745 -370: 6877 -371: -2881 -372: -9231 -373: -5081 -374: -8858 -375: 4599 -376: 2311 -377: 5780 -378: 5737 -379: -4651 -380: 142 -381: 4966 -382: -9026 -383: 867 -384: -3861 -385: 9024 -386: 1632 -387: 713 -388: 5634 -389: 4561 -390: -5337 -391: 9421 -392: -4228 -393: -4337 -394: -459 -395: 6079 -396: 4744 -397: 5025 -398: 424 -399: 1161 -400: 6140 -401: 8056 -402: -9557 -403: 566 -404: 5325 -405: -9350 -406: -9099 -407: -3804 -408: -4762 -409: -1269 -410: -3835 -411: -3965 -412: -4171 -413: 1316 -414: -9557 -415: -9359 -416: 5585 -417: -1421 -418: 483 -419: -4001 -420: 4147 -421: 8170 -422: -9451 -423: 302 -424: -4598 -425: -8867 -426: 5421 -427: 840 -428: -526 -429: 5994 -430: 1293 -431: 1355 -432: 5938 -433: -7507 -434: 6069 -435: 5755 -436: -5447 -437: 9906 -438: -9972 -439: -817 -440: -4989 -441: 5830 -442: -8785 -443: 6399 -444: -9921 -445: -4801 -446: -8919 -447: -4105 -448: 8398 -449: 298 -450: 1359 -451: -3858 -452: 566 -453: -3902 -454: 4807 -455: -8721 -456: 9211 -457: -8827 -458: -6798 -459: -5614 -460: -8703 -461: -9283 -462: -6006 -463: 7206 -464: -760 -465: 563 -466: -7680 -467: 5782 -468: 9951 -469: -1131 -470: -9062 -471: 1557 -472: -9100 -473: -5171 -474: 6451 -475: 5640 -476: 696 -477: -8521 -478: 5917 -479: 4410 -480: 1490 -481: 375 -482: 8532 -483: 1378 -484: 643 -485: -7401 -486: -3776 -487: -6816 -488: 5372 -489: -3803 -490: 8090 -491: -4275 -492: 3434 -493: 5054 -494: 5137 -495: -6047 -496: 752 -497: 5761 -498: -3870 -499: -8832 -500: 5947 -501: -568 -502: 6853 -503: -6172 -504: -4980 -505: -5104 -506: 892 -507: 6535 -508: 6383 -509: 1097 -510: -2726 -511: 481 -512: 692 -513: -5607 -514: -9085 -515: 4089 -516: -277 -517: -2732 -518: 9088 -519: -5210 -520: -4901 -521: -8038 -522: -3577 -523: 7945 -524: -2741 -525: 6535 -526: 1340 -527: -4391 -528: -4654 -529: -4582 -530: -6749 -531: 6312 -532: 1017 -533: 1336 -534: -9950 -535: -2123 -536: -2784 -537: 9510 -538: -5555 -539: -3742 -540: 6557 -541: 6165 -542: -9589 -543: -2860 -544: -8912 -545: 5856 -546: 6130 -547: -8505 -548: -4174 -549: -6922 -550: 6170 -551: -7075 -552: 5713 -553: 367 -554: -7394 -555: -4202 -556: 6121 -557: 5441 -558: 5650 -559: 5560 -560: -6737 -561: -7534 -562: -6027 -563: -7160 -564: 7259 -565: 2836 -566: -8974 -567: -9450 -568: 5661 -569: 5041 -570: 3773 -571: -3423 -572: -8854 -573: -8208 -574: -4166 -575: -9538 -576: 6381 -577: 1123 -578: -3848 -579: 4315 -580: 5856 -581: 9978 -582: -9162 -583: -650 -584: 5865 -585: 7133 -586: 5659 -587: 1604 -588: 5143 -589: -3854 -590: -7238 -591: -7301 -592: -8375 -593: 706 -594: -5557 -595: -6606 -596: -6825 -597: 4279 -598: -3507 -599: -9781 -600: 7396 -601: -6721 -602: 966 -603: -7749 -604: -4888 -605: -9288 -606: 8854 -607: 288 -608: 5135 -609: 6269 -610: -5157 -611: 6426 -612: -5435 -613: 4655 -614: -9824 -615: 5491 -616: 2687 -617: 7165 -618: 253 -619: -8592 -620: 4287 -621: -4275 -622: 9783 -623: -9911 -624: 6228 -625: 7501 -626: 274 -627: -1133 -628: -6686 -629: -3567 -630: -8492 -631: -9100 -632: 5506 -633: -3603 -634: -9046 -635: 3233 -636: 5706 -637: -2094 -638: -8670 -639: -3081 -640: 4729 -641: 6623 -642: -4762 -643: 6333 -644: 5421 -645: 6078 -646: -8185 -647: 3390 -648: -7486 -649: -9473 -650: 9640 -651: -3283 -652: 9754 -653: 3274 -654: 7516 -655: 1419 -656: -9802 -657: 5929 -658: 6125 -659: -9281 -660: 9071 -661: 1818 -662: 1794 -663: -4898 -664: -4924 -665: 5548 -666: 6718 -667: -8642 -668: -8555 -669: -7166 -670: 9610 -671: 238 -672: 5637 -673: -3852 -674: -2972 -675: -200 -676: 547 -677: -3773 -678: 9365 -679: 6696 -680: 5051 -681: 4964 -682: -8289 -683: -3503 -684: -8496 -685: 725 -686: -9580 -687: 1340 -688: 1673 -689: 989 -690: 2493 -691: -3784 -692: 741 -693: 5659 -694: 388 -695: 2845 -696: -1621 -697: 5690 -698: 8117 -699: -8212 -700: 7916 -701: -7518 -702: -3340 -703: -6082 -704: 6170 -705: -9099 -706: 9554 -707: -4807 -708: -7170 -709: -5360 -710: -9423 -711: -6175 -712: 1490 -713: 6677 -714: 469 -715: -6042 -716: 827 -717: 7233 -718: 2088 -719: 172 -720: 5994 -721: 601 -722: -8806 -723: -2371 -724: 469 -725: 454 -726: -8281 -727: 7214 -728: 1361 -729: 2936 -730: -7439 -731: -8179 -732: 5343 -733: 8 -734: -3509 -735: -8751 -736: 4099 -737: 9125 -738: 413 -739: -8372 -740: 6041 -741: -1110 -742: -3431 -743: -8494 -744: 526 -745: -3220 -746: 5050 -747: -3201 -748: 1557 -749: -3603 -750: -1669 -751: -8369 -752: -9592 -753: -5795 -754: 654 -755: -489 -756: -1875 -757: -716 -758: 924 -759: 1037 -760: 1792 -761: -6703 -762: -9166 -763: -4306 -764: -3669 -765: 4934 -766: 5182 -767: -8859 -768: -7507 -769: -4137 -770: 703 -771: -3031 -772: -4028 -773: -4395 -774: -8285 -775: 5637 -776: 6427 -777: -3231 -778: -4985 -779: 4 -780: 599 -781: 5028 -782: -3804 -783: -4662 -784: -8224 -785: -142 -786: 5456 -787: -5157 -788: -844 -789: 8165 -790: -3564 -791: -4645 -792: -475 -793: 2299 -794: 6868 -795: 899 -796: 4838 -797: 6659 -798: 5025 -799: 6537 -800: 3328 -801: -4051 -802: 8561 -803: 4460 -804: -5527 -805: 5989 -806: 5737 -807: -289 -808: 4852 -809: 4635 -810: -1647 -811: 4526 -812: 5440 -813: 5009 -814: -8464 -815: -412 -816: 1032 -817: 878 -818: -7376 -819: 4187 -820: 8985 -821: -5783 -822: -8259 -823: 5589 -824: 1908 -825: -1996 -826: -9118 -827: 6059 -828: 6399 -829: 6175 -830: 1081 -831: 6804 -832: -4025 -833: -2654 -834: -3793 -835: -6220 -836: -8105 -837: 5691 -838: -4673 -839: 9634 -840: -3289 -841: 5136 -842: -3758 -843: -1958 -844: -4202 -845: 892 -846: -6343 -847: 6712 -848: 2521 -849: -3682 -850: 989 -851: -9469 -852: -8686 -853: -5016 -854: -552 -855: 6130 -856: 6313 -857: 575 -858: -5011 -859: -3061 -860: -7515 -861: -785 -862: 5921 -863: 6257 -864: 5659 -865: -4417 -866: -8816 -867: -3925 -868: 940 -869: -1314 -870: -8560 -871: 9638 -872: -1509 -873: 8086 -874: 1238 -875: -3437 -876: -3060 -877: -8259 -878: 1859 -879: -8739 -880: 5445 -881: -8653 -882: -3091 -883: -1114 -884: -3162 -885: 1156 -886: 253 -887: 8872 -888: -4297 -889: -3608 -890: -7066 -891: 8554 -892: 1859 -893: -7509 -894: -9321 -895: 7261 -896: -9198 -897: 87 -898: 5107 -899: -4029 -900: 1585 -901: -3659 -902: 9844 -903: 1831 -904: -8783 -905: 5902 -906: -1080 -907: 7570 -908: 1716 -909: 6960 -910: 1621 -911: -7999 -912: -8699 -913: 4166 -914: -3577 -915: -8463 -916: -5129 -917: 1175 -918: -9407 -919: -3598 -920: 1106 -921: 6078 -922: 5462 -923: 4582 -924: 2492 -925: 5917 -926: -4370 -927: -406 -928: 1727 -929: 6877 -930: -8473 -931: -8962 -932: 4840 -933: -636 -934: -5872 -935: -1953 -936: -755 -937: 9007 -938: 652 -939: 457 -940: 5711 -941: -8252 -942: 5427 -943: -6721 -944: -7619 -945: 6357 -946: 6678 -947: -4891 -948: 4607 -949: -3709 -950: -3833 -951: -3979 -952: -3374 -953: 6012 -954: 8697 -955: -1508 -956: -9474 -957: -3220 -958: 6074 -959: -1416 -960: -9664 -961: -5928 -962: 1025 -963: -8552 -964: 2810 -965: 9653 -966: -5414 -967: -3235 -968: -3054 -969: 6071 -970: -8265 -971: -8628 -972: -2975 -973: 5730 -974: -6088 -975: 6725 -976: -6173 -977: 6016 -978: 1912 -979: 1410 -980: -2433 -981: -5178 -982: 6744 -983: -6464 -984: -3258 -985: 9023 -986: -7940 -987: 6752 -988: 9556 -989: 1409 -990: -3497 -991: 1378 -992: -3823 -993: 9466 -994: 1207 -995: -4340 -996: 1401 -997: 9479 -998: 6623 -999: 2299 -1000: -4417 -1001: 438 -1002: 5108 -1003: 875 -1004: -9055 -1005: -8865 -1006: -2124 -1007: 6330 -1008: -8164 -1009: 1058 -1010: 2877 -1011: -8570 -1012: 1175 -1013: 9218 -1014: 5025 -1015: -9406 -1016: 6734 -1017: -4403 -1018: -2555 -1019: 211 -1020: 405 -1021: -4128 -1022: -5595 -1023: 5287 -1024: -3118 -1025: -8897 -1026: 4056 -1027: -8449 -1028: 740 -1029: -2951 -1030: 4607 -1031: -7785 -1032: 5819 -1033: -4952 -1034: 2111 -1035: 764 -1036: 391 -1037: 811 -1038: 9579 -1039: 7015 -1040: 1258 -1041: 1991 -1042: 3703 -1043: 6584 -1044: 741 -1045: -9856 -1046: -8997 -1047: -8298 -1048: 1943 -1049: -3146 -1050: 1409 -1051: -8681 -1052: -2957 -1053: -8676 -1054: -1138 -1055: 1525 -1056: -9601 -1057: 2050 -1058: 1551 -1059: 3577 -1060: -1258 -1061: 8907 -1062: -7885 -1063: -3317 -1064: -9627 -1065: 1238 -1066: 1557 -1067: 7306 -1068: 4744 -1069: -3255 -1070: 1254 -1071: 3388 -1072: -6330 -1073: -140 -1074: 1628 -1075: -7420 -1076: 9933 -1077: -1338 -1078: 6576 -1079: -9176 -1080: -3118 -1081: -8748 -1082: -9933 -1083: 4483 -1084: -5294 -1085: 6999 -1086: -4770 -1087: 7754 -1088: 1998 -1089: -3529 -1090: 7811 -1091: -9011 -1092: -9386 -1093: 1173 -1094: 6074 -1095: -2997 -1096: -5896 -1097: -9286 -1098: -5846 -1099: -9949 -1100: -7868 -1101: 6752 -1102: 7819 -1103: -4758 -1104: 5771 -1105: 7121 -1106: 989 -1107: 1179 -1108: 3659 -1109: -8052 -1110: 1543 -1111: 884 -1112: 7423 -1113: 5854 -1114: 1123 -1115: 4390 -1116: 6296 -1117: -3698 -1118: 6781 -1119: 6395 -1120: 1128 -1121: -5787 -1122: 4255 -1123: 5249 -1124: -3073 -1125: -4202 -1126: 6866 -1127: -1542 -1128: 5806 -1129: -6704 -1130: 1554 -1131: -6525 -1132: 7850 -1133: -8945 -1134: 1106 -1135: -4740 -1136: -9899 -1137: 1887 -1138: 9816 -1139: 4994 -1140: 8408 -1141: -8295 -1142: 9414 -1143: -284 -1144: -8078 -1145: 1173 -1146: -3106 -1147: -5145 -1148: 4581 -1149: 4293 -1150: -9351 -1151: -3608 -1152: -4602 -1153: 3158 -1154: 3473 -1155: -8134 -1156: 8469 -1157: 8490 -1158: -7021 -1159: -4714 -1160: -266 -1161: -1078 -1162: -3505 -1163: -4304 -1164: 7532 -1165: 844 -1166: -8729 -1167: -531 -1168: -5165 -1169: -7366 -1170: -8816 -1171: 8263 -1172: 2877 -1173: 577 -1174: 8084 -1175: 454 -1176: 9236 -1177: 6729 -1178: 7118 -1179: 5259 -1180: -3070 -1181: 7053 -1182: -4391 -1183: 6867 -1184: 7779 -1185: 4964 -1186: 5936 -1187: 5903 -1188: 5935 -1189: 89 -1190: 7341 -1191: -1069 -1192: 7147 -1193: 7675 -1194: -2649 -1195: 2139 -1196: 1329 -1197: 6771 -1198: -3603 -1199: -8126 -1200: 6696 -1201: 1986 -1202: 6165 -1203: -3369 -1204: -2988 -1205: 5698 -1206: -5107 -1207: -5540 -1208: -3265 -1209: -5012 -1210: -925 -1211: -7877 -1212: -4350 -1213: -5054 -1214: 823 -1215: 6904 -1216: -3748 -1217: -5336 -1218: -1182 -1219: -5330 -1220: 5953 -1221: 1207 -1222: 4982 -1223: 3340 -1224: 6890 -1225: 7353 -1226: 1604 -1227: 3375 -1228: 5183 -1229: -8854 -1230: -520 -1231: -9811 -1232: -8176 -1233: 6432 -1234: 6365 -1235: -7486 -1236: 1209 -1237: 2004 -1238: 5051 -1239: -9145 -1240: 7272 -1241: 5642 -1242: -4444 -1243: -7164 -1244: -1391 -1245: 7255 -1246: -5707 -1247: 3155 -1248: -3060 -1249: 2129 -1250: 7739 -1251: -8832 -1252: 7150 -1253: 7189 -1254: -8481 -1255: -4548 -1256: -8397 -1257: 8723 -1258: 6795 -1259: -8316 -1260: 3641 -1261: -4285 -1262: -5737 -1263: 4624 -1264: 9504 -1265: 9989 -1266: 6347 -1267: 2139 -1268: 1720 -1269: -1878 -1270: -7699 -1271: 3335 -1272: 6867 -1273: 3389 -1274: -8323 -1275: -4427 -1276: -8289 -1277: 1885 -1278: 7023 -1279: 6581 -1280: -8473 -1281: -3075 -1282: -2741 -1283: 7024 -1284: 1777 -1285: -3247 -1286: -9622 -1287: 98 -1288: -4352 -1289: 8366 -1290: -3568 -1291: -2996 -1292: -3178 -1293: 8097 -1294: -4951 -1295: 8481 -1296: 811 -1297: 5956 -1298: -7723 -1299: 5775 -1300: -3730 -1301: 91 -1302: -3541 -1303: 1632 -1304: 1278 -1305: 997 -1306: 4709 -1307: -3641 -1308: -7987 -1309: -7807 -1310: -9780 -1311: -8212 -1312: 7017 -1313: 1219 -1314: -3959 -1315: 7839 -1316: -5958 -1317: -9983 -1318: 1438 -1319: 5812 -1320: 6661 -1321: -7675 -1322: 9332 -1323: 5613 -1324: 6426 -1325: -5780 -1326: 1825 -1327: -9528 -1328: 1690 -1329: -8876 -1330: 3537 -1331: 1662 -1332: 9447 -1333: -9592 -1334: 637 -1335: 7177 -1336: 2258 -1337: -3418 -1338: 1377 -1339: 333 -1340: -5888 -1341: -8468 -1342: 5956 -1343: -3964 -1344: 2805 -1345: 8766 -1346: 2363 -1347: -3248 -1348: -5237 -1349: 7687 -1350: 2303 -1351: -7666 -1352: -5355 -1353: 1717 -1354: -787 -1355: -7507 -1356: -6519 -1357: -8161 -1358: 9497 -1359: -6957 -1360: 2341 -1361: 2311 -1362: 8953 -1363: -9827 -1364: -6313 -1365: 4831 -1366: 8950 -1367: 8546 -1368: 6655 -1369: 2312 -1370: 6576 -1371: 2407 -1372: -6148 -1373: -1542 -1374: -3477 -1375: 7631 -1376: 2031 -1377: -1967 -1378: 577 -1379: -5379 -1380: 1490 -1381: -1099 -1382: 335 -1383: 9599 -1384: 891 -1385: -8577 -1386: -4912 -1387: 6436 -1388: 5689 -1389: 1017 -1390: 6492 -1391: 8482 -1392: -6639 -1393: -3631 -1394: -5165 -1395: 6868 -1396: 1877 -1397: -8054 -1398: -9856 -1399: 6665 -1400: 6121 -1401: 499 -1402: 4459 -1403: -8802 -1404: -7777 -1405: 6774 -1406: 6110 -1407: 2196 -1408: -4708 -1409: -4378 -1410: -5273 -1411: -5189 -1412: 7839 -1413: 1914 -1414: -1702 -1415: -7112 -1416: -5802 -1417: 6110 -1418: 5535 -1419: 1332 -1420: 4861 -1421: 3595 -1422: 1654 -1423: -4030 -1424: -1373 -1425: 2358 -1426: 7460 -1427: -7937 -1428: 1896 -1429: 1378 -1430: -7819 -1431: 5830 -1432: 2120 -1433: 3816 -1434: -3190 -1435: -5606 -1436: 4928 -1437: 9186 -1438: -6697 -1439: 1238 -1440: 8089 -1441: 5505 -1442: 5907 -1443: 688 -1444: -3522 -1445: 4187 -1446: -7131 -1447: 1588 -1448: 2094 -1449: 8427 -1450: -2775 -1451: 7475 -1452: 6305 -1453: -4896 -1454: -4836 -1455: -4762 -1456: -3698 -1457: 8897 -1458: 5459 -1459: -6958 -1460: 774 -1461: -186 -1462: -5662 -1463: 6300 -1464: 4292 -1465: -4250 -1466: 6768 -1467: 4 -1468: -3989 -1469: -4232 -1470: -9421 -1471: 9062 -1472: 466 -1473: 483 -1474: 7154 -1475: -2420 -1476: 4099 -1477: -4248 -1478: 8304 -1479: 7423 -1480: -5961 -1481: 4983 -1482: 1525 -1483: -9526 -1484: -3265 -1485: -9853 -1486: 7195 -1487: 6142 -1488: 2286 -1489: -3307 -1490: 7121 -1491: -3995 -1492: 4357 -1493: -3116 -1494: 2433 -1495: 7072 -1496: -7918 -1497: 5901 -1498: -8502 -1499: 2598 -1500: -1599 -1501: -2637 -1502: 3801 -1503: 882 -1504: -4174 -1505: -8921 -1506: 2029 -1507: 2292 -1508: -9329 -1509: -7522 -1510: 7295 -1511: -160 -1512: -2656 -1513: -2871 -1514: -4166 -1515: -6589 -1516: 6014 -1517: -8481 -1518: 5325 -1519: 8692 -1520: 6533 -1521: -8425 -1522: 6141 -1523: -2944 -1524: 469 -1525: 8165 -1526: 8615 -1527: -2137 -1528: 5494 -1529: 4006 -1530: -5415 -1531: 6768 -1532: -8496 -1533: -4865 -1534: -3511 -1535: 2631 -1536: -3418 -1537: 538 -1538: 6426 -1539: 9933 -1540: -552 -1541: 7214 -1542: -5060 -1543: 2102 -1544: 6675 -1545: -6488 -1546: -8038 -1547: -2833 -1548: -7944 -1549: 9574 -1550: -7942 -1551: 1998 -1552: -2827 -1553: -8079 -1554: -7614 -1555: 7510 -1556: -3171 -1557: -8393 -1558: 1557 -1559: 4046 -1560: -9368 -1561: 6600 -1562: -5896 -1563: 2896 -1564: 5250 -1565: -6563 -1566: 6383 -1567: -1798 -1568: -7459 -1569: 4647 -1570: -8361 -1571: -8645 -1572: -7645 -1573: 3 -1574: 6579 -1575: 6764 -1576: 4953 -1577: -7377 -1578: 170 -1579: 1963 -1580: -2572 -1581: 7195 -1582: 6219 -1583: 7385 -1584: -9677 -1585: -7666 -1586: 7314 -1587: -3577 -1588: -7333 -1589: -2509 -1590: 7295 -1591: 8710 -1592: -8858 -1593: -2943 -1594: 2186 -1595: -3166 -1596: 5494 -1597: 1766 -1598: 404 -1599: 2453 -1600: 1123 -1601: 6707 -1602: -2923 -1603: -2518 -1604: -2747 -1605: 6175 -1606: 1808 -1607: -7384 -1608: 4821 -1609: 6399 -1610: 7419 -1611: -5184 -1612: 1121 -1613: 1409 -1614: -8844 -1615: 2082 -1616: -229 -1617: 5638 -1618: -3803 -1619: 1989 -1620: 1097 -1621: -3152 -1622: -8468 -1623: -6106 -1624: -9951 -1625: -305 -1626: -7409 -1627: -2651 -1628: 1870 -1629: 6383 -1630: 7779 -1631: -8531 -1632: 7314 -1633: -9466 -1634: 7073 -1635: -2513 -1636: -3868 -1637: 9402 -1638: -6926 -1639: -2396 -1640: 7619 -1641: -1113 -1642: 7259 -1643: -3120 -1644: -5185 -1645: -9278 -1646: -7507 -1647: -6122 -1648: -2667 -1649: 459 -1650: 3445 -1651: 5374 -1652: -6974 -1653: 1305 -1654: -3169 -1655: -9095 -1656: -5157 -1657: 7539 -1658: -8469 -1659: 6296 -1660: -2438 -1661: 3397 -1662: 5173 -1663: 9384 -1664: -8084 -1665: -2391 -1666: 1017 -1667: -4913 -1668: -8193 -1669: 4256 -1670: 811 -1671: 687 -1672: 2721 -1673: 4679 -1674: -3398 -1675: -5165 -1676: -7651 -1677: -2536 -1678: -4834 -1679: -2708 -1680: -2592 -1681: -9443 -1682: 1413 -1683: 5698 -1684: -2801 -1685: -5031 -1686: -4263 -1687: 4998 -1688: 4070 -1689: 7166 -1690: -7582 -1691: 9166 -1692: 8746 -1693: 1632 -1694: -7815 -1695: -4483 -1696: 393 -1697: 7350 -1698: 9234 -1699: -9256 -1700: -884 -1701: 6771 -1702: -2939 -1703: 2064 -1704: -1719 -1705: -2392 -1706: 2029 -1707: -2640 -1708: -3507 -1709: -2295 -1710: -6267 -1711: -2965 -1712: 5041 -1713: -1214 -1714: 7432 -1715: 855 -1716: -7719 -1717: 2361 -1718: 8810 -1719: -4734 -1720: -7468 -1721: -2302 -1722: -7589 -1723: -2612 -1724: 211 -1725: -8684 -1726: -1669 -1727: -8067 -1728: 6890 -1729: 3686 -1730: 8456 -1731: -3252 -1732: 9172 -1733: 6803 -1734: 5051 -1735: -3412 -1736: -7357 -1737: -2756 -1738: 757 -1739: -3088 -1740: 7506 -1741: -1142 -1742: 1766 -1743: 2152 -1744: 6583 -1745: -3622 -1746: 8419 -1747: -4083 -1748: 477 -1749: 8986 -1750: -7817 -1751: -3033 -1752: 5002 -1753: 2488 -1754: -1962 -1755: -7907 -1756: 8232 -1757: 713 -1758: -8035 -1759: -2838 -1760: 6877 -1761: 5487 -1762: -2495 -1763: -9539 -1764: -6813 -1765: 1350 -1766: 7642 -1767: 479 -1768: 1067 -1769: -9067 -1770: 7552 -1771: -4679 -1772: -7722 -1773: -5253 -1774: -2427 -1775: 1807 -1776: 3629 -1777: 7948 -1778: -4165 -1779: 3641 -1780: -8261 -1781: 8907 -1782: 7811 -1783: -8642 -1784: 6960 -1785: 9247 -1786: -3219 -1787: 7624 -1788: -8297 -1789: -7479 -1790: 757 -1791: 7805 -1792: 6040 -1793: -2477 -1794: 1637 -1795: -7957 -1796: -822 -1797: 2341 -1798: 2425 -1799: -6004 -1800: 9930 -1801: 2493 -1802: 5421 -1803: 8309 -1804: 4821 -1805: -2307 -1806: -2654 -1807: -2174 -1808: 2299 -1809: -7498 -1810: 2442 -1811: -8505 -1812: -7047 -1813: 7288 -1814: -1741 -1815: -4673 -1816: 9390 -1817: -7905 -1818: 1782 -1819: 458 -1820: -3237 -1821: -8017 -1822: 6600 -1823: 508 -1824: -7306 -1825: -3148 -1826: -2915 -1827: 2776 -1828: -7267 -1829: 2151 -1830: -4093 -1831: -2172 -1832: 1222 -1833: 7866 -1834: 8532 -1835: -1025 -1836: 7465 -1837: 6676 -1838: -7692 -1839: -3131 -1840: -7226 -1841: 6383 -1842: 9609 -1843: -3457 -1844: 2449 -1845: 288 -1846: 2179 -1847: -1197 -1848: -8778 -1849: -2951 -1850: 1267 -1851: -8444 -1852: -7723 -1853: 4502 -1854: 2903 -1855: -9951 -1856: 7306 -1857: 9705 -1858: 3746 -1859: 3771 -1860: 8222 -1861: -5498 -1862: 6363 -1863: -4008 -1864: -4749 -1865: 7655 -1866: 2686 -1867: -7658 -1868: 7811 -1869: -8773 -1870: 4669 -1871: -4774 -1872: 4958 -1873: 173 -1874: -603 -1875: -6175 -1876: 86 -1877: 8138 -1878: -2060 -1879: 9371 -1880: -8017 -1881: 5179 -1882: -5355 -1883: -451 -1884: -7318 -1885: -7463 -1886: 7035 -1887: 6584 -1888: -7703 -1889: -7366 -1890: -8026 -1891: 2907 -1892: -5176 -1893: 977 -1894: -8042 -1895: -8029 -1896: -3463 -1897: 6175 -1898: 5805 -1899: -2951 -1900: -2207 -1901: 4840 -1902: 2407 -1903: 7512 -1904: -9487 -1905: -5661 -1906: 4326 -1907: -4285 -1908: 3590 -1909: 6690 -1910: 2836 -1911: -6686 -1912: -6678 -1913: 7807 -1914: -4008 -1915: -2368 -1916: 5506 -1917: 1525 -1918: -7166 -1919: 1636 -1920: 6681 -1921: -583 -1922: 857 -1923: -7925 -1924: 3247 -1925: 4374 -1926: -7747 -1927: -225 -1928: 8522 -1929: 701 -1930: -5555 -1931: -2705 -1932: 6492 -1933: -3537 -1934: -5780 -1935: 7949 -1936: -2157 -1937: -7439 -1938: 2853 -1939: -5147 -1940: -9423 -1941: 9367 -1942: 2949 -1943: -7194 -1944: -2446 -1945: 706 -1946: -6716 -1947: 1490 -1948: -6385 -1949: -6067 -1950: 9194 -1951: 8491 -1952: 7015 -1953: 9466 -1954: 7879 -1955: -6413 -1956: -8808 -1957: 1230 -1958: -8143 -1959: 5575 -1960: -9142 -1961: 713 -1962: 6363 -1963: 8020 -1964: -5183 -1965: 4909 -1966: -2804 -1967: -9256 -1968: 7216 -1969: 7907 -1970: 6918 -1971: 4812 -1972: -3252 -1973: 5081 -1974: -4618 -1975: 6342 -1976: -3209 -1977: -8022 -1978: 7949 -1979: 292 -1980: -2055 -1981: 9023 -1982: 5439 -1983: 4228 -1984: -3507 -1985: -1708 -1986: 961 -1987: -9856 -1988: 2126 -1989: -391 -1990: 2630 -1991: -5120 -1992: 7693 -1993: 637 -1994: -3848 -1995: -2159 -1996: 318 -1997: -8179 -1998: -7959 -1999: -9729 -2000: 1267 -2001: 7339 -2002: 7613 -2003: -6704 -2004: -3266 -2005: -7703 -2006: 6678 -2007: -7600 -2008: -7116 -2009: -2333 -2010: 8165 -2011: -9651 -2012: 6604 -2013: 3994 -2014: 2877 -2015: -2586 -2016: 2388 -2017: -4618 -2018: -8208 -2019: 8737 -2020: -4557 -2021: 7292 -2022: -791 -2023: 8142 -2024: 482 -2025: -2635 -2026: 8574 -2027: -3846 -2028: 4199 -2029: 2718 -2030: -7108 -2031: 7667 -2032: -7165 -2033: 1888 -2034: 5041 -2035: -1604 -2036: 4583 -2037: -7209 -2038: 2449 -2039: -7550 -2040: 6078 -2041: 3767 -2042: 7882 -2043: -7194 -2044: 5610 -2045: 7766 -2046: -2979 -2047: 3460 -2048: 2838 -2049: 9615 -2050: -2679 -2051: -2708 -2052: 4038 -2053: -5302 -2054: -7793 -2055: -7136 -2056: -7164 -2057: -7438 -2058: -7972 -2059: 9803 -2060: 7151 -2061: -7441 -2062: -5942 -2063: 7760 -2064: 7347 -2065: -2385 -2066: -9877 -2067: 7853 -2068: -8536 -2069: -1959 -2070: -865 -2071: -1352 -2072: 666 -2073: 5175 -2074: -2009 -2075: -6385 -2076: 7450 -2077: 7811 -2078: 2190 -2079: 7487 -2080: -5319 -2081: -5178 -2082: 1220 -2083: 3908 -2084: 1091 -2085: 6092 -2086: -4465 -2087: -3300 -2088: -8340 -2089: -7248 -2090: -8398 -2091: 5515 -2092: -7292 -2093: 2209 -2094: -6459 -2095: -8017 -2096: -1943 -2097: -8903 -2098: -92 -2099: 459 -2100: -3173 -2101: -4831 -2102: -2354 -2103: -7752 -2104: -2751 -2105: 2064 -2106: -3388 -2107: -2337 -2108: 9965 -2109: -1450 -2110: 1770 -2111: -9615 -2112: -7049 -2113: -1292 -2114: -9100 -2115: -7033 -2116: -6998 -2117: -2242 -2118: -889 -2119: 3390 -2120: 4648 -2121: 6632 -2122: 2427 -2123: -4770 -2124: 4315 -2125: -7510 -2126: 7063 -2127: -6905 -2128: -2021 -2129: -8144 -2130: 7649 -2131: 8040 -2132: -7470 -2133: 5513 -2134: 2398 -2135: -7049 -2136: 3787 -2137: -5168 -2138: 2619 -2139: -844 -2140: -2487 -2141: 150 -2142: 3141 -2143: -9095 -2144: 1350 -2145: -4996 -2146: -7049 -2147: 5969 -2148: 894 -2149: -7905 -2150: 4340 -2151: -2728 -2152: -6252 -2153: 7358 -2154: 6774 -2155: 1731 -2156: -7052 -2157: -7669 -2158: 7506 -2159: -2536 -2160: -5869 -2161: -2635 -2162: -7204 -2163: 5969 -2164: -9601 -2165: 6829 -2166: 1998 -2167: -4158 -2168: 2241 -2169: 9275 -2170: 1267 -2171: -8728 -2172: 2837 -2173: -1752 -2174: 1238 -2175: -4654 -2176: 2517 -2177: 2528 -2178: 7803 -2179: 2093 -2180: 2632 -2181: 776 -2182: -7167 -2183: -2232 -2184: -2658 -2185: 9926 -2186: 2432 -2187: -6925 -2188: 9883 -2189: -2055 -2190: 5959 -2191: 1435 -2192: -9112 -2193: -7944 -2194: -1899 -2195: -4280 -2196: -2521 -2197: -7258 -2198: 1766 -2199: -3520 -2200: -2058 -2201: 3145 -2202: -9538 -2203: 7747 -2204: -3279 -2205: 5405 -2206: -2261 -2207: -496 -2208: -5143 -2209: 1869 -2210: 8089 -2211: -6650 -2212: -2838 -2213: 6523 -2214: 6492 -2215: 7640 -2216: -2363 -2217: 1491 -2218: -310 -2219: -85 -2220: -2157 -2221: 2399 -2222: 2312 -2223: -7478 -2224: 9031 -2225: -6 -2226: 9688 -2227: 9863 -2228: -568 -2229: -2293 -2230: 2291 -2231: -7014 -2232: 612 -2233: -5183 -2234: 9438 -2235: -9967 -2236: -1982 -2237: -6896 -2238: -2897 -2239: 8159 -2240: -1994 -2241: -2096 -2242: -3358 -2243: 7897 -2244: 8872 -2245: -7664 -2246: 6078 -2247: 8629 -2248: 1943 -2249: -4815 -2250: 8469 -2251: 4708 -2252: 7432 -2253: -1631 -2254: 9374 -2255: 8093 -2256: 8063 -2257: -2385 -2258: 6524 -2259: -2153 -2260: 6209 -2261: -3966 -2262: 7279 -2263: -5706 -2264: 3546 -2265: 7801 -2266: -3756 -2267: 4448 -2268: 2619 -2269: 9421 -2270: 9856 -2271: -7779 -2272: -3457 -2273: 704 -2274: -7439 -2275: -2838 -2276: -3598 -2277: 7185 -2278: 7168 -2279: 3048 -2280: 3216 -2281: 2945 -2282: 8032 -2283: -2058 -2284: 8197 -2285: -2738 -2286: -2040 -2287: 7613 -2288: 1885 -2289: 6060 -2290: 4302 -2291: -1865 -2292: 9411 -2293: -2653 -2294: 1929 -2295: 7501 -2296: -7514 -2297: -7743 -2298: 2155 -2299: 9510 -2300: -1784 -2301: -1320 -2302: -9128 -2303: -8928 -2304: -6193 -2305: -2329 -2306: -7667 -2307: 2167 -2308: -3676 -2309: 7359 -2310: -4141 -2311: -925 -2312: 8589 -2313: 8305 -2314: 3546 -2315: 6572 -2316: -9803 -2317: -7027 -2318: 1103 -2319: 7662 -2320: 7662 -2321: -5161 -2322: 2303 -2323: 9685 -2324: -7003 -2325: 9841 -2326: -1092 -2327: -1020 -2328: -7750 -2329: -6794 -2330: -8085 -2331: -7680 -2332: -4516 -2333: 1265 -2334: 8834 -2335: -7959 -2336: -2711 -2337: 8912 -2338: -7075 -2339: -2636 -2340: -7440 -2341: 5959 -2342: -9541 -2343: 4569 -2344: 7077 -2345: 9196 -2346: 7113 -2347: -9438 -2348: -8141 -2349: -2871 -2350: 662 -2351: -6916 -2352: -7058 -2353: -8156 -2354: 8073 -2355: 2744 -2356: 4024 -2357: 5554 -2358: -8630 -2359: -8525 -2360: -6201 -2361: 5983 -2362: -9561 -2363: 7436 -2364: -9080 -2365: 6751 -2366: 8995 -2367: 4020 -2368: 2231 -2369: 4269 -2370: -2857 -2371: -6998 -2372: -6728 -2373: -1788 -2374: -8252 -2375: 8176 -2376: 2562 -2377: 2848 -2378: 5519 -2379: -3482 -2380: 755 -2381: 9421 -2382: -3289 -2383: 7608 -2384: 2619 -2385: -4852 -2386: -1766 -2387: -760 -2388: 3723 -2389: -6606 -2390: 3839 -2391: 8801 -2392: 7900 -2393: 2319 -2394: 3196 -2395: 5391 -2396: 1281 -2397: 7945 -2398: 7847 -2399: -1876 -2400: -2756 -2401: -6861 -2402: -3292 -2403: 6365 -2404: 4913 -2405: -2438 -2406: 5659 -2407: 4868 -2408: -1723 -2409: -4417 -2410: 155 -2411: -5069 -2412: 2473 -2413: 7664 -2414: 3247 -2415: 8916 -2416: -2005 -2417: -8616 -2418: -5757 -2419: 1854 -2420: -7286 -2421: 1988 -2422: 8125 -2423: -4824 -2424: 2712 -2425: 7127 -2426: -1550 -2427: -9192 -2428: -7086 -2429: -725 -2430: 7529 -2431: -4525 -2432: -7654 -2433: 6363 -2434: 2298 -2435: -1924 -2436: -6838 -2437: -5610 -2438: 539 -2439: -6004 -2440: -1398 -2441: -2266 -2442: 8817 -2443: 4515 -2444: 2562 -2445: -2345 -2446: -3138 -2447: -8724 -2448: -6790 -2449: 6742 -2450: -4042 -2451: 1247 -2452: 9989 -2453: -1202 -2454: 7647 -2455: 2019 -2456: -1960 -2457: -6450 -2458: -9146 -2459: -8164 -2460: -6676 -2461: -6701 -2462: -3204 -2463: 3011 -2464: -6948 -2465: -2325 -2466: -6769 -2467: 1693 -2468: -8289 -2469: 2670 -2470: -7519 -2471: 4920 -2472: 571 -2473: 6748 -2474: 2191 -2475: -4567 -2476: 3117 -2477: 3085 -2478: -2285 -2479: 3659 -2480: -970 -2481: -2965 -2482: 3173 -2483: -8281 -2484: 2315 -2485: 8182 -2486: 8195 -2487: -7530 -2488: -4155 -2489: -2161 -2490: 3049 -2491: -9421 -2492: -2376 -2493: 1912 -2494: -802 -2495: -5634 -2496: 6748 -2497: -7033 -2498: 9658 -2499: 7226 -2500: -6955 -2501: -7007 -2502: 5425 -2503: 1890 -2504: -6958 -2505: -8758 -2506: 5338 -2507: -6630 -2508: 3309 -2509: 2004 -2510: 5812 -2511: -3760 -2512: 9087 -2513: -3025 -2514: 7412 -2515: -6237 -2516: 8165 -2517: 1705 -2518: -4517 -2519: -1835 -2520: 3768 -2521: -9731 -2522: -3958 -2523: 3171 -2524: 1433 -2525: -7055 -2526: -6404 -2527: -2203 -2528: -8164 -2529: -2679 -2530: -7139 -2531: 2351 -2532: 76 -2533: 9023 -2534: -3733 -2535: -3201 -2536: 9408 -2537: -6692 -2538: -8858 -2539: 5575 -2540: 7739 -2541: 5456 -2542: -2143 -2543: 7461 -2544: 8293 -2545: -4272 -2546: 8381 -2547: -4602 -2548: -8393 -2549: -2624 -2550: -2273 -2551: 7610 -2552: 7822 -2553: -1336 -2554: -1632 -2555: -1725 -2556: 5495 -2557: -3423 -2558: 7650 -2559: -6824 -2560: -7377 -2561: 8084 -2562: -2534 -2563: 5106 -2564: -5312 -2565: -3186 -2566: 7251 -2567: -1637 -2568: 7309 -2569: 7016 -2570: 1554 -2571: 1028 -2572: 1308 -2573: 6958 -2574: 7709 -2575: -1861 -2576: -6749 -2577: -225 -2578: -6441 -2579: -7027 -2580: -7560 -2581: 2433 -2582: -5228 -2583: -8837 -2584: 7714 -2585: 8349 -2586: -8987 -2587: 9961 -2588: 1821 -2589: 2913 -2590: -2434 -2591: 8148 -2592: 8289 -2593: 4035 -2594: -9596 -2595: 4844 -2596: 1214 -2597: -7267 -2598: 7098 -2599: -2107 -2600: -379 -2601: -2009 -2602: -1408 -2603: -7509 -2604: 8538 -2605: -8544 -2606: 1574 -2607: 7145 -2608: 8410 -2609: 8151 -2610: 9240 -2611: -9099 -2612: 4828 -2613: -3608 -2614: -7777 -2615: 2598 -2616: 7948 -2617: -6813 -2618: -8549 -2619: 6158 -2620: -3424 -2621: -9100 -2622: 4723 -2623: 2877 -2624: -1660 -2625: 9824 -2626: -7771 -2627: -5072 -2628: -9272 -2629: 5489 -2630: 1112 -2631: -7408 -2632: -6824 -2633: -2203 -2634: 8293 -2635: -2850 -2636: 8986 -2637: -7295 -2638: -2412 -2639: -6424 -2640: 6718 -2641: 1557 -2642: -1792 -2643: -8865 -2644: 1635 -2645: 5554 -2646: 6331 -2647: 8868 -2648: 9887 -2649: 1753 -2650: 8098 -2651: -1875 -2652: 2339 -2653: -1694 -2654: -6184 -2655: 2399 -2656: 8453 -2657: 2037 -2658: 228 -2659: -9288 -2660: -2642 -2661: 9113 -2662: 5630 -2663: 8146 -2664: 1393 -2665: -6126 -2666: 2799 -2667: 2720 -2668: 3137 -2669: 3212 -2670: 5506 -2671: 1043 -2672: -4951 -2673: -7553 -2674: 7844 -2675: 3106 -2676: -9711 -2677: -1483 -2678: -704 -2679: 3216 -2680: 2772 -2681: -6751 -2682: -1733 -2683: -9580 -2684: -8369 -2685: -8554 -2686: 3415 -2687: -3698 -2688: 3309 -2689: 5198 -2690: -1982 -2691: -7152 -2692: 6600 -2693: -2061 -2694: -1950 -2695: -9837 -2696: 634 -2697: 9576 -2698: -6777 -2699: 1482 -2700: -5822 -2701: -2241 -2702: -3574 -2703: -7007 -2704: -9026 -2705: 4269 -2706: -993 -2707: 98 -2708: -2078 -2709: 2808 -2710: 2762 -2711: 8818 -2712: 3916 -2713: 4829 -2714: 7845 -2715: -7985 -2716: -2252 -2717: 3950 -2718: 5837 -2719: 7078 -2720: -3614 -2721: 3447 -2722: -6515 -2723: -9256 -2724: 9198 -2725: 9877 -2726: 5101 -2727: -8398 -2728: 3439 -2729: 5173 -2730: 3321 -2731: -2392 -2732: -6948 -2733: -9276 -2734: 3867 -2735: 1335 -2736: -7234 -2737: 3480 -2738: -3734 -2739: -6698 -2740: 483 -2741: 7814 -2742: -8067 -2743: 4668 -2744: -8269 -2745: -6972 -2746: 5747 -2747: -1766 -2748: 5627 -2749: 6846 -2750: -7409 -2751: 111 -2752: -7337 -2753: -8872 -2754: 3210 -2755: -9729 -2756: 2433 -2757: 9397 -2758: -6143 -2759: 5706 -2760: -8854 -2761: -8126 -2762: -2923 -2763: 3149 -2764: -987 -2765: -4351 -2766: -1940 -2767: -2158 -2768: 3533 -2769: -7075 -2770: -516 -2771: 3301 -2772: -4762 -2773: -4113 -2774: 7926 -2775: -7052 -2776: 8503 -2777: -352 -2778: 8471 -2779: -3286 -2780: -6657 -2781: 7779 -2782: 8447 -2783: 3420 -2784: -1480 -2785: -4306 -2786: -2121 -2787: -4702 -2788: -4888 -2789: 8561 -2790: 2229 -2791: -9855 -2792: 779 -2793: -6614 -2794: 8396 -2795: 576 -2796: 7845 -2797: 6016 -2798: 5984 -2799: 3425 -2800: -6721 -2801: -6940 -2802: -4082 -2803: -1537 -2804: -5091 -2805: 3533 -2806: -6439 -2807: 3389 -2808: 1720 -2809: -3564 -2810: 6289 -2811: -7030 -2812: -6962 -2813: 4260 -2814: -7102 -2815: 5316 -2816: 109 -2817: -3947 -2818: 3425 -2819: -264 -2820: 7840 -2821: 7809 -2822: 747 -2823: 1986 -2824: 1488 -2825: -4469 -2826: 6389 -2827: -8281 -2828: -1982 -2829: 664 -2830: 662 -2831: -1430 -2832: 1821 -2833: -1825 -2834: -7030 -2835: 6813 -2836: -7040 -2837: -9313 -2838: 7840 -2839: 9824 -2840: 7916 -2841: 3513 -2842: -4861 -2843: -239 -2844: -6055 -2845: -6269 -2846: 7675 -2847: 3397 -2848: -6584 -2849: -3169 -2850: -2850 -2851: -6367 -2852: 2037 -2853: -6550 -2854: -9422 -2855: -289 -2856: -8151 -2857: 4140 -2858: 6323 -2859: 8033 -2860: -1214 -2861: 3370 -2862: -6737 -2863: 3659 -2864: 8734 -2865: 4534 -2866: 8433 -2867: 3120 -2868: -7586 -2869: -8699 -2870: -6863 -2871: -2009 -2872: -3061 -2873: 3227 -2874: 3268 -2875: 1230 -2876: -1328 -2877: -5177 -2878: -3850 -2879: 9805 -2880: 1435 -2881: -2477 -2882: 2629 -2883: 78 -2884: -1723 -2885: -6739 -2886: 1606 -2887: -8957 -2888: 5885 -2889: 1454 -2890: -8572 -2891: 357 -2892: 4598 -2893: 9965 -2894: -6947 -2895: 2046 -2896: 3769 -2897: -8592 -2898: -2534 -2899: 7385 -2900: -1529 -2901: 9475 -2902: 6331 -2903: 1428 -2904: 8625 -2905: -7284 -2906: 9165 -2907: -9342 -2908: 1683 -2909: -7058 -2910: -2671 -2911: 7148 -2912: 5287 -2913: -6569 -2914: -2828 -2915: -1206 -2916: 6897 -2917: -6756 -2918: 8250 -2919: 1005 -2920: 3583 -2921: -3003 -2922: -1695 -2923: 8919 -2924: -3164 -2925: -2996 -2926: 4323 -2927: 6012 -2928: -1531 -2929: -4643 -2930: -9176 -2931: -1460 -2932: -1954 -2933: -1773 -2934: -490 -2935: 9920 -2936: 5325 -2937: -5016 -2938: 2520 -2939: 7349 -2940: -8135 -2941: 3404 -2942: 2089 -2943: -2416 -2944: 8349 -2945: 6960 -2946: -6704 -2947: -9367 -2948: 3604 -2949: 6427 -2950: -6360 -2951: 6256 -2952: 8543 -2953: -2161 -2954: -4143 -2955: 4147 -2956: -6987 -2957: 4424 -2958: -9848 -2959: 6142 -2960: -6882 -2961: 8596 -2962: 4744 -2963: 2006 -2964: -6374 -2965: 4038 -2966: 2301 -2967: -9528 -2968: -6610 -2969: 6904 -2970: 3645 -2971: 7178 -2972: 3129 -2973: 4413 -2974: -1632 -2975: 5566 -2976: -6985 -2977: 5103 -2978: 4172 -2979: -6883 -2980: 940 -2981: -3306 -2982: -9623 -2983: 8172 -2984: -3315 -2985: -3437 -2986: 9980 -2987: -2881 -2988: -8544 -2989: -6384 -2990: -1348 -2991: 5571 -2992: 6249 -2993: 7465 -2994: -7521 -2995: -8897 -2996: -1664 -2997: 6704 -2998: 3098 -2999: -9194 -3000: 6623 -3001: 3671 -3002: 6783 -3003: -1940 -3004: 7066 -3005: -1808 -3006: 1930 -3007: -6470 -3008: -2401 -3009: -8621 -3010: -8535 -3011: -6338 -3012: 2139 -3013: -7853 -3014: 8295 -3015: -2385 -3016: 3495 -3017: -1792 -3018: 7117 -3019: 3359 -3020: -5101 -3021: 7675 -3022: 5483 -3023: -1762 -3024: 576 -3025: 6677 -3026: 9475 -3027: -2841 -3028: 8304 -3029: -1238 -3030: -6646 -3031: 9797 -3032: 6352 -3033: 1221 -3034: 8213 -3035: -5699 -3036: 8170 -3037: -1615 -3038: -8793 -3039: -1323 -3040: -8816 -3041: -2532 -3042: 3335 -3043: -8874 -3044: -6526 -3045: 3681 -3046: 3994 -3047: -4988 -3048: -839 -3049: -4176 -3050: 1356 -3051: -8078 -3052: 3660 -3053: -1895 -3054: -3210 -3055: 6068 -3056: 9826 -3057: 7683 -3058: 924 -3059: -2157 -3060: 8159 -3061: -1042 -3062: -8446 -3063: -8473 -3064: 2337 -3065: 6978 -3066: 3134 -3067: -6672 -3068: 2404 -3069: -2271 -3070: 9979 -3071: 3473 -3072: 5403 -3073: 3463 -3074: 7906 -3075: -2573 -3076: 3381 -3077: -6697 -3078: -2691 -3079: 8692 -3080: -1160 -3081: -7167 -3082: 3544 -3083: 5041 -3084: 7259 -3085: 5036 -3086: -5591 -3087: -440 -3088: -6439 -3089: 5247 -3090: -2910 -3091: 1731 -3092: -1463 -3093: 3193 -3094: -4159 -3095: 9173 -3096: -3457 -3097: -5377 -3098: -2801 -3099: -7838 -3100: -7344 -3101: -3990 -3102: -134 -3103: 4038 -3104: 5212 -3105: -3931 -3106: 7358 -3107: 7739 -3108: 3659 -3109: 4587 -3110: 3571 -3111: -2497 -3112: -6330 -3113: 3117 -3114: -2153 -3115: 8553 -3116: -1529 -3117: -8285 -3118: 3216 -3119: -8366 -3120: -6213 -3121: 3469 -3122: 2160 -3123: 4038 -3124: -7907 -3125: -4605 -3126: 3213 -3127: -6563 -3128: -2686 -3129: 1340 -3130: 4583 -3131: -2576 -3132: 3430 -3133: 2307 -3134: 8585 -3135: -8150 -3136: 6604 -3137: -513 -3138: -81 -3139: -7877 -3140: -9638 -3141: 7230 -3142: -6879 -3143: -5103 -3144: 7560 -3145: -5351 -3146: -7226 -3147: 1753 -3148: 3247 -3149: -8837 -3150: -2670 -3151: -1202 -3152: 1234 -3153: 1027 -3154: -3726 -3155: -7403 -3156: 8417 -3157: 9864 -3158: 2004 -3159: -8067 -3160: 8457 -3161: 8717 -3162: 3425 -3163: 7262 -3164: -1214 -3165: -3425 -3166: 5750 -3167: 1011 -3168: 577 -3169: 9691 -3170: -1353 -3171: -15 -3172: -5473 -3173: 5828 -3174: 3385 -3175: 8302 -3176: -6269 -3177: -1801 -3178: -5993 -3179: 2061 -3180: 1853 -3181: 8408 -3182: -2718 -3183: -7843 -3184: 7850 -3185: 4782 -3186: 4410 -3187: -4702 -3188: 7580 -3189: -1996 -3190: -7696 -3191: -912 -3192: -4449 -3193: 2038 -3194: 2990 -3195: 6259 -3196: 8437 -3197: 2767 -3198: -5946 -3199: -588 -3200: 994 -3201: 5135 -3202: 9795 -3203: 7801 -3204: -1835 -3205: -7204 -3206: -33 -3207: -2203 -3208: -1334 -3209: -9768 -3210: -2159 -3211: 4363 -3212: -6793 -3213: -6027 -3214: 3496 -3215: -6060 -3216: 8176 -3217: -6466 -3218: -9856 -3219: 9524 -3220: -6240 -3221: 7572 -3222: 4798 -3223: -1206 -3224: -7557 -3225: -160 -3226: 8725 -3227: 9943 -3228: -1430 -3229: -3176 -3230: -5846 -3231: 4534 -3232: -7755 -3233: 3090 -3234: -1669 -3235: 678 -3236: -1378 -3237: 566 -3238: 7877 -3239: 2907 -3240: -2083 -3241: -5422 -3242: -2817 -3243: -9795 -3244: -7983 -3245: -6599 -3246: -309 -3247: -6203 -3248: -6560 -3249: -6250 -3250: 5403 -3251: 2505 -3252: 5246 -3253: -6678 -3254: 3374 -3255: -7180 -3256: 8870 -3257: 8795 -3258: 8799 -3259: 6185 -3260: 7383 -3261: -5783 -3262: 3301 -3263: -1828 -3264: -2089 -3265: -6824 -3266: 2906 -3267: -7960 -3268: -1495 -3269: -3819 -3270: -9910 -3271: -9066 -3272: -373 -3273: -7026 -3274: -9023 -3275: 5101 -3276: 1554 -3277: -4083 -3278: 5182 -3279: 7407 -3280: -1516 -3281: -7384 -3282: 2913 -3283: -6298 -3284: -6303 -3285: -6095 -3286: -3089 -3287: -7371 -3288: -1671 -3289: 3848 -3290: 7399 -3291: 3907 -3292: 2492 -3293: 6639 -3294: 1989 -3295: -2392 -3296: -5272 -3297: 3671 -3298: -9859 -3299: -1426 -3300: 8727 -3301: -3458 -3302: -4924 -3303: 8799 -3304: 333 -3305: -2392 -3306: 8447 -3307: -2434 -3308: 5343 -3309: -8227 -3310: 3786 -3311: 666 -3312: 6276 -3313: 1879 -3314: -6913 -3315: 5117 -3316: 6199 -3317: -5489 -3318: -7464 -3319: 5461 -3320: -2025 -3321: -1955 -3322: 1275 -3323: 3643 -3324: 4003 -3325: -9381 -3326: 3467 -3327: -3428 -3328: 5613 -3329: 20 -3330: 9023 -3331: -4574 -3332: -269 -3333: 7178 -3334: -9796 -3335: -7437 -3336: 1673 -3337: -3909 -3338: -3109 -3339: -1207 -3340: 8262 -3341: 8852 -3342: -3740 -3343: -8350 -3344: -3383 -3345: -8812 -3346: -8042 -3347: 6206 -3348: 3090 -3349: 2448 -3350: 5233 -3351: -1687 -3352: 7254 -3353: -8755 -3354: -6082 -3355: 9603 -3356: 8868 -3357: 6299 -3358: -6736 -3359: 3569 -3360: -1958 -3361: 8699 -3362: 5944 -3363: -6043 -3364: 1632 -3365: 5065 -3366: 2042 -3367: 2298 -3368: 6267 -3369: 3863 -3370: -9 -3371: 6945 -3372: 891 -3373: -6126 -3374: 2033 -3375: -2271 -3376: 3498 -3377: -7614 -3378: -2782 -3379: 3430 -3380: -2389 -3381: -1774 -3382: -1800 -3383: 3615 -3384: -6695 -3385: -1571 -3386: 2548 -3387: -5238 -3388: -8719 -3389: -5223 -3390: 2488 -3391: -6635 -3392: -6443 -3393: 2457 -3394: 1929 -3395: 9522 -3396: 7076 -3397: 8480 -3398: -6335 -3399: 3851 -3400: 5421 -3401: 4089 -3402: 2703 -3403: 7949 -3404: 7297 -3405: 3115 -3406: 763 -3407: -505 -3408: 2879 -3409: -1348 -3410: 7261 -3411: -1514 -3412: -3088 -3413: 3356 -3414: 1988 -3415: -8676 -3416: 5177 -3417: -7585 -3418: 7259 -3419: -6360 -3420: -5595 -3421: 3495 -3422: 827 -3423: -6711 -3424: 6155 -3425: 1704 -3426: -7149 -3427: -6525 -3428: -2080 -3429: -1365 -3430: 8974 -3431: -8547 -3432: -2747 -3433: 546 -3434: 5225 -3435: -1214 -3436: -3852 -3437: 6896 -3438: 8611 -3439: 8192 -3440: -1352 -3441: 2718 -3442: -9967 -3443: -3123 -3444: 3053 -3445: -6099 -3446: -430 -3447: -4513 -3448: 6677 -3449: 8911 -3450: -1466 -3451: 9049 -3452: 5513 -3453: 8535 -3454: -8350 -3455: 228 -3456: -5984 -3457: 2675 -3458: -6672 -3459: -5060 -3460: -3965 -3461: -6618 -3462: 3129 -3463: -380 -3464: 2590 -3465: -6237 -3466: -6109 -3467: -6241 -3468: -1579 -3469: -5994 -3470: -2651 -3471: 6620 -3472: -1011 -3473: 2877 -3474: -1622 -3475: -3710 -3476: 6652 -3477: -2396 -3478: -5022 -3479: 3324 -3480: 8450 -3481: 8721 -3482: 9032 -3483: 7741 -3484: -1377 -3485: 8479 -3486: -2585 -3487: 2591 -3488: -6088 -3489: -3868 -3490: 1249 -3491: 4308 -3492: -1269 -3493: -956 -3494: -9663 -3495: 6514 -3496: 4020 -3497: 8588 -3498: -6877 -3499: 3381 -3500: -6297 -3501: -6037 -3502: 7897 -3503: -7338 -3504: 1793 -3505: 3502 -3506: 4042 -3507: -2571 -3508: -1156 -3509: -4370 -3510: -3463 -3511: -6361 -3512: -8886 -3513: 8556 -3514: 7423 -3515: -7375 -3516: -2241 -3517: -1042 -3518: 8810 -3519: 8289 -3520: -1963 -3521: 4567 -3522: -7902 -3523: -4951 -3524: -2923 -3525: -6321 -3526: 6036 -3527: 86 -3528: 5627 -3529: 3753 -3530: 7610 -3531: -9477 -3532: -2266 -3533: 8917 -3534: -6109 -3535: -7530 -3536: -9450 -3537: -5360 -3538: -4818 -3539: -5127 -3540: -7408 -3541: -4940 -3542: 5410 -3543: 7346 -3544: -6043 -3545: 1664 -3546: 9031 -3547: -4938 -3548: -6113 -3549: 961 -3550: 7683 -3551: 5025 -3552: -8304 -3553: 3768 -3554: 8955 -3555: 3835 -3556: -6148 -3557: 3712 -3558: -995 -3559: 9928 -3560: -6967 -3561: -6347 -3562: -3594 -3563: 8413 -3564: -1160 -3565: -4993 -3566: 8570 -3567: -6042 -3568: 8593 -3569: -2686 -3570: -225 -3571: -6338 -3572: 2388 -3573: 3540 -3574: 5658 -3575: -2293 -3576: 5094 -3577: 2410 -3578: -4149 -3579: -9274 -3580: 1080 -3581: -4126 -3582: -6367 -3583: -3238 -3584: 2877 -3585: 1362 -3586: -7052 -3587: -4875 -3588: -2667 -3589: 840 -3590: 9108 -3591: -6704 -3592: -6162 -3593: 6557 -3594: -4630 -3595: 8446 -3596: 7011 -3597: 8006 -3598: -4980 -3599: -5557 -3600: 643 -3601: -1199 -3602: -2401 -3603: 6853 -3604: -6922 -3605: 1804 -3606: -3550 -3607: 3632 -3608: 3473 -3609: -6105 -3610: 7473 -3611: 5231 -3612: 3983 -3613: 1548 -3614: -1657 -3615: -9456 -3616: -7240 -3617: -1116 -3618: -1302 -3619: -6669 -3620: -5860 -3621: -9194 -3622: 2006 -3623: -1142 -3624: 9753 -3625: 6927 -3626: -4257 -3627: 5257 -3628: 1601 -3629: -2586 -3630: -1304 -3631: 8912 -3632: 2853 -3633: -5050 -3634: -5885 -3635: 9288 -3636: -4354 -3637: -1405 -3638: -6330 -3639: 7063 -3640: 7028 -3641: 3396 -3642: -6367 -3643: 4166 -3644: -6361 -3645: 5732 -3646: -7654 -3647: 2024 -3648: 4333 -3649: 7212 -3650: 4776 -3651: 2321 -3652: 8710 -3653: -4514 -3654: -8120 -3655: 4180 -3656: -3118 -3657: 8546 -3658: 6514 -3659: 3419 -3660: -2026 -3661: -6103 -3662: -6250 -3663: -4935 -3664: -7061 -3665: -9046 -3666: 4686 -3667: -9878 -3668: -6162 -3669: -1493 -3670: 7262 -3671: -819 -3672: -2883 -3673: 2756 -3674: -7415 -3675: 2449 -3676: -6004 -3677: 725 -3678: 9921 -3679: 7319 -3680: -445 -3681: 9726 -3682: -4548 -3683: -6486 -3684: 8692 -3685: 3153 -3686: -851 -3687: -8830 -3688: -6848 -3689: 4003 -3690: -4435 -3691: -6873 -3692: -8817 -3693: -4352 -3694: -4529 -3695: -8385 -3696: 2048 -3697: 2702 -3698: -2217 -3699: -7955 -3700: -2276 -3701: 30 -3702: 2978 -3703: 5820 -3704: 3792 -3705: -6166 -3706: 9196 -3707: 9224 -3708: 9010 -3709: -8620 -3710: -7501 -3711: -1689 -3712: 6515 -3713: 127 -3714: -1525 -3715: -1035 -3716: 1945 -3717: -1723 -3718: -1017 -3719: -9710 -3720: -7660 -3721: 2493 -3722: 3907 -3723: 7188 -3724: -9278 -3725: -2070 -3726: -1575 -3727: -9010 -3728: -819 -3729: 8397 -3730: -3462 -3731: -799 -3732: -1091 -3733: 4186 -3734: -6530 -3735: -5838 -3736: -3603 -3737: -3842 -3738: 8084 -3739: 4598 -3740: 7216 -3741: -868 -3742: 8746 -3743: 9266 -3744: -9732 -3745: 6353 -3746: -773 -3747: 3151 -3748: 7148 -3749: -3238 -3750: -4709 -3751: -2242 -3752: -6503 -3753: -6464 -3754: 1438 -3755: -6657 -3756: 2972 -3757: -8286 -3758: 7839 -3759: -7055 -3760: -8225 -3761: -3759 -3762: 8917 -3763: 7264 -3764: 4151 -3765: -8162 -3766: 8516 -3767: -6166 -3768: -6485 -3769: -8398 -3770: 7882 -3771: 4151 -3772: -761 -3773: -2330 -3774: -3166 -3775: 6276 -3776: -3762 -3777: 7461 -3778: -716 -3779: -6122 -3780: -9317 -3781: 8699 -3782: -788 -3783: -6238 -3784: -1835 -3785: -1017 -3786: 8783 -3787: -5012 -3788: -9009 -3789: -8257 -3790: 9906 -3791: 8675 -3792: 3467 -3793: 1051 -3794: 3709 -3795: -8676 -3796: -4 -3797: 9213 -3798: -4913 -3799: 2404 -3800: -9110 -3801: 7667 -3802: -7609 -3803: -2706 -3804: -5754 -3805: -3979 -3806: -1984 -3807: 9191 -3808: -716 -3809: -4573 -3810: -5774 -3811: 4721 -3812: 8721 -3813: 7270 -3814: -6854 -3815: -7397 -3816: 8974 -3817: 8241 -3818: 9146 -3819: 1598 -3820: 2047 -3821: 669 -3822: 109 -3823: 6918 -3824: 877 -3825: -1092 -3826: 2376 -3827: -1259 -3828: 30 -3829: 3467 -3830: 4211 -3831: 217 -3832: -7225 -3833: 9799 -3834: 4100 -3835: -5318 -3836: -8739 -3837: 4645 -3838: 6133 -3839: 9944 -3840: -7312 -3841: -2421 -3842: -7666 -3843: 9045 -3844: 2210 -3845: 9215 -3846: 4147 -3847: 878 -3848: 4785 -3849: 5269 -3850: 8070 -3851: -1247 -3852: 9727 -3853: -5866 -3854: 9296 -3855: 91 -3856: 5041 -3857: 5737 -3858: 4333 -3859: 4211 -3860: -5851 -3861: -5785 -3862: -3003 -3863: -3227 -3864: 4006 -3865: -5931 -3866: 6350 -3867: -7328 -3868: -5699 -3869: -3762 -3870: -1825 -3871: -1921 -3872: 3377 -3873: 3485 -3874: -5757 -3875: -5103 -3876: 3891 -3877: -3011 -3878: -6320 -3879: 9228 -3880: -446 -3881: 266 -3882: 867 -3883: -5333 -3884: -6162 -3885: -1097 -3886: -3586 -3887: -6023 -3888: 9214 -3889: 6379 -3890: 5405 -3891: 4782 -3892: -4655 -3893: -8868 -3894: -6837 -3895: 3736 -3896: 7089 -3897: 9307 -3898: -1726 -3899: 3328 -3900: 5378 -3901: 7882 -3902: -5060 -3903: 3536 -3904: -1448 -3905: -1456 -3906: -4051 -3907: 2307 -3908: 3964 -3909: 9072 -3910: 945 -3911: 7060 -3912: 1322 -3913: 8063 -3914: -1571 -3915: -617 -3916: 1473 -3917: 8868 -3918: 7644 -3919: 7642 -3920: -8260 -3921: -5942 -3922: 3268 -3923: 4549 -3924: 2940 -3925: 9394 -3926: 6994 -3927: 9275 -3928: 9939 -3929: -7373 -3930: -9555 -3931: 7845 -3932: 1061 -3933: -873 -3934: 5287 -3935: 3987 -3936: -5923 -3937: -5925 -3938: -1322 -3939: 3291 -3940: -7054 -3941: 9372 -3942: -5783 -3943: 5851 -3944: -1142 -3945: -1820 -3946: -5660 -3947: -390 -3948: -8366 -3949: -1283 -3950: -5720 -3951: -6387 -3952: -6247 -3953: -443 -3954: 9299 -3955: -6985 -3956: 4289 -3957: -6667 -3958: -1394 -3959: 7429 -3960: -7521 -3961: 1683 -3962: 7092 -3963: 6736 -3964: 3310 -3965: -4285 -3966: 474 -3967: -7962 -3968: 5837 -3969: 9332 -3970: 4095 -3971: -6863 -3972: 8064 -3973: 6147 -3974: 4013 -3975: 9326 -3976: 1693 -3977: 2411 -3978: -1010 -3979: 9100 -3980: 9130 -3981: -3028 -3982: 6623 -3983: 4374 -3984: 7969 -3985: 1548 -3986: -6376 -3987: -7118 -3988: 3137 -3989: 9272 -3990: -2445 -3991: 393 -3992: 7997 -3993: 9856 -3994: -5997 -3995: 2032 -3996: -8531 -3997: 1941 -3998: 6234 -3999: 767 -4000: -9727 -4001: 3173 -4002: -1139 -4003: 2716 -4004: -912 -4005: -6394 -4006: -3324 -4007: -2915 -4008: -559 -4009: 6003 -4010: 6071 -4011: -1647 -4012: -6668 -4013: -718 -4014: 6142 -4015: -6914 -4016: 8216 -4017: -2154 -4018: 9301 -4019: 6569 -4020: -1010 -4021: 8969 -4022: 9147 -4023: -9289 -4024: 8532 -4025: 1498 -4026: -5732 -4027: 3129 -4028: 9015 -4029: 7115 -4030: -530 -4031: -5650 -4032: -8425 -4033: -7269 -4034: 3916 -4035: 6228 -4036: 1556 -4037: 3398 -4038: 3499 -4039: -8084 -4040: -755 -4041: 7629 -4042: -9368 -4043: -5787 -4044: -4872 -4045: -5537 -4046: 3485 -4047: -884 -4048: 9288 -4049: 882 -4050: -581 -4051: 7866 -4052: -8611 -4053: -883 -4054: 3282 -4055: -5799 -4056: 5743 -4057: -2642 -4058: 6206 -4059: -9970 -4060: 4374 -4061: -6825 -4062: 7510 -4063: 4499 -4064: 8681 -4065: 5108 -4066: 4250 -4067: 6383 -4068: 9466 -4069: 576 -4070: 1887 -4071: -3258 -4072: 6168 -4073: -5867 -4074: 503 -4075: 4097 -4076: -1955 -4077: 7465 -4078: -5890 -4079: -1442 -4080: 3088 -4081: 2703 -4082: -5112 -4083: 3228 -4084: -3462 -4085: 8873 -4086: 3011 -4087: -2291 -4088: -2477 -4089: 3287 -4090: 9161 -4091: 9215 -4092: -4480 -4093: 3971 -4094: -6727 -4095: -6113 -4096: 9854 -4097: 6465 -4098: -2037 -4099: 5569 -4100: 3420 -4101: -5607 -4102: 1606 -4103: -4345 -4104: 50 -4105: 4918 -4106: -8406 -4107: -9050 -4108: -2645 -4109: -2060 -4110: -2741 -4111: -1765 -4112: 5741 -4113: -6215 -4114: 741 -4115: -6842 -4116: -6728 -4117: 8644 -4118: -516 -4119: 860 -4120: -9970 -4121: 1761 -4122: 7222 -4123: 6665 -4124: -8122 -4125: -5555 -4126: 4020 -4127: -6645 -4128: 717 -4129: -6439 -4130: 9151 -4131: 7436 -4132: 8992 -4133: 1546 -4134: 9130 -4135: -5138 -4136: -5694 -4137: 1027 -4138: -4951 -4139: 842 -4140: -531 -4141: 5138 -4142: 6423 -4143: -5994 -4144: 7255 -4145: -729 -4146: -5613 -4147: 4499 -4148: 6850 -4149: -5553 -4150: 9442 -4151: -1383 -4152: 9202 -4153: -5223 -4154: -6568 -4155: -1301 -4156: 1632 -4157: 8601 -4158: 855 -4159: -8771 -4160: 7436 -4161: 3171 -4162: 7258 -4163: -1342 -4164: 9382 -4165: -533 -4166: 9248 -4167: 6888 -4168: 3652 -4169: 4114 -4170: -8425 -4171: -5614 -4172: -6913 -4173: -3842 -4174: 2952 -4175: -9175 -4176: -4033 -4177: 4028 -4178: 9466 -4179: 9315 -4180: 7650 -4181: -559 -4182: 2186 -4183: 2341 -4184: 8437 -4185: -7419 -4186: 8710 -4187: 9518 -4188: 4322 -4189: 4694 -4190: -803 -4191: 5522 -4192: 9696 -4193: 3615 -4194: -552 -4195: 9367 -4196: -5634 -4197: 4435 -4198: -6109 -4199: 4969 -4200: 1831 -4201: -7086 -4202: -5717 -4203: 4410 -4204: -5301 -4205: -1257 -4206: 4537 -4207: 7182 -4208: 9476 -4209: 6198 -4210: 3360 -4211: 7324 -4212: -4130 -4213: -9630 -4214: -1508 -4215: 3247 -4216: -6645 -4217: -517 -4218: 3037 -4219: 8261 -4220: 4343 -4221: 8578 -4222: -1437 -4223: -2184 -4224: 9164 -4225: -895 -4226: -4162 -4227: 3693 -4228: 3447 -4229: 6452 -4230: 5474 -4231: 7967 -4232: 3579 -4233: -1363 -4234: 9469 -4235: 8434 -4236: 9602 -4237: -5646 -4238: 8955 -4239: 898 -4240: -7026 -4241: 7053 -4242: -6948 -4243: -8252 -4244: -9159 -4245: -2305 -4246: 4224 -4247: -6162 -4248: 5191 -4249: -3467 -4250: -5443 -4251: -8449 -4252: 9665 -4253: -3374 -4254: 4534 -4255: 6742 -4256: 8219 -4257: -1080 -4258: -2137 -4259: -456 -4260: 7035 -4261: 6962 -4262: 114 -4263: -827 -4264: 1097 -4265: 3645 -4266: 6078 -4267: 8950 -4268: -859 -4269: -489 -4270: -310 -4271: 7803 -4272: 6533 -4273: 3206 -4274: 6075 -4275: -1125 -4276: -5573 -4277: 4703 -4278: 9131 -4279: 4355 -4280: -5422 -4281: -9533 -4282: 9062 -4283: 9435 -4284: 4068 -4285: 4502 -4286: -6258 -4287: 4582 -4288: 3956 -4289: 5854 -4290: 1021 -4291: 5690 -4292: -7511 -4293: 302 -4294: 4551 -4295: -4778 -4296: -4888 -4297: 4431 -4298: -2039 -4299: -3612 -4300: -7955 -4301: 5141 -4302: 6566 -4303: -3855 -4304: -2923 -4305: 9600 -4306: 4821 -4307: -7047 -4308: 5025 -4309: -5419 -4310: 768 -4311: -5985 -4312: -4508 -4313: 8817 -4314: -8594 -4315: -6004 -4316: -526 -4317: -6439 -4318: 3236 -4319: 6568 -4320: -687 -4321: 1693 -4322: 3496 -4323: 2442 -4324: 4524 -4325: -2039 -4326: 9933 -4327: -2957 -4328: 3227 -4329: -6998 -4330: -7305 -4331: 7682 -4332: 1704 -4333: -2736 -4334: -845 -4335: -450 -4336: 4254 -4337: 5854 -4338: 110 -4339: 8433 -4340: 1491 -4341: 1058 -4342: 8911 -4343: -8108 -4344: -5377 -4345: -130 -4346: 6014 -4347: 5956 -4348: 4569 -4349: 5198 -4350: -1232 -4351: 4592 -4352: -2477 -4353: -8108 -4354: 8870 -4355: 9703 -4356: -7021 -4357: -2061 -4358: 7892 -4359: 867 -4360: -5630 -4361: -6776 -4362: 3733 -4363: -5381 -4364: 7462 -4365: 7840 -4366: -5319 -4367: -1260 -4368: -3703 -4369: 1778 -4370: -5355 -4371: 1623 -4372: -687 -4373: -4665 -4374: -5360 -4375: 9617 -4376: -4185 -4377: -2028 -4378: -1296 -4379: 3750 -4380: -1099 -4381: -3759 -4382: 1764 -4383: 9524 -4384: -5925 -4385: 9562 -4386: 1438 -4387: 473 -4388: -865 -4389: 3117 -4390: 4372 -4391: 5161 -4392: -5861 -4393: -3863 -4394: 2936 -4395: -7044 -4396: -9738 -4397: 8157 -4398: -3815 -4399: 8427 -4400: 5143 -4401: 7791 -4402: -7301 -4403: -4363 -4404: -9145 -4405: 2613 -4406: -343 -4407: 2315 -4408: -3562 -4409: -8024 -4410: -7339 -4411: 578 -4412: 8868 -4413: -1551 -4414: 7785 -4415: -613 -4416: -5774 -4417: 1673 -4418: 9267 -4419: 9610 -4420: -45 -4421: -5526 -4422: 4645 -4423: 2655 -4424: -4051 -4425: -5342 -4426: 8900 -4427: -291 -4428: -2028 -4429: 5066 -4430: -5341 -4431: 9617 -4432: 9216 -4433: -6824 -4434: 3606 -4435: -5706 -4436: 7704 -4437: 6751 -4438: -2975 -4439: 1622 -4440: 7629 -4441: 4427 -4442: -8806 -4443: 8176 -4444: 4459 -4445: 4544 -4446: -607 -4447: -6446 -4448: -5304 -4449: 1664 -4450: -7599 -4451: -6178 -4452: -6735 -4453: -7067 -4454: -2329 -4455: -9365 -4456: 4434 -4457: 9146 -4458: 3381 -4459: 591 -4460: 9325 -4461: -8398 -4462: -5838 -4463: -7463 -4464: -8544 -4465: 6423 -4466: 4665 -4467: 3038 -4468: -5608 -4469: -5729 -4470: -2346 -4471: -5526 -4472: 7845 -4473: -5546 -4474: 1490 -4475: 4534 -4476: 1462 -4477: -6867 -4478: -3107 -4479: -6027 -4480: 5123 -4481: -5339 -4482: -9472 -4483: -9014 -4484: -2650 -4485: 6333 -4486: -1304 -4487: 5642 -4488: -8874 -4489: 4487 -4490: 9464 -4491: -6918 -4492: 4635 -4493: -5835 -4494: 4567 -4495: -2009 -4496: 5055 -4497: -7469 -4498: 4682 -4499: -8612 -4500: 4042 -4501: 4002 -4502: 9173 -4503: 8801 -4504: -3317 -4505: -9490 -4506: -6192 -4507: 9397 -4508: 2492 -4509: -1508 -4510: -5387 -4511: -7010 -4512: 3577 -4513: 4606 -4514: -7987 -4515: 30 -4516: 2021 -4517: -7960 -4518: -6646 -4519: -1907 -4520: -8380 -4521: -8079 -4522: 1547 -4523: -8388 -4524: -5312 -4525: 2695 -4526: -9140 -4527: -5321 -4528: -312 -4529: 6877 -4530: -4755 -4531: 1760 -4532: 7308 -4533: -7240 -4534: -7014 -4535: 7251 -4536: 9300 -4537: -993 -4538: 7414 -4539: 3150 -4540: 7589 -4541: -4708 -4542: -3475 -4543: 3754 -4544: 7866 -4545: -1268 -4546: -5345 -4547: -9487 -4548: -6445 -4549: 8800 -4550: -526 -4551: 2008 -4552: 6813 -4553: 1395 -4554: 3762 -4555: -2384 -4556: 6668 -4557: -3804 -4558: 8900 -4559: -5345 -4560: -5521 -4561: 6602 -4562: -5809 -4563: -7703 -4564: -410 -4565: 1281 -4566: 9501 -4567: -6255 -4568: -6020 -4569: 4134 -4570: 4650 -4571: 3874 -4572: -8068 -4573: -5312 -4574: -520 -4575: 1165 -4576: 1147 -4577: 4821 -4578: 9620 -4579: 1150 -4580: -1916 -4581: -4734 -4582: -3601 -4583: 4711 -4584: -5319 -4585: 9732 -4586: -1994 -4587: -3465 -4588: -4403 -4589: -2330 -4590: -1381 -4591: 3764 -4592: 6427 -4593: 6742 -4594: -5313 -4595: -377 -4596: 2006 -4597: 8173 -4598: -1916 -4599: -882 -4600: 5692 -4601: -783 -4602: -5456 -4603: -6782 -4604: 5316 -4605: -2337 -4606: 9743 -4607: 3205 -4608: -302 -4609: -868 -4610: -6530 -4611: 4684 -4612: -9827 -4613: -5448 -4614: 9743 -4615: -266 -4616: 3533 -4617: 9481 -4618: 7026 -4619: -1664 -4620: -844 -4621: -5656 -4622: -5312 -4623: 8469 -4624: -268 -4625: -4749 -4626: -8505 -4627: -8464 -4628: 2907 -4629: 1234 -4630: -1539 -4631: -408 -4632: 2702 -4633: -354 -4634: -8165 -4635: -7573 -4636: 8870 -4637: -6488 -4638: 4686 -4639: 5572 -4640: -694 -4641: -7187 -4642: -4892 -4643: -607 -4644: 4001 -4645: -8069 -4646: -5794 -4647: -7983 -4648: 9685 -4649: 1409 -4650: -8867 -4651: 3962 -4652: -8385 -4653: 9783 -4654: -9439 -4655: 3721 -4656: -1683 -4657: 6115 -4658: -2346 -4659: -3632 -4660: 8006 -4661: -2555 -4662: -225 -4663: -1314 -4664: 4668 -4665: 160 -4666: -5657 -4667: 9619 -4668: 7846 -4669: 9113 -4670: -251 -4671: 6994 -4672: -3779 -4673: 2008 -4674: 7628 -4675: -7632 -4676: 1359 -4677: -3608 -4678: 4551 -4679: -3803 -4680: -5853 -4681: 9268 -4682: 7061 -4683: 5020 -4684: -5238 -4685: -1360 -4686: -5144 -4687: -8185 -4688: 795 -4689: 8469 -4690: -520 -4691: -3541 -4692: 3696 -4693: 7886 -4694: 4401 -4695: 2471 -4696: -7510 -4697: 6579 -4698: 1632 -4699: -9014 -4700: -6529 -4701: -200 -4702: 4913 -4703: 6024 -4704: 9279 -4705: -7931 -4706: 4802 -4707: -3640 -4708: -5243 -4709: 9006 -4710: -2242 -4711: 9780 -4712: -3861 -4713: 1103 -4714: -6852 -4715: 9568 -4716: -3516 -4717: -4861 -4718: 4042 -4719: 9805 -4720: -276 -4721: 9804 -4722: -6148 -4723: 4645 -4724: -1296 -4725: -755 -4726: 1716 -4727: -7675 -4728: 7282 -4729: -2358 -4730: 8879 -4731: -451 -4732: -2355 -4733: 9202 -4734: 991 -4735: 9268 -4736: 3026 -4737: -7750 -4738: -6515 -4739: 9794 -4740: -5477 -4741: 4824 -4742: 2728 -4743: 5480 -4744: 4204 -4745: 4967 -4746: -1204 -4747: -1367 -4748: 5149 -4749: -355 -4750: -7453 -4751: -3453 -4752: -5907 -4753: 7847 -4754: 7692 -4755: -6548 -4756: 2367 -4757: 8546 -4758: 4431 -4759: 9833 -4760: 8163 -4761: -6879 -4762: -542 -4763: 6677 -4764: -464 -4765: -3457 -4766: -5231 -4767: -8764 -4768: 3096 -4769: 9529 -4770: 6524 -4771: 4806 -4772: -1586 -4773: -5156 -4774: 4743 -4775: 9843 -4776: 7387 -4777: 7098 -4778: 2731 -4779: 9288 -4780: -607 -4781: -5305 -4782: 4559 -4783: 4840 -4784: 8414 -4785: 1662 -4786: -7370 -4787: -431 -4788: 2050 -4789: 9603 -4790: 9599 -4791: 4618 -4792: -7406 -4793: -7955 -4794: -481 -4795: 4721 -4796: -5809 -4797: -6921 -4798: -5216 -4799: 6275 -4800: 7616 -4801: -273 -4802: -2023 -4803: -7582 -4804: 4804 -4805: 7112 -4806: -4031 -4807: 3115 -4808: -8457 -4809: -443 -4810: 9610 -4811: 9459 -4812: -205 -4813: -159 -4814: -9972 -4815: -2067 -4816: -5926 -4817: 4256 -4818: 1579 -4819: 7210 -4820: 4797 -4821: 7554 -4822: -4244 -4823: -444 -4824: 2698 -4825: -4580 -4826: -5185 -4827: 86 -4828: -1410 -4829: 1150 -4830: -3824 -4831: 4319 -4832: 5961 -4833: 855 -4834: -4872 -4835: -6776 -4836: 7195 -4837: 3583 -4838: -1214 -4839: 9641 -4840: 4768 -4841: 1164 -4842: 8558 -4843: -6985 -4844: -7387 -4845: -121 -4846: 4035 -4847: 9989 -4848: -5147 -4849: 859 -4850: 7629 -4851: -5413 -4852: 3723 -4853: -2801 -4854: -845 -4855: -5845 -4856: 7945 -4857: -925 -4858: -6584 -4859: -5112 -4860: 7948 -4861: -7041 -4862: 8173 -4863: 8825 -4864: 8642 -4865: -8212 -4866: 3863 -4867: 4840 -4868: 5542 -4869: 9194 -4870: 1247 -4871: 78 -4872: 3962 -4873: -906 -4874: 9786 -4875: -94 -4876: 8642 -4877: 5024 -4878: 372 -4879: -3300 -4880: -1939 -4881: -892 -4882: 4957 -4883: -2677 -4884: -5165 -4885: 7346 -4886: 8032 -4887: 4905 -4888: -544 -4889: 4922 -4890: 3381 -4891: 2241 -4892: -201 -4893: -7539 -4894: -6648 -4895: -6852 -4896: 7080 -4897: 1063 -4898: 7706 -4899: 4679 -4900: 9675 -4901: 1179 -4902: -3210 -4903: 5869 -4904: -9630 -4905: 1990 -4906: 4905 -4907: 8944 -4908: 2850 -4909: -1916 -4910: 3445 -4911: -5745 -4912: 977 -4913: 4641 -4914: -5069 -4915: 5506 -4916: 8248 -4917: -865 -4918: 4821 -4919: -5890 -4920: -5963 -4921: -1045 -4922: 5495 -4923: -6126 -4924: 9599 -4925: 9933 -4926: 2582 -4927: 99 -4928: 4816 -4929: -599 -4930: -3717 -4931: 39 -4932: 2697 -4933: -8560 -4934: -3204 -4935: -8391 -4936: 3374 -4937: 6798 -4938: -9243 -4939: 7350 -4940: -1092 -4941: -5647 -4942: -5415 -4943: -1290 -4944: 13 -4945: -8541 -4946: 1602 -4947: -7997 -4948: 2222 -4949: 4669 -4950: 9490 -4951: 4172 -4952: 6808 -4953: -9700 -4954: -7717 -4955: -5417 -4956: -2460 -4957: 4487 -4958: -140 -4959: -6192 -4960: -1455 -4961: -9412 -4962: -6430 -4963: -811 -4964: 4665 -4965: -3676 -4966: -5120 -4967: 9837 -4968: -117 -4969: -4340 -4970: 9980 -4971: 3671 -4972: 4499 -4973: -8289 -4974: -873 -4975: -4595 -4976: 4939 -4977: 4315 -4978: 3110 -4979: -6299 -4980: -5011 -4981: -7992 -4982: -677 -4983: -1984 -4984: 8547 -4985: 4189 -4986: 8911 -4987: -5360 -4988: -995 -4989: 8083 -4990: 9125 -4991: -527 -4992: 2905 -4993: 464 -4994: 1268 -4995: 3467 -4996: -1368 -4997: 9566 -4998: -4861 -4999: -7000 -5000: 0 -Day 20 Part 1: 3473 (0.164s) - -Total time: 0.164s diff --git a/result.txt b/result.txt deleted file mode 100644 index f22cd7d..0000000 --- a/result.txt +++ /dev/null @@ -1,5001 +0,0 @@ -0: 0 -1: -7000 -2: -9978 -3: 7028 -4: 5025 -5: -3116 -6: 197 -7: 190 -8: 4153 -9: 2129 -10: 5136 -11: 8424 -12: -5433 -13: -9998 -14: 6162 -15: -6987 -16: -4714 -17: -9967 -18: -4665 -19: -2392 -20: -2362 -21: 5276 -22: -4962 -23: 9103 -24: 2795 -25: 5041 -26: -9856 -27: -886 -28: 353 -29: 5353 -30: -901 -31: 5041 -32: 5333 -33: -4937 -34: -5052 -35: -3908 -36: -4872 -37: 9186 -38: -4823 -39: -6346 -40: -8281 -41: 142 -42: 426 -43: -5198 -44: -4891 -45: 5182 -46: -9243 -47: -6894 -48: 1317 -49: -600 -50: -785 -51: -4951 -52: 5236 -53: 9658 -54: 9438 -55: -4815 -56: 5316 -57: 4097 -58: 4100 -59: 6579 -60: 9273 -61: 73 -62: -6022 -63: -4892 -64: 5275 -65: 9987 -66: -8108 -67: 4337 -68: 2151 -69: 5470 -70: 4157 -71: 126 -72: 9049 -73: 1986 -74: 203 -75: 4838 -76: 5051 -77: 302 -78: -9442 -79: 7512 -80: -44 -81: 7925 -82: 9961 -83: 5434 -84: -7595 -85: -9997 -86: -4416 -87: -4541 -88: 9125 -89: -4609 -90: -6356 -91: -2271 -92: -4938 -93: 474 -94: 9156 -95: 5647 -96: -8469 -97: -6606 -98: -4269 -99: -4925 -100: -6817 -101: 9594 -102: 4598 -103: -4189 -104: -4352 -105: 8452 -106: 8165 -107: 5135 -108: -9998 -109: 5637 -110: -5011 -111: 375 -112: 7665 -113: 8532 -114: -8236 -115: 3200 -116: -4882 -117: 2132 -118: -3457 -119: -4804 -120: 6792 -121: 1361 -122: 4873 -123: -9341 -124: -996 -125: -8903 -126: 1760 -127: 2230 -128: 5455 -129: -9957 -130: 99 -131: -9561 -132: 5724 -133: -8870 -134: 4540 -135: -4651 -136: 1350 -137: 4373 -138: -9900 -139: 662 -140: -9351 -141: 4967 -142: -9360 -143: 4534 -144: 5 -145: -9346 -146: 6240 -147: 259 -148: -9481 -149: 9236 -150: 5142 -151: 259 -152: 4343 -153: -331 -154: 3228 -155: 5690 -156: 5744 -157: 9312 -158: -1187 -159: 7231 -160: 4390 -161: 5101 -162: -5802 -163: 188 -164: 9942 -165: -9516 -166: -3527 -167: -4557 -168: -1721 -169: -4599 -170: -9580 -171: -531 -172: 5782 -173: -5521 -174: -242 -175: 275 -176: 2842 -177: -581 -178: -4128 -179: -4924 -180: -4392 -181: 6224 -182: -9346 -183: 6514 -184: -4416 -185: -63 -186: -3139 -187: -9130 -188: -1279 -189: 3241 -190: -9508 -191: 1482 -192: -2573 -193: 3671 -194: -4841 -195: 3245 -196: 260 -197: -4171 -198: 4089 -199: 855 -200: -3603 -201: 280 -202: 707 -203: -9276 -204: 4685 -205: -7354 -206: 5921 -207: -8471 -208: -2137 -209: -4214 -210: 5548 -211: 9603 -212: -8668 -213: 8073 -214: -4769 -215: 186 -216: 9397 -217: -5138 -218: 4166 -219: -3317 -220: 5212 -221: -1348 -222: 5395 -223: 4855 -224: 5190 -225: 4988 -226: -4888 -227: 4695 -228: 725 -229: -7070 -230: 6579 -231: -9592 -232: 552 -233: 510 -234: -4468 -235: 8016 -236: -8398 -237: 257 -238: -9876 -239: -25 -240: -8950 -241: 498 -242: -9350 -243: 696 -244: -4488 -245: 1568 -246: -4028 -247: -1011 -248: -1707 -249: 5487 -250: -5865 -251: -9439 -252: 5287 -253: 5223 -254: 5404 -255: 5468 -256: -7624 -257: 373 -258: -7139 -259: -289 -260: -5066 -261: -4891 -262: -4996 -263: -5180 -264: 58 -265: 678 -266: 417 -267: -4940 -268: 4940 -269: 950 -270: 3677 -271: -7650 -272: 9603 -273: 9877 -274: -9604 -275: 466 -276: -885 -277: 5461 -278: -9221 -279: 5578 -280: 8707 -281: -522 -282: 5689 -283: -9351 -284: 358 -285: -4673 -286: -1502 -287: -11 -288: 4041 -289: 2738 -290: 5903 -291: 7027 -292: 2720 -293: -4275 -294: -2556 -295: -4340 -296: -9332 -297: -9250 -298: -9100 -299: 469 -300: -9302 -301: -5069 -302: 5280 -303: 4382 -304: -39 -305: -4644 -306: 3140 -307: 1119 -308: -9459 -309: -9969 -310: -3106 -311: 9959 -312: 7292 -313: 6889 -314: -3989 -315: 3972 -316: 5259 -317: -6056 -318: -9066 -319: -8875 -320: -4403 -321: -9869 -322: 9236 -323: 4986 -324: -9557 -325: -8864 -326: -1363 -327: 5287 -328: -9638 -329: 5780 -330: -9002 -331: 4042 -332: -9296 -333: 5584 -334: -9100 -335: -2975 -336: 4409 -337: 5054 -338: 5906 -339: 213 -340: 4840 -341: -9827 -342: 5546 -343: -9162 -344: 3670 -345: 9451 -346: 6199 -347: -4001 -348: -4985 -349: -4275 -350: 5827 -351: -140 -352: 4021 -353: 9447 -354: -355 -355: -6727 -356: -829 -357: -5952 -358: 5901 -359: -4790 -360: 2745 -361: 674 -362: -312 -363: -2820 -364: 9702 -365: 2093 -366: 535 -367: 4550 -368: 7822 -369: 5745 -370: -2881 -371: 6877 -372: 701 -373: -9231 -374: -8858 -375: 4599 -376: -5081 -377: 2311 -378: 5780 -379: 5737 -380: 142 -381: -4651 -382: 4966 -383: -9026 -384: 867 -385: 1632 -386: 9024 -387: -3861 -388: 5634 -389: 713 -390: 9421 -391: 4561 -392: -5337 -393: -4228 -394: 6079 -395: -459 -396: -4337 -397: 4744 -398: 5025 -399: 424 -400: 1161 -401: 6140 -402: 566 -403: -9557 -404: 8056 -405: 5325 -406: -9350 -407: -3804 -408: -9099 -409: -1269 -410: -4762 -411: -3835 -412: -3965 -413: -4171 -414: 5585 -415: 1316 -416: 483 -417: -1421 -418: -9557 -419: -9359 -420: -4001 -421: -9451 -422: 4147 -423: 8170 -424: 302 -425: -4598 -426: -8867 -427: 5421 -428: 840 -429: -526 -430: 5994 -431: 1293 -432: 5938 -433: 1355 -434: 6069 -435: -7507 -436: 9906 -437: 5755 -438: 6399 -439: -5447 -440: -817 -441: 5830 -442: -9972 -443: -4989 -444: -8785 -445: -9921 -446: -4801 -447: -8919 -448: -4105 -449: 8398 -450: 298 -451: 1359 -452: -3858 -453: 566 -454: -3902 -455: 4807 -456: 9211 -457: -8721 -458: -8703 -459: -8827 -460: -6798 -461: -5614 -462: -9283 -463: 7206 -464: 9951 -465: 563 -466: -6006 -467: -7680 -468: -760 -469: 5782 -470: -1131 -471: -9062 -472: 6451 -473: -5171 -474: -9100 -475: 1557 -476: 5640 -477: 696 -478: 5917 -479: -8521 -480: 4410 -481: 1490 -482: 8532 -483: -6816 -484: 1378 -485: 375 -486: 643 -487: 5372 -488: -7401 -489: -3803 -490: 8090 -491: -3776 -492: -4275 -493: 3434 -494: 5054 -495: 5137 -496: -6047 -497: 752 -498: 5761 -499: -3870 -500: 5947 -501: -8832 -502: 6853 -503: -568 -504: -4980 -505: -6172 -506: 6535 -507: -5104 -508: 892 -509: 6383 -510: 1097 -511: -2726 -512: 481 -513: 692 -514: -9085 -515: 4089 -516: -5607 -517: 9088 -518: -2732 -519: -8038 -520: -277 -521: -5210 -522: -2741 -523: -3577 -524: 1340 -525: 7945 -526: -4901 -527: 6535 -528: -4391 -529: -4654 -530: 6312 -531: -4582 -532: -6749 -533: 1017 -534: 9510 -535: 1336 -536: -9950 -537: -2123 -538: -2784 -539: -3742 -540: -5555 -541: 6557 -542: 6165 -543: -2860 -544: -9589 -545: -8912 -546: 5856 -547: 6130 -548: -8505 -549: 6170 -550: -4174 -551: -6922 -552: 367 -553: 5713 -554: 6121 -555: -4202 -556: 5441 -557: -7075 -558: 5650 -559: 5560 -560: -8974 -561: -6737 -562: -6027 -563: -7534 -564: 7259 -565: 2836 -566: -7394 -567: -9450 -568: -7160 -569: 5661 -570: 3773 -571: 5041 -572: -3423 -573: -8854 -574: -4166 -575: -9538 -576: -8208 -577: 6381 -578: 4315 -579: 1123 -580: -3848 -581: 9978 -582: 5856 -583: -9162 -584: 5865 -585: 7133 -586: 5659 -587: -650 -588: 1604 -589: 5143 -590: -3854 -591: -8375 -592: 706 -593: -3507 -594: -7301 -595: 4279 -596: -7238 -597: -6606 -598: -6825 -599: -5557 -600: 7396 -601: -9781 -602: -6721 -603: -4888 -604: 8854 -605: -7749 -606: -9288 -607: 966 -608: 288 -609: 5135 -610: 6269 -611: 6426 -612: -5157 -613: 4655 -614: -5435 -615: -9824 -616: 5491 -617: 7165 -618: 2687 -619: 253 -620: -8592 -621: 4287 -622: 9783 -623: -4275 -624: -9911 -625: 7501 -626: 6228 -627: 274 -628: -1133 -629: -3567 -630: -6686 -631: -8492 -632: 5506 -633: -9100 -634: -3603 -635: -9046 -636: 5706 -637: 4729 -638: -2094 -639: -8670 -640: -3081 -641: 3233 -642: 6623 -643: -4762 -644: 6333 -645: 3390 -646: 5421 -647: -8185 -648: 6078 -649: 9640 -650: -7486 -651: -9473 -652: 9754 -653: -3283 -654: 7516 -655: 3274 -656: 1419 -657: 5929 -658: -9802 -659: 9071 -660: 6125 -661: -9281 -662: 1794 -663: 5548 -664: 1818 -665: -4898 -666: -4924 -667: 6718 -668: -8642 -669: 9610 -670: 238 -671: -7166 -672: -8555 -673: 5637 -674: -3852 -675: -2972 -676: -200 -677: 547 -678: 9365 -679: 6696 -680: -3773 -681: 4964 -682: 5051 -683: -3503 -684: -8289 -685: 725 -686: -8496 -687: -9580 -688: 1340 -689: 1673 -690: 2493 -691: -3784 -692: 989 -693: 741 -694: 5659 -695: 2845 -696: -1621 -697: 8117 -698: 5690 -699: 388 -700: 7916 -701: -8212 -702: -3340 -703: -7518 -704: 6170 -705: -6082 -706: 9554 -707: -4807 -708: -9099 -709: -7170 -710: -9423 -711: -5360 -712: 1490 -713: -6175 -714: 6677 -715: 827 -716: 469 -717: 7233 -718: -6042 -719: 2088 -720: 172 -721: 5994 -722: 601 -723: -2371 -724: -8806 -725: 469 -726: 454 -727: 7214 -728: 5343 -729: 1361 -730: 2936 -731: -8281 -732: -8179 -733: 9125 -734: -7439 -735: 8 -736: 4099 -737: -3509 -738: -8751 -739: 413 -740: 6041 -741: -1110 -742: -8372 -743: -3431 -744: -8494 -745: 5050 -746: -3220 -747: 526 -748: -3201 -749: 1557 -750: -3603 -751: -1669 -752: -8369 -753: -9592 -754: 654 -755: -489 -756: -5795 -757: -1875 -758: 924 -759: -716 -760: 1037 -761: 1792 -762: -6703 -763: -4306 -764: -9166 -765: -3669 -766: 4934 -767: 5182 -768: -4137 -769: 703 -770: -8859 -771: -7507 -772: -4028 -773: -4395 -774: -3031 -775: -8285 -776: 5637 -777: 6427 -778: -3231 -779: -4985 -780: 4 -781: 599 -782: 5028 -783: -3804 -784: -4662 -785: 5456 -786: -142 -787: -8224 -788: -3564 -789: 8165 -790: -844 -791: -5157 -792: -4645 -793: 6868 -794: -475 -795: 899 -796: 4838 -797: 2299 -798: 6659 -799: 5025 -800: 6537 -801: 3328 -802: -4051 -803: 4460 -804: 8561 -805: 5737 -806: 5989 -807: -5527 -808: -289 -809: 4852 -810: 4635 -811: -1647 -812: 5009 -813: 4526 -814: 5440 -815: -8464 -816: -412 -817: 8985 -818: 878 -819: 1032 -820: 5589 -821: -5783 -822: -7376 -823: 4187 -824: -8259 -825: -2654 -826: 1908 -827: -1996 -828: -9118 -829: 6059 -830: 1081 -831: 6175 -832: 6399 -833: -4025 -834: 6804 -835: -3793 -836: -6220 -837: 5691 -838: -8105 -839: 9634 -840: -4673 -841: -3289 -842: 6712 -843: -1958 -844: 5136 -845: -3758 -846: 892 -847: 2521 -848: -4202 -849: -6343 -850: -3682 -851: 989 -852: -9469 -853: 6313 -854: -552 -855: 6130 -856: -8686 -857: -5016 -858: 575 -859: 6257 -860: -5011 -861: -785 -862: 5921 -863: -7515 -864: -3061 -865: 5659 -866: -4417 -867: -8816 -868: -3925 -869: 940 -870: -1314 -871: 9638 -872: -8560 -873: 8086 -874: -1509 -875: 1238 -876: -3437 -877: -3060 -878: -8259 -879: 1859 -880: -8739 -881: 5445 -882: -8653 -883: -3091 -884: -1114 -885: -3162 -886: 1156 -887: 8872 -888: 253 -889: -4297 -890: 8554 -891: -7066 -892: -3608 -893: 1859 -894: -9321 -895: -7509 -896: -9198 -897: 7261 -898: 5107 -899: 9844 -900: -4029 -901: 1585 -902: 87 -903: -3659 -904: 1831 -905: -8783 -906: 7570 -907: 5902 -908: -1080 -909: 6960 -910: 1621 -911: -7999 -912: -8699 -913: -3577 -914: 4166 -915: -8463 -916: 1716 -917: 1175 -918: -5129 -919: -3598 -920: -9407 -921: 1106 -922: 6078 -923: 5462 -924: 5917 -925: 2492 -926: 4582 -927: -4370 -928: -406 -929: 1727 -930: 6877 -931: -8473 -932: 5711 -933: 4840 -934: -755 -935: -5872 -936: 9007 -937: -1953 -938: -636 -939: 652 -940: 457 -941: 5427 -942: -8962 -943: 6357 -944: -8252 -945: -6721 -946: -7619 -947: 6678 -948: -4891 -949: -3709 -950: 4607 -951: -3833 -952: -3979 -953: -3374 -954: 8697 -955: 6012 -956: -1508 -957: -9474 -958: -3220 -959: 6074 -960: -1416 -961: -9664 -962: 1025 -963: -5928 -964: 2810 -965: -8552 -966: 9653 -967: 6071 -968: -5414 -969: -3235 -970: -8265 -971: -3054 -972: -2975 -973: -8628 -974: 6725 -975: 5730 -976: 6016 -977: -6173 -978: -6088 -979: 1410 -980: 6744 -981: -2433 -982: 1912 -983: -5178 -984: 9023 -985: -6464 -986: -3258 -987: 6752 -988: 9556 -989: -7940 -990: 1409 -991: 1378 -992: -3497 -993: 9466 -994: -3823 -995: 1207 -996: -4340 -997: 9479 -998: 6623 -999: 2299 -1000: 1401 -1001: -4417 -1002: 438 -1003: 5108 -1004: 875 -1005: -9055 -1006: -2124 -1007: 6330 -1008: -8865 -1009: 1058 -1010: -8164 -1011: 2877 -1012: 1175 -1013: -8570 -1014: 9218 -1015: 5025 -1016: 6734 -1017: -9406 -1018: -4403 -1019: -4128 -1020: 211 -1021: -2555 -1022: 5287 -1023: 405 -1024: -5595 -1025: -3118 -1026: -8897 -1027: 4056 -1028: -8449 -1029: 740 -1030: 4607 -1031: -2951 -1032: -7785 -1033: 5819 -1034: -4952 -1035: 2111 -1036: 391 -1037: 764 -1038: 9579 -1039: 811 -1040: 7015 -1041: 1258 -1042: 6584 -1043: 3703 -1044: 1991 -1045: 741 -1046: -9856 -1047: 1943 -1048: -8997 -1049: -8298 -1050: -3146 -1051: 1409 -1052: -8681 -1053: -2957 -1054: -8676 -1055: -1138 -1056: 1525 -1057: -9601 -1058: 2050 -1059: -1258 -1060: 3577 -1061: 8907 -1062: 1551 -1063: -7885 -1064: -3317 -1065: -9627 -1066: 1238 -1067: 7306 -1068: 1557 -1069: -3255 -1070: 4744 -1071: 1254 -1072: -140 -1073: -6330 -1074: 3388 -1075: 9933 -1076: 6576 -1077: 1628 -1078: -1338 -1079: -3118 -1080: -9176 -1081: -7420 -1082: -8748 -1083: -9933 -1084: 4483 -1085: -5294 -1086: 6999 -1087: 7754 -1088: 7811 -1089: -4770 -1090: 1998 -1091: -3529 -1092: -9011 -1093: -9386 -1094: 1173 -1095: 6074 -1096: -2997 -1097: -9286 -1098: -5896 -1099: 6752 -1100: -5846 -1101: -9949 -1102: 7819 -1103: -7868 -1104: 7121 -1105: -4758 -1106: 5771 -1107: 989 -1108: 1179 -1109: 3659 -1110: 7423 -1111: -8052 -1112: 1543 -1113: 5854 -1114: 884 -1115: 1123 -1116: 6296 -1117: 4390 -1118: -3698 -1119: 6395 -1120: 6781 -1121: 1128 -1122: 5249 -1123: -3073 -1124: -5787 -1125: -4202 -1126: 6866 -1127: 4255 -1128: -6525 -1129: -1542 -1130: 5806 -1131: 7850 -1132: -6704 -1133: 1554 -1134: -8945 -1135: -4740 -1136: 1106 -1137: 1887 -1138: 9816 -1139: 4994 -1140: 8408 -1141: 9414 -1142: -284 -1143: -8295 -1144: -9899 -1145: -8078 -1146: 1173 -1147: -3106 -1148: 4293 -1149: 4581 -1150: -3608 -1151: -9351 -1152: -4602 -1153: -4714 -1154: 3473 -1155: 3158 -1156: 8469 -1157: 8490 -1158: -5145 -1159: -7021 -1160: -8134 -1161: -266 -1162: -1078 -1163: 7532 -1164: -3505 -1165: -4304 -1166: -7366 -1167: 844 -1168: -8729 -1169: 8084 -1170: 577 -1171: -8816 -1172: 8263 -1173: 2877 -1174: -531 -1175: -5165 -1176: 9236 -1177: 454 -1178: 6729 -1179: 7118 -1180: 5259 -1181: -3070 -1182: 7053 -1183: -4391 -1184: 7779 -1185: 6867 -1186: 4964 -1187: 5935 -1188: 5903 -1189: 5936 -1190: 7147 -1191: 89 -1192: 7675 -1193: 2139 -1194: 7341 -1195: -2649 -1196: -1069 -1197: 6771 -1198: 1329 -1199: -8126 -1200: -3603 -1201: 6696 -1202: 1986 -1203: -3369 -1204: 6165 -1205: 5698 -1206: -2988 -1207: -3265 -1208: -5540 -1209: -5107 -1210: -7877 -1211: -925 -1212: -5012 -1213: -4350 -1214: 823 -1215: -5054 -1216: 6904 -1217: -3748 -1218: 5953 -1219: -1182 -1220: -5336 -1221: -5330 -1222: 1207 -1223: 4982 -1224: 6890 -1225: 7353 -1226: 1604 -1227: 3375 -1228: 5183 -1229: -8854 -1230: 3340 -1231: -520 -1232: -9811 -1233: 6432 -1234: 6365 -1235: -7486 -1236: -8176 -1237: 1209 -1238: 2004 -1239: 5051 -1240: -9145 -1241: 7272 -1242: 5642 -1243: -4444 -1244: 7255 -1245: -7164 -1246: -1391 -1247: -3060 -1248: 3155 -1249: -5707 -1250: 7739 -1251: 2129 -1252: 7150 -1253: -8832 -1254: 7189 -1255: 6795 -1256: -8481 -1257: 8723 -1258: -4548 -1259: -8397 -1260: -4285 -1261: 6347 -1262: 9504 -1263: 9989 -1264: -5737 -1265: 3641 -1266: -8316 -1267: 2139 -1268: 1720 -1269: -1878 -1270: -7699 -1271: 4624 -1272: 3335 -1273: 6867 -1274: 3389 -1275: 7023 -1276: -4427 -1277: -8323 -1278: 1885 -1279: -8289 -1280: 6581 -1281: -3075 -1282: -8473 -1283: 7024 -1284: -2741 -1285: 1777 -1286: -3247 -1287: -9622 -1288: 98 -1289: -4352 -1290: 8366 -1291: -3568 -1292: -2996 -1293: 8097 -1294: -3178 -1295: 8481 -1296: -4951 -1297: 811 -1298: 5956 -1299: -7723 -1300: 5775 -1301: -3730 -1302: 91 -1303: -3541 -1304: 1632 -1305: 1278 -1306: 997 -1307: 4709 -1308: -7987 -1309: 7017 -1310: -3641 -1311: -7807 -1312: -9780 -1313: -8212 -1314: 7839 -1315: 1219 -1316: -3959 -1317: -5958 -1318: -9983 -1319: 1438 -1320: 5812 -1321: 9332 -1322: 6661 -1323: 5613 -1324: 6426 -1325: 1825 -1326: -7675 -1327: 1690 -1328: -5780 -1329: -9528 -1330: -8876 -1331: 3537 -1332: 9447 -1333: 1662 -1334: -9592 -1335: 637 -1336: 2258 -1337: 7177 -1338: 1377 -1339: 333 -1340: 5956 -1341: -3418 -1342: -5888 -1343: -3964 -1344: 8766 -1345: -8468 -1346: 2363 -1347: 2805 -1348: -3248 -1349: 7687 -1350: -5237 -1351: 2303 -1352: -7666 -1353: 2341 -1354: 1717 -1355: -787 -1356: 9497 -1357: -6519 -1358: -7507 -1359: -5355 -1360: -8161 -1361: -6957 -1362: 2311 -1363: 4831 -1364: 8953 -1365: 8546 -1366: 8950 -1367: -6313 -1368: -9827 -1369: 6655 -1370: 2312 -1371: 6576 -1372: 2407 -1373: -3477 -1374: -1542 -1375: -6148 -1376: 7631 -1377: 2031 -1378: -1967 -1379: 577 -1380: 1490 -1381: -1099 -1382: -5379 -1383: 335 -1384: 891 -1385: -4912 -1386: 9599 -1387: -8577 -1388: 6436 -1389: 5689 -1390: 1017 -1391: 8482 -1392: 6492 -1393: 1877 -1394: -3631 -1395: -6639 -1396: 6868 -1397: 6665 -1398: -5165 -1399: -8054 -1400: -9856 -1401: 499 -1402: 6121 -1403: 4459 -1404: 6774 -1405: -8802 -1406: -7777 -1407: 6110 -1408: 2196 -1409: -4378 -1410: -4708 -1411: 6110 -1412: 7839 -1413: -5273 -1414: -5189 -1415: -1702 -1416: 1914 -1417: -7112 -1418: -5802 -1419: 5535 -1420: 1332 -1421: 4861 -1422: 3595 -1423: 1654 -1424: -4030 -1425: -1373 -1426: 2358 -1427: 7460 -1428: 1896 -1429: -7937 -1430: 5830 -1431: 1378 -1432: -7819 -1433: -5606 -1434: 2120 -1435: 3816 -1436: 9186 -1437: 4928 -1438: -3190 -1439: 1238 -1440: 8089 -1441: 5505 -1442: -6697 -1443: 5907 -1444: 8427 -1445: 688 -1446: -3522 -1447: 4187 -1448: -7131 -1449: 1588 -1450: 2094 -1451: -2775 -1452: 7475 -1453: 6305 -1454: -4896 -1455: -4836 -1456: -4762 -1457: -3698 -1458: 8897 -1459: 5459 -1460: 774 -1461: -6958 -1462: -186 -1463: 6300 -1464: -5662 -1465: 4292 -1466: 6768 -1467: -4250 -1468: 4 -1469: -3989 -1470: 9062 -1471: -4232 -1472: 466 -1473: 483 -1474: -9421 -1475: 4099 -1476: 7154 -1477: -2420 -1478: 8304 -1479: 7423 -1480: -4248 -1481: 1525 -1482: -5961 -1483: -9526 -1484: 7195 -1485: 4983 -1486: -3265 -1487: -9853 -1488: 6142 -1489: 7121 -1490: 2286 -1491: -3307 -1492: -3116 -1493: 4357 -1494: -3995 -1495: 2433 -1496: -1599 -1497: 7072 -1498: -7918 -1499: 5901 -1500: -8502 -1501: -2637 -1502: 2598 -1503: 3801 -1504: 882 -1505: 7295 -1506: -4174 -1507: 2029 -1508: 2292 -1509: -8921 -1510: -7522 -1511: -160 -1512: -9329 -1513: -2656 -1514: 6014 -1515: 8692 -1516: -4166 -1517: -6589 -1518: -2871 -1519: 6533 -1520: -8481 -1521: 5325 -1522: 6141 -1523: -8425 -1524: -2944 -1525: 8165 -1526: 8615 -1527: -2137 -1528: 469 -1529: 5494 -1530: 4006 -1531: 6768 -1532: -5415 -1533: -4865 -1534: -8496 -1535: 2631 -1536: -3511 -1537: -3418 -1538: 6426 -1539: 9933 -1540: 538 -1541: 7214 -1542: 2102 -1543: 6675 -1544: -552 -1545: -8038 -1546: -6488 -1547: -5060 -1548: -2833 -1549: -7944 -1550: 9574 -1551: -7942 -1552: -2827 -1553: 1998 -1554: 7510 -1555: -8079 -1556: -3171 -1557: -7614 -1558: 1557 -1559: 4046 -1560: -8393 -1561: -9368 -1562: 6600 -1563: 5250 -1564: -5896 -1565: 2896 -1566: 6383 -1567: -7459 -1568: -1798 -1569: -6563 -1570: 4647 -1571: -8361 -1572: -8645 -1573: -7645 -1574: 3 -1575: 6579 -1576: 6764 -1577: 4953 -1578: 170 -1579: -7377 -1580: 1963 -1581: 7195 -1582: -2572 -1583: 7385 -1584: 6219 -1585: -9677 -1586: -7666 -1587: -2509 -1588: 7314 -1589: -3577 -1590: 8710 -1591: -7333 -1592: 7295 -1593: -2943 -1594: -8858 -1595: 2186 -1596: 5494 -1597: 1766 -1598: -3166 -1599: 404 -1600: 6707 -1601: -2923 -1602: 2453 -1603: 1123 -1604: -2518 -1605: -2747 -1606: 4821 -1607: 1808 -1608: 6175 -1609: -7384 -1610: 7419 -1611: 6399 -1612: 1121 -1613: -5184 -1614: 1409 -1615: -8844 -1616: 2082 -1617: -229 -1618: 5638 -1619: -3803 -1620: 1989 -1621: 1097 -1622: -3152 -1623: -8468 -1624: -2651 -1625: -305 -1626: -9951 -1627: -7409 -1628: -6106 -1629: 1870 -1630: 6383 -1631: 7779 -1632: 7314 -1633: -8531 -1634: -9466 -1635: -2513 -1636: 9402 -1637: 7073 -1638: -3868 -1639: -2396 -1640: 7619 -1641: -6926 -1642: 7259 -1643: -1113 -1644: -3120 -1645: -9278 -1646: -5185 -1647: -2667 -1648: -6122 -1649: -7507 -1650: 3445 -1651: 459 -1652: 5374 -1653: 1305 -1654: -6974 -1655: -3169 -1656: 7539 -1657: -9095 -1658: -8469 -1659: 6296 -1660: -2438 -1661: 5173 -1662: -2391 -1663: 3397 -1664: 9384 -1665: -5157 -1666: -8084 -1667: 4256 -1668: 1017 -1669: -4913 -1670: -3398 -1671: 811 -1672: 2721 -1673: 687 -1674: 4679 -1675: -8193 -1676: -5165 -1677: -4834 -1678: -2536 -1679: -7651 -1680: -2592 -1681: -2708 -1682: 1413 -1683: -9443 -1684: 5698 -1685: -2801 -1686: 9166 -1687: 7166 -1688: 4998 -1689: -4263 -1690: 4070 -1691: -5031 -1692: 8746 -1693: 1632 -1694: 7350 -1695: -4483 -1696: 393 -1697: -7815 -1698: 9234 -1699: -7582 -1700: 6771 -1701: -884 -1702: -9256 -1703: -2939 -1704: 2064 -1705: -1719 -1706: -2392 -1707: 2029 -1708: -3507 -1709: -2295 -1710: 5041 -1711: -6267 -1712: -2640 -1713: -2965 -1714: 7432 -1715: -1214 -1716: 855 -1717: 8810 -1718: 2361 -1719: -7719 -1720: -4734 -1721: -2302 -1722: -7468 -1723: -7589 -1724: -2612 -1725: 211 -1726: -8067 -1727: 6890 -1728: -1669 -1729: 8456 -1730: -8684 -1731: 9172 -1732: 3686 -1733: 6803 -1734: -3252 -1735: 5051 -1736: -3412 -1737: -2756 -1738: -7357 -1739: 757 -1740: 7506 -1741: -3088 -1742: -1142 -1743: 1766 -1744: 6583 -1745: 2152 -1746: 8419 -1747: -3622 -1748: -4083 -1749: 8986 -1750: 477 -1751: -3033 -1752: 5002 -1753: -7817 -1754: 2488 -1755: -1962 -1756: 8232 -1757: -7907 -1758: 713 -1759: -8035 -1760: -2838 -1761: 6877 -1762: 5487 -1763: -2495 -1764: 1350 -1765: -9539 -1766: -6813 -1767: 7642 -1768: 479 -1769: 1067 -1770: 7552 -1771: -9067 -1772: -4679 -1773: -2427 -1774: 3629 -1775: -7722 -1776: 1807 -1777: -4165 -1778: 7948 -1779: -8261 -1780: 8907 -1781: 7811 -1782: -5253 -1783: -8642 -1784: 6960 -1785: 3641 -1786: 9247 -1787: 7624 -1788: -3219 -1789: -8297 -1790: -7479 -1791: 757 -1792: 7805 -1793: 6040 -1794: -2477 -1795: 1637 -1796: 2341 -1797: -822 -1798: -7957 -1799: 9930 -1800: 2425 -1801: -6004 -1802: 2493 -1803: 5421 -1804: 4821 -1805: 8309 -1806: -2307 -1807: -2654 -1808: -2174 -1809: 2442 -1810: -7047 -1811: 2299 -1812: -7498 -1813: -8505 -1814: -1741 -1815: -4673 -1816: 7288 -1817: 9390 -1818: -7905 -1819: 458 -1820: -3237 -1821: 6600 -1822: 1782 -1823: -8017 -1824: 508 -1825: -7306 -1826: -3148 -1827: -2915 -1828: 2776 -1829: 7866 -1830: 2151 -1831: -7267 -1832: 8532 -1833: -4093 -1834: 1222 -1835: -2172 -1836: -1025 -1837: 7465 -1838: 6676 -1839: -3131 -1840: -7692 -1841: 6383 -1842: 3771 -1843: 9609 -1844: 2449 -1845: -7226 -1846: -3457 -1847: 2179 -1848: 288 -1849: 1267 -1850: -8778 -1851: -2951 -1852: -1197 -1853: -8444 -1854: -7723 -1855: 2903 -1856: 6363 -1857: 9705 -1858: 8222 -1859: 4502 -1860: 3746 -1861: 7306 -1862: -9951 -1863: -4008 -1864: -4749 -1865: -5498 -1866: 7655 -1867: 2686 -1868: 4669 -1869: 7811 -1870: -7658 -1871: -4774 -1872: -8773 -1873: 173 -1874: -603 -1875: 86 -1876: 9371 -1877: -6175 -1878: 4958 -1879: -2060 -1880: 8138 -1881: 5179 -1882: -8017 -1883: -5355 -1884: -451 -1885: -7318 -1886: 7035 -1887: -7463 -1888: 6584 -1889: 2907 -1890: -7703 -1891: -8026 -1892: 977 -1893: -5176 -1894: -7366 -1895: -8042 -1896: 5805 -1897: 6175 -1898: -8029 -1899: -3463 -1900: -2951 -1901: -2207 -1902: 4840 -1903: 2407 -1904: 7512 -1905: -9487 -1906: 7807 -1907: 4326 -1908: -5661 -1909: 3590 -1910: -4285 -1911: 6690 -1912: 2836 -1913: -6686 -1914: -6678 -1915: -4008 -1916: -2368 -1917: 5506 -1918: 1525 -1919: 6681 -1920: 1636 -1921: 857 -1922: -583 -1923: 8522 -1924: -7166 -1925: -7925 -1926: 3247 -1927: 4374 -1928: -7747 -1929: -225 -1930: 701 -1931: 6492 -1932: -2705 -1933: -5555 -1934: 7949 -1935: -3537 -1936: -2157 -1937: -5780 -1938: -7439 -1939: 2853 -1940: -9423 -1941: 9367 -1942: -5147 -1943: 2949 -1944: -7194 -1945: -2446 -1946: 706 -1947: 9194 -1948: -6716 -1949: -6067 -1950: 9466 -1951: -6385 -1952: 7015 -1953: 8491 -1954: 7879 -1955: 1490 -1956: 1230 -1957: -6413 -1958: -8808 -1959: -8143 -1960: 5575 -1961: -9142 -1962: 713 -1963: 8020 -1964: 6363 -1965: -5183 -1966: 4909 -1967: -2804 -1968: 7216 -1969: 7907 -1970: -9256 -1971: 6918 -1972: 4812 -1973: -3252 -1974: 5081 -1975: -4618 -1976: 6342 -1977: -3209 -1978: 7949 -1979: -8022 -1980: -2055 -1981: 9023 -1982: 292 -1983: 5439 -1984: 4228 -1985: -3507 -1986: -391 -1987: 961 -1988: -9856 -1989: 7693 -1990: -1708 -1991: 2126 -1992: 2630 -1993: -5120 -1994: 637 -1995: -2159 -1996: 318 -1997: 7339 -1998: -8179 -1999: -9729 -2000: -3848 -2001: -7959 -2002: 1267 -2003: 7613 -2004: -3266 -2005: 6678 -2006: -7703 -2007: 8165 -2008: -7600 -2009: -7116 -2010: -6704 -2011: -2333 -2012: -9651 -2013: 6604 -2014: 3994 -2015: 2877 -2016: -2586 -2017: -4618 -2018: 8737 -2019: -8208 -2020: 2388 -2021: 8142 -2022: -4557 -2023: 7292 -2024: 8574 -2025: -791 -2026: 482 -2027: 2718 -2028: -2635 -2029: 7667 -2030: 4199 -2031: -3846 -2032: -7165 -2033: 5041 -2034: 1888 -2035: -7108 -2036: -1604 -2037: 4583 -2038: -7209 -2039: 2449 -2040: 6078 -2041: 3767 -2042: -7550 -2043: 7882 -2044: 5610 -2045: -7194 -2046: 7766 -2047: 2838 -2048: 3460 -2049: 9615 -2050: -2979 -2051: 4038 -2052: -2708 -2053: -2679 -2054: -7793 -2055: -5302 -2056: -7136 -2057: -7164 -2058: -7438 -2059: 9803 -2060: 7151 -2061: 7760 -2062: -7972 -2063: 7347 -2064: -5942 -2065: -7441 -2066: -2385 -2067: 7853 -2068: -9877 -2069: -8536 -2070: -1959 -2071: 666 -2072: -1352 -2073: -865 -2074: 5175 -2075: -2009 -2076: 7450 -2077: -6385 -2078: 7811 -2079: 7487 -2080: 2190 -2081: 3908 -2082: 1220 -2083: -5319 -2084: -5178 -2085: 1091 -2086: 6092 -2087: -4465 -2088: -7248 -2089: -3300 -2090: -8340 -2091: 5515 -2092: -8398 -2093: 2209 -2094: -7292 -2095: -1943 -2096: -6459 -2097: -8017 -2098: -8903 -2099: -92 -2100: 459 -2101: -3173 -2102: -4831 -2103: -2354 -2104: -7752 -2105: -9615 -2106: 9965 -2107: -2751 -2108: 2064 -2109: -3388 -2110: -2337 -2111: 1770 -2112: -7049 -2113: -1450 -2114: -1292 -2115: -9100 -2116: -7033 -2117: 6632 -2118: -2242 -2119: 3390 -2120: -889 -2121: -6998 -2122: 4648 -2123: 4315 -2124: -7470 -2125: 2427 -2126: -4770 -2127: 7063 -2128: -7510 -2129: -6905 -2130: -2021 -2131: 7649 -2132: 8040 -2133: 3787 -2134: 5513 -2135: -8144 -2136: 2398 -2137: 2619 -2138: 1350 -2139: -2487 -2140: -844 -2141: -4996 -2142: 3141 -2143: 150 -2144: -5168 -2145: -7049 -2146: -9095 -2147: 5969 -2148: -7049 -2149: 894 -2150: -7905 -2151: -2728 -2152: 4340 -2153: -6252 -2154: 7358 -2155: 6774 -2156: 1731 -2157: -7052 -2158: 7506 -2159: -7669 -2160: -2536 -2161: -2635 -2162: -7204 -2163: -5869 -2164: 5969 -2165: 1998 -2166: 6829 -2167: -9601 -2168: -4158 -2169: 9275 -2170: 2241 -2171: -8728 -2172: 1267 -2173: 2837 -2174: -1752 -2175: 1238 -2176: -4654 -2177: 2517 -2178: 2528 -2179: 7803 -2180: 2093 -2181: 2632 -2182: 776 -2183: -2232 -2184: 9926 -2185: -2658 -2186: -7167 -2187: 2432 -2188: 9883 -2189: -2055 -2190: -6925 -2191: 5959 -2192: 1435 -2193: -1899 -2194: -9112 -2195: -7944 -2196: -4280 -2197: -2521 -2198: 1766 -2199: -7258 -2200: -3520 -2201: -2058 -2202: 3145 -2203: -9538 -2204: 7747 -2205: -3279 -2206: -5143 -2207: -2261 -2208: -496 -2209: 5405 -2210: 1869 -2211: 8089 -2212: -6650 -2213: 7640 -2214: 6523 -2215: 6492 -2216: -2838 -2217: -2363 -2218: 1491 -2219: -310 -2220: -85 -2221: -2157 -2222: 2399 -2223: 2312 -2224: 9031 -2225: -7478 -2226: 9863 -2227: -2293 -2228: -6 -2229: 9688 -2230: -7014 -2231: 2291 -2232: -568 -2233: 612 -2234: 9438 -2235: 8159 -2236: -5183 -2237: -1982 -2238: -9967 -2239: -2897 -2240: -1994 -2241: -6896 -2242: -2096 -2243: -3358 -2244: 7897 -2245: 8872 -2246: -7664 -2247: 8629 -2248: 6078 -2249: 1943 -2250: 8469 -2251: -4815 -2252: 4708 -2253: 9374 -2254: 7432 -2255: 8093 -2256: 8063 -2257: -1631 -2258: -2385 -2259: 6524 -2260: -2153 -2261: 6209 -2262: 9421 -2263: 7279 -2264: -5706 -2265: 7801 -2266: 3546 -2267: -3966 -2268: 9856 -2269: 4448 -2270: -3756 -2271: 2619 -2272: -3457 -2273: -7779 -2274: 704 -2275: -2838 -2276: -7439 -2277: -3598 -2278: 7185 -2279: 7168 -2280: 3048 -2281: 3216 -2282: 8197 -2283: 8032 -2284: 2945 -2285: -2058 -2286: -2738 -2287: 7613 -2288: 6060 -2289: -2040 -2290: 4302 -2291: 9411 -2292: -1865 -2293: 7501 -2294: -2653 -2295: 1885 -2296: 1929 -2297: -7514 -2298: -7743 -2299: 9510 -2300: 2155 -2301: -1784 -2302: -1320 -2303: -9128 -2304: -2329 -2305: -8928 -2306: -6193 -2307: -7667 -2308: 2167 -2309: -3676 -2310: 7359 -2311: 6572 -2312: 8589 -2313: 8305 -2314: 3546 -2315: -925 -2316: -4141 -2317: 7662 -2318: -9803 -2319: 1103 -2320: 7662 -2321: 9841 -2322: -7003 -2323: 2303 -2324: -5161 -2325: -7027 -2326: -7750 -2327: -1092 -2328: -1020 -2329: 9685 -2330: -6794 -2331: -8085 -2332: -4516 -2333: -7680 -2334: 8834 -2335: 8912 -2336: 1265 -2337: -7959 -2338: -2711 -2339: -2636 -2340: -7075 -2341: -7440 -2342: 5959 -2343: 9196 -2344: -9541 -2345: 7077 -2346: 7113 -2347: 4569 -2348: -9438 -2349: -2871 -2350: -8141 -2351: 662 -2352: -6916 -2353: 8073 -2354: -7058 -2355: 2744 -2356: 5554 -2357: 4024 -2358: -8156 -2359: 5983 -2360: -8630 -2361: -6201 -2362: -8525 -2363: 7436 -2364: -9561 -2365: 4020 -2366: 8995 -2367: -9080 -2368: 6751 -2369: -2857 -2370: 4269 -2371: 2231 -2372: -6998 -2373: -1788 -2374: -6728 -2375: -8252 -2376: 8176 -2377: 5519 -2378: 2562 -2379: 2848 -2380: -3482 -2381: 755 -2382: 9421 -2383: -3289 -2384: 7608 -2385: -4852 -2386: 2619 -2387: 7900 -2388: 3839 -2389: 3723 -2390: -760 -2391: -6606 -2392: 8801 -2393: -1766 -2394: 2319 -2395: 5391 -2396: 1281 -2397: 3196 -2398: 7847 -2399: 7945 -2400: -1876 -2401: -2756 -2402: -6861 -2403: 6365 -2404: -2438 -2405: 4913 -2406: 5659 -2407: -3292 -2408: 4868 -2409: -1723 -2410: -4417 -2411: 2473 -2412: -5069 -2413: 7664 -2414: 8916 -2415: 155 -2416: 3247 -2417: -2005 -2418: -8616 -2419: 8125 -2420: 1988 -2421: -5757 -2422: -7286 -2423: 1854 -2424: -4824 -2425: 2712 -2426: -1550 -2427: 7127 -2428: -9192 -2429: -7086 -2430: -725 -2431: 7529 -2432: -4525 -2433: 6363 -2434: -7654 -2435: 2298 -2436: -1924 -2437: 539 -2438: -5610 -2439: -6838 -2440: -6004 -2441: -1398 -2442: 8817 -2443: -2266 -2444: 4515 -2445: -2345 -2446: 2562 -2447: -3138 -2448: -8724 -2449: -6790 -2450: 6742 -2451: -4042 -2452: 9989 -2453: 1247 -2454: 7647 -2455: 2019 -2456: -1202 -2457: -1960 -2458: -8164 -2459: -6450 -2460: -9146 -2461: -3204 -2462: 3011 -2463: -6676 -2464: -6701 -2465: -6948 -2466: -2325 -2467: -6769 -2468: 1693 -2469: 2670 -2470: -8289 -2471: -7519 -2472: 4920 -2473: 571 -2474: 6748 -2475: 2191 -2476: -4567 -2477: 3117 -2478: 3085 -2479: -970 -2480: -2285 -2481: -2965 -2482: 3659 -2483: 8182 -2484: 3173 -2485: 8195 -2486: -8281 -2487: 2315 -2488: -2161 -2489: -4155 -2490: -7530 -2491: 3049 -2492: -9421 -2493: -2376 -2494: -802 -2495: 1912 -2496: 9658 -2497: -5634 -2498: 6748 -2499: -7033 -2500: 7226 -2501: -7007 -2502: 5425 -2503: -6955 -2504: 1890 -2505: -8758 -2506: 5338 -2507: -6958 -2508: 5812 -2509: -6630 -2510: 7412 -2511: 2004 -2512: 9087 -2513: -3025 -2514: -3760 -2515: 8165 -2516: 3309 -2517: 1705 -2518: -6237 -2519: -4517 -2520: -1835 -2521: -3958 -2522: 3768 -2523: -9731 -2524: 3171 -2525: 1433 -2526: -7055 -2527: -2679 -2528: -2203 -2529: -6404 -2530: -8164 -2531: 2351 -2532: 76 -2533: 9023 -2534: -7139 -2535: -3733 -2536: 9408 -2537: -3201 -2538: 5575 -2539: -6692 -2540: -8858 -2541: 7739 -2542: 5456 -2543: -2143 -2544: 8293 -2545: 7461 -2546: 8381 -2547: -4272 -2548: -4602 -2549: -8393 -2550: 7610 -2551: -2624 -2552: -2273 -2553: -1336 -2554: 7822 -2555: -1632 -2556: -1725 -2557: 5495 -2558: -3423 -2559: 7650 -2560: 8084 -2561: -6824 -2562: -7377 -2563: -2534 -2564: 5106 -2565: -5312 -2566: -3186 -2567: 7251 -2568: 7309 -2569: -1637 -2570: 7016 -2571: 1554 -2572: 1028 -2573: 1308 -2574: 6958 -2575: 7709 -2576: -1861 -2577: -6749 -2578: -225 -2579: -7027 -2580: -6441 -2581: 7714 -2582: 2433 -2583: -7560 -2584: -5228 -2585: -8837 -2586: 9961 -2587: 8148 -2588: 8349 -2589: 1821 -2590: -8987 -2591: 2913 -2592: 4035 -2593: -2434 -2594: 8289 -2595: -9596 -2596: 4844 -2597: 1214 -2598: -7267 -2599: 7098 -2600: -2107 -2601: -2009 -2602: -379 -2603: -1408 -2604: -7509 -2605: 7145 -2606: 8538 -2607: -8544 -2608: 1574 -2609: 8410 -2610: 9240 -2611: 8151 -2612: 2598 -2613: 4828 -2614: -3608 -2615: -9099 -2616: -7777 -2617: 7948 -2618: 6158 -2619: -8549 -2620: -3424 -2621: -6813 -2622: -9100 -2623: 4723 -2624: 9824 -2625: 2877 -2626: -5072 -2627: -1660 -2628: -7771 -2629: 8293 -2630: 5489 -2631: -9272 -2632: 1112 -2633: -7408 -2634: -2203 -2635: 8986 -2636: -2850 -2637: -6824 -2638: -2412 -2639: 6718 -2640: -7295 -2641: -6424 -2642: 1557 -2643: -1792 -2644: -8865 -2645: 1635 -2646: 5554 -2647: 8868 -2648: 1753 -2649: 6331 -2650: 9887 -2651: 8098 -2652: -1875 -2653: 2339 -2654: -1694 -2655: 8453 -2656: 2399 -2657: -6184 -2658: 2037 -2659: 228 -2660: -9288 -2661: 9113 -2662: 5630 -2663: -2642 -2664: 8146 -2665: 2799 -2666: 1393 -2667: 2720 -2668: 3137 -2669: -6126 -2670: 5506 -2671: 3212 -2672: 1043 -2673: -4951 -2674: 7844 -2675: -7553 -2676: 3106 -2677: 3216 -2678: -1483 -2679: -704 -2680: -9711 -2681: 2772 -2682: -1733 -2683: -6751 -2684: -9580 -2685: -8554 -2686: -8369 -2687: 3415 -2688: 3309 -2689: 5198 -2690: -3698 -2691: -7152 -2692: 6600 -2693: -1982 -2694: -2061 -2695: -1950 -2696: -9837 -2697: 9576 -2698: 634 -2699: 1482 -2700: -6777 -2701: -2241 -2702: -5822 -2703: -3574 -2704: 98 -2705: -7007 -2706: 4269 -2707: -9026 -2708: -993 -2709: -2078 -2710: 2808 -2711: 7845 -2712: 3916 -2713: 8818 -2714: 4829 -2715: 2762 -2716: -2252 -2717: 5837 -2718: 3950 -2719: -7985 -2720: 3447 -2721: -3614 -2722: 7078 -2723: 5101 -2724: 9198 -2725: 9877 -2726: -6515 -2727: -9256 -2728: -8398 -2729: 3439 -2730: 5173 -2731: 3321 -2732: -2392 -2733: 3480 -2734: 1335 -2735: 3867 -2736: -9276 -2737: -6948 -2738: -7234 -2739: -3734 -2740: -6698 -2741: 7814 -2742: 483 -2743: -8067 -2744: 5747 -2745: 4668 -2746: -1766 -2747: -6972 -2748: 5627 -2749: -8269 -2750: 6846 -2751: 111 -2752: -7409 -2753: -7337 -2754: -8872 -2755: 2433 -2756: 5706 -2757: -9729 -2758: 9397 -2759: 3210 -2760: -2923 -2761: -8854 -2762: -6143 -2763: -8126 -2764: -987 -2765: -4351 -2766: 3149 -2767: -1940 -2768: -2158 -2769: 3533 -2770: 3301 -2771: -516 -2772: -4762 -2773: -7075 -2774: -4113 -2775: 8471 -2776: -7052 -2777: 7926 -2778: -352 -2779: -3286 -2780: 8503 -2781: 8447 -2782: 7779 -2783: -6657 -2784: 3420 -2785: -1480 -2786: 8561 -2787: -4306 -2788: -2121 -2789: -4702 -2790: -4888 -2791: 2229 -2792: 779 -2793: -9855 -2794: 8396 -2795: -6614 -2796: 576 -2797: 7845 -2798: 5984 -2799: 6016 -2800: 3425 -2801: -6721 -2802: -4082 -2803: -6940 -2804: -1537 -2805: 3533 -2806: -5091 -2807: 1720 -2808: 3389 -2809: 6289 -2810: -3564 -2811: -3947 -2812: 4260 -2813: -6962 -2814: -7030 -2815: -6439 -2816: -7102 -2817: 5316 -2818: 109 -2819: 7809 -2820: 3425 -2821: 7840 -2822: 747 -2823: 1986 -2824: 1488 -2825: -4469 -2826: -264 -2827: 6389 -2828: -8281 -2829: -1982 -2830: 664 -2831: 662 -2832: -1430 -2833: 1821 -2834: -1825 -2835: -7030 -2836: 6813 -2837: -7040 -2838: 7916 -2839: 9824 -2840: 7840 -2841: -9313 -2842: 7675 -2843: 3513 -2844: -239 -2845: -4861 -2846: -6055 -2847: -6269 -2848: 3397 -2849: -3169 -2850: -2850 -2851: -6584 -2852: 2037 -2853: -6367 -2854: -6550 -2855: -9422 -2856: -289 -2857: -8151 -2858: 4140 -2859: 6323 -2860: 8033 -2861: 8734 -2862: 3370 -2863: -1214 -2864: 3659 -2865: 4534 -2866: 8433 -2867: -6737 -2868: 3120 -2869: -7586 -2870: -8699 -2871: -6863 -2872: -2009 -2873: -3061 -2874: 3227 -2875: 3268 -2876: 1435 -2877: -1328 -2878: 1230 -2879: 9805 -2880: -5177 -2881: -3850 -2882: -2477 -2883: 2629 -2884: 78 -2885: -1723 -2886: -6739 -2887: 1606 -2888: 5885 -2889: -8957 -2890: 1454 -2891: 357 -2892: 9965 -2893: -8572 -2894: 4598 -2895: 2046 -2896: -6947 -2897: -8592 -2898: -2534 -2899: 3769 -2900: 7385 -2901: 9475 -2902: 6331 -2903: -1529 -2904: 8625 -2905: 9165 -2906: 1428 -2907: -9342 -2908: 1683 -2909: 7148 -2910: -7284 -2911: 5287 -2912: -2671 -2913: -7058 -2914: -2828 -2915: -1206 -2916: 6897 -2917: -6569 -2918: -6756 -2919: 8250 -2920: 1005 -2921: 3583 -2922: 8919 -2923: -3003 -2924: -1695 -2925: -3164 -2926: 6012 -2927: 4323 -2928: -2996 -2929: -1531 -2930: -4643 -2931: -1460 -2932: -9176 -2933: -1954 -2934: 9920 -2935: -490 -2936: 5325 -2937: -1773 -2938: -8135 -2939: 7349 -2940: -5016 -2941: 2520 -2942: 3404 -2943: 2089 -2944: 8349 -2945: -2416 -2946: 6960 -2947: -6704 -2948: -9367 -2949: 6256 -2950: 3604 -2951: -4143 -2952: -6360 -2953: 6427 -2954: 8543 -2955: 6142 -2956: -6987 -2957: 4147 -2958: 4424 -2959: -2161 -2960: -9848 -2961: -6882 -2962: 4744 -2963: 8596 -2964: 2006 -2965: -6374 -2966: 4038 -2967: 2301 -2968: 7178 -2969: 6904 -2970: -6610 -2971: 3129 -2972: -9528 -2973: 5103 -2974: 3645 -2975: -1632 -2976: 5566 -2977: 4413 -2978: -6985 -2979: 4172 -2980: 940 -2981: -6883 -2982: -3306 -2983: 8172 -2984: -9623 -2985: 9980 -2986: -3315 -2987: -3437 -2988: -2881 -2989: -8544 -2990: -6384 -2991: -1348 -2992: 5571 -2993: 6249 -2994: 7465 -2995: -7521 -2996: -8897 -2997: 6704 -2998: -1664 -2999: 3098 -3000: -9194 -3001: 6623 -3002: 6783 -3003: 3671 -3004: -1940 -3005: 7066 -3006: -1808 -3007: 1930 -3008: -2401 -3009: -8621 -3010: -6470 -3011: -8535 -3012: 2139 -3013: 8295 -3014: -7853 -3015: -2385 -3016: -6338 -3017: 3495 -3018: 7675 -3019: 7117 -3020: 5483 -3021: -5101 -3022: -1762 -3023: 3359 -3024: -1792 -3025: 576 -3026: 6677 -3027: 9475 -3028: -2841 -3029: 8304 -3030: -1238 -3031: 9797 -3032: 8213 -3033: -6646 -3034: 8170 -3035: 6352 -3036: 1221 -3037: -8793 -3038: -1615 -3039: -5699 -3040: -1323 -3041: -2532 -3042: -8816 -3043: -8874 -3044: 3335 -3045: 3681 -3046: -6526 -3047: 3994 -3048: -839 -3049: -4176 -3050: -4988 -3051: 1356 -3052: 3660 -3053: -8078 -3054: -1895 -3055: -3210 -3056: 9826 -3057: 924 -3058: 6068 -3059: 7683 -3060: -2157 -3061: 8159 -3062: -8446 -3063: -8473 -3064: -1042 -3065: 6978 -3066: 2337 -3067: 3134 -3068: 2404 -3069: 9979 -3070: -2271 -3071: 3473 -3072: 5403 -3073: 7906 -3074: 3463 -3075: -2573 -3076: -6672 -3077: 3381 -3078: -6697 -3079: -2691 -3080: -1160 -3081: 8692 -3082: -7167 -3083: 5247 -3084: 3544 -3085: 5041 -3086: 7259 -3087: -5591 -3088: 5036 -3089: -440 -3090: -6439 -3091: -2910 -3092: 1731 -3093: -1463 -3094: 3193 -3095: -3457 -3096: -2801 -3097: 9173 -3098: -4159 -3099: -7838 -3100: -5377 -3101: -7344 -3102: -3990 -3103: -134 -3104: 4038 -3105: 5212 -3106: 7358 -3107: -3931 -3108: 7739 -3109: 3659 -3110: 3571 -3111: 4587 -3112: -2497 -3113: -6330 -3114: 8553 -3115: -2153 -3116: 3117 -3117: -1529 -3118: -8285 -3119: 3216 -3120: -8366 -3121: -6213 -3122: 3469 -3123: 2160 -3124: 4038 -3125: 3213 -3126: -7907 -3127: -4605 -3128: 8585 -3129: -2686 -3130: 1340 -3131: -2576 -3132: 4583 -3133: 3430 -3134: 2307 -3135: -6563 -3136: 7230 -3137: -81 -3138: -513 -3139: 6604 -3140: -8150 -3141: -7877 -3142: -9638 -3143: 7560 -3144: -6879 -3145: -5103 -3146: -5351 -3147: -7226 -3148: 1753 -3149: 3247 -3150: -8837 -3151: -2670 -3152: -1202 -3153: 1027 -3154: 1234 -3155: 8417 -3156: -3726 -3157: -7403 -3158: 9864 -3159: 8457 -3160: 2004 -3161: -8067 -3162: 8717 -3163: 7262 -3164: 3425 -3165: 5750 -3166: -1214 -3167: -3425 -3168: 1011 -3169: 577 -3170: -1353 -3171: 9691 -3172: 5828 -3173: -15 -3174: -5473 -3175: 8302 -3176: 3385 -3177: -6269 -3178: 2061 -3179: -1801 -3180: -5993 -3181: 8408 -3182: 1853 -3183: -2718 -3184: 7850 -3185: 4782 -3186: -7843 -3187: 4410 -3188: -4702 -3189: 7580 -3190: -1996 -3191: -4449 -3192: -912 -3193: 2038 -3194: 2990 -3195: -7696 -3196: 6259 -3197: 8437 -3198: 2767 -3199: 994 -3200: -5946 -3201: -588 -3202: 9795 -3203: 7801 -3204: 5135 -3205: -1835 -3206: -2203 -3207: -33 -3208: -7204 -3209: -1334 -3210: -9768 -3211: -2159 -3212: 4363 -3213: -6793 -3214: -6027 -3215: 3496 -3216: 8176 -3217: -6060 -3218: -6466 -3219: -9856 -3220: 9524 -3221: 7572 -3222: -6240 -3223: 4798 -3224: 8725 -3225: -1206 -3226: 9943 -3227: -160 -3228: -7557 -3229: -1430 -3230: 4534 -3231: -3176 -3232: -5846 -3233: 3090 -3234: -7755 -3235: 678 -3236: -1669 -3237: 566 -3238: -1378 -3239: 7877 -3240: 2907 -3241: -2083 -3242: -2817 -3243: -5422 -3244: -9795 -3245: -7983 -3246: -309 -3247: -6203 -3248: -6599 -3249: 5403 -3250: -6560 -3251: -6250 -3252: 2505 -3253: 5246 -3254: -6678 -3255: 3374 -3256: -7180 -3257: 8870 -3258: 8795 -3259: 8799 -3260: 6185 -3261: 7383 -3262: -1828 -3263: 3301 -3264: -5783 -3265: -2089 -3266: 2906 -3267: -6824 -3268: -1495 -3269: -7960 -3270: -3819 -3271: -9910 -3272: -9066 -3273: -373 -3274: -7026 -3275: -9023 -3276: 5101 -3277: 1554 -3278: -4083 -3279: 5182 -3280: 7407 -3281: -1516 -3282: 2913 -3283: -7384 -3284: -6303 -3285: -6298 -3286: -3089 -3287: -6095 -3288: -7371 -3289: -1671 -3290: 7399 -3291: 3848 -3292: 3907 -3293: 6639 -3294: 2492 -3295: 1989 -3296: -2392 -3297: -5272 -3298: 3671 -3299: -9859 -3300: -1426 -3301: 8727 -3302: 8799 -3303: -3458 -3304: -4924 -3305: 333 -3306: -2392 -3307: 8447 -3308: -2434 -3309: 5343 -3310: 1879 -3311: 3786 -3312: 666 -3313: 6276 -3314: -8227 -3315: -6913 -3316: 5461 -3317: 6199 -3318: 5117 -3319: -5489 -3320: -1955 -3321: -2025 -3322: -7464 -3323: 1275 -3324: 3643 -3325: 4003 -3326: -9381 -3327: 3467 -3328: -3428 -3329: 5613 -3330: 9023 -3331: -4574 -3332: -269 -3333: 7178 -3334: -9796 -3335: 20 -3336: 1673 -3337: -7437 -3338: -3109 -3339: -3909 -3340: 8852 -3341: 8262 -3342: -1207 -3343: -3740 -3344: -3383 -3345: -8350 -3346: 6206 -3347: -8812 -3348: 3090 -3349: -8042 -3350: 2448 -3351: 5233 -3352: 7254 -3353: -1687 -3354: -8755 -3355: 9603 -3356: -6082 -3357: 6299 -3358: 8699 -3359: 3569 -3360: -6736 -3361: 8868 -3362: -1958 -3363: 5944 -3364: 1632 -3365: 5065 -3366: 6267 -3367: 2298 -3368: 891 -3369: 2042 -3370: 6945 -3371: -6126 -3372: -9 -3373: 3863 -3374: 2033 -3375: -2271 -3376: 3498 -3377: 3430 -3378: -2782 -3379: -7614 -3380: -6043 -3381: 3615 -3382: -2389 -3383: -1774 -3384: -1800 -3385: -6695 -3386: -1571 -3387: 2548 -3388: -8719 -3389: -5238 -3390: 2488 -3391: -5223 -3392: -6635 -3393: 2457 -3394: 7076 -3395: 9522 -3396: 1929 -3397: 8480 -3398: -6443 -3399: 5421 -3400: -6335 -3401: 7949 -3402: 4089 -3403: 2703 -3404: 3851 -3405: 7297 -3406: 3115 -3407: 763 -3408: -505 -3409: 2879 -3410: 7261 -3411: -1348 -3412: -1514 -3413: -3088 -3414: 1988 -3415: -8676 -3416: 3356 -3417: 5177 -3418: 7259 -3419: -7585 -3420: 3495 -3421: 827 -3422: -6360 -3423: 6155 -3424: -5595 -3425: -6711 -3426: 1704 -3427: -2080 -3428: -7149 -3429: 8974 -3430: -1365 -3431: -6525 -3432: -2747 -3433: -8547 -3434: 5225 -3435: 546 -3436: 6896 -3437: -3852 -3438: 8192 -3439: 8611 -3440: -1214 -3441: -1352 -3442: 2718 -3443: -9967 -3444: -3123 -3445: 8911 -3446: 3053 -3447: -430 -3448: -4513 -3449: 6677 -3450: -6099 -3451: 9049 -3452: -1466 -3453: 5513 -3454: 8535 -3455: 228 -3456: -8350 -3457: 2675 -3458: -5984 -3459: -3965 -3460: -6618 -3461: -5060 -3462: 3129 -3463: -380 -3464: 2590 -3465: -6672 -3466: -6109 -3467: -6237 -3468: -6241 -3469: -1579 -3470: -5994 -3471: 6620 -3472: 2877 -3473: -1011 -3474: -2651 -3475: -3710 -3476: -1622 -3477: 6652 -3478: 8450 -3479: -2396 -3480: -5022 -3481: 8721 -3482: 3324 -3483: 9032 -3484: 7741 -3485: -1377 -3486: 8479 -3487: -2585 -3488: 2591 -3489: -3868 -3490: -6088 -3491: 1249 -3492: 4308 -3493: -1269 -3494: -956 -3495: 6514 -3496: -9663 -3497: 8588 -3498: 4020 -3499: 3381 -3500: -6877 -3501: 7897 -3502: -6297 -3503: -6037 -3504: -7338 -3505: 4042 -3506: 1793 -3507: 3502 -3508: -2571 -3509: -4370 -3510: -1156 -3511: -3463 -3512: -6361 -3513: 8556 -3514: 7423 -3515: -8886 -3516: -2241 -3517: -7375 -3518: 8810 -3519: -1042 -3520: 8289 -3521: -1963 -3522: 4567 -3523: -7902 -3524: -4951 -3525: -2923 -3526: 5627 -3527: 86 -3528: 6036 -3529: -6321 -3530: 7610 -3531: 3753 -3532: 8917 -3533: -9477 -3534: -2266 -3535: -6109 -3536: -7530 -3537: -4818 -3538: -7408 -3539: -4940 -3540: -5360 -3541: -5127 -3542: -9450 -3543: 5410 -3544: 7346 -3545: 9031 -3546: 1664 -3547: -6043 -3548: -4938 -3549: 8955 -3550: 7683 -3551: -6148 -3552: 5025 -3553: 3768 -3554: -8304 -3555: 961 -3556: -6113 -3557: 3835 -3558: 3712 -3559: 9928 -3560: -995 -3561: -6967 -3562: -6347 -3563: -3594 -3564: 8413 -3565: -4993 -3566: 8570 -3567: -1160 -3568: 8593 -3569: -6042 -3570: -2686 -3571: 2388 -3572: -225 -3573: -6338 -3574: 3540 -3575: 5658 -3576: 5094 -3577: -2293 -3578: 2410 -3579: 1080 -3580: -4149 -3581: -4126 -3582: -3238 -3583: -6367 -3584: -9274 -3585: 2877 -3586: 1362 -3587: -7052 -3588: -4875 -3589: -2667 -3590: 840 -3591: 9108 -3592: -6704 -3593: -6162 -3594: 6557 -3595: -4630 -3596: 8446 -3597: 7011 -3598: 8006 -3599: -5557 -3600: -4980 -3601: 643 -3602: 6853 -3603: -2401 -3604: -1199 -3605: -6922 -3606: 1804 -3607: -3550 -3608: 3632 -3609: 3473 -3610: 7473 -3611: 5231 -3612: -6105 -3613: 3983 -3614: 1548 -3615: -1657 -3616: -9456 -3617: -7240 -3618: -1116 -3619: -1302 -3620: -6669 -3621: -5860 -3622: -9194 -3623: 2006 -3624: 9753 -3625: -1142 -3626: 6927 -3627: -4257 -3628: 5257 -3629: -1304 -3630: 1601 -3631: -2586 -3632: 8912 -3633: 2853 -3634: -5885 -3635: 9288 -3636: -5050 -3637: -4354 -3638: -1405 -3639: -6330 -3640: 7063 -3641: 7028 -3642: 3396 -3643: 4166 -3644: -6367 -3645: 5732 -3646: -6361 -3647: -7654 -3648: 2024 -3649: 7212 -3650: 4333 -3651: 2321 -3652: 4776 -3653: 8710 -3654: -4514 -3655: -3118 -3656: -8120 -3657: 8546 -3658: 6514 -3659: 4180 -3660: 3419 -3661: -2026 -3662: -6250 -3663: -6103 -3664: -4935 -3665: -7061 -3666: -9046 -3667: -9878 -3668: 7262 -3669: -6162 -3670: 4686 -3671: -1493 -3672: -819 -3673: -2883 -3674: 2756 -3675: 2449 -3676: 9921 -3677: -7415 -3678: 7319 -3679: 725 -3680: -4548 -3681: 9726 -3682: -445 -3683: 8692 -3684: -6004 -3685: -6486 -3686: 3153 -3687: -851 -3688: -6848 -3689: -8830 -3690: 4003 -3691: -4435 -3692: -6873 -3693: -8817 -3694: -4352 -3695: -4529 -3696: -8385 -3697: 2048 -3698: -2276 -3699: 2702 -3700: -2217 -3701: -7955 -3702: 30 -3703: 5820 -3704: 2978 -3705: 3792 -3706: -6166 -3707: 9196 -3708: 9224 -3709: 9010 -3710: -8620 -3711: -7501 -3712: -1689 -3713: 6515 -3714: 127 -3715: -1525 -3716: -1035 -3717: 1945 -3718: -1017 -3719: -1723 -3720: 2493 -3721: -9710 -3722: -7660 -3723: 3907 -3724: -2070 -3725: 7188 -3726: -1575 -3727: -9278 -3728: -9010 -3729: 8397 -3730: -819 -3731: -799 -3732: -3462 -3733: -1091 -3734: 4186 -3735: -6530 -3736: -5838 -3737: -3603 -3738: 8084 -3739: 4598 -3740: -868 -3741: -3842 -3742: 7216 -3743: 8746 -3744: 9266 -3745: -9732 -3746: 6353 -3747: -773 -3748: 3151 -3749: 7148 -3750: -3238 -3751: -4709 -3752: -2242 -3753: -6503 -3754: -6464 -3755: 1438 -3756: 7839 -3757: 2972 -3758: -6657 -3759: -8286 -3760: -7055 -3761: -8225 -3762: -3759 -3763: 8917 -3764: 7264 -3765: 8516 -3766: 4151 -3767: -8162 -3768: -6166 -3769: -6485 -3770: 7882 -3771: -8398 -3772: 4151 -3773: -761 -3774: 7461 -3775: 6276 -3776: -3166 -3777: -2330 -3778: -3762 -3779: 8699 -3780: -9317 -3781: -788 -3782: -1835 -3783: -6122 -3784: -716 -3785: -6238 -3786: -1017 -3787: 8675 -3788: -5012 -3789: -9009 -3790: 9906 -3791: 8783 -3792: -8257 -3793: 3467 -3794: 1051 -3795: 3709 -3796: -4 -3797: 9213 -3798: -8676 -3799: -4913 -3800: 7667 -3801: -9110 -3802: 2404 -3803: -7609 -3804: -2706 -3805: -3979 -3806: -5754 -3807: -1984 -3808: 4721 -3809: 9191 -3810: -716 -3811: 8721 -3812: -5774 -3813: -4573 -3814: 7270 -3815: 8974 -3816: -7397 -3817: -6854 -3818: 8241 -3819: 9146 -3820: 2047 -3821: 109 -3822: 6918 -3823: 669 -3824: 877 -3825: 1598 -3826: -1092 -3827: 2376 -3828: -1259 -3829: 9799 -3830: 3467 -3831: 30 -3832: 4211 -3833: 217 -3834: 4100 -3835: -7225 -3836: 6133 -3837: -5318 -3838: 4645 -3839: -7312 -3840: 9944 -3841: -8739 -3842: -2421 -3843: 9045 -3844: -7666 -3845: 9215 -3846: 2210 -3847: 878 -3848: 8070 -3849: 4147 -3850: 4785 -3851: 5269 -3852: 9727 -3853: -1247 -3854: 9296 -3855: 5737 -3856: -5866 -3857: 5041 -3858: 91 -3859: 4333 -3860: 4211 -3861: -5851 -3862: -5785 -3863: -3227 -3864: -3003 -3865: 4006 -3866: 6350 -3867: -5931 -3868: -1825 -3869: -5757 -3870: -3762 -3871: -7328 -3872: -1921 -3873: -5699 -3874: 3377 -3875: 3485 -3876: 3891 -3877: -5103 -3878: -3011 -3879: -6320 -3880: 9228 -3881: -446 -3882: 867 -3883: -5333 -3884: 266 -3885: -3586 -3886: -1097 -3887: -6162 -3888: 9214 -3889: -6023 -3890: 6379 -3891: 4782 -3892: 5405 -3893: -4655 -3894: -8868 -3895: 3736 -3896: -6837 -3897: 7089 -3898: 9307 -3899: -1726 -3900: 3328 -3901: 5378 -3902: 7882 -3903: 3536 -3904: -5060 -3905: -1448 -3906: -1456 -3907: -4051 -3908: 2307 -3909: 3964 -3910: 9072 -3911: 945 -3912: 7060 -3913: 1322 -3914: -617 -3915: 8063 -3916: 1473 -3917: -1571 -3918: 8868 -3919: 7644 -3920: 7642 -3921: -8260 -3922: 4549 -3923: 9394 -3924: -5942 -3925: 2940 -3926: 3268 -3927: 6994 -3928: 9939 -3929: 9275 -3930: 7845 -3931: 1061 -3932: -7373 -3933: -9555 -3934: -873 -3935: 5287 -3936: 3987 -3937: -5925 -3938: -5923 -3939: -1322 -3940: 3291 -3941: -7054 -3942: 9372 -3943: 5851 -3944: -1142 -3945: -5783 -3946: -1820 -3947: -1283 -3948: -390 -3949: -8366 -3950: -5660 -3951: -5720 -3952: 9299 -3953: -443 -3954: -6387 -3955: -6247 -3956: 4289 -3957: -6985 -3958: 7429 -3959: -6667 -3960: -1394 -3961: 7092 -3962: 1683 -3963: 6736 -3964: -7521 -3965: 3310 -3966: 474 -3967: -4285 -3968: -7962 -3969: 5837 -3970: 9332 -3971: 4095 -3972: 8064 -3973: -6863 -3974: 6147 -3975: 4013 -3976: 9326 -3977: 2411 -3978: 9130 -3979: 9100 -3980: 1693 -3981: -1010 -3982: -3028 -3983: 6623 -3984: 7969 -3985: 9272 -3986: 1548 -3987: 4374 -3988: -6376 -3989: -7118 -3990: 3137 -3991: -2445 -3992: 393 -3993: 7997 -3994: 9856 -3995: 2032 -3996: -5997 -3997: -8531 -3998: 1941 -3999: 6234 -4000: 767 -4001: -1139 -4002: 3173 -4003: -9727 -4004: 2716 -4005: -912 -4006: -3324 -4007: -2915 -4008: -6394 -4009: -559 -4010: 6003 -4011: 6071 -4012: -1647 -4013: -718 -4014: 6142 -4015: -6668 -4016: -6914 -4017: 8216 -4018: -2154 -4019: 9301 -4020: 6569 -4021: -1010 -4022: 8969 -4023: 9147 -4024: 8532 -4025: -9289 -4026: 1498 -4027: 9015 -4028: 3129 -4029: 7115 -4030: -5732 -4031: -530 -4032: 3916 -4033: -7269 -4034: 6228 -4035: -5650 -4036: 3398 -4037: -8425 -4038: 1556 -4039: 3499 -4040: -8084 -4041: 7629 -4042: -755 -4043: -9368 -4044: -4872 -4045: -5787 -4046: 9288 -4047: 3485 -4048: 882 -4049: -884 -4050: -581 -4051: 7866 -4052: -8611 -4053: -5537 -4054: -883 -4055: 3282 -4056: -5799 -4057: 5743 -4058: -2642 -4059: 6206 -4060: -9970 -4061: 4374 -4062: 8681 -4063: 7510 -4064: 4499 -4065: 5108 -4066: -6825 -4067: 4250 -4068: 6383 -4069: 9466 -4070: 576 -4071: 1887 -4072: 6168 -4073: -3258 -4074: 4097 -4075: -5867 -4076: 7465 -4077: -1955 -4078: 503 -4079: -1442 -4080: 2703 -4081: 3088 -4082: -5890 -4083: 3228 -4084: -5112 -4085: 8873 -4086: -3462 -4087: 9215 -4088: -2291 -4089: 3011 -4090: 3287 -4091: -2477 -4092: 9161 -4093: 9854 -4094: -4480 -4095: 3971 -4096: -6727 -4097: 6465 -4098: 5569 -4099: -2037 -4100: 3420 -4101: 1606 -4102: 50 -4103: -5607 -4104: -4345 -4105: -8406 -4106: 4918 -4107: -6113 -4108: -9050 -4109: -2645 -4110: -2060 -4111: -2741 -4112: 5741 -4113: -1765 -4114: 8644 -4115: 741 -4116: -6728 -4117: -6215 -4118: -516 -4119: 1761 -4120: 860 -4121: -9970 -4122: 7222 -4123: 6665 -4124: -6842 -4125: -8122 -4126: -5555 -4127: 4020 -4128: -6645 -4129: 717 -4130: -6439 -4131: 9151 -4132: -4951 -4133: 7436 -4134: 8992 -4135: 1546 -4136: 5138 -4137: -5138 -4138: 9130 -4139: 1027 -4140: -5694 -4141: -531 -4142: 842 -4143: 6423 -4144: 7255 -4145: -5994 -4146: -5613 -4147: -729 -4148: 4499 -4149: 6850 -4150: 9442 -4151: -5553 -4152: -1383 -4153: 9202 -4154: -5223 -4155: -6568 -4156: 1632 -4157: -1301 -4158: 8601 -4159: 855 -4160: -8771 -4161: 7436 -4162: 3171 -4163: 7258 -4164: -1342 -4165: 9382 -4166: 9248 -4167: -533 -4168: 6888 -4169: 3652 -4170: 4114 -4171: -8425 -4172: -5614 -4173: -6913 -4174: -3842 -4175: 2952 -4176: -9175 -4177: 4028 -4178: 9466 -4179: 9315 -4180: 7650 -4181: -4033 -4182: -559 -4183: 2341 -4184: 2186 -4185: 8437 -4186: 8710 -4187: 9518 -4188: -7419 -4189: 4322 -4190: 4694 -4191: 5522 -4192: 9696 -4193: -803 -4194: -552 -4195: 9367 -4196: 3615 -4197: 4435 -4198: -5634 -4199: 1831 -4200: 4410 -4201: 4969 -4202: -6109 -4203: -5301 -4204: -7086 -4205: -5717 -4206: -1257 -4207: 4537 -4208: 7182 -4209: 9476 -4210: 6198 -4211: 7324 -4212: 3360 -4213: -4130 -4214: -9630 -4215: -1508 -4216: 3247 -4217: -517 -4218: -6645 -4219: 3037 -4220: 8261 -4221: 4343 -4222: 8578 -4223: -1437 -4224: 9164 -4225: -2184 -4226: -4162 -4227: 3693 -4228: -895 -4229: 3447 -4230: 6452 -4231: 5474 -4232: 7967 -4233: 3579 -4234: -1363 -4235: 9469 -4236: 8434 -4237: 9602 -4238: 8955 -4239: 898 -4240: -5646 -4241: -7026 -4242: 7053 -4243: -6948 -4244: -8252 -4245: -9159 -4246: -2305 -4247: 4224 -4248: 5191 -4249: -3467 -4250: -6162 -4251: -5443 -4252: 9665 -4253: -8449 -4254: 4534 -4255: -3374 -4256: 6742 -4257: 8219 -4258: -1080 -4259: -456 -4260: -2137 -4261: 7035 -4262: 6962 -4263: 8950 -4264: 1097 -4265: 6078 -4266: 3645 -4267: 114 -4268: -827 -4269: -859 -4270: -310 -4271: 7803 -4272: -489 -4273: 6533 -4274: 3206 -4275: 6075 -4276: -1125 -4277: 9131 -4278: 4703 -4279: 4355 -4280: -5573 -4281: -5422 -4282: 9062 -4283: -9533 -4284: 9435 -4285: 4068 -4286: 4502 -4287: -6258 -4288: 4582 -4289: 5854 -4290: 1021 -4291: 3956 -4292: -7511 -4293: 5690 -4294: 302 -4295: 4551 -4296: -4778 -4297: -4888 -4298: 4431 -4299: -2039 -4300: -3612 -4301: 5141 -4302: 6566 -4303: -7955 -4304: 9600 -4305: -3855 -4306: 5025 -4307: 4821 -4308: -2923 -4309: -7047 -4310: -5419 -4311: 8817 -4312: 768 -4313: -4508 -4314: -5985 -4315: -8594 -4316: 6568 -4317: -526 -4318: -6004 -4319: -6439 -4320: -687 -4321: 3496 -4322: 1693 -4323: 2442 -4324: 3236 -4325: -2039 -4326: -2957 -4327: 4524 -4328: 9933 -4329: 3227 -4330: -6998 -4331: 7682 -4332: 1704 -4333: -7305 -4334: -2736 -4335: -845 -4336: -450 -4337: 5854 -4338: 8433 -4339: 110 -4340: 4254 -4341: 8911 -4342: 1058 -4343: 1491 -4344: -8108 -4345: 6014 -4346: -130 -4347: 5956 -4348: -5377 -4349: 4569 -4350: 5198 -4351: -1232 -4352: -2477 -4353: 4592 -4354: 8870 -4355: 9703 -4356: -8108 -4357: -2061 -4358: -7021 -4359: 7892 -4360: 867 -4361: 3733 -4362: -5630 -4363: 7462 -4364: 7840 -4365: -5381 -4366: -6776 -4367: -1260 -4368: -5319 -4369: -3703 -4370: 1778 -4371: 1623 -4372: -5355 -4373: -687 -4374: -4665 -4375: 9617 -4376: -5360 -4377: -1296 -4378: -4185 -4379: -2028 -4380: 3750 -4381: -1099 -4382: -3759 -4383: 1764 -4384: 9524 -4385: 9562 -4386: -5925 -4387: 1438 -4388: -865 -4389: 473 -4390: 3117 -4391: 5161 -4392: 4372 -4393: -3863 -4394: 2936 -4395: -5861 -4396: -7044 -4397: -9738 -4398: 8157 -4399: 8427 -4400: -3815 -4401: 5143 -4402: 7791 -4403: -4363 -4404: -7301 -4405: 2613 -4406: -9145 -4407: -343 -4408: -3562 -4409: 2315 -4410: 8868 -4411: 578 -4412: -8024 -4413: -7339 -4414: -1551 -4415: 9610 -4416: 7785 -4417: 9267 -4418: 1673 -4419: -613 -4420: -45 -4421: -5774 -4422: 4645 -4423: -5526 -4424: -4051 -4425: 2655 -4426: -5342 -4427: 8900 -4428: 5066 -4429: -291 -4430: -2028 -4431: 9216 -4432: 9617 -4433: 3606 -4434: -6824 -4435: -5341 -4436: 7704 -4437: 6751 -4438: 7629 -4439: 4459 -4440: 1622 -4441: -2975 -4442: -5706 -4443: 4427 -4444: -8806 -4445: 4544 -4446: 8176 -4447: -607 -4448: 1664 -4449: -6446 -4450: -5304 -4451: -7599 -4452: -6178 -4453: -6735 -4454: -2329 -4455: -7067 -4456: -9365 -4457: 9146 -4458: 3381 -4459: 9325 -4460: 591 -4461: 4434 -4462: 4665 -4463: -8398 -4464: -5838 -4465: 6423 -4466: -7463 -4467: -8544 -4468: 3038 -4469: -5608 -4470: 4534 -4471: -2346 -4472: 7845 -4473: -5729 -4474: 1490 -4475: -5546 -4476: 1462 -4477: -5526 -4478: -3107 -4479: -6867 -4480: 5123 -4481: -6027 -4482: -9014 -4483: -5339 -4484: -9472 -4485: -2650 -4486: 6333 -4487: 5642 -4488: -1304 -4489: 9464 -4490: -8874 -4491: 4487 -4492: 4635 -4493: -6918 -4494: -5835 -4495: 4567 -4496: 5055 -4497: -2009 -4498: 4682 -4499: -7469 -4500: -8612 -4501: 4042 -4502: 4002 -4503: 9173 -4504: 8801 -4505: -9490 -4506: -3317 -4507: 9397 -4508: -6192 -4509: 2492 -4510: -5387 -4511: -1508 -4512: 4606 -4513: -7010 -4514: 3577 -4515: -7987 -4516: -7960 -4517: 30 -4518: 2021 -4519: -1907 -4520: -6646 -4521: -8380 -4522: -8079 -4523: 1547 -4524: 2695 -4525: -8388 -4526: -5312 -4527: -9140 -4528: -5321 -4529: -312 -4530: 7308 -4531: 1760 -4532: 6877 -4533: -4755 -4534: 9300 -4535: -7240 -4536: 7251 -4537: 3754 -4538: -7014 -4539: 7414 -4540: 3150 -4541: 7589 -4542: -4708 -4543: -3475 -4544: 7866 -4545: -1268 -4546: -9487 -4547: -993 -4548: -5345 -4549: 8800 -4550: -6445 -4551: -526 -4552: 6813 -4553: 3762 -4554: 2008 -4555: 1395 -4556: -2384 -4557: 6668 -4558: -3804 -4559: 8900 -4560: -5345 -4561: 6602 -4562: -5521 -4563: 9501 -4564: -5809 -4565: -7703 -4566: 1281 -4567: -410 -4568: -6255 -4569: -6020 -4570: 4134 -4571: 4650 -4572: 3874 -4573: -1916 -4574: -8068 -4575: 1150 -4576: 1165 -4577: 4821 -4578: 9620 -4579: -520 -4580: 1147 -4581: -3601 -4582: -4734 -4583: -5312 -4584: 9732 -4585: 4711 -4586: -5319 -4587: -3465 -4588: -1994 -4589: -4403 -4590: -2330 -4591: -1381 -4592: 6427 -4593: 6742 -4594: 3764 -4595: -377 -4596: -5313 -4597: 2006 -4598: 8173 -4599: -1916 -4600: 9743 -4601: 5692 -4602: -882 -4603: -783 -4604: -6782 -4605: 5316 -4606: -2337 -4607: 3205 -4608: -5456 -4609: -302 -4610: -868 -4611: 4684 -4612: -6530 -4613: -9827 -4614: -5448 -4615: 9743 -4616: 9481 -4617: -266 -4618: -1664 -4619: 7026 -4620: 3533 -4621: -5656 -4622: -844 -4623: 8469 -4624: -4749 -4625: -268 -4626: -5312 -4627: 1234 -4628: -8505 -4629: -8464 -4630: 2907 -4631: -1539 -4632: -354 -4633: -408 -4634: 2702 -4635: -6488 -4636: -8165 -4637: 8870 -4638: -7573 -4639: 4686 -4640: 5572 -4641: -7187 -4642: -694 -4643: -4892 -4644: -607 -4645: 4001 -4646: -8069 -4647: 9685 -4648: -5794 -4649: -7983 -4650: 1409 -4651: -8867 -4652: 9783 -4653: -8385 -4654: -2346 -4655: -9439 -4656: 6115 -4657: 3721 -4658: 8006 -4659: -1683 -4660: -3632 -4661: 3962 -4662: -225 -4663: -2555 -4664: -1314 -4665: 4668 -4666: 160 -4667: 9619 -4668: -5657 -4669: 7846 -4670: 9113 -4671: -251 -4672: 6994 -4673: -3779 -4674: 7628 -4675: 2008 -4676: -7632 -4677: 1359 -4678: -3608 -4679: 4551 -4680: -3803 -4681: 9268 -4682: -5853 -4683: 7061 -4684: 5020 -4685: 8469 -4686: -520 -4687: 795 -4688: -8185 -4689: -1360 -4690: -3541 -4691: 3696 -4692: 7886 -4693: 4401 -4694: -5144 -4695: -5238 -4696: 2471 -4697: 6579 -4698: -7510 -4699: 1632 -4700: -200 -4701: -9014 -4702: 6024 -4703: 4913 -4704: -6529 -4705: 9279 -4706: 9006 -4707: -7931 -4708: 4802 -4709: -3640 -4710: -5243 -4711: -2242 -4712: 9780 -4713: 9568 -4714: -3861 -4715: 1103 -4716: 9805 -4717: -3516 -4718: -6852 -4719: -4861 -4720: 4042 -4721: -276 -4722: 9804 -4723: 4645 -4724: -6148 -4725: -755 -4726: -1296 -4727: 7282 -4728: 1716 -4729: -7675 -4730: -2358 -4731: 8879 -4732: -451 -4733: 9202 -4734: -2355 -4735: 9268 -4736: 3026 -4737: 991 -4738: 9794 -4739: -6515 -4740: -7750 -4741: 4824 -4742: -5477 -4743: 5480 -4744: 2728 -4745: -1204 -4746: 4967 -4747: 4204 -4748: 5149 -4749: -1367 -4750: 7692 -4751: -7453 -4752: -3453 -4753: -355 -4754: -5907 -4755: 7847 -4756: 8546 -4757: 2367 -4758: -6548 -4759: 4431 -4760: 9833 -4761: 8163 -4762: 6677 -4763: -6879 -4764: -542 -4765: -464 -4766: -3457 -4767: -5231 -4768: 9529 -4769: 6524 -4770: -8764 -4771: 3096 -4772: -1586 -4773: 4806 -4774: -5156 -4775: 4743 -4776: 7387 -4777: 9843 -4778: 7098 -4779: 2731 -4780: 9288 -4781: -607 -4782: 4840 -4783: 4559 -4784: -5305 -4785: 9603 -4786: -431 -4787: 1662 -4788: -7370 -4789: 9599 -4790: 2050 -4791: 8414 -4792: 4618 -4793: -7406 -4794: -7955 -4795: -481 -4796: 4721 -4797: -6921 -4798: -5809 -4799: -5216 -4800: 7616 -4801: 6275 -4802: -273 -4803: -2023 -4804: 4804 -4805: 7112 -4806: -7582 -4807: -4031 -4808: 9459 -4809: 3115 -4810: -443 -4811: -8457 -4812: 9610 -4813: -205 -4814: -159 -4815: 4256 -4816: -9972 -4817: -2067 -4818: -5926 -4819: 1579 -4820: 7554 -4821: 7210 -4822: 4797 -4823: -4244 -4824: -444 -4825: 2698 -4826: -4580 -4827: -1410 -4828: 86 -4829: -5185 -4830: 1150 -4831: -3824 -4832: 5961 -4833: 855 -4834: 4319 -4835: 9641 -4836: -1214 -4837: 3583 -4838: -4872 -4839: 7195 -4840: -6776 -4841: 4768 -4842: 1164 -4843: 8558 -4844: 9989 -4845: -6985 -4846: -121 -4847: -7387 -4848: 4035 -4849: 859 -4850: -5147 -4851: 7629 -4852: -5413 -4853: 3723 -4854: -845 -4855: -2801 -4856: 7945 -4857: -925 -4858: -5845 -4859: -6584 -4860: -5112 -4861: 7948 -4862: 8825 -4863: -7041 -4864: 8173 -4865: 8642 -4866: -8212 -4867: 3863 -4868: 5542 -4869: 4840 -4870: 9194 -4871: 3962 -4872: 78 -4873: 1247 -4874: 9786 -4875: -906 -4876: -94 -4877: 8642 -4878: 372 -4879: 5024 -4880: -3300 -4881: -892 -4882: -1939 -4883: -2677 -4884: 4957 -4885: 8032 -4886: 7346 -4887: -5165 -4888: 4905 -4889: -544 -4890: 4922 -4891: 3381 -4892: 2241 -4893: -201 -4894: -7539 -4895: -6648 -4896: 7080 -4897: -6852 -4898: 1063 -4899: 7706 -4900: 1179 -4901: 9675 -4902: 4679 -4903: -3210 -4904: 5869 -4905: 1990 -4906: -9630 -4907: 4905 -4908: 8944 -4909: 2850 -4910: -1916 -4911: 4641 -4912: 3445 -4913: 977 -4914: -5745 -4915: -5069 -4916: 5506 -4917: 8248 -4918: -865 -4919: 4821 -4920: -5890 -4921: -5963 -4922: 5495 -4923: -1045 -4924: 9599 -4925: -6126 -4926: 9933 -4927: 2582 -4928: 99 -4929: 4816 -4930: -599 -4931: -3717 -4932: 39 -4933: 2697 -4934: 3374 -4935: -8560 -4936: -3204 -4937: -8391 -4938: 6798 -4939: 7350 -4940: -9243 -4941: -1092 -4942: -5647 -4943: -1290 -4944: 2222 -4945: 13 -4946: -8541 -4947: 1602 -4948: 4669 -4949: -7997 -4950: 9490 -4951: -5415 -4952: 6808 -4953: 4172 -4954: -9700 -4955: -7717 -4956: -5417 -4957: -2460 -4958: 4487 -4959: -140 -4960: -9412 -4961: -6192 -4962: -1455 -4963: -811 -4964: -6430 -4965: 4665 -4966: -3676 -4967: 9837 -4968: -5120 -4969: -117 -4970: -4340 -4971: 9980 -4972: 3671 -4973: 4499 -4974: -873 -4975: -8289 -4976: 4939 -4977: 4315 -4978: -4595 -4979: 3110 -4980: -5011 -4981: -6299 -4982: -7992 -4983: -677 -4984: 8547 -4985: -1984 -4986: 4189 -4987: 8911 -4988: -995 -4989: 9125 -4990: -5360 -4991: -527 -4992: 2905 -4993: 1268 -4994: 464 -4995: 3467 -4996: -1368 -4997: 8083 -4998: -4861 -4999: 9566 -Day 20 part 1: -11641 (0.072539299) diff --git a/src/common/abs.rs b/src/common/abs.rs new file mode 100644 index 0000000..181274d --- /dev/null +++ b/src/common/abs.rs @@ -0,0 +1,49 @@ +pub trait Abs { + fn abs(&self) -> Self; + fn abs_beween(&self, other: &Self) -> Self; + fn is_negative(&self) -> bool; +} + +macro_rules! signed_impl { + ($($t:ty)*) => ($( + impl Abs for $t { + #[inline] + fn abs(&self) -> $t { + if self.is_negative() { -*self } else { *self } + } + #[inline] + fn abs_beween(&self, other: &Self) -> Self { + (*self - *other).abs() + } + #[inline] + fn is_negative(&self) -> bool { + *self < 0 + } + } + )*) +} +signed_impl!(isize i8 i16 i32 i64 i128); + +macro_rules! unsigned_impl { + ($($t:ty)*) => ($( + impl Abs for $t { + #[inline] + fn abs(&self) -> $t { + *self + } + #[inline] + fn abs_beween(&self, other: &Self) -> Self { + if *self >= *other { + *self - *other + } else { + *other-*self + } + } + #[inline] + fn is_negative(&self) -> bool { + false + } + } + )*) +} +unsigned_impl!(usize u8 u16 u32 u64 u128); diff --git a/src/common/area.rs b/src/common/area.rs index dbda7b1..c05c588 100644 --- a/src/common/area.rs +++ b/src/common/area.rs @@ -3,25 +3,25 @@ use std::fmt::Display; use num_traits::{Num, NumAssignOps}; -use super::pos::Pos; +use super::pos2::Pos2; #[derive(Debug, Clone, Copy, Default)] pub struct Area where T: Num, { - lower_left: Pos, - upper_right: Pos, + lower_left: Pos2, + upper_right: Pos2, } impl Area where T: Num + Ord + Copy, { - pub fn new(p1: Pos, p2: Pos) -> Area { + pub fn new(p1: Pos2, p2: Pos2) -> Area { Area { - lower_left: p1.min_components(&p2), - upper_right: p1.max_components(&p2), + lower_left: p1.min_components(p2), + upper_right: p1.max_components(p2), } } } @@ -30,25 +30,25 @@ impl Area where T: Num + Ord + Copy, { - pub fn extend(&self, pos: Pos) -> Area { + pub fn extend(&self, pos: Pos2) -> Area { if self.contains(pos) { return *self; } Area { - lower_left: self.lower_left.min_components(&pos), - upper_right: self.upper_right.max_components(&pos), + lower_left: self.lower_left.min_components(pos), + upper_right: self.upper_right.max_components(pos), } } - pub fn get_lower_left(&self) -> Pos { + pub fn get_lower_left(&self) -> Pos2 { self.lower_left } - pub fn get_upper_right(&self) -> Pos { + pub fn get_upper_right(&self) -> Pos2 { self.upper_right } - pub fn contains(&self, pos: Pos) -> bool { + pub fn contains(&self, pos: Pos2) -> bool { self.lower_left.x() >= pos.x() && pos.x() >= self.upper_right.x() && self.lower_left.y() >= pos.y() @@ -62,11 +62,11 @@ where { pub fn from_iterator(mut iter: I) -> Option where - I: Iterator>, + I: Iterator>, { let first = *iter.next()?; let (upper, lower) = iter.fold((first, first), |(mx, mn), p| { - (mx.max_components(p), mn.min_components(p)) + (mx.max_components(*p), mn.min_components(*p)) }); Some(Area::new(lower, upper)) @@ -214,12 +214,12 @@ impl<'a, T> Iterator for ColIterator<'a, T> where T: Num + Ord + NumAssignOps + Copy, { - type Item = Pos; + type Item = Pos2; fn next(&mut self) -> Option { if (self.ascending && self.col <= self.area.upper_right.x()) || (!self.ascending && self.col >= self.area.lower_left.x()) { - let pos = Pos::new(self.col, self.row); + let pos = Pos2::new(self.col, self.row); if self.ascending { self.col += T::one(); } else { @@ -266,13 +266,13 @@ impl<'a, T> Iterator for CellIterator<'a, T> where T: Num + Ord + NumAssignOps + Copy, { - type Item = Pos; + type Item = Pos2; fn next(&mut self) -> Option { if (self.ascending && self.row <= self.area.upper_right.y()) || (!self.ascending && self.row >= self.area.lower_left.y()) { - let pos = Pos::new(self.col, self.row); + let pos = Pos2::new(self.col, self.row); if self.ascending { self.col += T::one(); if self.col > self.area.upper_right.x() { @@ -300,18 +300,18 @@ mod test { #[test] fn test_cell_iterator() { - let area = Area::new(Pos::new(-1, -1), Pos::new(1, 1)); + let area = Area::new(Pos2::new(-1, -1), Pos2::new(1, 1)); let result = area.cells(true).collect::>(); let expected = vec![ - Pos::new(-1, -1), - Pos::new(0, -1), - Pos::new(1, -1), - Pos::new(-1, 0), - Pos::new(0, 0), - Pos::new(1, 0), - Pos::new(-1, 1), - Pos::new(0, 1), - Pos::new(1, 1), + Pos2::new(-1, -1), + Pos2::new(0, -1), + Pos2::new(1, -1), + Pos2::new(-1, 0), + Pos2::new(0, 0), + Pos2::new(1, 0), + Pos2::new(-1, 1), + Pos2::new(0, 1), + Pos2::new(1, 1), ]; assert_eq!(result, expected); } diff --git a/src/common/direction.rs b/src/common/direction.rs index cd14a27..b3d6a83 100644 --- a/src/common/direction.rs +++ b/src/common/direction.rs @@ -1,27 +1,18 @@ -use super::{pos::Pos, turn::Turn}; +use super::{pos2::Pos2, turn::Turn}; +use num_traits::{Num, Signed}; use std::{fmt::Display, ops::Add}; - use Direction::*; use Turn::*; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum Direction { - East, - North, - West, - South, + East = 0, + North = 1, + West = 2, + South = 3, } impl Direction { - pub fn as_pos(&self) -> Pos { - match *self { - East => Pos::new(1, 0), - North => Pos::new(0, 1), - West => Pos::new(-1, 0), - South => Pos::new(0, -1), - } - } - pub fn is_perpendicular(&self, other: &Direction) -> bool { match *self { East => *other != East && *other != West, @@ -91,35 +82,26 @@ impl Display for Direction { } } -impl Add> for Direction { - type Output = Pos; - - fn add(self, rhs: Pos) -> Self::Output { - Pos::add(rhs, self) +impl From for Pos2 +where + T: Num + Signed, +{ + fn from(value: Direction) -> Self { + match value { + East => Pos2::new(T::one(), T::zero()), + North => Pos2::new(T::zero(), -T::one()), + West => Pos2::new(-T::one(), T::zero()), + South => Pos2::new(T::zero(), T::one()), + } } } -impl Add> for &Direction { - type Output = Pos; +impl Add for Pos2 { + type Output = Pos2; - fn add(self, rhs: Pos) -> Self::Output { - Pos::add(rhs, *self) - } -} - -impl Add<&Pos> for Direction { - type Output = Pos; - - fn add(self, rhs: &Pos) -> Self::Output { - Pos::add(*rhs, self) - } -} - -impl Add<&Pos> for &Direction { - type Output = Pos; - - fn add(self, rhs: &Pos) -> Self::Output { - Pos::add(*rhs, *self) + fn add(self, rhs: Direction) -> Self::Output { + let rhs: Pos2 = rhs.into(); + self + rhs } } @@ -130,27 +112,3 @@ impl Add for Direction { self.turn(rhs) } } - -impl Add<&Turn> for Direction { - type Output = Self; - - fn add(self, rhs: &Turn) -> Direction { - Direction::add(self, *rhs) - } -} - -impl Add for &Direction { - type Output = Direction; - - fn add(self, rhs: Turn) -> Direction { - Direction::add(*self, rhs) - } -} - -impl Add<&Turn> for &Direction { - type Output = Direction; - - fn add(self, rhs: &Turn) -> Direction { - Direction::add(*self, *rhs) - } -} diff --git a/src/common/math.rs b/src/common/math.rs index 6b22811..fccb9df 100644 --- a/src/common/math.rs +++ b/src/common/math.rs @@ -27,20 +27,24 @@ where a } -pub fn gcd(a: T, b: T) -> T +pub fn gcd(a: T, b: T) -> Option where T: Num + Ord + Copy, { assert!(a >= T::zero()); assert!(b >= T::zero()); + if a.is_zero() { - b - } else if b.is_zero() { - a + if b.is_zero() { + None + } else { + Some(b) + } } else { - non_zero_gcd(a, b) + Some(non_zero_gcd(a, b)) } } + pub fn lcm(a: T, b: T) -> T where T: Num + Ord + Copy, @@ -77,9 +81,9 @@ mod tests { #[test] fn some_simple_gcd() { - assert_eq!(5, gcd(10, 15)); - assert_eq!(7, gcd(21, 49)); - assert_eq!(1, gcd(13, 17)); + assert_eq!(Some(5), gcd(10, 15)); + assert_eq!(Some(7), gcd(21, 49)); + assert_eq!(Some(1), gcd(13, 17)); } #[test] diff --git a/src/common/mod.rs b/src/common/mod.rs index 3a2379d..c1f39da 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -1,8 +1,12 @@ +pub mod abs; pub mod area; pub mod direction; pub mod file; pub mod helper; pub mod math; +pub mod name; pub mod parser; -pub mod pos; +pub mod pos2; +pub mod pos3; pub mod turn; +pub mod unit_vector; diff --git a/src/common/name.rs b/src/common/name.rs new file mode 100644 index 0000000..bc79e69 --- /dev/null +++ b/src/common/name.rs @@ -0,0 +1,30 @@ +use std::{fmt::Display, ops::Deref, rc::Rc}; + +#[derive(Debug, Clone, PartialEq, Eq, Hash, PartialOrd, Ord)] +pub struct Name(Rc); + +impl Name { + pub fn as_str(&self) -> &str { + &self.0 + } +} + +impl Deref for Name { + type Target = str; + + fn deref(&self) -> &Self::Target { + &self.0 + } +} + +impl From<&str> for Name { + fn from(value: &str) -> Self { + Self(Rc::from(value)) + } +} + +impl Display for Name { + fn fmt(&self, f: &mut std::fmt::Formatter<'_>) -> std::fmt::Result { + self.0.fmt(f) + } +} diff --git a/src/common/parser.rs b/src/common/parser.rs index fa6b022..1b66fed 100644 --- a/src/common/parser.rs +++ b/src/common/parser.rs @@ -1,7 +1,7 @@ use nom::{ branch::alt, bytes::complete::tag, - character::complete::{line_ending, space0, space1}, + character::complete::{line_ending, space0, space1, u32}, combinator::{eof, opt, value}, error::ParseError, multi::many0, @@ -34,6 +34,10 @@ where terminated(line, alt((line_ending, eof))) } +pub fn usize<'a, E: ParseError<&'a str>>(input: &'a str) -> IResult<&'a str, usize, E> { + u32.map(|v| v as usize).parse(input) +} + pub fn true_false<'a, E: ParseError<&'a str>>(input: &'a str) -> IResult<&'a str, bool, E> { alt((value(true, tag("true")), value(false, tag("false"))))(input) } diff --git a/src/common/pos.rs b/src/common/pos.rs deleted file mode 100644 index 5e692a2..0000000 --- a/src/common/pos.rs +++ /dev/null @@ -1,278 +0,0 @@ -use super::direction::Direction; -use super::math::gcd; -use num_traits::{Num, NumCast, Signed}; -use std::fmt; -use std::ops::{Add, Mul, Sub}; - -#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] -pub struct Pos(T, T) -where - T: Num; - -impl Pos -where - T: Num, -{ - pub fn new(x: T, y: T) -> Pos { - Pos(x, y) - } -} - -impl Pos -where - T: Num + Copy, -{ - pub fn splat(v: T) -> Pos { - Pos(v, v) - } - - pub fn x(&self) -> T { - self.0 - } - - pub fn y(&self) -> T { - self.1 - } -} - -impl Pos -where - T: Num + Ord + Copy, -{ - pub fn normalize(&self) -> (Pos, T) { - if self.0.is_zero() && self.1.is_zero() { - (*self, T::one()) - } else { - let ggt = gcd(self.0, self.1); - (Pos::new(self.0 / ggt, self.1 / ggt), ggt) - } - } -} - -impl Pos -where - T: Num + NumCast, -{ - pub fn angle(&self) -> f64 { - if let (Some(x), Some(y)) = (self.0.to_f64(), self.1.to_f64()) { - y.atan2(x) - } else { - f64::NAN - } - } - - pub fn angle2(&self) -> f64 { - if let (Some(x), Some(y)) = (self.0.to_f64(), self.1.to_f64()) { - (-x.atan2(-y) + std::f64::consts::PI).rem_euclid(2.0 * std::f64::consts::PI) - } else { - f64::NAN - } - } -} - -impl Pos -where - T: Num + Ord + Copy, -{ - pub fn max_components(&self, other: &Pos) -> Self { - Self(self.0.max(other.0), self.1.max(other.1)) - } - - pub fn min_components(&self, other: &Pos) -> Self { - Self(self.0.min(other.0), self.1.min(other.1)) - } -} - -impl Pos -where - T: Num + Signed, -{ - pub fn abs(&self) -> T { - self.0.abs() + self.1.abs() - } -} - -impl fmt::Display for Pos -where - T: Num + fmt::Display, -{ - fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { - write!(f, "({}, {})", self.0, self.1) - } -} - -impl Add for Pos -where - T: Num, -{ - type Output = Self; - fn add(self, rhs: Self) -> Self::Output { - Pos(self.0 + rhs.0, self.1 + rhs.1) - } -} - -impl Add for &Pos -where - T: Num + Copy, -{ - type Output = as Add>>::Output; - - fn add(self, rhs: Self) -> Self::Output { - Pos::add(*self, *rhs) - } -} - -impl Add<&Pos> for Pos -where - T: Num + Copy, -{ - type Output = as Add>>::Output; - fn add(self, rhs: &Self) -> Self::Output { - Pos::add(self, *rhs) - } -} - -impl Add> for &Pos -where - T: Num + Copy, -{ - type Output = as Add>>::Output; - fn add(self, rhs: Pos) -> Self::Output { - Pos::add(*self, rhs) - } -} - -impl Add<(T, T)> for Pos -where - T: Num, -{ - type Output = Self; - fn add(self, rhs: (T, T)) -> Self::Output { - Pos(self.0 + rhs.0, self.1 + rhs.1) - } -} - -impl Add for Pos { - type Output = Self; - - fn add(self, rhs: Direction) -> Self::Output { - Pos::add(self, rhs.as_pos()) - } -} - -impl Add<&Direction> for Pos { - type Output = Self; - - fn add(self, rhs: &Direction) -> Self::Output { - Pos::add(self, rhs.as_pos()) - } -} - -impl Add<&Direction> for &Pos { - type Output = Pos; - - fn add(self, rhs: &Direction) -> Self::Output { - Pos::add(*self, rhs.as_pos()) - } -} - -impl Add for &Pos { - type Output = Pos; - - fn add(self, rhs: Direction) -> Self::Output { - Pos::add(*self, rhs.as_pos()) - } -} - -impl Sub for Pos -where - T: Num, -{ - type Output = Pos; - fn sub(self, rhs: Self) -> Self::Output { - Pos(self.0 - rhs.0, self.1 - rhs.1) - } -} - -impl Sub<&Self> for Pos -where - T: Num + Copy, -{ - type Output = Pos; - fn sub(self, rhs: &Self) -> Self::Output { - Pos::sub(self, *rhs) - } -} - -impl Sub for &Pos -where - T: Num + Copy, -{ - type Output = Pos; - fn sub(self, rhs: &Pos) -> Self::Output { - Pos::sub(*self, *rhs) - } -} - -impl Sub> for &Pos -where - T: Num + Copy, -{ - type Output = Pos; - fn sub(self, rhs: Pos) -> Self::Output { - Pos::sub(*self, rhs) - } -} - -impl Mul for Pos -where - T: Num + Copy, -{ - type Output = Self; - fn mul(self, rhs: T) -> Self::Output { - Pos(self.0 * rhs, self.1 * rhs) - } -} - -impl Mul for &Pos -where - T: Num + Copy, -{ - type Output = Pos; - fn mul(self, rhs: T) -> Self::Output { - Pos::mul(*self, rhs) - } -} - -impl Mul<&T> for Pos -where - T: Num + Copy, -{ - type Output = Pos; - fn mul(self, rhs: &T) -> Self::Output { - Pos::mul(self, *rhs) - } -} - -impl Mul<&T> for &Pos -where - T: Num + Copy, -{ - type Output = Pos; - fn mul(self, rhs: &T) -> Self::Output { - Pos::mul(*self, *rhs) - } -} - -impl Pos -where - T: Num + Signed + Copy, -{ - pub fn taxicab_origin(&self) -> T { - self.0.abs() + self.1.abs() - } - - pub fn taxicab(&self, other: &Pos) -> T { - (self.0 - other.0).abs() + (self.1 - other.1).abs() - } -} diff --git a/src/common/pos2.rs b/src/common/pos2.rs new file mode 100644 index 0000000..8a25e25 --- /dev/null +++ b/src/common/pos2.rs @@ -0,0 +1,269 @@ +#![allow(dead_code)] + +use super::direction::Direction; +use super::{abs::Abs, math::gcd}; +use num_traits::{CheckedAdd, CheckedSub, Float, Num, NumCast, Signed, Zero}; +use std::fmt; +use std::ops::{Add, AddAssign, Div, Mul, Neg, Sub}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] +pub struct Pos2([T; 2]); + +impl Pos2 { + #[inline] + pub fn new(x: T, y: T) -> Pos2 { + Pos2([x, y]) + } + + #[inline] + pub fn get_x(&self) -> &T { + &self.0[0] + } + + #[inline] + pub fn get_y(&self) -> &T { + &self.0[1] + } +} + +impl From<[T; 2]> for Pos2 { + fn from(value: [T; 2]) -> Self { + Pos2(value) + } +} + +impl From<(T, T)> for Pos2 { + fn from(value: (T, T)) -> Self { + Pos2([value.0, value.1]) + } +} + +impl Pos2 +where + T: Copy, +{ + #[inline] + pub fn splat(v: T) -> Pos2 { + Pos2::new(v, v) + } + + pub fn x(&self) -> T { + self.0[0] + } + + pub fn y(&self) -> T { + self.0[1] + } +} + +impl Pos2 +where + T: Num + Ord + Copy, +{ + pub fn normalize(self) -> Result<(Pos2, T), Pos2> { + if self.x().is_zero() && self.y().is_zero() { + Err(self) + } else { + gcd(self.x(), self.y()) + .map(|ggt| (Pos2::new(self.x() / ggt, self.y() / ggt), ggt)) + .ok_or(self) + } + } +} + +impl Pos2 +where + T: Float, +{ + pub fn normal(self) -> Result<(Pos2, T), Pos2> { + let length = self.length(); + if length == T::zero() { + Err(self) + } else { + Ok((self / length, length)) + } + } +} + +impl Pos2 +where + T: Num + NumCast, +{ + pub fn angle(&self) -> Option { + if let (Some(x), Some(y)) = (self.get_x().to_f64(), self.get_y().to_f64()) { + Some(y.atan2(x)) + } else { + None + } + } + + pub fn angle2(&self) -> Option { + if let (Some(x), Some(y)) = (self.get_x().to_f64(), self.get_y().to_f64()) { + Some((-x.atan2(-y) + std::f64::consts::PI).rem_euclid(2.0 * std::f64::consts::PI)) + } else { + None + } + } +} + +impl Pos2 +where + T: Ord + Copy, +{ + pub fn max_components(self, other: Pos2) -> Self { + Pos2::new(self.x().max(other.x()), self.y().max(other.y())) + } + + pub fn min_components(self, other: Pos2) -> Self { + Pos2::new(self.x().min(other.x()), self.y().min(other.y())) + } +} + +impl Pos2 +where + T: Num + Abs, +{ + pub fn abs(self) -> T { + self.get_x().abs() + self.get_y().abs() + } +} + +impl Pos2 +where + T: Float, +{ + pub fn length(self) -> T { + (self.get_x().powi(2) + self.get_y().powi(2)).sqrt() + } +} + +impl fmt::Display for Pos2 +where + T: Num + fmt::Display, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "({}, {})", self.get_x(), self.get_y()) + } +} + +impl Zero for Pos2 +where + T: Num + Zero + Copy, +{ + fn zero() -> Self { + Pos2::splat(T::zero()) + } + + fn is_zero(&self) -> bool { + self.x().is_zero() && self.y().is_zero() + } +} + +impl Add for Pos2 +where + T: Num + Copy, +{ + type Output = Self; + + fn add(self, rhs: Self) -> Self::Output { + Pos2::new(self.x() + rhs.x(), self.y() + rhs.y()) + } +} + +impl Add<(T, T)> for Pos2 +where + T: Num + Copy, +{ + type Output = Self; + fn add(self, rhs: (T, T)) -> Self::Output { + Pos2::new(self.x() + rhs.0, self.y() + rhs.1) + } +} + +impl>> AddAssign

for Pos2 +where + T: AddAssign + Copy, +{ + fn add_assign(&mut self, rhs: P) { + let rhs = rhs.into(); + self.0[0] += rhs.0[0]; + self.0[1] += rhs.0[1]; + } +} + +impl>> Sub

for Pos2 +where + T: Num + Copy, +{ + type Output = Pos2; + fn sub(self, rhs: P) -> Self::Output { + let rhs = rhs.into(); + Pos2::new(self.x() - rhs.x(), self.y() - rhs.y()) + } +} + +impl Mul for Pos2 +where + T: Num + Copy, +{ + type Output = Self; + fn mul(self, rhs: T) -> Self::Output { + Pos2::new(self.x() * rhs, self.y() * rhs) + } +} + +impl Div for Pos2 +where + T: Num + Copy, +{ + type Output = Self; + fn div(self, rhs: T) -> Self::Output { + Pos2::new(self.x() / rhs, self.y() / rhs) + } +} + +impl Neg for Pos2 +where + T: Signed + Copy, +{ + type Output = Pos2; + + fn neg(self) -> Self::Output { + Self([-self.x(), -self.y()]) + } +} + +impl Pos2 +where + T: Num + Abs + Copy, +{ + pub fn taxicab_between(self, other: Pos2) -> T { + self.x().abs_beween(&other.x()) + self.y().abs_beween(&other.y()) + } +} + +impl Pos2 +where + T: Num + Copy + CheckedAdd + CheckedSub, +{ + pub fn check_add(self, direction: Direction) -> Option { + match direction { + Direction::East => self + .x() + .checked_add(&T::one()) + .map(|x| Pos2::new(x, self.y())), + Direction::North => self + .y() + .checked_sub(&T::one()) + .map(|y| Pos2::new(self.x(), y)), + Direction::West => self + .x() + .checked_sub(&T::one()) + .map(|x| Pos2::new(x, self.y())), + Direction::South => self + .y() + .checked_add(&T::one()) + .map(|y| Pos2::new(self.x(), y)), + } + } +} diff --git a/src/common/pos3.rs b/src/common/pos3.rs new file mode 100644 index 0000000..d226a65 --- /dev/null +++ b/src/common/pos3.rs @@ -0,0 +1,182 @@ +#![allow(dead_code)] +use num_traits::{Num, PrimInt, Signed, Zero}; +use std::fmt; +use std::ops::{Add, Div, Mul, Neg, Sub}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash, Default)] +pub struct Pos3([T; 3]); + +impl Pos3 { + #[inline] + pub const fn new(x: T, y: T, z: T) -> Pos3 { + Pos3([x, y, z]) + } + + #[inline] + pub fn get_x(&self) -> &T { + &self.0[0] + } + + #[inline] + pub fn get_y(&self) -> &T { + &self.0[1] + } + + #[inline] + pub fn get_z(&self) -> &T { + &self.0[2] + } +} + +impl Pos3 { + pub fn is_unit(&self) -> bool { + self.abs() == T::one() + } +} + +impl From<&[T]> for Pos3 { + fn from(value: &[T]) -> Self { + match value.len() { + 0 => Pos3::new(T::default(), T::default(), T::default()), + 1 => Pos3::new(value[0], T::default(), T::default()), + 2 => Pos3::new(value[0], value[1], T::default()), + _ => Pos3::new(value[0], value[1], value[2]), + } + } +} + +impl From<[T; 3]> for Pos3 { + fn from(value: [T; 3]) -> Self { + Pos3(value) + } +} + +impl From<(T, T, T)> for Pos3 { + fn from(value: (T, T, T)) -> Self { + Pos3([value.0, value.1, value.2]) + } +} + +impl Pos3 +where + T: Copy, +{ + #[inline] + pub fn splat(v: T) -> Pos3 { + Pos3::new(v, v, v) + } + + #[inline] + pub fn x(&self) -> T { + self.0[0] + } + + #[inline] + pub fn y(&self) -> T { + self.0[1] + } + + #[inline] + pub fn z(&self) -> T { + self.0[2] + } +} + +impl Zero for Pos3 +where + T: Num + Zero + Copy, +{ + fn zero() -> Self { + Pos3::splat(T::zero()) + } + + fn is_zero(&self) -> bool { + self.x().is_zero() && self.y().is_zero() && self.z().is_zero() + } +} + +impl Pos3 +where + T: Signed, +{ + pub fn abs(self) -> T { + self.get_x().abs() + self.get_y().abs() + self.get_z().abs() + } +} + +impl fmt::Display for Pos3 +where + T: Num + fmt::Display, +{ + fn fmt(&self, f: &mut fmt::Formatter<'_>) -> fmt::Result { + write!(f, "({}, {}, {})", self.get_x(), self.get_y(), self.get_z()) + } +} + +impl>> Add

for Pos3 +where + T: Num + Copy, +{ + type Output = Self; + fn add(self, rhs: P) -> Self::Output { + let rhs = rhs.into(); + Pos3::new(self.x() + rhs.x(), self.y() + rhs.y(), self.z() + rhs.z()) + } +} + +impl>> Sub

for Pos3 +where + T: Num + Copy, +{ + type Output = Pos3; + fn sub(self, rhs: P) -> Self::Output { + let rhs = rhs.into(); + Pos3::new(self.x() - rhs.x(), self.y() - rhs.y(), self.z() - rhs.z()) + } +} + +impl Mul for Pos3 +where + T: Num + Copy, +{ + type Output = Self; + fn mul(self, rhs: T) -> Self::Output { + Pos3::new(self.x() * rhs, self.y() * rhs, self.z() * rhs) + } +} + +impl Div for Pos3 +where + T: Num + Copy, +{ + type Output = Self; + fn div(self, rhs: T) -> Self::Output { + Pos3::new(self.x() / rhs, self.y() / rhs, self.z() / rhs) + } +} + +impl Neg for Pos3 +where + T: Signed + Copy, +{ + type Output = Pos3; + + fn neg(self) -> Self::Output { + Pos3::new(-self.x(), -self.y(), -self.z()) + } +} + +impl Mul> for Pos3 +where + T: Num + Copy, +{ + type Output = Pos3; + + fn mul(self, rhs: Pos3) -> Self::Output { + Pos3([ + self.y() * rhs.z() - self.z() * rhs.y(), + self.z() * rhs.x() - self.x() * rhs.z(), + self.x() * rhs.y() - self.y() * rhs.x(), + ]) + } +} diff --git a/src/common/unit_vector.rs b/src/common/unit_vector.rs new file mode 100644 index 0000000..e0ac2db --- /dev/null +++ b/src/common/unit_vector.rs @@ -0,0 +1,53 @@ +#![allow(dead_code)] +use super::pos3::Pos3; +use std::ops::{Mul, Neg}; + +#[derive(Debug, Clone, Copy, PartialEq, Eq, Hash)] +pub struct UnitVector(Pos3); + +pub const X: UnitVector = UnitVector(Pos3::new(1, 0, 0)); +pub const NEG_X: UnitVector = UnitVector(Pos3::new(-1, 0, 0)); +pub const Y: UnitVector = UnitVector(Pos3::new(0, 1, 0)); +pub const NEG_Y: UnitVector = UnitVector(Pos3::new(0, -1, 0)); +pub const Z: UnitVector = UnitVector(Pos3::new(0, 0, 1)); +pub const NEG_Z: UnitVector = UnitVector(Pos3::new(0, 0, -1)); + +impl UnitVector { + pub fn new(vector: Pos3) -> Option { + vector.is_unit().then(|| UnitVector(vector)) + } + + pub fn x(self) -> i8 { + self.0.x() + } + + pub fn y(self) -> i8 { + self.0.y() + } + + pub fn z(self) -> i8 { + self.0.z() + } +} + +impl From for Pos3 { + fn from(value: UnitVector) -> Self { + value.0 + } +} + +impl Mul for UnitVector { + type Output = Self; + + fn mul(self, rhs: Self) -> Self::Output { + UnitVector(self.0 * rhs.0) + } +} + +impl Neg for UnitVector { + type Output = Self; + + fn neg(self) -> Self::Output { + UnitVector(-self.0) + } +} diff --git a/src/days/day01/mod.rs b/src/days/day01/mod.rs index 6419b99..9fb7835 100644 --- a/src/days/day01/mod.rs +++ b/src/days/day01/mod.rs @@ -1,12 +1,9 @@ +use super::template::{DayTrait, ResultType}; +use crate::common::file::split_lines; use itertools::Itertools; use std::num::ParseIntError; - use thiserror::Error; -use crate::common::file::split_lines; - -use super::template::{DayTrait, ResultType}; - pub struct Day; const DAY_NUMBER: usize = 1; diff --git a/src/days/day02/mod.rs b/src/days/day02/mod.rs index 9f19241..2a6393a 100644 --- a/src/days/day02/mod.rs +++ b/src/days/day02/mod.rs @@ -1,8 +1,6 @@ -use std::cmp::Ordering; - -use crate::common::file::split_lines; - use super::template::{DayTrait, ResultType}; +use crate::common::file::split_lines; +use std::{cmp::Ordering, str::FromStr}; use thiserror::Error; const DAY_NUMBER: usize = 2; @@ -60,9 +58,7 @@ impl Rps { Err(RPSError::IllegalLine(line.to_owned()))? }; - let first = Rps::try_from(first)?; - let second = Rps::try_from(second)?; - Ok((first, second)) + Ok((first.parse()?, second.parse()?)) } pub fn value(&self) -> i64 { @@ -98,10 +94,10 @@ impl PartialOrd for Rps { } } -impl TryFrom<&str> for Rps { - type Error = RPSError; +impl FromStr for Rps { + type Err = RPSError; - fn try_from(value: &str) -> std::result::Result { + fn from_str(value: &str) -> Result { match value { "A" | "X" => Ok(Rps::Rock), "B" | "Y" => Ok(Rps::Paper), @@ -110,6 +106,7 @@ impl TryFrom<&str> for Rps { } } } + #[derive(Debug, Eq, PartialEq, Clone, Copy)] enum Strategy { Loose, @@ -124,9 +121,7 @@ impl Strategy { Err(RPSError::IllegalLine(line.to_owned()))? }; - let first = Rps::try_from(first)?; - let second = Strategy::try_from(second)?; - Ok((first, second)) + Ok((first.parse()?, second.parse()?)) } pub fn fullfill(&self, other: &Rps) -> Rps { @@ -139,10 +134,10 @@ impl Strategy { } } -impl TryFrom<&str> for Strategy { - type Error = RPSError; +impl FromStr for Strategy { + type Err = RPSError; - fn try_from(value: &str) -> std::result::Result { + fn from_str(value: &str) -> Result { match value { "X" => Ok(Strategy::Loose), "Y" => Ok(Strategy::Draw), diff --git a/src/days/day03/mod.rs b/src/days/day03/mod.rs index a86653c..7f09707 100644 --- a/src/days/day03/mod.rs +++ b/src/days/day03/mod.rs @@ -1,6 +1,5 @@ -use crate::common::file::split_lines; - use super::template::{DayTrait, ResultType}; +use crate::common::file::split_lines; use itertools::Itertools; use thiserror::Error; diff --git a/src/days/day04/mod.rs b/src/days/day04/mod.rs index 62a84a9..d639e66 100644 --- a/src/days/day04/mod.rs +++ b/src/days/day04/mod.rs @@ -1,6 +1,5 @@ -use crate::common::file::split_lines; - use super::template::{DayTrait, ResultType}; +use crate::common::file::split_lines; use itertools::Itertools; use std::num::ParseIntError; use thiserror::Error; diff --git a/src/days/day05/mod.rs b/src/days/day05/mod.rs index 57429eb..3295539 100644 --- a/src/days/day05/mod.rs +++ b/src/days/day05/mod.rs @@ -1,6 +1,5 @@ -use crate::common::file::split_lines; - use super::template::{DayTrait, ResultType}; +use crate::common::file::split_lines; use itertools::Itertools; use std::num::ParseIntError; use thiserror::Error; @@ -124,7 +123,7 @@ impl Move { if self.to_stack >= stacks.len() { return Err(CrateError::TooFewStacks(stacks.len(), self.to_stack)); } - let Some(from_stack) = stacks.get(self.from_stack ) else { + let Some(from_stack) = stacks.get(self.from_stack) else { return Err(CrateError::TooFewStacks(stacks.len(), self.from_stack)); }; if from_stack.len() < self.amount { diff --git a/src/days/day07/mod.rs b/src/days/day07/mod.rs index beb77c6..d8375fe 100644 --- a/src/days/day07/mod.rs +++ b/src/days/day07/mod.rs @@ -1,12 +1,10 @@ +use super::template::{DayTrait, ResultType}; +use crate::common::{file::split_lines, name::Name}; use std::{ cell::{Cell, RefCell}, num::ParseIntError, rc::{Rc, Weak}, }; - -use crate::common::file::split_lines; - -use super::template::{DayTrait, ResultType}; use thiserror::Error; const DAY_NUMBER: usize = 7; @@ -75,7 +73,7 @@ enum DirectoryError { #[derive(Debug)] struct Node { parent: Option>>, - name: String, + name: Name, sub_dirs: Vec>>, file_size: i64, size: Cell>, @@ -85,7 +83,7 @@ impl Node { fn root() -> Node { Node { parent: None, - name: "/".to_owned(), + name: "/".into(), sub_dirs: vec![], file_size: 0, size: Cell::new(None), @@ -96,7 +94,7 @@ impl Node { self.sub_dirs.push(subdir); } - fn add_file(&mut self, _name: &str, size: i64) { + fn add_file>(&mut self, _name: N, size: i64) { self.file_size += size; } @@ -141,10 +139,10 @@ impl Directory { self.node.borrow().file_size } - pub fn add_subdir(&mut self, name: &str) { + pub fn add_subdir>(&mut self, name: N) { let subdir = Rc::new(RefCell::new(Node { parent: Some(Rc::downgrade(&self.node)), - name: name.to_owned(), + name: name.into(), sub_dirs: vec![], file_size: 0, size: Cell::new(None), @@ -152,7 +150,7 @@ impl Directory { self.node.borrow_mut().add_subdir(subdir); } - pub fn add_file(&mut self, name: &str, size: i64) { + pub fn add_file>(&mut self, name: N, size: i64) { self.node.borrow_mut().add_file(name, size) } @@ -165,8 +163,9 @@ impl Directory { .map(|node| Directory { node }) } - pub fn get_subdir(&self, name: &str) -> Option { + pub fn get_subdir>(&self, name: N) -> Option { let node = self.node.borrow(); + let name = name.into(); let sub_node = node.sub_dirs.iter().find(|node| node.borrow().name == name); sub_node.map(|node| Directory::create(node.clone())) } @@ -181,14 +180,14 @@ impl Directory { "/" => root.clone(), ".." => { let Some(next) = current.parent() else { - return Err(DirectoryError::NoParentDirectory); - }; + return Err(DirectoryError::NoParentDirectory); + }; next } _ => { let Some(next) = current.get_subdir(dir) else { - return Err(DirectoryError::NoSuchDirectory(dir.to_owned())) - }; + return Err(DirectoryError::NoSuchDirectory(dir.to_owned())); + }; next } }; diff --git a/src/days/day08/mod.rs b/src/days/day08/mod.rs index c031b2a..50bb849 100644 --- a/src/days/day08/mod.rs +++ b/src/days/day08/mod.rs @@ -1,9 +1,7 @@ -use std::str::FromStr; - -use crate::common::file::split_lines; - use super::template::{DayTrait, ResultType}; +use crate::common::file::split_lines; use itertools::{iproduct, FoldWhile, Itertools}; +use std::str::FromStr; use thiserror::Error; const DAY_NUMBER: usize = 8; diff --git a/src/days/day09/mod.rs b/src/days/day09/mod.rs index 7f11710..ee0e3da 100644 --- a/src/days/day09/mod.rs +++ b/src/days/day09/mod.rs @@ -1,5 +1,5 @@ use super::template::{DayTrait, ResultType}; -use crate::common::{direction::Direction, file::split_lines, pos::Pos}; +use crate::common::{direction::Direction, file::split_lines, pos2::Pos2}; use itertools::Itertools; use std::{collections::HashSet, num::ParseIntError}; use thiserror::Error; @@ -63,27 +63,27 @@ fn parse_line(line: &str) -> Result<(Direction, usize), RopeError> { } } -fn get_closer(first: Pos, second: Pos) -> Option> { +fn get_closer(first: Pos2, second: Pos2) -> Option> { let diff = second - first; if diff.x().abs() <= 1 && diff.y().abs() <= 1 { None } else { - Some(Pos::new(diff.x().signum(), diff.y().signum())) + Some(Pos2::new(diff.x().signum(), diff.y().signum())) } } #[derive(Debug)] struct Rope { - head: Pos, - knots: Vec>, + head: Pos2, + knots: Vec>, } impl Rope { pub fn create(length: usize) -> Self { assert!(length >= 2); Rope { - head: Pos::new(0, 0), - knots: vec![Pos::new(0, 0); length - 1], + head: Pos2::new(0, 0), + knots: vec![Pos2::new(0, 0); length - 1], } } diff --git a/src/days/day10/mod.rs b/src/days/day10/mod.rs index 255231b..d726d37 100644 --- a/src/days/day10/mod.rs +++ b/src/days/day10/mod.rs @@ -1,7 +1,7 @@ -use crate::common::file::split_lines; - use super::template::{DayTrait, ResultType}; -use std::{num::ParseIntError, slice::Iter}; +use crate::common::file::split_lines; +use itertools::Itertools; +use std::{num::ParseIntError, slice::Iter, str::FromStr}; use thiserror::Error; const DAY_NUMBER: usize = 10; @@ -14,17 +14,13 @@ impl DayTrait for Day { } fn part1(&self, lines: &str) -> anyhow::Result { - let instructions = split_lines(lines) - .map(|line| Instruction::parse(line)) - .collect::, _>>()?; + let instructions: Vec<_> = split_lines(lines).map(|line| line.parse()).try_collect()?; let result = CpuCycles::signal_strength(&instructions, &[20, 60, 100, 140, 180, 220]); Ok(ResultType::Integer(result as i64)) } fn part2(&self, lines: &str) -> anyhow::Result { - let instructions = split_lines(lines) - .map(|line| Instruction::parse(line)) - .collect::, _>>()?; + let instructions: Vec<_> = split_lines(lines).map(|line| line.parse()).try_collect()?; let result = CpuCycles::draw(&instructions); Ok(ResultType::Lines(result)) } @@ -39,18 +35,18 @@ enum CpuError { InvalidInteger(#[from] ParseIntError), } -enum Instruction { - Add(i32), - Noop, -} +#[derive(Debug, PartialEq, Eq)] +struct Instruction(Option); -impl Instruction { - pub fn parse(line: &str) -> Result { +impl FromStr for Instruction { + type Err = CpuError; + + fn from_str(line: &str) -> Result { if line == "noop" { - Ok(Instruction::Noop) + Ok(Instruction(None)) } else if line.starts_with("addx") { let value = line[5..].parse()?; - Ok(Instruction::Add(value)) + Ok(Instruction(Some(value))) } else { Err(CpuError::UnknownInstruction(line.to_owned())) } @@ -114,10 +110,7 @@ impl<'a> Iterator for CpuCycles<'a> { self.current = None; Some(start_register) } else if let Some(instruction) = self.instructions.next() { - match instruction { - Instruction::Add(value) => self.current = Some(*value), - Instruction::Noop => {} - } + self.current = instruction.0; Some(self.register) } else { None @@ -134,7 +127,11 @@ mod test { #[test] fn test_simple() -> Result<()> { - let instructions = vec![Instruction::Noop, Instruction::Add(3), Instruction::Add(-5)]; + let instructions = vec![ + Instruction(None), + Instruction(Some(3)), + Instruction(Some(-5)), + ]; let expected = vec![1, 1, 1, 4, 4]; let result = CpuCycles::create(&instructions).collect::>(); assert_eq!(result, expected); diff --git a/src/days/day11/mod.rs b/src/days/day11/mod.rs index ddb6f62..65d210e 100644 --- a/src/days/day11/mod.rs +++ b/src/days/day11/mod.rs @@ -1,8 +1,7 @@ +use super::template::{DayTrait, ResultType}; use crate::common::parser::{ empty_lines, eol_terminated, extract_result, ignore, trim0, trim_left1, true_false, }; - -use super::template::{DayTrait, ResultType}; use nom::{ branch::alt, bytes::complete::tag, diff --git a/src/days/day12/mod.rs b/src/days/day12/mod.rs index 1c099d0..ed4b673 100644 --- a/src/days/day12/mod.rs +++ b/src/days/day12/mod.rs @@ -1,8 +1,6 @@ -use std::collections::{BinaryHeap, HashSet}; - -use crate::common::{file::split_lines, pos::Pos}; - use super::template::{DayTrait, ResultType}; +use crate::common::{file::split_lines, pos2::Pos2}; +use std::collections::{BinaryHeap, HashSet}; use thiserror::Error; const DAY_NUMBER: usize = 12; @@ -45,7 +43,7 @@ enum ValleyError { struct Path { length: usize, height: char, - pos: Pos, + pos: Pos2, } impl PartialOrd for Path { @@ -78,7 +76,7 @@ impl Ord for Path { } impl Path { - pub fn new(length: usize, height: char, pos: Pos) -> Self { + pub fn new(length: usize, height: char, pos: Pos2) -> Self { Path { length, height, @@ -106,28 +104,28 @@ impl<'a> Neighbors<'a> { } } - fn next_pos(&mut self) -> Option> { + fn next_pos(&mut self) -> Option> { while self.state < 4 { self.state += 1; match self.state { 1 => { if self.path.pos.x() < self.valley.width() - 1 { - return Some(Pos::new(self.path.pos.x() + 1, self.path.pos.y())); + return Some(Pos2::new(self.path.pos.x() + 1, self.path.pos.y())); } } 2 => { if self.path.pos.y() > 0 { - return Some(Pos::new(self.path.pos.x(), self.path.pos.y() - 1)); + return Some(Pos2::new(self.path.pos.x(), self.path.pos.y() - 1)); } } 3 => { if self.path.pos.x() > 0 { - return Some(Pos::new(self.path.pos.x() - 1, self.path.pos.y())); + return Some(Pos2::new(self.path.pos.x() - 1, self.path.pos.y())); } } 4 => { if self.path.pos.y() < self.valley.height() - 1 { - return Some(Pos::new(self.path.pos.x(), self.path.pos.y() + 1)); + return Some(Pos2::new(self.path.pos.x(), self.path.pos.y() + 1)); } } _ => {} @@ -153,8 +151,8 @@ impl Iterator for Neighbors<'_> { struct Valley { map: Vec>, - start: Pos, - exit: Pos, + start: Pos2, + exit: Pos2, width: usize, } @@ -172,11 +170,11 @@ impl TryFrom<&str> for Valley { for (x, height_char) in row.chars().enumerate() { match height_char { 'S' => { - start = Some(Pos::new(x, y)); + start = Some(Pos2::new(x, y)); height_row.push('a') } 'E' => { - exit = Some(Pos::new(x, y)); + exit = Some(Pos2::new(x, y)); height_row.push('z') } 'a'..='z' => height_row.push(height_char), @@ -211,13 +209,13 @@ impl TryFrom<&str> for Valley { } impl Valley { - fn get_height(&self, pos: Pos) -> char { + fn get_height(&self, pos: Pos2) -> char { self.map[pos.y()][pos.x()] } fn do_walk(&self, check: F) -> Result where - F: Fn(Pos) -> bool, + F: Fn(Pos2) -> bool, { let mut shortest = HashSet::with_capacity(self.width * self.map.len()); let mut queue = BinaryHeap::new(); @@ -269,8 +267,8 @@ mod test { let lines = read_string(day.get_day_number(), "example01.txt")?; let valley = Valley::try_from(lines.as_str())?; assert_eq!(valley.width, 8); - assert_eq!(valley.start, Pos::new(0, 0)); - assert_eq!(valley.exit, Pos::new(5, 2)); + assert_eq!(valley.start, Pos2::new(0, 0)); + assert_eq!(valley.exit, Pos2::new(5, 2)); Ok(()) } diff --git a/src/days/day13/mod.rs b/src/days/day13/mod.rs index f6b146a..8173964 100644 --- a/src/days/day13/mod.rs +++ b/src/days/day13/mod.rs @@ -1,9 +1,7 @@ -use std::cmp::Ordering; - -use crate::common::file::split_lines; - use super::template::{DayTrait, ResultType}; +use crate::common::file::split_lines; use itertools::Itertools; +use std::cmp::Ordering; use thiserror::Error; const DAY_NUMBER: usize = 13; diff --git a/src/days/day14/mod.rs b/src/days/day14/mod.rs index 56a1e02..5f00a63 100644 --- a/src/days/day14/mod.rs +++ b/src/days/day14/mod.rs @@ -1,11 +1,9 @@ +use super::template::{DayTrait, ResultType}; +use crate::common::{file::split_lines, pos2::Pos2}; use itertools::Itertools; use std::{collections::HashSet, num::ParseIntError}; use thiserror::Error; -use crate::common::{file::split_lines, pos::Pos}; - -use super::template::{DayTrait, ResultType}; - const DAY_NUMBER: usize = 14; pub struct Day; @@ -56,7 +54,7 @@ impl TryFrom<&str> for Cave { fn try_from(lines: &str) -> Result { let lines = split_lines(lines); - let mut cave: HashSet> = HashSet::new(); + let mut cave: HashSet> = HashSet::new(); for line in lines { cave.extend(Cave::parse_one(line)?.iter()); } @@ -92,7 +90,7 @@ impl TryFrom<&str> for Cave { } impl Cave { - fn get(&self, map: &[Vec], pos: Pos) -> bool { + fn get(&self, map: &[Vec], pos: Pos2) -> bool { if pos.y() >= self.height || pos.x() < self.min_x || pos.x() > self.max_x { false } else { @@ -100,28 +98,28 @@ impl Cave { } } - fn set(&self, map: &mut [Vec], pos: Pos) { + fn set(&self, map: &mut [Vec], pos: Pos2) { map[pos.y() as usize][(pos.x() - self.min_x) as usize] = true } - fn walk(from: Pos, to: Pos) -> Result>, CaveError> { + fn walk(from: Pos2, to: Pos2) -> Result>, CaveError> { if from == to { return Ok(vec![from]); } if from.x() == to.x() { if from.y() < to.y() { - Ok((from.y()..to.y()).map(|y| Pos::new(from.x(), y)).collect()) + Ok((from.y()..to.y()).map(|y| Pos2::new(from.x(), y)).collect()) } else { Ok(((to.y() + 1)..=from.y()) - .map(|y| Pos::new(from.x(), y)) + .map(|y| Pos2::new(from.x(), y)) .collect()) } } else if from.y() == to.y() { if from.x() < to.x() { - Ok((from.x()..to.x()).map(|x| Pos::new(x, from.y())).collect()) + Ok((from.x()..to.x()).map(|x| Pos2::new(x, from.y())).collect()) } else { Ok(((to.x() + 1)..=from.x()) - .map(|x| Pos::new(x, from.y())) + .map(|x| Pos2::new(x, from.y())) .collect()) } } else { @@ -129,14 +127,14 @@ impl Cave { } } - fn parse_one(line: &str) -> Result>, CaveError> { + fn parse_one(line: &str) -> Result>, CaveError> { let corners = line .split("->") .map(|coord| match coord.split(',').collect::>()[..] { [first, second] => { let x: i32 = first.trim().parse()?; let y = second.trim().parse()?; - Ok(Pos::new(x, y)) + Ok(Pos2::new(x, y)) } _ => Err(CaveError::NotAValidPos(coord.to_owned())), }) @@ -173,8 +171,8 @@ impl Cave { drops } - fn drop_one(&self, map: &[Vec]) -> Option> { - let mut drop = Pos::new(500, 0); + fn drop_one(&self, map: &[Vec]) -> Option> { + let mut drop = Pos2::new(500, 0); loop { let next_y = drop.y() + 1; if next_y > self.height { @@ -182,7 +180,7 @@ impl Cave { } let mut stuck = true; for dx in [0, -1, 1] { - let next = Pos::new(drop.x() + dx, next_y); + let next = Pos2::new(drop.x() + dx, next_y); if !self.get(map, next) { drop = next; stuck = false; @@ -254,7 +252,7 @@ mod test { #[test] fn test_parse() -> Result<()> { let input = "498,4 -> 498,6 -> 496,6"; - let expected = hashset! {Pos::new(498, 4), Pos::new(498, 5), Pos::new(498, 6), Pos::new(497, 6), Pos::new(496, 6)}; + let expected = hashset! {Pos2::new(498, 4), Pos2::new(498, 5), Pos2::new(498, 6), Pos2::new(497, 6), Pos2::new(496, 6)}; let result = Cave::parse_one(input)?; assert_eq!(result, expected); diff --git a/src/days/day15/mod.rs b/src/days/day15/mod.rs index 81e69f8..43b786c 100644 --- a/src/days/day15/mod.rs +++ b/src/days/day15/mod.rs @@ -1,7 +1,7 @@ use super::template::{DayTrait, ResultType}; use crate::common::{ parser::{eol_terminated, extract_result, ignore, trim0}, - pos::Pos, + pos2::Pos2, }; use itertools::Itertools; use nom::{ @@ -44,7 +44,7 @@ impl DayTrait for Day { .iter() .tuple_combinations() .filter_map(|(first, second)| first.cross(second)) - .filter(|pos| sensors.iter().all(|sensor| !sensor.contains(pos))) + .filter(|pos| sensors.iter().all(|sensor| !sensor.contains(*pos))) .dedup() .collect::>(); @@ -58,7 +58,7 @@ impl DayTrait for Day { } impl Day { - fn parse_all(lines: &str) -> Result<(HashSet, HashSet>), SensorError> { + fn parse_all(lines: &str) -> Result<(HashSet, HashSet>), SensorError> { let data = extract_result(many0(eol_terminated(Sensor::parse)))(lines)?; let mut sensors = HashSet::new(); @@ -70,7 +70,7 @@ impl Day { Ok((sensors, beacons)) } - fn count_coverage_at(sensors: &HashSet, beacons: &HashSet>, row: i64) -> i64 { + fn count_coverage_at(sensors: &HashSet, beacons: &HashSet>, row: i64) -> i64 { let ranges = sensors .iter() .filter_map(|sensor| sensor.range_at(row)) @@ -117,7 +117,7 @@ impl From>> for SensorError { #[derive(Debug)] struct Line { - start: Pos, + start: Pos2, is_up: bool, steps: i64, } @@ -139,16 +139,16 @@ impl Line { if one.pos.y() < two.pos.y() { is_up = true; if one.pos.y() + one.radius <= two.pos.y() { - start = Pos::new(one.pos.x(), one.pos.y() + one.radius + 1); + start = Pos2::new(one.pos.x(), one.pos.y() + one.radius + 1); } else { - start = Pos::new(two.pos.x() - two.radius - 1, two.pos.y()); + start = Pos2::new(two.pos.x() - two.radius - 1, two.pos.y()); } } else { is_up = false; if one.pos.y() - one.radius >= two.pos.y() { - start = Pos::new(one.pos.x(), one.pos.y() - one.radius - 1); + start = Pos2::new(one.pos.x(), one.pos.y() - one.radius - 1); } else { - start = Pos::new(two.pos.x() - two.radius - 1, two.pos.y()); + start = Pos2::new(two.pos.x() - two.radius - 1, two.pos.y()); } } let steps = two.pos.x().min(one.pos.x() + one.radius) - start.x(); @@ -160,7 +160,7 @@ impl Line { }) } - fn cross(&self, other: &Line) -> Option> { + fn cross(&self, other: &Line) -> Option> { if self.is_up == other.is_up { return None; } @@ -181,7 +181,7 @@ impl Line { return None; } - let pos = top_down.start + Pos::splat(r); + let pos = top_down.start + Pos2::splat(r); Some(pos) } } @@ -227,7 +227,7 @@ impl Range { #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash)] struct Sensor { - pos: Pos, + pos: Pos2, radius: i64, } @@ -239,21 +239,21 @@ impl Sensor { } } - fn parse_pos(input: &str) -> IResult<&str, Pos> { + fn parse_pos(input: &str) -> IResult<&str, Pos2> { let (input, (x, y)) = separated_pair( Sensor::component("x"), trim0(char(',')), Sensor::component("y"), )(input)?; - Ok((input, Pos::new(x, y))) + Ok((input, Pos2::new(x, y))) } - pub fn parse(input: &str) -> IResult<&str, (Sensor, Pos)> { + pub fn parse(input: &str) -> IResult<&str, (Sensor, Pos2)> { let input = ignore(tag("Sensor at"))(input)?; let (input, pos) = trim0(Sensor::parse_pos)(input)?; let input = ignore(tag(": closest beacon is at"))(input)?; let (input, beacon) = trim0(Sensor::parse_pos)(input)?; - let radius = pos.taxicab(&beacon); + let radius = pos.taxicab_between(beacon); Ok((input, (Sensor { pos, radius }, beacon))) } @@ -268,12 +268,12 @@ impl Sensor { } pub fn border_distance(&self, other: &Sensor) -> i64 { - let distance = self.pos.taxicab(&other.pos); + let distance = self.pos.taxicab_between(other.pos); distance - self.radius - other.radius } - pub fn contains(&self, pos: &Pos) -> bool { - self.pos.taxicab(pos) <= self.radius + pub fn contains(&self, pos: Pos2) -> bool { + self.pos.taxicab_between(pos) <= self.radius } } @@ -287,10 +287,10 @@ mod test { let input = "Sensor at x=2, y=18: closest beacon is at x=-2, y=15"; let expected = ( Sensor { - pos: Pos::new(2, 18), + pos: Pos2::new(2, 18), radius: 7, }, - Pos::new(-2, 15), + Pos2::new(-2, 15), ); let result = extract_result(Sensor::parse)(input)?; assert_eq!(result, expected); @@ -301,7 +301,7 @@ mod test { #[test] fn test_width() { let sensor = Sensor { - pos: Pos::new(8, 7), + pos: Pos2::new(8, 7), radius: 9, }; assert_eq!(sensor.range_at(17), None); diff --git a/src/days/day16/mod.rs b/src/days/day16/mod.rs index e068986..4739cfc 100644 --- a/src/days/day16/mod.rs +++ b/src/days/day16/mod.rs @@ -1,5 +1,8 @@ use super::template::{DayTrait, ResultType}; -use crate::common::parser::{eol_terminated, extract_result, ignore, trim0, trim1, trim_left1}; +use crate::common::{ + name::Name, + parser::{eol_terminated, extract_result, ignore, trim0, trim1, trim_left1}, +}; use itertools::Itertools; use nom::{ branch::alt, @@ -95,6 +98,7 @@ impl Mul for Time { #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] struct Flow(i64); + impl Deref for Flow { type Target = i64; @@ -208,7 +212,7 @@ impl<'a> TryFrom<&'a str> for RawValve<'a> { #[derive(Debug)] struct Valve { - id: String, + id: Name, idx: Index, flow: Flow, distances: Vec