diff --git a/README.md b/README.md index f27e357..05be71f 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 consider contacting me. +Also, if you ever look for a programmer and think my code is any good, please also contact me at once. All code is published under the [Unlicense](https://unlicense.org/) diff --git a/data/day21/example01.txt b/data/day21/example01.txt deleted file mode 100644 index 7993b87..0000000 --- a/data/day21/example01.txt +++ /dev/null @@ -1,15 +0,0 @@ -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 deleted file mode 100644 index 3b8b262..0000000 --- a/data/day21/input.txt +++ /dev/null @@ -1,1579 +0,0 @@ -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 deleted file mode 100644 index 6e06946..0000000 --- a/data/day22/example01.txt +++ /dev/null @@ -1,14 +0,0 @@ - ...# - .#.. - #... - .... -...#.......# -........#... -..#....#.... -..........#. - ...#.... - .....#.. - .#...... - ......#. - -10R5L5R10L4R5L5 \ No newline at end of file diff --git a/data/day22/input.txt b/data/day22/input.txt deleted file mode 100644 index 851f4a1..0000000 --- a/data/day22/input.txt +++ /dev/null @@ -1,202 +0,0 @@ - ........................#.#...........#........#.#.......#......#......#........#..#........#....... - ....#.........#....##....#......#................................................................#.. - ....#...#.#................##...#..#.....#.#..#.............#...........#...#..##......##.....#.#... - .#.......#.........#...##....#.............#..#...#....#..........#.......#.............#........... - .##..............#.#.#.....#........#.##.#.........#.........#.......#.....#........#.....#.#....... - ........#.........................#..........#..............#.........#...#...............#........# - ......#...#...........##.................#.....#....##.....#.............#.......#..#........#...... - .............#.........#.#.....#.......#....#.............#..#.##.......#....#...............#...... - #.............................#........#........#.......#...........#..#....#................#...... - .......................##...#.#.........#..............#............................................ - ...........................#.#...#..#....#..#.....#.........................#...............#......# - ..#..#......#.#..................................##.......#.............#....#.#.................... - ....#.....#.#..................#..................#...#........#..#............................#.#.. - ...................#.#........#.........#.#...........#......#............#..#...................... - ..............##..###.................................................#.......##.................... - .....#.#.....#.......#..........#...#.##....#.........#.....#.........#.........................##.. - .#.......#................#.....#.....#..##........#..................#.....##.........#.....#...... - ........#................#.....#..##.....#..............................#...#.............#...#..#.. - .#.................##.#.......#........................#.#...................#.#...#........#.#..... - .........#..#...................................#...#...........#..#.#.............#...#............ - #..#......#........#.......................#...................#......................#............. - ...........................#.............#.......#.....#......#..#.......#...#........#.#...#..#.... - ....#.#...........#................##...............#...#...#......#..#............................. - ......#.........##...##..................#.........#.................#.............................. - ....................#......................#.#......#.......#.....#..#.............................. - ...................#....#....................#................................................#..... - #..#......#...........#....................#................#.......#...#...........#.........#..... - ..............#............#....................#.#..#.............#.............#..#...........#... - ..........#..#.##..........#....................#....#...#......................#.................#. - ............#...............#......##............................................#........#......... - ....#..#...................#..#......#.....#...#.#....#.........#..#........#...........#.........#. - ..........#...........#.#......................#..........................#.#....................... - #................#.....#...#.......................#...............#........#.#.....#..........#.... - .......#...........................#......................#...#.#..............#.....#.............. - ...#.....#.....................#.........#....#.....#....#........##.........#.#.#.................# - ####............#.#............#...#........#....#...#.......#..................#............##..... - ..........................#...................................#...............#........#...#........ - .......#....#.........................#...#............................#.......................#.... - ........#.....................#..#...#.............#..##.#...#....#..#..........#.#.............#... - ....#............#...#............#.............................#...................#....#......#.#. - ........#.........#...#.#........#..#.......#..........#..........#..#...#..........#............... - ........#.............................#...............#............#.......................#..#..#.. - #............#.....#..................#.............##.#............#...#..#.#........#............. - ............................#..........................#.........#.................#.......#....#... - ..#.#..............................................#...................#......#..#........#........# - ..#.....#.#............#.#.#.#.............#...........................#...........#.#.#...#........ - ....#...#.........##.........#..#......#...........#.........##......................#.............. - .#.....#................#............##..#........#....#.#...............#.##...#...........#......# - ...#.......#...........................#..................#.#..##.#...#.#........................... - ..............................#.....#...#.......#.........#...........#.......#..................... - ...........#.....#........#.........#.....#.....#. - ...........#.........#....................#....... - ...........#...........#.........................# - ...#......#......#............#................... - ........#............................#.#.........# - #..................#...................#.#........ - ...#................#...#...#..#.......#.#......#. - ...#.......#............#...#..................... - ........#.................##...................... - .#...#.........#..........#.......#.......#....... - ..................##.##.........#................. - .#.#..............................#.....##..#..#.. - ..........................#....##...#.......#.#... - .........#....#.....#..........................#.. - .......#.....#.................#.#.##............. - .............#..........#.....#................... - .......#.#.........#.....#................###.#... - .................................#................ - ..............#...#..#............................ - .............#........#..........#....#........... - ................#..........#..#...##....#........# - .......#.#.......................#....#..........# - .................................................. - ...........................#.......#...#.....#.... - ........##..............#.#...#.......##..#....... - .....................#.....#........#............. - ...#.......................#.......#.....#..#..#.. - ..##...........#................#.#............... - .........................#.#....#.#.........##.... - ..#......#........#...#....#..#...#.............#. - .....#.......#............###...................#. - ...#............#...........#.......#......#...... - .........#.....##..........##............#........ - ..#..##...#..................#.#.........#....#... - .......#....#............................#..#..... - ...#....#...........#.#........#.................# - ......#........#.....#........#................... - ............#..........#....#..#...........#...... - ................#....#.....#........#...........#. - ...##....#................#.#.....#.............#. - ..............................................#..# - ..#..#..#..#..#................................... - .............#..............................#..... - ..#...#....#...........##......#..............#... - .........##....#...........................#.....# - ...........................##.........#........#.. - ......#.............#........#..........#....#.... - ................................#............#.... - ...........#..#...........#...#.#.........#....... - ...................#.#.#........#.............##.. -.#..........#..............................#..........#...#.#..#...#.......#............##.......... -..##...........#.........#.........................##......#.............#................#......... -#.#.........#.....#.#............#.........#.#.#....##..............#........#.#..#................. -..............................#..#.......................................#....##.....#........#..... -............................##....#..##.....###.....#.......##...#...............................#.. -...........#....#...........#.......#..........#.........#........#.............#.........#......... -.............................#...........................#.........#..................#....##....... -.................#...................#...........#.............#...............#.................... -..............#................#.............#......#....#..........#.#..#.......................#.. -.#........#...##.......#.#...#......#...........#...................#....#......##...#.............. -............#..#.#......#..#.................#....#.....#.#..#.......................#.............. -#.#..#.#.........#........#...........#.#.....#...#..#........#..#........#.......#.#.......#....... -.......##.......#.........#..#.......#...........#...............#.................................. -...........#.........#.................#.......#..#.#......#...............#.#...................... -.............#........#..........##.......................#...#..............#....................#. -......#...#.#....#......#........#.......#.................#.....#....#..#..#.....#.......#......... -.......#.##.............##.#...##....#.#........#.........#..............#...#......#............... -...#..................#.#.......#.............#.............#......................................# -.#............#..........#...........#.#.............#..#.......................................#... -.....#.##...#...#...............#.....................#...#.#.....#....................#............ -........#......................................#...........#......#..#..##...........#....#..#...... -..#...................#................#.................................#.......................... -.#.......................#.......#......#.........................#................................. -...#...#...................#...........#....#........#....#..............#.......#.................. -.....#....................#..........#..#........#...........................#..#...#.......#...#..# -.........#...........#...#...#............#...................#.............#....................#.# -..#....#.....#.#.......#................#...#.............#.............##......#.................## -....##...#...............##..........#....#.........#.....#...............#........#...............# -.....#.................#.......#.................#.............#.#....#....................#.#...... -.........#...#...#......................................#.....................#..................... -.........#..............#.....#.............................#....#.....#............#.............#. -............#.#......#.....#...........................#........##.......................#....#..#.. -........................#.............#..........#.#...........#..#....................#.##....#.... -........##.#....#................##.........................#........#...........#.......#.........# -.#..........#....#...........#...........#..........................#.........##...........#........ -...#....#..#.................................#......#.........#.#....#.........##.....#.......#..... -#.....#....#......#...#.........#...........#..#............###........#...........##......##.#...#. -.......#.#.....#....................................#....#....................##.#.................. -#....................................##.....................##....#...........#..........#.......... -.........................#......#....#...........#..#......#.........#........#..#...............#.. -...#....#.........#..................#..................................#.....#.......#.#.#......... -........................#....................#..#...............#............#......#............#.# -#.................#......................#..........#.........#.......................#.......#..... -..#....................#.................#.....#..........#...............##.#............#......... -...........................#......#..............#.....#...#......................................#. -..................#..#..#...................#..#...#......#..#.........#..##..#...#....#............ -...#........#.#......#....#...................#........#.#...#..................#............#...... -....................#..........#..#........#....#.......#..........................#.........#...... -.......#...#..........................#........##............#..#................................#.. -........##.......#................#.....##..#...........##.............#...##........#.....#.......# -#.................#....#..............#...#....... -..............................#..................# -#........................#....##...#........##.... -............#..................................... -............#....................................# -...#.#..............#..............#.............. -...........................##....................# -......#.#.......#..................#.....#...##..# -......#..............#..#.............#........... -.....#.....##.....#............................... -.............................#....#...#........... -........#......................................... -................#..........................##..... -.#............##.#..............#.#...#........#.. -.......#....#...#.....##.#...#...#................ -................#.#...................##.......... -..............................#................... -..............##.................#..........#..#.. -..#..................................#............ -..........................................#..#.... -...#......#...#....#..............#.............#. -.#....#..#...............................#........ -.......#.#.....................#.......#.......... -....#................#............................ -.......##.....##....#................#............ -...#........#........#......#...#.#.........#..... -......##.#................#...............#.#..... -....#.#........#................#...........##.... -..#......................#....#.................#. -..................#.............#..........#...... -....#.....#....................................... -....#.......##..#.#..#.......................#.... -.................#...........#.....#.....#......#. -.......#.........#.......#.##....#........#....... -................#.......#...................#..... -#.#..................................#......#.#... -#........#..##.......##..#........#............#.. -#..............................................#.. -.#.....#.......#..##........#..#..............#... -.........#.......#...#.....#.#...#................ -.................................#..........#..... -#...#..............##..............#....#......... -.............................#........#....#...#.. -...#....#..............#...........#......#....... -....#......................#.......#...#.......... -...#.............#......#.#.......#..#.......#..## -.......#...........................#............#. -........#.......................#................. -..........#..#...#......##.........#........##.... -.#.....#....###.............#.##.................. - -16L48L13R34L44L21R31R17R42R37R48L39L40R16R29L12R23R8L42R19L26L31L34R8L37R35R22R22L34R4L11R28L42L30L42L24L40R31L14L2L46L1L15R45R4L44R6L13R20L38R16R26L8L6R15L47R10L13R30R27L21L5R16R23R24L23L13L3R14R3R41R17R18R35R45R50L10R28R28R23R29R43R33R6R10R3R49R48R17R18R10L10R36L24R43L41L15R35L16R47R27L1R24L6R50R30L35R46R9L5R8L49R45L9R41L29L25L46R17L47L32R25L7R24R33L23L20L12R43L16L8R38L9L30L33R4R41L6L41L49L36L34L41R12L12R41R23R29L24R39L17L9R4R17L10L30R43R27L29R39R44L16L24R28L14L14L45L6R4L26R17L22L28L31L33R14L21R24L10R20L17R5R18L41L20L1R39R23R8R21L47R21L12R5R1L14L23R50L2L43L45L14L15L50R18R21L39L24R8R7L13R33L15L40R29L34R38R42L5L17R28R49R35L45L4L1R8L33R22L12R37R26L48R45L47R39R35L50R18L22L19R31R10L7L10L27L28R6R28L48R28L44L11L37R48R33L13L23L45L7R34L24R10R47R21R39L11R12R14R7R39L50R39R40R50R3L20L15R6L14R31R30L19R14L2L23R6R5R50R42L4L13R18L45R4R44R15R28R27L35L25R15R18L37R31L38L23L21L36L7R17R24L22L18R19L43L7L1R26L6R42R2R38L9L30R13R37R34L41R20L39R44R11R27L48R30R37L19L30L34L44R17R50R49L46L37L15R35R42R25L19L44L40R5L47R19R44L6R39L1R11R42L27L37R37L41R6R36L47L4R31R34R3R32R7L46R8R3R48L33R39L29R43R40R39L5L25R42L37R15R32R50L36R38L29L30R6L22L17R28R21L42L44L41R35L40L45L22R28R24L2R29L14L7R31L40L14L13L21R12L40L23R34R22L37L24R34L23R33L41R26R18R34L27L15L21L29R21R30R10L10L19L45L42R3R9R18L39R14L21R6L24R44L7R16R24L23L14L28R34R33L26L44R36L23L17L40L23R10L49L8L2L22L45R34L46L1R41L37R26L22L31R12R29R24R44R26L22R20R9L6L36R23R21R44L26R9R32L9R23R15L10L28L48L41R45R35L30L25R41R29L25R23R3R29L30L28L34L29R40L30R40L3R19L36R11L26R48L17L48R12R32R35L26L42R15R6R42R8L49R30R3R14L16L44L8R10L50R18R32R1R29R34R32L24R50R44L13R48L4R20L14L50L15L21R47R3L7R37L15R42R5L40R27L18R3R44L4R47R7R35L46R40R45R24R23R48R9R48R21R7L15L42R27R14R30R48L5L38R5R16L25R22L28R48R17L27R10L25L13R6L7L21R47L43L41R33R6R40R31L32L20L1L16L19R23L28R16R44L26R21R9R29L6L37L31L16L9R37L24L4L19L20R40L3L38L39R17L38L21L26R6R19R12L34L15L31L23L1R8L35R13L23L2L21L20L22R16L49R41R30R13L46R26R50R1R42R40R40R42L22L19R31R4L4L1L45R8L39R3L42R4L44L29R10L17R19L24L43L50R28R8R3L49L8R25R11R14R41L39L47R28R45L34L29R49R38L43L3R15R38L17L37R49R11L8L15L28R3L1R7R1R1L7R17L47L1R28L49L18L20R43R30L20L37R18L3L16R32L9R48L21L22R35L46L31R20L13L16R46R9R49L32L38R42L13L1R16R10L14L45L27L1R4R10R6L38R42L25L33L15L11R17R34L12R47L46R41L42L19L26R22R28R37L26R41L21R8L25R18R26R37R18L38R5R3R8L25R20R2R38R50R17L36L9L6R44R23R5L38L37L1L1L30R28L19L33L25R35R23R32L50L46L42L4L9R12L46L7L2L2R45R11L19R2R47R33R11R25R42R8R41L24R36R7L45L29L20L35L28R3R43R33R25R25L1R33R2R34R25R24R35L46R6L48R37L21R45R5L41L44R32R46L17R5R19R47R39L4R20R26R8R24L30L15R29R5R7R33R30L49R34L48L2L47R1L15L1L25L47R15L14R1R15R20R42R10R44L7L46L28L15R42L3L44L49R14L28R43R33R33R26R3R9R36R24L1L45L26L25L39L15L1R40R47R30L7R25L50R38R6L33R48R28L2L11L41L14R43L48L11L47L39L18R15L23R26R44L27L17L45L21R6R16L37L6L37R50L39L34R34L19R19R32R14R43L16L19L20L44L40L11R49R2L19L17R1L42R9L21L5R2R47L39L29L25L41R19R43R26L41R49R46R9L2R38L22R43R6L5L14R29R27R34R43L25L46R22R13R1R18R28L24R34L45R27L43R6L32L12L35L39L38R16R39L13L36R22L19L20R33L3R13R15R28L45L5R25R9R32L32L34L23R25R43R13L23L45R34R46L9R13R15R9R16R21L38L7L32R1R22R34R44R18L39R43R5R7L19L16L39L26L28L23R41L32R18R22R41L46L34R6L44L29R25R26L5L18R6R44R48R22L47L50R29R24R41L8R48L5R50L49L38R47L39R7L15R23R36R14R48R17R14R32L25L36R10L36R17L30L22R15L19L10L3L24R36R1L6L26L39L48R15L3L26R11R49R2R46R28R18R13L50R39L5R29L31L40L44L43R49L6L26L33L49L30R48R10L4R6L26L15L18L31R20L48R7R17L40R36L41R49L25L21L5R48R19R3L48R46R22R22L50L39R18R17L13L4R5L28R10R40L30R40R19R11R49R9R32L25R48R47L26L40L38R44R22L22R37R3L16R34R11R48L47R2L29R48R31L4R44L40R20L40R30R15R11R43L30R5R40L45R42R39R19R49L41R26L18R17R15L39L26L10R15L30L38L44L47R35R42R40L26R46R11R22R25R28L12R35R1R38L2R40R3L5L15R18R21R46R1R26R42L7L38L11R4L17R45L46L11R39R45R27L8L35R3L50R25R14R3R5R46L6L31R40L28R12L35L1L33L32R49R48L16L20L3R20R50R8L29R44L12R17L12R4L7R2R1R50L30L4L17R12R43L17R4L20L32R46R39L42L18L30L19R15R37L14L5L3R36L31L16L10L10L26R45R19R38L30R49L6L25L30R27L41L17R27R47L37L28R22L44R18L48L44R2L33R2R9L13L1R13L30R43L50R17R32R14R28L1R29L6L2L37R40R12R1L16R32L31L35R10R4R18R41L15L29R3R43L24L29R43L37R33R16L5L12L32R43R43R2R39R41R20R39R6L35R21R44R44L25L31L7L49R42R20L24L3L7R26R35L4L46L37L33R38L33R25L4L1L50L19R3R3R9L25L2R15L7L10R37L5L18R50L23R4L16L19R8R5R36L25L27R18R26L50L46R10R31R31R30R29L24L8L14R40R4R47R5R37R46R35R48L14R23R1L21L47R45R10L8L15R48R15R11L24L39L3R7L38L8L47R37R10R38L34R42R26L17R24R30R41L11L9R50L16L48R5L7R44L11L6R11R22R44R50L5R18R38L46L35L45R9L45L19R22L40R21R23R29L14R35L47R8L8R27R33R22L3L2R19L7R41L33L46L26R9L9L22L15L45L36L46L28R40R10L40R26L47L1R47L25R3R44L35R21L36L43R28L4L21R20L6R2R1R42R10L11R33R44L1R37R48L26L46R11R45L22R18L34R43L26L41L27L14R9R14L2R41R19R47L1R42L11R17R21L12L33L10L30R43R46R47L9R17L14L15L6L43R44L22L40L50L2L19R30L38R48L1R23L32R33R31L45R5L47R1R19R15L40L17R7L10R19R40L29R26R10R21R47L33L22R23L10L1R29R39R14L35L21R18R25L20L46R15L42R6R33R26R10R9R31R32L48R49L15R48L39L41L12L35R24L2L9L27R34L32R6R25L16R47L24R14L48R2R39L2L19L21L23R50R29L44L16R15L14L50R39L13R15L19R46R16R38L8R34R44L46L38L49R7L5R32R47R4R29L24R7R4L30R34R8R15L4R34L25L24L8L10L6R36L18R21R13R50R17L12L50R48L2R31L22L12R31L1L39R19L8R43L15L37L32L34R15R48R39R26L40R20L26L33R21L39R8L38R10L14R41L35R32R23R19R25R26R25L27R26L43R12L45L15L19L39R14L26L9R25R16R33R44R33L17L37R13R29L18L24L2L39L32R17R46L41R31R23R5R17R26R6L36L40R5L33R4R43L45L45R26R47L2L35L36L42R8R32L35L30R42R50R10L44L9L46L25L45L7R18L15R22L47R44L41R41L1R36R19L16R33R40R45R31L23R34L47R13L42L2L32L23R40L14L19R29R50R47L11R40L26L13L1L39R29R43R40R41R4L24R45L8L47L23L45R13L47L25L35L5L23R5L7L5R47R16L34L36L22L31L8R5R21L44R41L41L46R5L7R11R7R44R10L15L48L22L11L9R36L34R25L34R33R33L17R2L50L45L14R12R17L10L47L15R33R25R1R46R20R3L5R42R13R27L22L8L37R3R2R46L3L12R27L5L4R33L18R4R26L30R5L44L10 \ No newline at end of file diff --git a/data/day23/example01.txt b/data/day23/example01.txt deleted file mode 100644 index 7ac3ba9..0000000 --- a/data/day23/example01.txt +++ /dev/null @@ -1,7 +0,0 @@ -....#.. -..###.# -#...#.# -.#...## -#.###.. -##.#.## -.#..#.. \ No newline at end of file diff --git a/data/day23/example02.txt b/data/day23/example02.txt deleted file mode 100644 index e2a080c..0000000 --- a/data/day23/example02.txt +++ /dev/null @@ -1,6 +0,0 @@ -..... -..##. -..#.. -..... -..##. -..... \ No newline at end of file diff --git a/data/day23/input.txt b/data/day23/input.txt deleted file mode 100644 index fe9b65e..0000000 --- a/data/day23/input.txt +++ /dev/null @@ -1,70 +0,0 @@ -###.###..#.....#..#.##..##.#...###.#####..#.##.#####.###..######.#.#.# -....##.#.#.#......#.###..##..###...#.#...####.##...#.#....#.##.##....# -#..#.#.#.##.........#####....#..##.......#.#.#.##....#.#....##..##..## -#.##.##....#.##.#.###.#...#..#.##.####.#.#.#.#.###.###.####....#.#.#.# -.#.#.#####.##...##.##..#..#.#..####.#..#.#.#######..#.##.#.###.#.....# -..#..#....###.#....###.##.#..#..#.#..#.#.#...##...#....##....#..##...# -###..........#..#.###....##.##...#####.###.#.##...#.##.....#.##.#.#### -#.###.####...#..#.##.....#.####.##..##...#..##.....#...###..##.######. -.....#.####..##.#...#..##.###..#.##.####..#...#.###..##..#.#.###...#.# -.#.#.#..##.##..#.#.##.#.##.#.##..##.##.#..##.#.##..#####.#.###.#.##..# -###.#.###.##.##....#.#.#...##...#.#..#.#..#.#..##.#....#####...#...### -.#.#.#.#.#..#....###.#.##.#.#.####..#.#.#...#.#.#.###....#....#...##.. -#.#....#........#....######...#....#..#.###...#.....###..###...##..#.. -.###.##....#.#.#.###..###....#.#.#..###.##..#..#..#####.#.###.#..##..# -..###.##..####.....#...##.#....#...###..#.###.#...##....####........#. -#####.##..#..##..###....#.##....#.#...##.########...#.#.#..##..##..### -.##..#...##.....###.#...#..###.######.#.#...#...##..#.....#..#.##..#.# -.#####..#.######.#..#..#.#.#.##....##..#.......#....#.##.#.#..##...#.# -.#.##..#..###..#.######........##.##.##..#....#.###.######.##.#.#..##. -##.##.#..####.#....###.#..##..#...#.#####.#..#...#....##...#.###..#.## -#....##..#...#.#.###.#.#...##.#.#..###...####..##.#..##.#.#####.....## -.##.#..#.##.##.#.##.....#######..#...#.##.####...#.....#.##..#...##... -#.#.#.#####...#####..#.##....#.#.####.#..#.##..#.#.#...#..##.#...##... -#.#.#.#..#.#.#..#..###.#.....#.#.#..#.#####.#.#..#...#.###.###...#.#.. -.####..####.#.#..#...##.##.#....#.#.....#.##.###..#...###.###.#....##. -....##.#.##.###.#..##.#..#.......##...#.###...#.......#..####.#.#.#### -....#.#......####..#.#..#..#..#.##..#..#..###..#.#.##.#.##..###..#..#. -.##.#.....##.#..#..#..####..#.#.#...###.##.##.##...#..##..##.##...##.. -#..####..#...#.#....##...##..#.....##.#######..#.####...##..######.#.. -..#.##.##....##.#######..##...#..#..###.....##.#.#..#.#...##..###.#### -#####......##..#.#..#......#..####.####...#####..######...##.###..##.. -###..##.#.##....##..######.#.#.#......#..##.#.##.#.##...#.##...###..## -.....#.#.#.##..#.#####.##.#.#.....#.#..#.###.##..#.###.##..##.###....# -.###.####..####.###....####.#.##..##..#.....##.###.##.######.#..#.#... -.#.#######.#.#.###....#####..#.#.#..#.#.#.#.#..##..#..#...##..##..#.#. -.##..####..#.#...###.#...#....####...###.#..#.#.....#.#.##.#..##.#.#.. -.#.#.#.#####..##.####..#..##......#..#.###.#..#....#...#....#...#.#### -..##.##.###.#..#..#.#..#.###......##.#..#..#.#.####.#.#.#.####.##..... -##.#..#..##.#######..#..#....##..#...########.##.#.#...##...##.##..... -.#...#####.#..##.##.###.####.....###.#......########.#..##.##.#....### -...####.###....##..#..#....#..##.####..##..#..###.......#.#.###.##...# -.#.#......#####...##....#.#..#######.######.#.#.##.#..###..#....##..#. -..###.#.#####..##.#.####....#.###..#..#.##.#####.##..##.##..##..#.##.# -.####.#.######.###.###..#......#...#...#..#..##.###.##.#.####.#.#.##.# -#####.###.##.#########..###..#.#.##.#..#..##...#.###.#.#......###..##. -###...###.##.#.###.#.##.####.#######..##.#....#####.###.#..#.#...###.. -.######...#...#..###......#.#.##........#..##.#.#.##.#....###.....##.# -#.#.....##.##.##..##..##.#.##.###.##.###.##.#.##.###....##..#.#.##.... -#.####.##...##....#.#.....#.#.###..#..####.....#.##..##...##.###.#..## -#####.##.#...#....#..###.##..##...#....#....##.#.#....#####....####.## -####...##...#.###.##.##.#####...#.....##..#####...########..####...... -#.#..##.##.#.######.###.#.##.......#......####..##.#.#.#..##.###.#..#. -#..#..########..##..#.######..#.#...#..#.#####.###.####......##..###.# -#..#.#...#..#....#..##.##.#..###.####.###########.#..#.###.#.##.###..# -##.#..#..#.....#.##.#..######..#..#...#.#...###.#.#.#.#.#.########...# -..###.#.##......###..#...##......#####.#.#....####.....##.#..#.#..#.#. -..######....#..##.#.#..#.##.#..##.##.#....##....###.#.##.##..##....### -.#####....##....###.#.#######.....##.###.#..#.#.#..###...#.##..#..#.#. -#..#####...#..##..#..#..#....#.##....#..##.......##..#....#.#..#.#.### -#.#..#####...#...#...##.#....#..##.#.##....#####.....#.##.....#..#.### -##.#.#....#...#.####....###....#...#.##...##.#....#.#.#.##......##.### -...##.#.#..#.###..#.#...##.#...##.#...##...#..###.#.###...###..#..##.# -.#####...#.#..###.#.##.##.#.##..##.#.#.....##....#.#..#.#.#..#####.### -#.####.####..###......##.....#.#.....##.#..##.##.#....###.....####..## -#..#####...#....#...###..##...###..####..####..#...#####.#####..#.###. -####.###.###....####....##..#..####...#....###.##.#.##...##.......#### -.#.###....####..#..#.###.##.##.####..##.#..###..#..#.#.#..#..#.##..##. -....##......####.####.######...###.....###.#.#..##.#.##.......#...#... -##.###.##...#.....#.##.#.......####.##.###..###.#.#..#.##..#.####....# -....#..##.#...##.##.#.#.#..#.#..#..#.####....#####..#.....#####.#..... \ No newline at end of file diff --git a/data/day24/example01.txt b/data/day24/example01.txt deleted file mode 100644 index 6b9b892..0000000 --- a/data/day24/example01.txt +++ /dev/null @@ -1,6 +0,0 @@ -#.###### -#>>.<^<# -#.<..<<# -#>v.><># -#<^v^^># -######.# \ No newline at end of file diff --git a/data/day24/example02.txt b/data/day24/example02.txt deleted file mode 100644 index 1f3bf6d..0000000 --- a/data/day24/example02.txt +++ /dev/null @@ -1,7 +0,0 @@ -#.##### -#.....# -#>....# -#.....# -#...v.# -#.....# -#####.# \ No newline at end of file diff --git a/data/day24/input.txt b/data/day24/input.txt deleted file mode 100644 index b665c96..0000000 --- a/data/day24/input.txt +++ /dev/null @@ -1,37 +0,0 @@ -#.#################################################################################################### -#>^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 deleted file mode 100644 index 237ef0c..0000000 --- a/data/day25/example01.txt +++ /dev/null @@ -1,13 +0,0 @@ -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 deleted file mode 100644 index b5ab655..0000000 --- a/data/day25/input.txt +++ /dev/null @@ -1,135 +0,0 @@ -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 new file mode 100644 index 0000000..1a55fd3 --- /dev/null +++ b/rest.txt @@ -0,0 +1,5005 @@ + +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 new file mode 100644 index 0000000..f22cd7d --- /dev/null +++ b/result.txt @@ -0,0 +1,5001 @@ +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 deleted file mode 100644 index 181274d..0000000 --- a/src/common/abs.rs +++ /dev/null @@ -1,49 +0,0 @@ -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 c05c588..dbda7b1 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::pos2::Pos2; +use super::pos::Pos; #[derive(Debug, Clone, Copy, Default)] pub struct Area where T: Num, { - lower_left: Pos2, - upper_right: Pos2, + lower_left: Pos, + upper_right: Pos, } impl Area where T: Num + Ord + Copy, { - pub fn new(p1: Pos2, p2: Pos2) -> Area { + pub fn new(p1: Pos, p2: Pos) -> 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: Pos2) -> Area { + pub fn extend(&self, pos: Pos) -> 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) -> Pos2 { + pub fn get_lower_left(&self) -> Pos { self.lower_left } - pub fn get_upper_right(&self) -> Pos2 { + pub fn get_upper_right(&self) -> Pos { self.upper_right } - pub fn contains(&self, pos: Pos2) -> bool { + pub fn contains(&self, pos: Pos) -> 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 = Pos2; + type Item = Pos; 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 = Pos2::new(self.col, self.row); + let pos = Pos::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 = Pos2; + type Item = Pos; 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 = Pos2::new(self.col, self.row); + let pos = Pos::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(Pos2::new(-1, -1), Pos2::new(1, 1)); + let area = Area::new(Pos::new(-1, -1), Pos::new(1, 1)); let result = area.cells(true).collect::>(); let expected = vec![ - 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), + 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), ]; assert_eq!(result, expected); } diff --git a/src/common/direction.rs b/src/common/direction.rs index b3d6a83..cd14a27 100644 --- a/src/common/direction.rs +++ b/src/common/direction.rs @@ -1,18 +1,27 @@ -use super::{pos2::Pos2, turn::Turn}; -use num_traits::{Num, Signed}; +use super::{pos::Pos, turn::Turn}; use std::{fmt::Display, ops::Add}; + use Direction::*; use Turn::*; #[derive(Debug, Copy, Clone, PartialEq, Eq, Hash)] pub enum Direction { - East = 0, - North = 1, - West = 2, - South = 3, + East, + North, + West, + South, } 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, @@ -82,26 +91,35 @@ impl Display for Direction { } } -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; + + fn add(self, rhs: Pos) -> Self::Output { + Pos::add(rhs, self) } } -impl Add for Pos2 { - type Output = Pos2; +impl Add> for &Direction { + type Output = Pos; - fn add(self, rhs: Direction) -> Self::Output { - let rhs: Pos2 = rhs.into(); - self + rhs + 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) } } @@ -112,3 +130,27 @@ 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 fccb9df..6b22811 100644 --- a/src/common/math.rs +++ b/src/common/math.rs @@ -27,24 +27,20 @@ where a } -pub fn gcd(a: T, b: T) -> Option +pub fn gcd(a: T, b: T) -> T where T: Num + Ord + Copy, { assert!(a >= T::zero()); assert!(b >= T::zero()); - if a.is_zero() { - if b.is_zero() { - None - } else { - Some(b) - } + b + } else if b.is_zero() { + a } else { - Some(non_zero_gcd(a, b)) + non_zero_gcd(a, b) } } - pub fn lcm(a: T, b: T) -> T where T: Num + Ord + Copy, @@ -81,9 +77,9 @@ mod tests { #[test] fn some_simple_gcd() { - assert_eq!(Some(5), gcd(10, 15)); - assert_eq!(Some(7), gcd(21, 49)); - assert_eq!(Some(1), gcd(13, 17)); + assert_eq!(5, gcd(10, 15)); + assert_eq!(7, gcd(21, 49)); + assert_eq!(1, gcd(13, 17)); } #[test] diff --git a/src/common/mod.rs b/src/common/mod.rs index c1f39da..3a2379d 100644 --- a/src/common/mod.rs +++ b/src/common/mod.rs @@ -1,12 +1,8 @@ -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 pos2; -pub mod pos3; +pub mod pos; pub mod turn; -pub mod unit_vector; diff --git a/src/common/name.rs b/src/common/name.rs deleted file mode 100644 index bc79e69..0000000 --- a/src/common/name.rs +++ /dev/null @@ -1,30 +0,0 @@ -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 1b66fed..fa6b022 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, u32}, + character::complete::{line_ending, space0, space1}, combinator::{eof, opt, value}, error::ParseError, multi::many0, @@ -34,10 +34,6 @@ 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 new file mode 100644 index 0000000..5e692a2 --- /dev/null +++ b/src/common/pos.rs @@ -0,0 +1,278 @@ +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 deleted file mode 100644 index 8a25e25..0000000 --- a/src/common/pos2.rs +++ /dev/null @@ -1,269 +0,0 @@ -#![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 deleted file mode 100644 index d226a65..0000000 --- a/src/common/pos3.rs +++ /dev/null @@ -1,182 +0,0 @@ -#![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 deleted file mode 100644 index e0ac2db..0000000 --- a/src/common/unit_vector.rs +++ /dev/null @@ -1,53 +0,0 @@ -#![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 9fb7835..6419b99 100644 --- a/src/days/day01/mod.rs +++ b/src/days/day01/mod.rs @@ -1,9 +1,12 @@ -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 2a6393a..9f19241 100644 --- a/src/days/day02/mod.rs +++ b/src/days/day02/mod.rs @@ -1,6 +1,8 @@ -use super::template::{DayTrait, ResultType}; +use std::cmp::Ordering; + use crate::common::file::split_lines; -use std::{cmp::Ordering, str::FromStr}; + +use super::template::{DayTrait, ResultType}; use thiserror::Error; const DAY_NUMBER: usize = 2; @@ -58,7 +60,9 @@ impl Rps { Err(RPSError::IllegalLine(line.to_owned()))? }; - Ok((first.parse()?, second.parse()?)) + let first = Rps::try_from(first)?; + let second = Rps::try_from(second)?; + Ok((first, second)) } pub fn value(&self) -> i64 { @@ -94,10 +98,10 @@ impl PartialOrd for Rps { } } -impl FromStr for Rps { - type Err = RPSError; +impl TryFrom<&str> for Rps { + type Error = RPSError; - fn from_str(value: &str) -> Result { + fn try_from(value: &str) -> std::result::Result { match value { "A" | "X" => Ok(Rps::Rock), "B" | "Y" => Ok(Rps::Paper), @@ -106,7 +110,6 @@ impl FromStr for Rps { } } } - #[derive(Debug, Eq, PartialEq, Clone, Copy)] enum Strategy { Loose, @@ -121,7 +124,9 @@ impl Strategy { Err(RPSError::IllegalLine(line.to_owned()))? }; - Ok((first.parse()?, second.parse()?)) + let first = Rps::try_from(first)?; + let second = Strategy::try_from(second)?; + Ok((first, second)) } pub fn fullfill(&self, other: &Rps) -> Rps { @@ -134,10 +139,10 @@ impl Strategy { } } -impl FromStr for Strategy { - type Err = RPSError; +impl TryFrom<&str> for Strategy { + type Error = RPSError; - fn from_str(value: &str) -> Result { + fn try_from(value: &str) -> std::result::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 7f09707..a86653c 100644 --- a/src/days/day03/mod.rs +++ b/src/days/day03/mod.rs @@ -1,5 +1,6 @@ -use super::template::{DayTrait, ResultType}; use crate::common::file::split_lines; + +use super::template::{DayTrait, ResultType}; use itertools::Itertools; use thiserror::Error; diff --git a/src/days/day04/mod.rs b/src/days/day04/mod.rs index d639e66..62a84a9 100644 --- a/src/days/day04/mod.rs +++ b/src/days/day04/mod.rs @@ -1,5 +1,6 @@ -use super::template::{DayTrait, ResultType}; use crate::common::file::split_lines; + +use super::template::{DayTrait, ResultType}; 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 3295539..57429eb 100644 --- a/src/days/day05/mod.rs +++ b/src/days/day05/mod.rs @@ -1,5 +1,6 @@ -use super::template::{DayTrait, ResultType}; use crate::common::file::split_lines; + +use super::template::{DayTrait, ResultType}; use itertools::Itertools; use std::num::ParseIntError; use thiserror::Error; @@ -123,7 +124,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 d8375fe..beb77c6 100644 --- a/src/days/day07/mod.rs +++ b/src/days/day07/mod.rs @@ -1,10 +1,12 @@ -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; @@ -73,7 +75,7 @@ enum DirectoryError { #[derive(Debug)] struct Node { parent: Option>>, - name: Name, + name: String, sub_dirs: Vec>>, file_size: i64, size: Cell>, @@ -83,7 +85,7 @@ impl Node { fn root() -> Node { Node { parent: None, - name: "/".into(), + name: "/".to_owned(), sub_dirs: vec![], file_size: 0, size: Cell::new(None), @@ -94,7 +96,7 @@ impl Node { self.sub_dirs.push(subdir); } - fn add_file>(&mut self, _name: N, size: i64) { + fn add_file(&mut self, _name: &str, size: i64) { self.file_size += size; } @@ -139,10 +141,10 @@ impl Directory { self.node.borrow().file_size } - pub fn add_subdir>(&mut self, name: N) { + pub fn add_subdir(&mut self, name: &str) { let subdir = Rc::new(RefCell::new(Node { parent: Some(Rc::downgrade(&self.node)), - name: name.into(), + name: name.to_owned(), sub_dirs: vec![], file_size: 0, size: Cell::new(None), @@ -150,7 +152,7 @@ impl Directory { self.node.borrow_mut().add_subdir(subdir); } - pub fn add_file>(&mut self, name: N, size: i64) { + pub fn add_file(&mut self, name: &str, size: i64) { self.node.borrow_mut().add_file(name, size) } @@ -163,9 +165,8 @@ impl Directory { .map(|node| Directory { node }) } - pub fn get_subdir>(&self, name: N) -> Option { + pub fn get_subdir(&self, name: &str) -> 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())) } @@ -180,14 +181,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 50bb849..c031b2a 100644 --- a/src/days/day08/mod.rs +++ b/src/days/day08/mod.rs @@ -1,7 +1,9 @@ -use super::template::{DayTrait, ResultType}; -use crate::common::file::split_lines; -use itertools::{iproduct, FoldWhile, Itertools}; use std::str::FromStr; + +use crate::common::file::split_lines; + +use super::template::{DayTrait, ResultType}; +use itertools::{iproduct, FoldWhile, Itertools}; use thiserror::Error; const DAY_NUMBER: usize = 8; diff --git a/src/days/day09/mod.rs b/src/days/day09/mod.rs index ee0e3da..7f11710 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, pos2::Pos2}; +use crate::common::{direction::Direction, file::split_lines, pos::Pos}; 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: Pos2, second: Pos2) -> Option> { +fn get_closer(first: Pos, second: Pos) -> Option> { let diff = second - first; if diff.x().abs() <= 1 && diff.y().abs() <= 1 { None } else { - Some(Pos2::new(diff.x().signum(), diff.y().signum())) + Some(Pos::new(diff.x().signum(), diff.y().signum())) } } #[derive(Debug)] struct Rope { - head: Pos2, - knots: Vec>, + head: Pos, + knots: Vec>, } impl Rope { pub fn create(length: usize) -> Self { assert!(length >= 2); Rope { - head: Pos2::new(0, 0), - knots: vec![Pos2::new(0, 0); length - 1], + head: Pos::new(0, 0), + knots: vec![Pos::new(0, 0); length - 1], } } diff --git a/src/days/day10/mod.rs b/src/days/day10/mod.rs index d726d37..255231b 100644 --- a/src/days/day10/mod.rs +++ b/src/days/day10/mod.rs @@ -1,7 +1,7 @@ -use super::template::{DayTrait, ResultType}; use crate::common::file::split_lines; -use itertools::Itertools; -use std::{num::ParseIntError, slice::Iter, str::FromStr}; + +use super::template::{DayTrait, ResultType}; +use std::{num::ParseIntError, slice::Iter}; use thiserror::Error; const DAY_NUMBER: usize = 10; @@ -14,13 +14,17 @@ impl DayTrait for Day { } fn part1(&self, lines: &str) -> anyhow::Result { - let instructions: Vec<_> = split_lines(lines).map(|line| line.parse()).try_collect()?; + let instructions = split_lines(lines) + .map(|line| Instruction::parse(line)) + .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: Vec<_> = split_lines(lines).map(|line| line.parse()).try_collect()?; + let instructions = split_lines(lines) + .map(|line| Instruction::parse(line)) + .collect::, _>>()?; let result = CpuCycles::draw(&instructions); Ok(ResultType::Lines(result)) } @@ -35,18 +39,18 @@ enum CpuError { InvalidInteger(#[from] ParseIntError), } -#[derive(Debug, PartialEq, Eq)] -struct Instruction(Option); +enum Instruction { + Add(i32), + Noop, +} -impl FromStr for Instruction { - type Err = CpuError; - - fn from_str(line: &str) -> Result { +impl Instruction { + pub fn parse(line: &str) -> Result { if line == "noop" { - Ok(Instruction(None)) + Ok(Instruction::Noop) } else if line.starts_with("addx") { let value = line[5..].parse()?; - Ok(Instruction(Some(value))) + Ok(Instruction::Add(value)) } else { Err(CpuError::UnknownInstruction(line.to_owned())) } @@ -110,7 +114,10 @@ impl<'a> Iterator for CpuCycles<'a> { self.current = None; Some(start_register) } else if let Some(instruction) = self.instructions.next() { - self.current = instruction.0; + match instruction { + Instruction::Add(value) => self.current = Some(*value), + Instruction::Noop => {} + } Some(self.register) } else { None @@ -127,11 +134,7 @@ mod test { #[test] fn test_simple() -> Result<()> { - let instructions = vec![ - Instruction(None), - Instruction(Some(3)), - Instruction(Some(-5)), - ]; + let instructions = vec![Instruction::Noop, Instruction::Add(3), Instruction::Add(-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 65d210e..ddb6f62 100644 --- a/src/days/day11/mod.rs +++ b/src/days/day11/mod.rs @@ -1,7 +1,8 @@ -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 ed4b673..1c099d0 100644 --- a/src/days/day12/mod.rs +++ b/src/days/day12/mod.rs @@ -1,6 +1,8 @@ -use super::template::{DayTrait, ResultType}; -use crate::common::{file::split_lines, pos2::Pos2}; use std::collections::{BinaryHeap, HashSet}; + +use crate::common::{file::split_lines, pos::Pos}; + +use super::template::{DayTrait, ResultType}; use thiserror::Error; const DAY_NUMBER: usize = 12; @@ -43,7 +45,7 @@ enum ValleyError { struct Path { length: usize, height: char, - pos: Pos2, + pos: Pos, } impl PartialOrd for Path { @@ -76,7 +78,7 @@ impl Ord for Path { } impl Path { - pub fn new(length: usize, height: char, pos: Pos2) -> Self { + pub fn new(length: usize, height: char, pos: Pos) -> Self { Path { length, height, @@ -104,28 +106,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(Pos2::new(self.path.pos.x() + 1, self.path.pos.y())); + return Some(Pos::new(self.path.pos.x() + 1, self.path.pos.y())); } } 2 => { if self.path.pos.y() > 0 { - return Some(Pos2::new(self.path.pos.x(), self.path.pos.y() - 1)); + return Some(Pos::new(self.path.pos.x(), self.path.pos.y() - 1)); } } 3 => { if self.path.pos.x() > 0 { - return Some(Pos2::new(self.path.pos.x() - 1, self.path.pos.y())); + return Some(Pos::new(self.path.pos.x() - 1, self.path.pos.y())); } } 4 => { if self.path.pos.y() < self.valley.height() - 1 { - return Some(Pos2::new(self.path.pos.x(), self.path.pos.y() + 1)); + return Some(Pos::new(self.path.pos.x(), self.path.pos.y() + 1)); } } _ => {} @@ -151,8 +153,8 @@ impl Iterator for Neighbors<'_> { struct Valley { map: Vec>, - start: Pos2, - exit: Pos2, + start: Pos, + exit: Pos, width: usize, } @@ -170,11 +172,11 @@ impl TryFrom<&str> for Valley { for (x, height_char) in row.chars().enumerate() { match height_char { 'S' => { - start = Some(Pos2::new(x, y)); + start = Some(Pos::new(x, y)); height_row.push('a') } 'E' => { - exit = Some(Pos2::new(x, y)); + exit = Some(Pos::new(x, y)); height_row.push('z') } 'a'..='z' => height_row.push(height_char), @@ -209,13 +211,13 @@ impl TryFrom<&str> for Valley { } impl Valley { - fn get_height(&self, pos: Pos2) -> char { + fn get_height(&self, pos: Pos) -> char { self.map[pos.y()][pos.x()] } fn do_walk(&self, check: F) -> Result where - F: Fn(Pos2) -> bool, + F: Fn(Pos) -> bool, { let mut shortest = HashSet::with_capacity(self.width * self.map.len()); let mut queue = BinaryHeap::new(); @@ -267,8 +269,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, Pos2::new(0, 0)); - assert_eq!(valley.exit, Pos2::new(5, 2)); + assert_eq!(valley.start, Pos::new(0, 0)); + assert_eq!(valley.exit, Pos::new(5, 2)); Ok(()) } diff --git a/src/days/day13/mod.rs b/src/days/day13/mod.rs index 8173964..f6b146a 100644 --- a/src/days/day13/mod.rs +++ b/src/days/day13/mod.rs @@ -1,7 +1,9 @@ -use super::template::{DayTrait, ResultType}; -use crate::common::file::split_lines; -use itertools::Itertools; use std::cmp::Ordering; + +use crate::common::file::split_lines; + +use super::template::{DayTrait, ResultType}; +use itertools::Itertools; use thiserror::Error; const DAY_NUMBER: usize = 13; diff --git a/src/days/day14/mod.rs b/src/days/day14/mod.rs index 5f00a63..56a1e02 100644 --- a/src/days/day14/mod.rs +++ b/src/days/day14/mod.rs @@ -1,9 +1,11 @@ -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; @@ -54,7 +56,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()); } @@ -90,7 +92,7 @@ impl TryFrom<&str> for Cave { } impl Cave { - fn get(&self, map: &[Vec], pos: Pos2) -> bool { + fn get(&self, map: &[Vec], pos: Pos) -> bool { if pos.y() >= self.height || pos.x() < self.min_x || pos.x() > self.max_x { false } else { @@ -98,28 +100,28 @@ impl Cave { } } - fn set(&self, map: &mut [Vec], pos: Pos2) { + fn set(&self, map: &mut [Vec], pos: Pos) { map[pos.y() as usize][(pos.x() - self.min_x) as usize] = true } - fn walk(from: Pos2, to: Pos2) -> Result>, CaveError> { + fn walk(from: Pos, to: Pos) -> 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| Pos2::new(from.x(), y)).collect()) + Ok((from.y()..to.y()).map(|y| Pos::new(from.x(), y)).collect()) } else { Ok(((to.y() + 1)..=from.y()) - .map(|y| Pos2::new(from.x(), y)) + .map(|y| Pos::new(from.x(), y)) .collect()) } } else if from.y() == to.y() { if from.x() < to.x() { - Ok((from.x()..to.x()).map(|x| Pos2::new(x, from.y())).collect()) + Ok((from.x()..to.x()).map(|x| Pos::new(x, from.y())).collect()) } else { Ok(((to.x() + 1)..=from.x()) - .map(|x| Pos2::new(x, from.y())) + .map(|x| Pos::new(x, from.y())) .collect()) } } else { @@ -127,14 +129,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(Pos2::new(x, y)) + Ok(Pos::new(x, y)) } _ => Err(CaveError::NotAValidPos(coord.to_owned())), }) @@ -171,8 +173,8 @@ impl Cave { drops } - fn drop_one(&self, map: &[Vec]) -> Option> { - let mut drop = Pos2::new(500, 0); + fn drop_one(&self, map: &[Vec]) -> Option> { + let mut drop = Pos::new(500, 0); loop { let next_y = drop.y() + 1; if next_y > self.height { @@ -180,7 +182,7 @@ impl Cave { } let mut stuck = true; for dx in [0, -1, 1] { - let next = Pos2::new(drop.x() + dx, next_y); + let next = Pos::new(drop.x() + dx, next_y); if !self.get(map, next) { drop = next; stuck = false; @@ -252,7 +254,7 @@ mod test { #[test] fn test_parse() -> Result<()> { let input = "498,4 -> 498,6 -> 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 expected = hashset! {Pos::new(498, 4), Pos::new(498, 5), Pos::new(498, 6), Pos::new(497, 6), Pos::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 43b786c..81e69f8 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}, - pos2::Pos2, + pos::Pos, }; 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: Pos2, + start: Pos, 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 = Pos2::new(one.pos.x(), one.pos.y() + one.radius + 1); + start = Pos::new(one.pos.x(), one.pos.y() + one.radius + 1); } else { - start = Pos2::new(two.pos.x() - two.radius - 1, two.pos.y()); + start = Pos::new(two.pos.x() - two.radius - 1, two.pos.y()); } } else { is_up = false; if one.pos.y() - one.radius >= two.pos.y() { - start = Pos2::new(one.pos.x(), one.pos.y() - one.radius - 1); + start = Pos::new(one.pos.x(), one.pos.y() - one.radius - 1); } else { - start = Pos2::new(two.pos.x() - two.radius - 1, two.pos.y()); + start = Pos::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 + Pos2::splat(r); + let pos = top_down.start + Pos::splat(r); Some(pos) } } @@ -227,7 +227,7 @@ impl Range { #[derive(Debug, PartialEq, Eq, Copy, Clone, Hash)] struct Sensor { - pos: Pos2, + pos: Pos, radius: i64, } @@ -239,21 +239,21 @@ impl Sensor { } } - fn parse_pos(input: &str) -> IResult<&str, Pos2> { + fn parse_pos(input: &str) -> IResult<&str, Pos> { let (input, (x, y)) = separated_pair( Sensor::component("x"), trim0(char(',')), Sensor::component("y"), )(input)?; - Ok((input, Pos2::new(x, y))) + Ok((input, Pos::new(x, y))) } - pub fn parse(input: &str) -> IResult<&str, (Sensor, Pos2)> { + pub fn parse(input: &str) -> IResult<&str, (Sensor, Pos)> { 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_between(beacon); + let radius = pos.taxicab(&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_between(other.pos); + let distance = self.pos.taxicab(&other.pos); distance - self.radius - other.radius } - pub fn contains(&self, pos: Pos2) -> bool { - self.pos.taxicab_between(pos) <= self.radius + pub fn contains(&self, pos: &Pos) -> bool { + self.pos.taxicab(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: Pos2::new(2, 18), + pos: Pos::new(2, 18), radius: 7, }, - Pos2::new(-2, 15), + Pos::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: Pos2::new(8, 7), + pos: Pos::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 4739cfc..e068986 100644 --- a/src/days/day16/mod.rs +++ b/src/days/day16/mod.rs @@ -1,8 +1,5 @@ use super::template::{DayTrait, ResultType}; -use crate::common::{ - name::Name, - parser::{eol_terminated, extract_result, ignore, trim0, trim1, trim_left1}, -}; +use crate::common::parser::{eol_terminated, extract_result, ignore, trim0, trim1, trim_left1}; use itertools::Itertools; use nom::{ branch::alt, @@ -98,7 +95,6 @@ impl Mul for Time { #[derive(Debug, Clone, Copy, PartialEq, Eq, PartialOrd, Ord, Hash, Default)] struct Flow(i64); - impl Deref for Flow { type Target = i64; @@ -212,7 +208,7 @@ impl<'a> TryFrom<&'a str> for RawValve<'a> { #[derive(Debug)] struct Valve { - id: Name, + id: String, idx: Index, flow: Flow, distances: Vec