Compare commits
	
		
			1 Commits
		
	
	
		
			main
			...
			b2723de03c
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|   | b2723de03c | 
							
								
								
									
										25
									
								
								07/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								07/part2.pl
									
									
									
									
									
								
							| @@ -1,19 +1,25 @@ | |||||||
| answer(Answer) :- | answer(Answer) :- | ||||||
|     input(Input), convert_input(Input, Hands, Bets), |     input(Input), | ||||||
|  |     convert_input(Input, Hands, Bets), | ||||||
|     convlist(score, Hands, Scores), |     convlist(score, Hands, Scores), | ||||||
|     zip(Scores, Bets, ScoresBets), |     zip(Scores, Bets, ScoresBets), | ||||||
|     sort(ScoresBets, SortedScoreBets), |     sort(ScoresBets, SortedScoreBetsInv), | ||||||
|     length(Input, NHands), length(VarList, NHands), |     reverse(SortedScoreBetsInv, SortedScoreBets), | ||||||
|     scanl([_, Prev, Curr]>>(Curr is Prev + 1), VarList, 0, [_ | Ranks]), |     payout(SortedScoreBets, _, Answer). | ||||||
|     zip(Ranks, SortedScoreBets, RankScoreBets), |  | ||||||
|     foldl([Rank-(_-Bet), Prev, Sum]>>(Sum is Prev + Rank*Bet), | % payout([Hand-Bet], _, Payout) computes total payout from [Hand-Bet] map. | ||||||
|           RankScoreBets, 0, Answer). | payout([], 0, 0). | ||||||
|  | payout([_-Bet | Cdr], Rank, Payout) :- | ||||||
|  |     payout(Cdr, LastRank, LastPayout), | ||||||
|  |     Rank is LastRank + 1, | ||||||
|  |     Payout is LastPayout + Rank*Bet. | ||||||
|  |  | ||||||
| % score(Hand, Score) gets the score for one hand, that can be directly compared. | % score(Hand, Score) gets the score for one hand, that can be directly compared. | ||||||
| score([A, B, C, D, E], Score) :- | score([A, B, C, D, E], Score) :- | ||||||
|     type([A, B, C, D, E], Type), |     type([A, B, C, D, E], Type), | ||||||
|     Score is E + 100*D + (100**2)*C + (100**3)*B + (100**4)*A + (100**5)*Type. |     Score is E + 100*D + (100**2)*C + (100**3)*B + (100**4)*A + (100**5)*Type. | ||||||
|  |  | ||||||
|  | % type(Hand, MaxCount, Type) | ||||||
| type([1, 1, 1, 1, 1], 7). | type([1, 1, 1, 1, 1], 7). | ||||||
| type(Hand, 7) :- count_hand(Hand, 5, _). | type(Hand, 7) :- count_hand(Hand, 5, _). | ||||||
| type(Hand, 6) :- count_hand(Hand, 4, _). | type(Hand, 6) :- count_hand(Hand, 4, _). | ||||||
| @@ -24,7 +30,7 @@ type(Hand, 2) :- count_hand(Hand, 2, 4). | |||||||
| type(Hand, 1) :- count_hand(Hand, 1, _). | type(Hand, 1) :- count_hand(Hand, 1, _). | ||||||
|  |  | ||||||
| count_hand(Hand, NMaxCard, NUniqueCards) :- | count_hand(Hand, NMaxCard, NUniqueCards) :- | ||||||
|     exclude(=:=(1), Hand, NoJokerHand), |     convlist([X, X]>>(X =\= 1), Hand, NoJokerHand), | ||||||
|     maplist(count(NoJokerHand), NoJokerHand, Counts), |     maplist(count(NoJokerHand), NoJokerHand, Counts), | ||||||
|     max_member(MaxCountNoJoker, Counts), |     max_member(MaxCountNoJoker, Counts), | ||||||
|     count(Hand, 1, NJokers), |     count(Hand, 1, NJokers), | ||||||
| @@ -42,7 +48,8 @@ card(84, 10). card(81, 12). card(75, 13). card(65, 14). % TQKA | |||||||
| card(Char, Card) :- Char >= 48, Char =< 57, Card is Char - 48. | card(Char, Card) :- Char >= 48, Char =< 57, Card is Char - 48. | ||||||
|  |  | ||||||
| % zip 2 lists into a map | % zip 2 lists into a map | ||||||
| zip(List1, List2, Map) :- maplist([A, B, A-B]>>(true), List1, List2, Map). | zip([], [], []). | ||||||
|  | zip([A | ACdr], [B | BCdr], [A-B | ABCdr]) :- zip(ACdr, BCdr, ABCdr). | ||||||
|  |  | ||||||
| % convert_input(InputList, Cards, Bets) | % convert_input(InputList, Cards, Bets) | ||||||
| convert_input([], [], []). | convert_input([], [], []). | ||||||
|   | |||||||
							
								
								
									
										801
									
								
								08/input.pl
									
									
									
									
									
								
							
							
						
						
									
										801
									
								
								08/input.pl
									
									
									
									
									
								
							| @@ -1,801 +0,0 @@ | |||||||
| :- op(700, xfx, to). |  | ||||||
| direction("lrlrrrlrrrlllrlrrllrlrrrlrlrrrlrlrrrlrlrrrlrrrlrllrrrlrlrlrrlrrlrlrrlrrlrrllrrrlrrrlrrlrrlrrlrrrllrrlrlrrlrlrrlrrlrlrrlrrllrlrrrlrrlrrrllrlrlrllrllrllrlrrllrrlrlrlrrlrllrrrllrrrlrrllrrrlrrrlrlrrrllrrrlrlrrrlllrrrlrlrlrrrlrrrlrrrlrlrrlllrrlrrrllrlrrrlrlrlllrrlrlrrrlrlrrrr"). |  | ||||||
|  |  | ||||||
| gnk to lbv-qnp. |  | ||||||
| pjq to ghf-fjf. |  | ||||||
| klm to ttr-bql. |  | ||||||
| ldt to fxs-fbb. |  | ||||||
| tkh to nbh-jrn. |  | ||||||
| qnd to kjc-srd. |  | ||||||
| sng to bqp-lxn. |  | ||||||
| gms to jdn-nkm. |  | ||||||
| ntl to pts-dhk. |  | ||||||
| nbn to ffd-prl. |  | ||||||
| ncp to qkb-hmr. |  | ||||||
| nqt to rdk-bhc. |  | ||||||
| tdk to ghm-ghm. |  | ||||||
| bjs to tgc-gbj. |  | ||||||
| xnh to ggj-tkl. |  | ||||||
| nkv to gtc-ncp. |  | ||||||
| hfl to lqq-rvt. |  | ||||||
| hkc to bqm-nkp. |  | ||||||
| kch to gjg-gjg. |  | ||||||
| mfd to crd-vdp. |  | ||||||
| fnz to xsm-pqq. |  | ||||||
| nvt to tdn-jvt. |  | ||||||
| pcq to hld-bkq. |  | ||||||
| gpf to mnj-ngp. |  | ||||||
| pcx to lpd-bjk. |  | ||||||
| ccg to tts-tts. |  | ||||||
| bgg to tqp-nfg. |  | ||||||
| hsp to dvs-qqm. |  | ||||||
| tsx to gbv-kxm. |  | ||||||
| rkk to bnc-fnz. |  | ||||||
| hvj to rpd-mgb. |  | ||||||
| cxc to btd-vdn. |  | ||||||
| nbh to sqq-pjb. |  | ||||||
| cqn to srv-mcf. |  | ||||||
| lpd to ppr-rhs. |  | ||||||
| bkm to fjv-xtv. |  | ||||||
| kqv to pck-dxj. |  | ||||||
| vcl to pdn-mtc. |  | ||||||
| jvs to qqp-bdm. |  | ||||||
| mjt to jcx-nrr. |  | ||||||
| vsr to nqt-kng. |  | ||||||
| nkm to hnf-bfd. |  | ||||||
| hgj to bnt-kfk. |  | ||||||
| vmc to qnd-rkc. |  | ||||||
| djg to prd-lbd. |  | ||||||
| jct to nfm-njf. |  | ||||||
| fpx to njf-nfm. |  | ||||||
| hpd to snt-jxr. |  | ||||||
| qlk to kxv-klf. |  | ||||||
| hmr to tdk-cxj. |  | ||||||
| rql to qdp-gbq. |  | ||||||
| vdt to bgp-mxh. |  | ||||||
| pfv to tnh-lqv. |  | ||||||
| ttf to flv-skm. |  | ||||||
| qkl to jnb-skx. |  | ||||||
| rxc to qfp-vmv. |  | ||||||
| ngj to qpn-gsf. |  | ||||||
| mpz to jvh-bnb. |  | ||||||
| fpb to xnh-nms. |  | ||||||
| lqp to sng-vvm. |  | ||||||
| hqf to mnm-vhl. |  | ||||||
| xxj to prl-ffd. |  | ||||||
| kph to ttf-snq. |  | ||||||
| jdt to kch-jmc. |  | ||||||
| krk to pcx-bmg. |  | ||||||
| fjv to qlk-qsn. |  | ||||||
| mpg to ljg-pkd. |  | ||||||
| tch to rrq-qtl. |  | ||||||
| sds to jqr-bxr. |  | ||||||
| rkr to kvd-ngn. |  | ||||||
| tvj to xgs-pcq. |  | ||||||
| vsq to nhp-qqs. |  | ||||||
| rdk to xtd-mhb. |  | ||||||
| sgp to prp-xjd. |  | ||||||
| svn to bkm-nsv. |  | ||||||
| sjc to dgl-frh. |  | ||||||
| njx to trn-mhn. |  | ||||||
| rcg to bsn-dqr. |  | ||||||
| hxj to kdl-srr. |  | ||||||
| bqz to pql-frm. |  | ||||||
| nks to shm-shm. |  | ||||||
| fpj to stm-ctn. |  | ||||||
| sfm to pvc-tgm. |  | ||||||
| vss to mgv-jls. |  | ||||||
| dgl to nbb-bst. |  | ||||||
| xrq to lpn-mkf. |  | ||||||
| rsz to svm-xmg. |  | ||||||
| ttk to kst-mgq. |  | ||||||
| fjf to crc-rxf. |  | ||||||
| cmt to hph-kpl. |  | ||||||
| sdr to ltd-tvk. |  | ||||||
| bst to kqv-qph. |  | ||||||
| dgt to bcq-mlx. |  | ||||||
| qpn to mmd-lkl. |  | ||||||
| shm to frm-pql. |  | ||||||
| xdd to qcs-vmd. |  | ||||||
| snq to flv-skm. |  | ||||||
| tlf to qtc-grk. |  | ||||||
| cpb to dfx-gdn. |  | ||||||
| brj to ldr-cdr. |  | ||||||
| jnl to jtd-smv. |  | ||||||
| ftg to vrn-vrn. |  | ||||||
| gbj to vgh-djt. |  | ||||||
| tgs to fpb-qgt. |  | ||||||
| mhb to dkl-kmx. |  | ||||||
| gnh to sfq-jxk. |  | ||||||
| ltd to xjq-mbl. |  | ||||||
| pcr to jdd-ktl. |  | ||||||
| dmd to khc-kvh. |  | ||||||
| ftt to ltb-bld. |  | ||||||
| lmt to rkc-qnd. |  | ||||||
| jgt to fdt-vdd. |  | ||||||
| mdv to xts-mrf. |  | ||||||
| plv to kxc-cnm. |  | ||||||
| prj to shc-mnl. |  | ||||||
| pml to grx-qgj. |  | ||||||
| vvm to lxn-bqp. |  | ||||||
| ngn to gbg-xjx. |  | ||||||
| vcg to srv-mcf. |  | ||||||
| qfp to tjs-xpd. |  | ||||||
| lvx to fpx-jct. |  | ||||||
| rbc to drm-vhc. |  | ||||||
| xkt to ccg-flm. |  | ||||||
| sdh to bnf-gkn. |  | ||||||
| bvq to qsh-vsq. |  | ||||||
| smv to skn-hhj. |  | ||||||
| dbd to rsm-pkb. |  | ||||||
| dqr to hvs-dvc. |  | ||||||
| mnk to dxt-cld. |  | ||||||
| ffd to dlf-jpq. |  | ||||||
| gbg to tkp-kpm. |  | ||||||
| chk to mmt-mqc. |  | ||||||
| bxr to gmv-bgt. |  | ||||||
| sfd to xsp-sds. |  | ||||||
| prt to hdb-rcg. |  | ||||||
| qxj to qqt-bhg. |  | ||||||
| tgr to tqd-tjm. |  | ||||||
| gjg to rvq-tvj. |  | ||||||
| bfd to sgs-nch. |  | ||||||
| pnd to bpl-tkv. |  | ||||||
| jpg to gnq-qkp. |  | ||||||
| fdt to npf-sff. |  | ||||||
| dlx to xvp-bnr. |  | ||||||
| snt to qfr-rmt. |  | ||||||
| dnd to tvk-ltd. |  | ||||||
| ssf to llf-frv. |  | ||||||
| drk to ftg-lbt. |  | ||||||
| vqv to jvs-rrh. |  | ||||||
| xbv to dsc-nrl. |  | ||||||
| cvl to krf-njx. |  | ||||||
| xgp to bqj-rxc. |  | ||||||
| mlx to tbd-qsg. |  | ||||||
| jdf to ccg-ccg. |  | ||||||
| gvn to scn-pkh. |  | ||||||
| ncb to gkn-bnf. |  | ||||||
| llf to pnd-lmm. |  | ||||||
| shx to txm-prj. |  | ||||||
| knl to ksl-vqq. |  | ||||||
| jsk to sqd-mpg. |  | ||||||
| pps to khc-kvh. |  | ||||||
| nkj to dbd-rfb. |  | ||||||
| cnm to fcb-dhp. |  | ||||||
| txj to dbj-dlx. |  | ||||||
| qsh to qqs-nhp. |  | ||||||
| brc to pln-gms. |  | ||||||
| bhp to jnh-clp. |  | ||||||
| bql to sdr-dnd. |  | ||||||
| tgc to vgh-djt. |  | ||||||
| mhm to vhv-hfp. |  | ||||||
| ngp to hnn-hdx. |  | ||||||
| skm to sxh-ptr. |  | ||||||
| tfn to smk-gxl. |  | ||||||
| nsr to glb-pch. |  | ||||||
| rhs to xcx-rfh. |  | ||||||
| bnc to pqq-xsm. |  | ||||||
| xjx to kpm-tkp. |  | ||||||
| lft to tmh-ssp. |  | ||||||
| kvd to xjx-gbg. |  | ||||||
| skx to ngf-ntc. |  | ||||||
| ckq to fcl-mrm. |  | ||||||
| mtc to pbm-tgr. |  | ||||||
| rhv to tgs-kdv. |  | ||||||
| mmd to vmj-tfn. |  | ||||||
| psm to xdk-gsg. |  | ||||||
| kxm to rdn-xps. |  | ||||||
| pln to nkm-jdn. |  | ||||||
| hdk to skx-jnb. |  | ||||||
| xgs to hld-bkq. |  | ||||||
| fmb to phl-tfg. |  | ||||||
| lhh to xrf-stp. |  | ||||||
| ltb to tdc-bcx. |  | ||||||
| frv to lmm-pnd. |  | ||||||
| grk to fdh-cqd. |  | ||||||
| nrr to hns-kbj. |  | ||||||
| bgt to ldt-vbj. |  | ||||||
| srd to cbg-dmm. |  | ||||||
| knf to dvl-knl. |  | ||||||
| kxc to fcb-dhp. |  | ||||||
| ghb to nnj-qmh. |  | ||||||
| pgq to jjx-vsf. |  | ||||||
| skb to xxt-ntm. |  | ||||||
| lxp to prd-lbd. |  | ||||||
| prl to jpq-dlf. |  | ||||||
| frm to lbn-cpb. |  | ||||||
| ksl to fpt-ttc. |  | ||||||
| crc to rcl-hqf. |  | ||||||
| svm to bjs-xkd. |  | ||||||
| pxb to pmc-hpd. |  | ||||||
| jpq to mkj-mkc. |  | ||||||
| ttr to dnd-sdr. |  | ||||||
| cbh to ftd-jjq. |  | ||||||
| xps to nsp-lss. |  | ||||||
| kmx to qsl-sjc. |  | ||||||
| cld to mdp-ckq. |  | ||||||
| gxv to mkk-dbb. |  | ||||||
| bqp to tqh-lkn. |  | ||||||
| ftb to gjq-gxv. |  | ||||||
| kpl to drr-rsz. |  | ||||||
| mkf to sdh-ncb. |  | ||||||
| ssp to cbn-xcf. |  | ||||||
| xjq to nnd-tpt. |  | ||||||
| ntt to ndj-qfb. |  | ||||||
| plf to nbh-jrn. |  | ||||||
| xdk to gpf-fsg. |  | ||||||
| ntc to dgt-xrb. |  | ||||||
| sgj to qmh-nnj. |  | ||||||
| tnh to vgb-fdr. |  | ||||||
| dfx to hfc-ktx. |  | ||||||
| dbj to xvp-bnr. |  | ||||||
| vdd to sff-npf. |  | ||||||
| jkl to frt-cvl. |  | ||||||
| xsp to bxr-jqr. |  | ||||||
| dbp to psr-ljs. |  | ||||||
| khc to mjt-ktp. |  | ||||||
| tkp to vrx-gvn. |  | ||||||
| dkl to sjc-qsl. |  | ||||||
| dlp to xxj-nbn. |  | ||||||
| kln to hrp-jpm. |  | ||||||
| tpp to nhj-pcr. |  | ||||||
| qvf to qnp-lbv. |  | ||||||
| vmd to ctf-sfm. |  | ||||||
| nfm to qkl-hdk. |  | ||||||
| mcf to bjv-jxl. |  | ||||||
| pqg to xtq-qmc. |  | ||||||
| bgp to hft-ktd. |  | ||||||
| pts to ddg-rbc. |  | ||||||
| jls to shl-vpt. |  | ||||||
| dht to npc-krp. |  | ||||||
| tjm to khm-bxb. |  | ||||||
| trh to ndj-qfb. |  | ||||||
| ctf to pvc-tgm. |  | ||||||
| pmj to bhp-tdf. |  | ||||||
| aaa to mpf-vmm. |  | ||||||
| xcf to lvx-fnt. |  | ||||||
| frh to bst-nbb. |  | ||||||
| qll to hdb-rcg. |  | ||||||
| xvp to qhd-pml. |  | ||||||
| bnx to tlq-tsx. |  | ||||||
| bxb to jsj-kdq. |  | ||||||
| fpt to lbc-vjf. |  | ||||||
| fcb to tjk-mjd. |  | ||||||
| kng to rdk-bhc. |  | ||||||
| dbb to rfx-flk. |  | ||||||
| lqq to rtp-hgj. |  | ||||||
| lbt to vrn-rlt. |  | ||||||
| xkd to gbj-tgc. |  | ||||||
| lkn to xdd-cpc. |  | ||||||
| xhm to cnm-kxc. |  | ||||||
| dtc to qqt-bhg. |  | ||||||
| bpl to dms-gqc. |  | ||||||
| qpp to mrf-xts. |  | ||||||
| prk to nkp-bqm. |  | ||||||
| mgs to mpg-sqd. |  | ||||||
| stm to mts-ghd. |  | ||||||
| skd to mgv-jls. |  | ||||||
| qph to dxj-pck. |  | ||||||
| hdb to dqr-bsn. |  | ||||||
| dsc to vxm-chk. |  | ||||||
| tqf to gjt-fnj. |  | ||||||
| fxs to ghq-bvq. |  | ||||||
| sff to hkc-prk. |  | ||||||
| drr to xmg-svm. |  | ||||||
| rkp to xxn-ldq. |  | ||||||
| nnj to klg-hfl. |  | ||||||
| vjf to hmj-rdc. |  | ||||||
| lxn to tqh-lkn. |  | ||||||
| cxj to ghm-cmt. |  | ||||||
| hmc to gms-pln. |  | ||||||
| ljs to jdf-xkt. |  | ||||||
| xch to ttr-bql. |  | ||||||
| lkg to qxj-dtc. |  | ||||||
| qfb to mht-cfl. |  | ||||||
| rdn to lss-nsp. |  | ||||||
| dhs to shm-bqz. |  | ||||||
| nkt to gsg-xdk. |  | ||||||
| mch to htp-blc. |  | ||||||
| nvx to mgs-jsk. |  | ||||||
| qtc to fdh-fdh. |  | ||||||
| nnd to dgp-lbf. |  | ||||||
| gjv to xhm-plv. |  | ||||||
| gsg to fsg-gpf. |  | ||||||
| bnv to stm-ctn. |  | ||||||
| ldq to mch-gxs. |  | ||||||
| mhn to kph-pkc. |  | ||||||
| lbf to pps-dmd. |  | ||||||
| qdp to nkv-hsq. |  | ||||||
| mpf to mnk-lth. |  | ||||||
| dhq to cdr-ldr. |  | ||||||
| vmm to mnk-lth. |  | ||||||
| hft to brc-hmc. |  | ||||||
| ltr to nkt-psm. |  | ||||||
| hdx to gjc-ftt. |  | ||||||
| ghf to rxf-crc. |  | ||||||
| bkq to ftb-hjh. |  | ||||||
| bxx to njc-npk. |  | ||||||
| fvp to brg-ntj. |  | ||||||
| rdc to lht-vmg. |  | ||||||
| jkt to qpp-mdv. |  | ||||||
| pvp to ghb-sgj. |  | ||||||
| xxn to gxs-mch. |  | ||||||
| shc to gnh-pcj. |  | ||||||
| gsf to lkl-mmd. |  | ||||||
| krp to mgl-vgq. |  | ||||||
| jxk to tgn-tjp. |  | ||||||
| mgq to xrq-vbn. |  | ||||||
| fln to mgb-rpd. |  | ||||||
| dhp to mjd-tjk. |  | ||||||
| sqq to dvp-vcd. |  | ||||||
| hfh to cbh-jmm. |  | ||||||
| mbp to ndf-tfk. |  | ||||||
| klg to rvt-lqq. |  | ||||||
| npf to prk-hkc. |  | ||||||
| nms to ggj-tkl. |  | ||||||
| qqp to cgm-tch. |  | ||||||
| sfg to nvg-nsr. |  | ||||||
| rvq to xgs-pcq. |  | ||||||
| sqd to pkd-ljg. |  | ||||||
| jcx to hns-kbj. |  | ||||||
| qsn to kxv-klf. |  | ||||||
| glx to nkt-psm. |  | ||||||
| tjs to gjv-mpk. |  | ||||||
| qlj to xjd-prp. |  | ||||||
| nsv to fjv-xtv. |  | ||||||
| gxx to rfb-dbd. |  | ||||||
| hsr to brg-ntj. |  | ||||||
| hbf to cdc-nxl. |  | ||||||
| xss to psr-ljs. |  | ||||||
| qtl to tqf-hqm. |  | ||||||
| tkl to dnf-pvp. |  | ||||||
| brk to jkq-jkk. |  | ||||||
| scn to mfc-pmj. |  | ||||||
| gmv to vbj-ldt. |  | ||||||
| hns to lmt-vmc. |  | ||||||
| rgr to ntt-trh. |  | ||||||
| pnc to kch-kch. |  | ||||||
| xnk to jnl-qfh. |  | ||||||
| rrr to pqt-ngr. |  | ||||||
| tdn to kbc-ttk. |  | ||||||
| nqn to khn-ssf. |  | ||||||
| hmk to rrh-jvs. |  | ||||||
| rfb to pkb-rsm. |  | ||||||
| sfq to tgn-tjp. |  | ||||||
| jkq to svn-bdb. |  | ||||||
| ctn to mts-ghd. |  | ||||||
| qnt to tqp-nfg. |  | ||||||
| vhl to jjp-hbf. |  | ||||||
| rfh to plf-tkh. |  | ||||||
| ktd to brc-hmc. |  | ||||||
| vrx to scn-pkh. |  | ||||||
| bnt to jkl-jcl. |  | ||||||
| mdn to dlc-brk. |  | ||||||
| cbg to sks-pjq. |  | ||||||
| qfh to jtd-smv. |  | ||||||
| hvs to xgp-ccx. |  | ||||||
| nqh to bkx-vsr. |  | ||||||
| gqq to mbv-hmn. |  | ||||||
| lsn to ntm-xxt. |  | ||||||
| flq to rrr-qlt. |  | ||||||
| lxm to prt-qll. |  | ||||||
| hjh to gxv-gjq. |  | ||||||
| srv to jxl-bjv. |  | ||||||
| tmh to xcf-cbn. |  | ||||||
| prb to ktv-ndd. |  | ||||||
| jjq to qhq-qdb. |  | ||||||
| ksv to ntt-trh. |  | ||||||
| xkh to vjs-jgt. |  | ||||||
| sjp to qnt-bgg. |  | ||||||
| ntr to bnc-bnc. |  | ||||||
| pbm to tjm-tqd. |  | ||||||
| rpd to dvg-prb. |  | ||||||
| xpd to mpk-gjv. |  | ||||||
| nch to gkg-ngj. |  | ||||||
| ktp to jcx-nrr. |  | ||||||
| gqc to qnr-pfv. |  | ||||||
| mkc to vlf-sfd. |  | ||||||
| ntm to fbf-xnk. |  | ||||||
| tvk to mbl-xjq. |  | ||||||
| rmt to xkv-rhc. |  | ||||||
| nhp to dpm-mhm. |  | ||||||
| jnb to ngf-ntc. |  | ||||||
| rtp to bnt-kfk. |  | ||||||
| gjt to tkr-gpl. |  | ||||||
| tts to vfm-vfm. |  | ||||||
| flk to bnv-fpj. |  | ||||||
| cjj to qvf-gnk. |  | ||||||
| qkp to fbg-tpp. |  | ||||||
| xqt to jvt-tdn. |  | ||||||
| jvh to xkx-jkm. |  | ||||||
| ndj to cfl-mht. |  | ||||||
| jxx to brk-dlc. |  | ||||||
| xjd to smn-lkg. |  | ||||||
| jxl to kvb-rhv. |  | ||||||
| vmg to kkm-jkt. |  | ||||||
| fbg to nhj-pcr. |  | ||||||
| lkl to vmj-tfn. |  | ||||||
| nxl to xss-dbp. |  | ||||||
| src to ftg-lbt. |  | ||||||
| pdc to cqn-vcg. |  | ||||||
| bld to tdc-bcx. |  | ||||||
| nhj to ktl-jdd. |  | ||||||
| dgc to vfm-zzz. |  | ||||||
| ltx to qtc-grk. |  | ||||||
| ccx to bqj-rxc. |  | ||||||
| drm to dgb-pgx. |  | ||||||
| vqq to ttc-fpt. |  | ||||||
| bhc to xtd-mhb. |  | ||||||
| cdc to dbp-xss. |  | ||||||
| sxh to pnc-pnc. |  | ||||||
| kbc to kst-mgq. |  | ||||||
| dxt to ckq-mdp. |  | ||||||
| prp to smn-lkg. |  | ||||||
| sgs to ngj-gkg. |  | ||||||
| vbn to lpn-mkf. |  | ||||||
| bnf to kgk-pgk. |  | ||||||
| hld to ftb-hjh. |  | ||||||
| fgt to tcg-ntl. |  | ||||||
| vbt to dvs-qqm. |  | ||||||
| xvt to qll-prt. |  | ||||||
| sbh to bnb-jvh. |  | ||||||
| vgb to vss-skd. |  | ||||||
| xjj to cxc-pkx. |  | ||||||
| jkk to bdb-svn. |  | ||||||
| bsn to hvs-dvc. |  | ||||||
| dbx to qsr-hxj. |  | ||||||
| qsg to khj-vmp. |  | ||||||
| cpk to crd-vdp. |  | ||||||
| jgd to jmm-cbh. |  | ||||||
| vgh to cqm-dlp. |  | ||||||
| gbq to hsq-nkv. |  | ||||||
| grx to lsn-skb. |  | ||||||
| flm to tts-dgc. |  | ||||||
| ppr to xcx-rfh. |  | ||||||
| vdp to hvv-vdb. |  | ||||||
| gkn to pgk-kgk. |  | ||||||
| xda to bnb-jvh. |  | ||||||
| mnl to pcj-gnh. |  | ||||||
| mgb to prb-dvg. |  | ||||||
| fbb to bvq-ghq. |  | ||||||
| ntj to lxp-djg. |  | ||||||
| pqq to nvt-xqt. |  | ||||||
| tqp to tvg-fmv. |  | ||||||
| lqk to bpc-hsx. |  | ||||||
| mtg to tsm-pxb. |  | ||||||
| vsf to lxm-xvt. |  | ||||||
| hjb to bmg-pcx. |  | ||||||
| vmj to gxl-smk. |  | ||||||
| cxb to qlf-sjp. |  | ||||||
| hcp to ssf-khn. |  | ||||||
| qlh to hsx-bpc. |  | ||||||
| nfg to tvg-fmv. |  | ||||||
| pkb to lhh-hkj. |  | ||||||
| brg to djg-lxp. |  | ||||||
| tlq to kxm-gbv. |  | ||||||
| ddg to drm-vhc. |  | ||||||
| bqm to nvx-klt. |  | ||||||
| ktx to ljp-dvh. |  | ||||||
| xts to dhq-brj. |  | ||||||
| tfg to vqv-hmk. |  | ||||||
| jcd to vsf-jjx. |  | ||||||
| vfm to mpf-vmm. |  | ||||||
| lgj to njc-njc. |  | ||||||
| pqb to bgp-mxh. |  | ||||||
| cbn to lvx-fnt. |  | ||||||
| fcl to nqh-txn. |  | ||||||
| jnh to rkp-qdf. |  | ||||||
| lht to jkt-kkm. |  | ||||||
| mjd to pdc-prv. |  | ||||||
| qgt to xnh-nms. |  | ||||||
| kst to xrq-vbn. |  | ||||||
| kdv to fpb-qgt. |  | ||||||
| hfp to nnk-mbp. |  | ||||||
| bjk to ppr-rhs. |  | ||||||
| xxm to mfd-cpk. |  | ||||||
| qlt to pqt-ngr. |  | ||||||
| hmj to lht-vmg. |  | ||||||
| xdr to tcg-ntl. |  | ||||||
| nnk to tfk-ndf. |  | ||||||
| vjc to nsr-nvg. |  | ||||||
| mmm to qlf-sjp. |  | ||||||
| bnb to xkx-jkm. |  | ||||||
| ljg to vjc-sfg. |  | ||||||
| qqt to srf-xxm. |  | ||||||
| jpm to hsr-fvp. |  | ||||||
| gnq to fbg-tpp. |  | ||||||
| pjb to vcd-dvp. |  | ||||||
| nkp to klt-nvx. |  | ||||||
| gjc to ltb-bld. |  | ||||||
| mrf to dhq-brj. |  | ||||||
| srf to cpk-mfd. |  | ||||||
| fss to vxj-dhg. |  | ||||||
| xxz to tvj-rvq. |  | ||||||
| ndd to rgn-lsj. |  | ||||||
| tqd to khm-bxb. |  | ||||||
| xjb to pxb-tsm. |  | ||||||
| lsj to xch-klm. |  | ||||||
| jbj to jgd-hfh. |  | ||||||
| dms to qnr-pfv. |  | ||||||
| dlf to mkc-mkj. |  | ||||||
| hnn to ftt-gjc. |  | ||||||
| vxm to mqc-mmt. |  | ||||||
| lmm to tkv-bpl. |  | ||||||
| bmg to bjk-lpd. |  | ||||||
| qgj to lsn-skb. |  | ||||||
| frt to njx-krf. |  | ||||||
| skn to dht-dbm. |  | ||||||
| lbd to jxx-mdn. |  | ||||||
| kfk to jkl-jcl. |  | ||||||
| rrh to bdm-qqp. |  | ||||||
| nrl to chk-vxm. |  | ||||||
| lcx to vjs-jgt. |  | ||||||
| cnr to gbq-qdp. |  | ||||||
| tgn to pqb-vdt. |  | ||||||
| grt to dbj-dlx. |  | ||||||
| fdh to ntr-ntr. |  | ||||||
| crd to vdb-hvv. |  | ||||||
| dmm to pjq-sks. |  | ||||||
| vhc to pgx-dgb. |  | ||||||
| ftd to qdb-qhq. |  | ||||||
| npc to mgl-vgq. |  | ||||||
| prv to vcg-cqn. |  | ||||||
| tsm to pmc-hpd. |  | ||||||
| cqm to xxj-nbn. |  | ||||||
| bnr to pml-qhd. |  | ||||||
| nsp to cbr-gqq. |  | ||||||
| tjk to prv-pdc. |  | ||||||
| mst to knl-dvl. |  | ||||||
| vmp to jff-pqg. |  | ||||||
| tdf to jnh-clp. |  | ||||||
| mqc to hvj-fln. |  | ||||||
| vpt to bnx-jcc. |  | ||||||
| gkp to phl-tfg. |  | ||||||
| jjx to xvt-lxm. |  | ||||||
| mmt to fln-hvj. |  | ||||||
| crp to hfh-jgd. |  | ||||||
| dbm to krp-npc. |  | ||||||
| lqv to vgb-fdr. |  | ||||||
| xrf to gfv-phk. |  | ||||||
| rrq to tqf-hqm. |  | ||||||
| rxf to rcl-hqf. |  | ||||||
| jrn to pjb-sqq. |  | ||||||
| jtd to skn-hhj. |  | ||||||
| htp to jtr-vcl. |  | ||||||
| jmm to ftd-jjq. |  | ||||||
| mbl to nnd-tpt. |  | ||||||
| rcl to mnm-vhl. |  | ||||||
| lgs to qvf-gnk. |  | ||||||
| csc to cnr-rql. |  | ||||||
| mfc to bhp-tdf. |  | ||||||
| hsx to hsp-vbt. |  | ||||||
| gbv to rdn-xps. |  | ||||||
| vxj to qhv-lqp. |  | ||||||
| jkm to xjj-gmc. |  | ||||||
| mts to krk-hjb. |  | ||||||
| qdb to drk-src. |  | ||||||
| ggj to dnf-pvp. |  | ||||||
| xxt to xnk-fbf. |  | ||||||
| xsm to xqt-nvt. |  | ||||||
| qqm to xjb-mtg. |  | ||||||
| kdq to qlh-lqk. |  | ||||||
| hnb to tmh-ssp. |  | ||||||
| frj to vxj-dhg. |  | ||||||
| pql to lbn-cpb. |  | ||||||
| sks to ghf-fjf. |  | ||||||
| dlc to jkq-jkk. |  | ||||||
| jmc to gjg-xxz. |  | ||||||
| stp to gfv-phk. |  | ||||||
| qnp to lcx-xkh. |  | ||||||
| klf to cjj-lgs. |  | ||||||
| xsa to pqq-xsm. |  | ||||||
| ktv to rgn-lsj. |  | ||||||
| fdr to skd-vss. |  | ||||||
| pch to grt-txj. |  | ||||||
| ktl to xdr-fgt. |  | ||||||
| lbb to nrl-dsc. |  | ||||||
| xkv to jbj-crp. |  | ||||||
| khj to jff-pqg. |  | ||||||
| ngf to xrb-dgt. |  | ||||||
| dvh to qlj-sgp. |  | ||||||
| mrm to txn-nqh. |  | ||||||
| tgm to lgj-bxx. |  | ||||||
| mkk to rfx-flk. |  | ||||||
| rlt to fbh-lgl. |  | ||||||
| gxs to htp-blc. |  | ||||||
| xkx to gmc-xjj. |  | ||||||
| vmv to xpd-tjs. |  | ||||||
| mgl to ltx-tlf. |  | ||||||
| njc to nks-nks. |  | ||||||
| clp to qdf-rkp. |  | ||||||
| smk to nkj-gxx. |  | ||||||
| kpm to gvn-vrx. |  | ||||||
| bcq to tbd-qsg. |  | ||||||
| tpt to lbf-dgp. |  | ||||||
| cfa to frm-pql. |  | ||||||
| kvb to tgs-kdv. |  | ||||||
| bdm to cgm-tch. |  | ||||||
| jjp to cdc-nxl. |  | ||||||
| pmc to jxr-snt. |  | ||||||
| pgx to hcp-nqn. |  | ||||||
| lbc to rdc-hmj. |  | ||||||
| mbv to dbx-ddq. |  | ||||||
| kxv to lgs-cjj. |  | ||||||
| djt to dlp-cqm. |  | ||||||
| ldr to lft-hnb. |  | ||||||
| gxl to nkj-gxx. |  | ||||||
| smn to qxj-dtc. |  | ||||||
| dcj to gkp-fmb. |  | ||||||
| gdn to ktx-hfc. |  | ||||||
| kgk to phn-kln. |  | ||||||
| vbj to fbb-fxs. |  | ||||||
| ddq to qsr-hxj. |  | ||||||
| kjc to cbg-dmm. |  | ||||||
| blc to vcl-jtr. |  | ||||||
| qnr to lqv-tnh. |  | ||||||
| krf to trn-mhn. |  | ||||||
| jff to qmc-xtq. |  | ||||||
| mpk to plv-xhm. |  | ||||||
| pkc to ttf-snq. |  | ||||||
| vrn to fbh-fbh. |  | ||||||
| dvl to vqq-ksl. |  | ||||||
| xtd to kmx-dkl. |  | ||||||
| vdb to mxn-jpg. |  | ||||||
| fmv to rgr-ksv. |  | ||||||
| hmn to ddq-dbx. |  | ||||||
| trn to pkc-kph. |  | ||||||
| gkg to qpn-gsf. |  | ||||||
| mdp to mrm-fcl. |  | ||||||
| dhg to qhv-lqp. |  | ||||||
| bdb to nsv-bkm. |  | ||||||
| hph to drr-drr. |  | ||||||
| bkx to kng-nqt. |  | ||||||
| kvh to ktp-mjt. |  | ||||||
| vdn to glx-ltr. |  | ||||||
| tfk to cxb-mmm. |  | ||||||
| cqd to ntr-rkk. |  | ||||||
| hhj to dbm-dht. |  | ||||||
| vhv to nnk-mbp. |  | ||||||
| fbf to jnl-qfh. |  | ||||||
| pkx to btd-vdn. |  | ||||||
| phk to xbv-lbb. |  | ||||||
| qmh to klg-hfl. |  | ||||||
| shl to jcc-bnx. |  | ||||||
| fnt to jct-fpx. |  | ||||||
| hnf to nch-sgs. |  | ||||||
| lbv to lcx-xkh. |  | ||||||
| mkj to sfd-vlf. |  | ||||||
| ccl to rrr-qlt. |  | ||||||
| rsm to hkj-lhh. |  | ||||||
| hfc to ljp-dvh. |  | ||||||
| mxh to ktd-hft. |  | ||||||
| pvc to lgj-bxx. |  | ||||||
| mnj to hnn-hdx. |  | ||||||
| dhk to ddg-rbc. |  | ||||||
| jcl to frt-cvl. |  | ||||||
| fsg to ngp-mnj. |  | ||||||
| phl to hmk-vqv. |  | ||||||
| gfv to xbv-lbb. |  | ||||||
| txn to bkx-vsr. |  | ||||||
| gjq to dbb-mkk. |  | ||||||
| xcx to tkh-plf. |  | ||||||
| mht to knf-mst. |  | ||||||
| kdl to frj-fss. |  | ||||||
| mnm to jjp-hbf. |  | ||||||
| xmg to bjs-xkd. |  | ||||||
| qhq to drk-src. |  | ||||||
| dvc to ccx-xgp. |  | ||||||
| qqs to mhm-dpm. |  | ||||||
| tvg to ksv-rgr. |  | ||||||
| cgm to qtl-rrq. |  | ||||||
| qfr to rhc-xkv. |  | ||||||
| vlf to xsp-sds. |  | ||||||
| dnf to ghb-sgj. |  | ||||||
| qhv to sng-vvm. |  | ||||||
| rvt to hgj-rtp. |  | ||||||
| rgn to xch-klm. |  | ||||||
| qmc to flq-ccl. |  | ||||||
| tjp to vdt-pqb. |  | ||||||
| qkb to tdk-cxj. |  | ||||||
| snd to gkp-fmb. |  | ||||||
| cpc to qcs-vmd. |  | ||||||
| khn to llf-frv. |  | ||||||
| qlf to bgg-qnt. |  | ||||||
| vjs to fdt-vdd. |  | ||||||
| fnj to gpl-tkr. |  | ||||||
| mxn to gnq-qkp. |  | ||||||
| bqj to vmv-qfp. |  | ||||||
| npk to nks-dhs. |  | ||||||
| hja to xmg-svm. |  | ||||||
| hqm to fnj-gjt. |  | ||||||
| dvp to dcj-snd. |  | ||||||
| bcx to rkr-nth. |  | ||||||
| bhg to xxm-srf. |  | ||||||
| hsq to gtc-ncp. |  | ||||||
| txm to mnl-shc. |  | ||||||
| pqt to csc-xgc. |  | ||||||
| njf to qkl-hdk. |  | ||||||
| mgv to vpt-shl. |  | ||||||
| tkr to pgq-jcd. |  | ||||||
| lgl to sbh-mpz. |  | ||||||
| phn to hrp-jpm. |  | ||||||
| lbn to gdn-dfx. |  | ||||||
| jcc to tsx-tlq. |  | ||||||
| dxj to shx-chb. |  | ||||||
| khm to kdq-jsj. |  | ||||||
| xrb to bcq-mlx. |  | ||||||
| pcj to sfq-jxk. |  | ||||||
| dvs to xjb-mtg. |  | ||||||
| pck to chb-shx. |  | ||||||
| ttc to vjf-lbc. |  | ||||||
| pkd to vjc-sfg. |  | ||||||
| ghm to hph-hph. |  | ||||||
| chb to prj-txm. |  | ||||||
| qsr to kdl-srr. |  | ||||||
| tcg to dhk-pts. |  | ||||||
| ngr to csc-xgc. |  | ||||||
| vgq to ltx-tlf. |  | ||||||
| jqr to gmv-bgt. |  | ||||||
| tqh to cpc-xdd. |  | ||||||
| kkm to mdv-qpp. |  | ||||||
| lss to cbr-gqq. |  | ||||||
| dvg to ktv-ndd. |  | ||||||
| tbd to khj-vmp. |  | ||||||
| prd to mdn-jxx. |  | ||||||
| gpl to pgq-jcd. |  | ||||||
| tkv to gqc-dms. |  | ||||||
| rkc to srd-kjc. |  | ||||||
| qsl to dgl-frh. |  | ||||||
| jxr to rmt-qfr. |  | ||||||
| cfl to mst-knf. |  | ||||||
| bjv to rhv-kvb. |  | ||||||
| psr to jdf-xkt. |  | ||||||
| hpa to rvq-tvj. |  | ||||||
| qdf to ldq-xxn. |  | ||||||
| glb to grt-txj. |  | ||||||
| bpc to hsp-vbt. |  | ||||||
| flv to sxh-ptr. |  | ||||||
| jtr to mtc-pdn. |  | ||||||
| qcs to ctf-sfm. |  | ||||||
| srr to fss-frj. |  | ||||||
| dpm to hfp-vhv. |  | ||||||
| pdn to pbm-tgr. |  | ||||||
| vcd to dcj-snd. |  | ||||||
| kbj to lmt-vmc. |  | ||||||
| rhc to crp-jbj. |  | ||||||
| dgp to dmd-pps. |  | ||||||
| hvv to mxn-jpg. |  | ||||||
| lth to dxt-cld. |  | ||||||
| xtv to qsn-qlk. |  | ||||||
| cbr to mbv-hmn. |  | ||||||
| cdr to hnb-lft. |  | ||||||
| ghq to vsq-qsh. |  | ||||||
| tdc to nth-rkr. |  | ||||||
| xtq to flq-ccl. |  | ||||||
| gmc to cxc-pkx. |  | ||||||
| pgk to phn-kln. |  | ||||||
| nth to ngn-kvd. |  | ||||||
| pkh to pmj-mfc. |  | ||||||
| jdn to hnf-bfd. |  | ||||||
| fbh to sbh-sbh. |  | ||||||
| jdd to fgt-xdr. |  | ||||||
| hkj to xrf-stp. |  | ||||||
| klt to mgs-jsk. |  | ||||||
| ghd to hjb-krk. |  | ||||||
| hrp to fvp-hsr. |  | ||||||
| ptr to pnc-jdt. |  | ||||||
| ljp to sgp-qlj. |  | ||||||
| jvt to ttk-kbc. |  | ||||||
| zzz to vmm-mpf. |  | ||||||
| btd to glx-ltr. |  | ||||||
| gtc to qkb-hmr. |  | ||||||
| ndf to cxb-mmm. |  | ||||||
| dgb to nqn-hcp. |  | ||||||
| jsj to qlh-lqk. |  | ||||||
| nbb to kqv-qph. |  | ||||||
| xgc to rql-cnr. |  | ||||||
| qhd to grx-qgj. |  | ||||||
| rfx to fpj-bnv. |  | ||||||
| lpn to ncb-sdh. |  | ||||||
| nvg to pch-glb. |  | ||||||
							
								
								
									
										800
									
								
								08/input.txt
									
									
									
									
									
								
							
							
						
						
									
										800
									
								
								08/input.txt
									
									
									
									
									
								
							| @@ -1,800 +0,0 @@ | |||||||
| LRLRRRLRRRLLLRLRRLLRLRRRLRLRRRLRLRRRLRLRRRLRRRLRLLRRRLRLRLRRLRRLRLRRLRRLRRLLRRRLRRRLRRLRRLRRLRRRLLRRLRLRRLRLRRLRRLRLRRLRRLLRLRRRLRRLRRRLLRLRLRLLRLLRLLRLRRLLRRLRLRLRRLRLLRRRLLRRRLRRLLRRRLRRRLRLRRRLLRRRLRLRRRLLLRRRLRLRLRRRLRRRLRRRLRLRRLLLRRLRRRLLRLRRRLRLRLLLRRLRLRRRLRLRRRR |  | ||||||
|  |  | ||||||
| GNK = (LBV, QNP) |  | ||||||
| PJQ = (GHF, FJF) |  | ||||||
| KLM = (TTR, BQL) |  | ||||||
| LDT = (FXS, FBB) |  | ||||||
| TKH = (NBH, JRN) |  | ||||||
| QND = (KJC, SRD) |  | ||||||
| SNG = (BQP, LXN) |  | ||||||
| GMS = (JDN, NKM) |  | ||||||
| NTL = (PTS, DHK) |  | ||||||
| NBN = (FFD, PRL) |  | ||||||
| NCP = (QKB, HMR) |  | ||||||
| NQT = (RDK, BHC) |  | ||||||
| TDK = (GHM, GHM) |  | ||||||
| BJS = (TGC, GBJ) |  | ||||||
| XNH = (GGJ, TKL) |  | ||||||
| NKV = (GTC, NCP) |  | ||||||
| HFL = (LQQ, RVT) |  | ||||||
| HKC = (BQM, NKP) |  | ||||||
| KCH = (GJG, GJG) |  | ||||||
| MFD = (CRD, VDP) |  | ||||||
| FNZ = (XSM, PQQ) |  | ||||||
| NVT = (TDN, JVT) |  | ||||||
| PCQ = (HLD, BKQ) |  | ||||||
| GPF = (MNJ, NGP) |  | ||||||
| PCX = (LPD, BJK) |  | ||||||
| CCG = (TTS, TTS) |  | ||||||
| BGG = (TQP, NFG) |  | ||||||
| HSP = (DVS, QQM) |  | ||||||
| TSX = (GBV, KXM) |  | ||||||
| RKK = (BNC, FNZ) |  | ||||||
| HVJ = (RPD, MGB) |  | ||||||
| CXC = (BTD, VDN) |  | ||||||
| NBH = (SQQ, PJB) |  | ||||||
| CQN = (SRV, MCF) |  | ||||||
| LPD = (PPR, RHS) |  | ||||||
| BKM = (FJV, XTV) |  | ||||||
| KQV = (PCK, DXJ) |  | ||||||
| VCL = (PDN, MTC) |  | ||||||
| JVS = (QQP, BDM) |  | ||||||
| MJT = (JCX, NRR) |  | ||||||
| VSR = (NQT, KNG) |  | ||||||
| NKM = (HNF, BFD) |  | ||||||
| HGJ = (BNT, KFK) |  | ||||||
| VMC = (QND, RKC) |  | ||||||
| DJG = (PRD, LBD) |  | ||||||
| JCT = (NFM, NJF) |  | ||||||
| FPX = (NJF, NFM) |  | ||||||
| HPD = (SNT, JXR) |  | ||||||
| QLK = (KXV, KLF) |  | ||||||
| HMR = (TDK, CXJ) |  | ||||||
| RQL = (QDP, GBQ) |  | ||||||
| VDT = (BGP, MXH) |  | ||||||
| PFV = (TNH, LQV) |  | ||||||
| TTF = (FLV, SKM) |  | ||||||
| QKL = (JNB, SKX) |  | ||||||
| RXC = (QFP, VMV) |  | ||||||
| NGJ = (QPN, GSF) |  | ||||||
| MPZ = (JVH, BNB) |  | ||||||
| FPB = (XNH, NMS) |  | ||||||
| LQP = (SNG, VVM) |  | ||||||
| HQF = (MNM, VHL) |  | ||||||
| XXJ = (PRL, FFD) |  | ||||||
| KPH = (TTF, SNQ) |  | ||||||
| JDT = (KCH, JMC) |  | ||||||
| KRK = (PCX, BMG) |  | ||||||
| FJV = (QLK, QSN) |  | ||||||
| MPG = (LJG, PKD) |  | ||||||
| TCH = (RRQ, QTL) |  | ||||||
| SDS = (JQR, BXR) |  | ||||||
| RKR = (KVD, NGN) |  | ||||||
| TVJ = (XGS, PCQ) |  | ||||||
| VSQ = (NHP, QQS) |  | ||||||
| RDK = (XTD, MHB) |  | ||||||
| SGP = (PRP, XJD) |  | ||||||
| SVN = (BKM, NSV) |  | ||||||
| SJC = (DGL, FRH) |  | ||||||
| NJX = (TRN, MHN) |  | ||||||
| RCG = (BSN, DQR) |  | ||||||
| HXJ = (KDL, SRR) |  | ||||||
| BQZ = (PQL, FRM) |  | ||||||
| NKS = (SHM, SHM) |  | ||||||
| FPJ = (STM, CTN) |  | ||||||
| SFM = (PVC, TGM) |  | ||||||
| VSS = (MGV, JLS) |  | ||||||
| DGL = (NBB, BST) |  | ||||||
| XRQ = (LPN, MKF) |  | ||||||
| RSZ = (SVM, XMG) |  | ||||||
| TTK = (KST, MGQ) |  | ||||||
| FJF = (CRC, RXF) |  | ||||||
| CMT = (HPH, KPL) |  | ||||||
| SDR = (LTD, TVK) |  | ||||||
| BST = (KQV, QPH) |  | ||||||
| DGT = (BCQ, MLX) |  | ||||||
| QPN = (MMD, LKL) |  | ||||||
| SHM = (FRM, PQL) |  | ||||||
| XDD = (QCS, VMD) |  | ||||||
| SNQ = (FLV, SKM) |  | ||||||
| TLF = (QTC, GRK) |  | ||||||
| CPB = (DFX, GDN) |  | ||||||
| BRJ = (LDR, CDR) |  | ||||||
| JNL = (JTD, SMV) |  | ||||||
| FTG = (VRN, VRN) |  | ||||||
| GBJ = (VGH, DJT) |  | ||||||
| TGS = (FPB, QGT) |  | ||||||
| MHB = (DKL, KMX) |  | ||||||
| GNH = (SFQ, JXK) |  | ||||||
| LTD = (XJQ, MBL) |  | ||||||
| PCR = (JDD, KTL) |  | ||||||
| DMD = (KHC, KVH) |  | ||||||
| FTT = (LTB, BLD) |  | ||||||
| LMT = (RKC, QND) |  | ||||||
| JGT = (FDT, VDD) |  | ||||||
| MDV = (XTS, MRF) |  | ||||||
| PLV = (KXC, CNM) |  | ||||||
| PRJ = (SHC, MNL) |  | ||||||
| PML = (GRX, QGJ) |  | ||||||
| VVM = (LXN, BQP) |  | ||||||
| NGN = (GBG, XJX) |  | ||||||
| VCG = (SRV, MCF) |  | ||||||
| QFP = (TJS, XPD) |  | ||||||
| LVX = (FPX, JCT) |  | ||||||
| RBC = (DRM, VHC) |  | ||||||
| XKT = (CCG, FLM) |  | ||||||
| SDH = (BNF, GKN) |  | ||||||
| BVQ = (QSH, VSQ) |  | ||||||
| SMV = (SKN, HHJ) |  | ||||||
| DBD = (RSM, PKB) |  | ||||||
| DQR = (HVS, DVC) |  | ||||||
| MNK = (DXT, CLD) |  | ||||||
| FFD = (DLF, JPQ) |  | ||||||
| GBG = (TKP, KPM) |  | ||||||
| CHK = (MMT, MQC) |  | ||||||
| BXR = (GMV, BGT) |  | ||||||
| SFD = (XSP, SDS) |  | ||||||
| PRT = (HDB, RCG) |  | ||||||
| QXJ = (QQT, BHG) |  | ||||||
| TGR = (TQD, TJM) |  | ||||||
| GJG = (RVQ, TVJ) |  | ||||||
| BFD = (SGS, NCH) |  | ||||||
| PND = (BPL, TKV) |  | ||||||
| JPG = (GNQ, QKP) |  | ||||||
| FDT = (NPF, SFF) |  | ||||||
| DLX = (XVP, BNR) |  | ||||||
| SNT = (QFR, RMT) |  | ||||||
| DND = (TVK, LTD) |  | ||||||
| SSF = (LLF, FRV) |  | ||||||
| DRK = (FTG, LBT) |  | ||||||
| VQV = (JVS, RRH) |  | ||||||
| XBV = (DSC, NRL) |  | ||||||
| CVL = (KRF, NJX) |  | ||||||
| XGP = (BQJ, RXC) |  | ||||||
| MLX = (TBD, QSG) |  | ||||||
| JDF = (CCG, CCG) |  | ||||||
| GVN = (SCN, PKH) |  | ||||||
| NCB = (GKN, BNF) |  | ||||||
| LLF = (PND, LMM) |  | ||||||
| SHX = (TXM, PRJ) |  | ||||||
| KNL = (KSL, VQQ) |  | ||||||
| JSK = (SQD, MPG) |  | ||||||
| PPS = (KHC, KVH) |  | ||||||
| NKJ = (DBD, RFB) |  | ||||||
| CNM = (FCB, DHP) |  | ||||||
| TXJ = (DBJ, DLX) |  | ||||||
| QSH = (QQS, NHP) |  | ||||||
| BRC = (PLN, GMS) |  | ||||||
| BHP = (JNH, CLP) |  | ||||||
| BQL = (SDR, DND) |  | ||||||
| TGC = (VGH, DJT) |  | ||||||
| MHM = (VHV, HFP) |  | ||||||
| NGP = (HNN, HDX) |  | ||||||
| SKM = (SXH, PTR) |  | ||||||
| TFN = (SMK, GXL) |  | ||||||
| NSR = (GLB, PCH) |  | ||||||
| RHS = (XCX, RFH) |  | ||||||
| BNC = (PQQ, XSM) |  | ||||||
| XJX = (KPM, TKP) |  | ||||||
| LFT = (TMH, SSP) |  | ||||||
| KVD = (XJX, GBG) |  | ||||||
| SKX = (NGF, NTC) |  | ||||||
| CKQ = (FCL, MRM) |  | ||||||
| MTC = (PBM, TGR) |  | ||||||
| RHV = (TGS, KDV) |  | ||||||
| MMD = (VMJ, TFN) |  | ||||||
| PSM = (XDK, GSG) |  | ||||||
| KXM = (RDN, XPS) |  | ||||||
| PLN = (NKM, JDN) |  | ||||||
| HDK = (SKX, JNB) |  | ||||||
| XGS = (HLD, BKQ) |  | ||||||
| FMB = (PHL, TFG) |  | ||||||
| LHH = (XRF, STP) |  | ||||||
| LTB = (TDC, BCX) |  | ||||||
| FRV = (LMM, PND) |  | ||||||
| GRK = (FDH, CQD) |  | ||||||
| NRR = (HNS, KBJ) |  | ||||||
| BGT = (LDT, VBJ) |  | ||||||
| SRD = (CBG, DMM) |  | ||||||
| KNF = (DVL, KNL) |  | ||||||
| KXC = (FCB, DHP) |  | ||||||
| GHB = (NNJ, QMH) |  | ||||||
| PGQ = (JJX, VSF) |  | ||||||
| SKB = (XXT, NTM) |  | ||||||
| LXP = (PRD, LBD) |  | ||||||
| PRL = (JPQ, DLF) |  | ||||||
| FRM = (LBN, CPB) |  | ||||||
| KSL = (FPT, TTC) |  | ||||||
| CRC = (RCL, HQF) |  | ||||||
| SVM = (BJS, XKD) |  | ||||||
| PXB = (PMC, HPD) |  | ||||||
| JPQ = (MKJ, MKC) |  | ||||||
| TTR = (DND, SDR) |  | ||||||
| CBH = (FTD, JJQ) |  | ||||||
| XPS = (NSP, LSS) |  | ||||||
| KMX = (QSL, SJC) |  | ||||||
| CLD = (MDP, CKQ) |  | ||||||
| GXV = (MKK, DBB) |  | ||||||
| BQP = (TQH, LKN) |  | ||||||
| FTB = (GJQ, GXV) |  | ||||||
| KPL = (DRR, RSZ) |  | ||||||
| MKF = (SDH, NCB) |  | ||||||
| SSP = (CBN, XCF) |  | ||||||
| XJQ = (NND, TPT) |  | ||||||
| NTT = (NDJ, QFB) |  | ||||||
| PLF = (NBH, JRN) |  | ||||||
| XDK = (GPF, FSG) |  | ||||||
| NTC = (DGT, XRB) |  | ||||||
| SGJ = (QMH, NNJ) |  | ||||||
| TNH = (VGB, FDR) |  | ||||||
| DFX = (HFC, KTX) |  | ||||||
| DBJ = (XVP, BNR) |  | ||||||
| VDD = (SFF, NPF) |  | ||||||
| JKL = (FRT, CVL) |  | ||||||
| XSP = (BXR, JQR) |  | ||||||
| DBP = (PSR, LJS) |  | ||||||
| KHC = (MJT, KTP) |  | ||||||
| TKP = (VRX, GVN) |  | ||||||
| DKL = (SJC, QSL) |  | ||||||
| DLP = (XXJ, NBN) |  | ||||||
| KLN = (HRP, JPM) |  | ||||||
| TPP = (NHJ, PCR) |  | ||||||
| QVF = (QNP, LBV) |  | ||||||
| VMD = (CTF, SFM) |  | ||||||
| NFM = (QKL, HDK) |  | ||||||
| MCF = (BJV, JXL) |  | ||||||
| PQG = (XTQ, QMC) |  | ||||||
| BGP = (HFT, KTD) |  | ||||||
| PTS = (DDG, RBC) |  | ||||||
| JLS = (SHL, VPT) |  | ||||||
| DHT = (NPC, KRP) |  | ||||||
| TJM = (KHM, BXB) |  | ||||||
| TRH = (NDJ, QFB) |  | ||||||
| CTF = (PVC, TGM) |  | ||||||
| PMJ = (BHP, TDF) |  | ||||||
| AAA = (MPF, VMM) |  | ||||||
| XCF = (LVX, FNT) |  | ||||||
| FRH = (BST, NBB) |  | ||||||
| QLL = (HDB, RCG) |  | ||||||
| XVP = (QHD, PML) |  | ||||||
| BNX = (TLQ, TSX) |  | ||||||
| BXB = (JSJ, KDQ) |  | ||||||
| FPT = (LBC, VJF) |  | ||||||
| FCB = (TJK, MJD) |  | ||||||
| KNG = (RDK, BHC) |  | ||||||
| DBB = (RFX, FLK) |  | ||||||
| LQQ = (RTP, HGJ) |  | ||||||
| LBT = (VRN, RLT) |  | ||||||
| XKD = (GBJ, TGC) |  | ||||||
| LKN = (XDD, CPC) |  | ||||||
| XHM = (CNM, KXC) |  | ||||||
| DTC = (QQT, BHG) |  | ||||||
| BPL = (DMS, GQC) |  | ||||||
| QPP = (MRF, XTS) |  | ||||||
| PRK = (NKP, BQM) |  | ||||||
| MGS = (MPG, SQD) |  | ||||||
| STM = (MTS, GHD) |  | ||||||
| SKD = (MGV, JLS) |  | ||||||
| QPH = (DXJ, PCK) |  | ||||||
| HDB = (DQR, BSN) |  | ||||||
| DSC = (VXM, CHK) |  | ||||||
| TQF = (GJT, FNJ) |  | ||||||
| FXS = (GHQ, BVQ) |  | ||||||
| SFF = (HKC, PRK) |  | ||||||
| DRR = (XMG, SVM) |  | ||||||
| RKP = (XXN, LDQ) |  | ||||||
| NNJ = (KLG, HFL) |  | ||||||
| VJF = (HMJ, RDC) |  | ||||||
| LXN = (TQH, LKN) |  | ||||||
| CXJ = (GHM, CMT) |  | ||||||
| HMC = (GMS, PLN) |  | ||||||
| LJS = (JDF, XKT) |  | ||||||
| XCH = (TTR, BQL) |  | ||||||
| LKG = (QXJ, DTC) |  | ||||||
| QFB = (MHT, CFL) |  | ||||||
| RDN = (LSS, NSP) |  | ||||||
| DHS = (SHM, BQZ) |  | ||||||
| NKT = (GSG, XDK) |  | ||||||
| MCH = (HTP, BLC) |  | ||||||
| NVX = (MGS, JSK) |  | ||||||
| QTC = (FDH, FDH) |  | ||||||
| NND = (DGP, LBF) |  | ||||||
| GJV = (XHM, PLV) |  | ||||||
| GSG = (FSG, GPF) |  | ||||||
| BNV = (STM, CTN) |  | ||||||
| LDQ = (MCH, GXS) |  | ||||||
| MHN = (KPH, PKC) |  | ||||||
| LBF = (PPS, DMD) |  | ||||||
| QDP = (NKV, HSQ) |  | ||||||
| MPF = (MNK, LTH) |  | ||||||
| DHQ = (CDR, LDR) |  | ||||||
| VMM = (MNK, LTH) |  | ||||||
| HFT = (BRC, HMC) |  | ||||||
| LTR = (NKT, PSM) |  | ||||||
| HDX = (GJC, FTT) |  | ||||||
| GHF = (RXF, CRC) |  | ||||||
| BKQ = (FTB, HJH) |  | ||||||
| BXX = (NJC, NPK) |  | ||||||
| FVP = (BRG, NTJ) |  | ||||||
| RDC = (LHT, VMG) |  | ||||||
| JKT = (QPP, MDV) |  | ||||||
| PVP = (GHB, SGJ) |  | ||||||
| XXN = (GXS, MCH) |  | ||||||
| SHC = (GNH, PCJ) |  | ||||||
| GSF = (LKL, MMD) |  | ||||||
| KRP = (MGL, VGQ) |  | ||||||
| JXK = (TGN, TJP) |  | ||||||
| MGQ = (XRQ, VBN) |  | ||||||
| FLN = (MGB, RPD) |  | ||||||
| DHP = (MJD, TJK) |  | ||||||
| SQQ = (DVP, VCD) |  | ||||||
| HFH = (CBH, JMM) |  | ||||||
| MBP = (NDF, TFK) |  | ||||||
| KLG = (RVT, LQQ) |  | ||||||
| NPF = (PRK, HKC) |  | ||||||
| NMS = (GGJ, TKL) |  | ||||||
| QQP = (CGM, TCH) |  | ||||||
| SFG = (NVG, NSR) |  | ||||||
| RVQ = (XGS, PCQ) |  | ||||||
| SQD = (PKD, LJG) |  | ||||||
| JCX = (HNS, KBJ) |  | ||||||
| QSN = (KXV, KLF) |  | ||||||
| GLX = (NKT, PSM) |  | ||||||
| TJS = (GJV, MPK) |  | ||||||
| QLJ = (XJD, PRP) |  | ||||||
| NSV = (FJV, XTV) |  | ||||||
| GXX = (RFB, DBD) |  | ||||||
| HSR = (BRG, NTJ) |  | ||||||
| HBF = (CDC, NXL) |  | ||||||
| XSS = (PSR, LJS) |  | ||||||
| QTL = (TQF, HQM) |  | ||||||
| TKL = (DNF, PVP) |  | ||||||
| BRK = (JKQ, JKK) |  | ||||||
| SCN = (MFC, PMJ) |  | ||||||
| GMV = (VBJ, LDT) |  | ||||||
| HNS = (LMT, VMC) |  | ||||||
| RGR = (NTT, TRH) |  | ||||||
| PNC = (KCH, KCH) |  | ||||||
| XNK = (JNL, QFH) |  | ||||||
| RRR = (PQT, NGR) |  | ||||||
| TDN = (KBC, TTK) |  | ||||||
| NQN = (KHN, SSF) |  | ||||||
| HMK = (RRH, JVS) |  | ||||||
| RFB = (PKB, RSM) |  | ||||||
| SFQ = (TGN, TJP) |  | ||||||
| JKQ = (SVN, BDB) |  | ||||||
| CTN = (MTS, GHD) |  | ||||||
| QNT = (TQP, NFG) |  | ||||||
| VHL = (JJP, HBF) |  | ||||||
| RFH = (PLF, TKH) |  | ||||||
| KTD = (BRC, HMC) |  | ||||||
| VRX = (SCN, PKH) |  | ||||||
| BNT = (JKL, JCL) |  | ||||||
| MDN = (DLC, BRK) |  | ||||||
| CBG = (SKS, PJQ) |  | ||||||
| QFH = (JTD, SMV) |  | ||||||
| HVS = (XGP, CCX) |  | ||||||
| NQH = (BKX, VSR) |  | ||||||
| GQQ = (MBV, HMN) |  | ||||||
| LSN = (NTM, XXT) |  | ||||||
| FLQ = (RRR, QLT) |  | ||||||
| LXM = (PRT, QLL) |  | ||||||
| HJH = (GXV, GJQ) |  | ||||||
| SRV = (JXL, BJV) |  | ||||||
| TMH = (XCF, CBN) |  | ||||||
| PRB = (KTV, NDD) |  | ||||||
| JJQ = (QHQ, QDB) |  | ||||||
| KSV = (NTT, TRH) |  | ||||||
| XKH = (VJS, JGT) |  | ||||||
| SJP = (QNT, BGG) |  | ||||||
| NTR = (BNC, BNC) |  | ||||||
| PBM = (TJM, TQD) |  | ||||||
| RPD = (DVG, PRB) |  | ||||||
| XPD = (MPK, GJV) |  | ||||||
| NCH = (GKG, NGJ) |  | ||||||
| KTP = (JCX, NRR) |  | ||||||
| GQC = (QNR, PFV) |  | ||||||
| MKC = (VLF, SFD) |  | ||||||
| NTM = (FBF, XNK) |  | ||||||
| TVK = (MBL, XJQ) |  | ||||||
| RMT = (XKV, RHC) |  | ||||||
| NHP = (DPM, MHM) |  | ||||||
| JNB = (NGF, NTC) |  | ||||||
| RTP = (BNT, KFK) |  | ||||||
| GJT = (TKR, GPL) |  | ||||||
| TTS = (VFM, VFM) |  | ||||||
| FLK = (BNV, FPJ) |  | ||||||
| CJJ = (QVF, GNK) |  | ||||||
| QKP = (FBG, TPP) |  | ||||||
| XQT = (JVT, TDN) |  | ||||||
| JVH = (XKX, JKM) |  | ||||||
| NDJ = (CFL, MHT) |  | ||||||
| JXX = (BRK, DLC) |  | ||||||
| XJD = (SMN, LKG) |  | ||||||
| JXL = (KVB, RHV) |  | ||||||
| VMG = (KKM, JKT) |  | ||||||
| FBG = (NHJ, PCR) |  | ||||||
| LKL = (VMJ, TFN) |  | ||||||
| NXL = (XSS, DBP) |  | ||||||
| SRC = (FTG, LBT) |  | ||||||
| PDC = (CQN, VCG) |  | ||||||
| BLD = (TDC, BCX) |  | ||||||
| NHJ = (KTL, JDD) |  | ||||||
| DGC = (VFM, ZZZ) |  | ||||||
| LTX = (QTC, GRK) |  | ||||||
| CCX = (BQJ, RXC) |  | ||||||
| DRM = (DGB, PGX) |  | ||||||
| VQQ = (TTC, FPT) |  | ||||||
| BHC = (XTD, MHB) |  | ||||||
| CDC = (DBP, XSS) |  | ||||||
| SXH = (PNC, PNC) |  | ||||||
| KBC = (KST, MGQ) |  | ||||||
| DXT = (CKQ, MDP) |  | ||||||
| PRP = (SMN, LKG) |  | ||||||
| SGS = (NGJ, GKG) |  | ||||||
| VBN = (LPN, MKF) |  | ||||||
| BNF = (KGK, PGK) |  | ||||||
| HLD = (FTB, HJH) |  | ||||||
| FGT = (TCG, NTL) |  | ||||||
| VBT = (DVS, QQM) |  | ||||||
| XVT = (QLL, PRT) |  | ||||||
| SBH = (BNB, JVH) |  | ||||||
| VGB = (VSS, SKD) |  | ||||||
| XJJ = (CXC, PKX) |  | ||||||
| JKK = (BDB, SVN) |  | ||||||
| BSN = (HVS, DVC) |  | ||||||
| DBX = (QSR, HXJ) |  | ||||||
| QSG = (KHJ, VMP) |  | ||||||
| CPK = (CRD, VDP) |  | ||||||
| JGD = (JMM, CBH) |  | ||||||
| VGH = (CQM, DLP) |  | ||||||
| GBQ = (HSQ, NKV) |  | ||||||
| GRX = (LSN, SKB) |  | ||||||
| FLM = (TTS, DGC) |  | ||||||
| PPR = (XCX, RFH) |  | ||||||
| VDP = (HVV, VDB) |  | ||||||
| GKN = (PGK, KGK) |  | ||||||
| XDA = (BNB, JVH) |  | ||||||
| MNL = (PCJ, GNH) |  | ||||||
| MGB = (PRB, DVG) |  | ||||||
| FBB = (BVQ, GHQ) |  | ||||||
| NTJ = (LXP, DJG) |  | ||||||
| PQQ = (NVT, XQT) |  | ||||||
| TQP = (TVG, FMV) |  | ||||||
| LQK = (BPC, HSX) |  | ||||||
| MTG = (TSM, PXB) |  | ||||||
| VSF = (LXM, XVT) |  | ||||||
| HJB = (BMG, PCX) |  | ||||||
| VMJ = (GXL, SMK) |  | ||||||
| CXB = (QLF, SJP) |  | ||||||
| HCP = (SSF, KHN) |  | ||||||
| QLH = (HSX, BPC) |  | ||||||
| NFG = (TVG, FMV) |  | ||||||
| PKB = (LHH, HKJ) |  | ||||||
| BRG = (DJG, LXP) |  | ||||||
| TLQ = (KXM, GBV) |  | ||||||
| DDG = (DRM, VHC) |  | ||||||
| BQM = (NVX, KLT) |  | ||||||
| KTX = (LJP, DVH) |  | ||||||
| XTS = (DHQ, BRJ) |  | ||||||
| TFG = (VQV, HMK) |  | ||||||
| JCD = (VSF, JJX) |  | ||||||
| VFM = (MPF, VMM) |  | ||||||
| LGJ = (NJC, NJC) |  | ||||||
| PQB = (BGP, MXH) |  | ||||||
| CBN = (LVX, FNT) |  | ||||||
| FCL = (NQH, TXN) |  | ||||||
| JNH = (RKP, QDF) |  | ||||||
| LHT = (JKT, KKM) |  | ||||||
| MJD = (PDC, PRV) |  | ||||||
| QGT = (XNH, NMS) |  | ||||||
| KST = (XRQ, VBN) |  | ||||||
| KDV = (FPB, QGT) |  | ||||||
| HFP = (NNK, MBP) |  | ||||||
| BJK = (PPR, RHS) |  | ||||||
| XXM = (MFD, CPK) |  | ||||||
| QLT = (PQT, NGR) |  | ||||||
| HMJ = (LHT, VMG) |  | ||||||
| XDR = (TCG, NTL) |  | ||||||
| NNK = (TFK, NDF) |  | ||||||
| VJC = (NSR, NVG) |  | ||||||
| MMM = (QLF, SJP) |  | ||||||
| BNB = (XKX, JKM) |  | ||||||
| LJG = (VJC, SFG) |  | ||||||
| QQT = (SRF, XXM) |  | ||||||
| JPM = (HSR, FVP) |  | ||||||
| GNQ = (FBG, TPP) |  | ||||||
| PJB = (VCD, DVP) |  | ||||||
| NKP = (KLT, NVX) |  | ||||||
| GJC = (LTB, BLD) |  | ||||||
| MRF = (DHQ, BRJ) |  | ||||||
| SRF = (CPK, MFD) |  | ||||||
| FSS = (VXJ, DHG) |  | ||||||
| XXZ = (TVJ, RVQ) |  | ||||||
| NDD = (RGN, LSJ) |  | ||||||
| TQD = (KHM, BXB) |  | ||||||
| XJB = (PXB, TSM) |  | ||||||
| LSJ = (XCH, KLM) |  | ||||||
| JBJ = (JGD, HFH) |  | ||||||
| DMS = (QNR, PFV) |  | ||||||
| DLF = (MKC, MKJ) |  | ||||||
| HNN = (FTT, GJC) |  | ||||||
| VXM = (MQC, MMT) |  | ||||||
| LMM = (TKV, BPL) |  | ||||||
| BMG = (BJK, LPD) |  | ||||||
| QGJ = (LSN, SKB) |  | ||||||
| FRT = (NJX, KRF) |  | ||||||
| SKN = (DHT, DBM) |  | ||||||
| LBD = (JXX, MDN) |  | ||||||
| KFK = (JKL, JCL) |  | ||||||
| RRH = (BDM, QQP) |  | ||||||
| NRL = (CHK, VXM) |  | ||||||
| LCX = (VJS, JGT) |  | ||||||
| CNR = (GBQ, QDP) |  | ||||||
| TGN = (PQB, VDT) |  | ||||||
| GRT = (DBJ, DLX) |  | ||||||
| FDH = (NTR, NTR) |  | ||||||
| CRD = (VDB, HVV) |  | ||||||
| DMM = (PJQ, SKS) |  | ||||||
| VHC = (PGX, DGB) |  | ||||||
| FTD = (QDB, QHQ) |  | ||||||
| NPC = (MGL, VGQ) |  | ||||||
| PRV = (VCG, CQN) |  | ||||||
| TSM = (PMC, HPD) |  | ||||||
| CQM = (XXJ, NBN) |  | ||||||
| BNR = (PML, QHD) |  | ||||||
| NSP = (CBR, GQQ) |  | ||||||
| TJK = (PRV, PDC) |  | ||||||
| MST = (KNL, DVL) |  | ||||||
| VMP = (JFF, PQG) |  | ||||||
| TDF = (JNH, CLP) |  | ||||||
| MQC = (HVJ, FLN) |  | ||||||
| VPT = (BNX, JCC) |  | ||||||
| GKP = (PHL, TFG) |  | ||||||
| JJX = (XVT, LXM) |  | ||||||
| MMT = (FLN, HVJ) |  | ||||||
| CRP = (HFH, JGD) |  | ||||||
| DBM = (KRP, NPC) |  | ||||||
| LQV = (VGB, FDR) |  | ||||||
| XRF = (GFV, PHK) |  | ||||||
| RRQ = (TQF, HQM) |  | ||||||
| RXF = (RCL, HQF) |  | ||||||
| JRN = (PJB, SQQ) |  | ||||||
| JTD = (SKN, HHJ) |  | ||||||
| HTP = (JTR, VCL) |  | ||||||
| JMM = (FTD, JJQ) |  | ||||||
| MBL = (NND, TPT) |  | ||||||
| RCL = (MNM, VHL) |  | ||||||
| LGS = (QVF, GNK) |  | ||||||
| CSC = (CNR, RQL) |  | ||||||
| MFC = (BHP, TDF) |  | ||||||
| HSX = (HSP, VBT) |  | ||||||
| GBV = (RDN, XPS) |  | ||||||
| VXJ = (QHV, LQP) |  | ||||||
| JKM = (XJJ, GMC) |  | ||||||
| MTS = (KRK, HJB) |  | ||||||
| QDB = (DRK, SRC) |  | ||||||
| GGJ = (DNF, PVP) |  | ||||||
| XXT = (XNK, FBF) |  | ||||||
| XSM = (XQT, NVT) |  | ||||||
| QQM = (XJB, MTG) |  | ||||||
| KDQ = (QLH, LQK) |  | ||||||
| HNB = (TMH, SSP) |  | ||||||
| FRJ = (VXJ, DHG) |  | ||||||
| PQL = (LBN, CPB) |  | ||||||
| SKS = (GHF, FJF) |  | ||||||
| DLC = (JKQ, JKK) |  | ||||||
| JMC = (GJG, XXZ) |  | ||||||
| STP = (GFV, PHK) |  | ||||||
| QNP = (LCX, XKH) |  | ||||||
| KLF = (CJJ, LGS) |  | ||||||
| XSA = (PQQ, XSM) |  | ||||||
| KTV = (RGN, LSJ) |  | ||||||
| FDR = (SKD, VSS) |  | ||||||
| PCH = (GRT, TXJ) |  | ||||||
| KTL = (XDR, FGT) |  | ||||||
| LBB = (NRL, DSC) |  | ||||||
| XKV = (JBJ, CRP) |  | ||||||
| KHJ = (JFF, PQG) |  | ||||||
| NGF = (XRB, DGT) |  | ||||||
| DVH = (QLJ, SGP) |  | ||||||
| MRM = (TXN, NQH) |  | ||||||
| TGM = (LGJ, BXX) |  | ||||||
| MKK = (RFX, FLK) |  | ||||||
| RLT = (FBH, LGL) |  | ||||||
| GXS = (HTP, BLC) |  | ||||||
| XKX = (GMC, XJJ) |  | ||||||
| VMV = (XPD, TJS) |  | ||||||
| MGL = (LTX, TLF) |  | ||||||
| NJC = (NKS, NKS) |  | ||||||
| CLP = (QDF, RKP) |  | ||||||
| SMK = (NKJ, GXX) |  | ||||||
| KPM = (GVN, VRX) |  | ||||||
| BCQ = (TBD, QSG) |  | ||||||
| TPT = (LBF, DGP) |  | ||||||
| CFA = (FRM, PQL) |  | ||||||
| KVB = (TGS, KDV) |  | ||||||
| BDM = (CGM, TCH) |  | ||||||
| JJP = (CDC, NXL) |  | ||||||
| PMC = (JXR, SNT) |  | ||||||
| PGX = (HCP, NQN) |  | ||||||
| LBC = (RDC, HMJ) |  | ||||||
| MBV = (DBX, DDQ) |  | ||||||
| KXV = (LGS, CJJ) |  | ||||||
| DJT = (DLP, CQM) |  | ||||||
| LDR = (LFT, HNB) |  | ||||||
| GXL = (NKJ, GXX) |  | ||||||
| SMN = (QXJ, DTC) |  | ||||||
| DCJ = (GKP, FMB) |  | ||||||
| GDN = (KTX, HFC) |  | ||||||
| KGK = (PHN, KLN) |  | ||||||
| VBJ = (FBB, FXS) |  | ||||||
| DDQ = (QSR, HXJ) |  | ||||||
| KJC = (CBG, DMM) |  | ||||||
| BLC = (VCL, JTR) |  | ||||||
| QNR = (LQV, TNH) |  | ||||||
| KRF = (TRN, MHN) |  | ||||||
| JFF = (QMC, XTQ) |  | ||||||
| MPK = (PLV, XHM) |  | ||||||
| PKC = (TTF, SNQ) |  | ||||||
| VRN = (FBH, FBH) |  | ||||||
| DVL = (VQQ, KSL) |  | ||||||
| XTD = (KMX, DKL) |  | ||||||
| VDB = (MXN, JPG) |  | ||||||
| FMV = (RGR, KSV) |  | ||||||
| HMN = (DDQ, DBX) |  | ||||||
| TRN = (PKC, KPH) |  | ||||||
| GKG = (QPN, GSF) |  | ||||||
| MDP = (MRM, FCL) |  | ||||||
| DHG = (QHV, LQP) |  | ||||||
| BDB = (NSV, BKM) |  | ||||||
| HPH = (DRR, DRR) |  | ||||||
| BKX = (KNG, NQT) |  | ||||||
| KVH = (KTP, MJT) |  | ||||||
| VDN = (GLX, LTR) |  | ||||||
| TFK = (CXB, MMM) |  | ||||||
| CQD = (NTR, RKK) |  | ||||||
| HHJ = (DBM, DHT) |  | ||||||
| VHV = (NNK, MBP) |  | ||||||
| FBF = (JNL, QFH) |  | ||||||
| PKX = (BTD, VDN) |  | ||||||
| PHK = (XBV, LBB) |  | ||||||
| QMH = (KLG, HFL) |  | ||||||
| SHL = (JCC, BNX) |  | ||||||
| FNT = (JCT, FPX) |  | ||||||
| HNF = (NCH, SGS) |  | ||||||
| LBV = (LCX, XKH) |  | ||||||
| MKJ = (SFD, VLF) |  | ||||||
| CCL = (RRR, QLT) |  | ||||||
| RSM = (HKJ, LHH) |  | ||||||
| HFC = (LJP, DVH) |  | ||||||
| MXH = (KTD, HFT) |  | ||||||
| PVC = (LGJ, BXX) |  | ||||||
| MNJ = (HNN, HDX) |  | ||||||
| DHK = (DDG, RBC) |  | ||||||
| JCL = (FRT, CVL) |  | ||||||
| FSG = (NGP, MNJ) |  | ||||||
| PHL = (HMK, VQV) |  | ||||||
| GFV = (XBV, LBB) |  | ||||||
| TXN = (BKX, VSR) |  | ||||||
| GJQ = (DBB, MKK) |  | ||||||
| XCX = (TKH, PLF) |  | ||||||
| MHT = (KNF, MST) |  | ||||||
| KDL = (FRJ, FSS) |  | ||||||
| MNM = (JJP, HBF) |  | ||||||
| XMG = (BJS, XKD) |  | ||||||
| QHQ = (DRK, SRC) |  | ||||||
| DVC = (CCX, XGP) |  | ||||||
| QQS = (MHM, DPM) |  | ||||||
| TVG = (KSV, RGR) |  | ||||||
| CGM = (QTL, RRQ) |  | ||||||
| QFR = (RHC, XKV) |  | ||||||
| VLF = (XSP, SDS) |  | ||||||
| DNF = (GHB, SGJ) |  | ||||||
| QHV = (SNG, VVM) |  | ||||||
| RVT = (HGJ, RTP) |  | ||||||
| RGN = (XCH, KLM) |  | ||||||
| QMC = (FLQ, CCL) |  | ||||||
| TJP = (VDT, PQB) |  | ||||||
| QKB = (TDK, CXJ) |  | ||||||
| SND = (GKP, FMB) |  | ||||||
| CPC = (QCS, VMD) |  | ||||||
| KHN = (LLF, FRV) |  | ||||||
| QLF = (BGG, QNT) |  | ||||||
| VJS = (FDT, VDD) |  | ||||||
| FNJ = (GPL, TKR) |  | ||||||
| MXN = (GNQ, QKP) |  | ||||||
| BQJ = (VMV, QFP) |  | ||||||
| NPK = (NKS, DHS) |  | ||||||
| HJA = (XMG, SVM) |  | ||||||
| HQM = (FNJ, GJT) |  | ||||||
| DVP = (DCJ, SND) |  | ||||||
| BCX = (RKR, NTH) |  | ||||||
| BHG = (XXM, SRF) |  | ||||||
| HSQ = (GTC, NCP) |  | ||||||
| TXM = (MNL, SHC) |  | ||||||
| PQT = (CSC, XGC) |  | ||||||
| NJF = (QKL, HDK) |  | ||||||
| MGV = (VPT, SHL) |  | ||||||
| TKR = (PGQ, JCD) |  | ||||||
| LGL = (SBH, MPZ) |  | ||||||
| PHN = (HRP, JPM) |  | ||||||
| LBN = (GDN, DFX) |  | ||||||
| JCC = (TSX, TLQ) |  | ||||||
| DXJ = (SHX, CHB) |  | ||||||
| KHM = (KDQ, JSJ) |  | ||||||
| XRB = (BCQ, MLX) |  | ||||||
| PCJ = (SFQ, JXK) |  | ||||||
| DVS = (XJB, MTG) |  | ||||||
| PCK = (CHB, SHX) |  | ||||||
| TTC = (VJF, LBC) |  | ||||||
| PKD = (VJC, SFG) |  | ||||||
| GHM = (HPH, HPH) |  | ||||||
| CHB = (PRJ, TXM) |  | ||||||
| QSR = (KDL, SRR) |  | ||||||
| TCG = (DHK, PTS) |  | ||||||
| NGR = (CSC, XGC) |  | ||||||
| VGQ = (LTX, TLF) |  | ||||||
| JQR = (GMV, BGT) |  | ||||||
| TQH = (CPC, XDD) |  | ||||||
| KKM = (MDV, QPP) |  | ||||||
| LSS = (CBR, GQQ) |  | ||||||
| DVG = (KTV, NDD) |  | ||||||
| TBD = (KHJ, VMP) |  | ||||||
| PRD = (MDN, JXX) |  | ||||||
| GPL = (PGQ, JCD) |  | ||||||
| TKV = (GQC, DMS) |  | ||||||
| RKC = (SRD, KJC) |  | ||||||
| QSL = (DGL, FRH) |  | ||||||
| JXR = (RMT, QFR) |  | ||||||
| CFL = (MST, KNF) |  | ||||||
| BJV = (RHV, KVB) |  | ||||||
| PSR = (JDF, XKT) |  | ||||||
| HPA = (RVQ, TVJ) |  | ||||||
| QDF = (LDQ, XXN) |  | ||||||
| GLB = (GRT, TXJ) |  | ||||||
| BPC = (HSP, VBT) |  | ||||||
| FLV = (SXH, PTR) |  | ||||||
| JTR = (MTC, PDN) |  | ||||||
| QCS = (CTF, SFM) |  | ||||||
| SRR = (FSS, FRJ) |  | ||||||
| DPM = (HFP, VHV) |  | ||||||
| PDN = (PBM, TGR) |  | ||||||
| VCD = (DCJ, SND) |  | ||||||
| KBJ = (LMT, VMC) |  | ||||||
| RHC = (CRP, JBJ) |  | ||||||
| DGP = (DMD, PPS) |  | ||||||
| HVV = (MXN, JPG) |  | ||||||
| LTH = (DXT, CLD) |  | ||||||
| XTV = (QSN, QLK) |  | ||||||
| CBR = (MBV, HMN) |  | ||||||
| CDR = (HNB, LFT) |  | ||||||
| GHQ = (VSQ, QSH) |  | ||||||
| TDC = (NTH, RKR) |  | ||||||
| XTQ = (FLQ, CCL) |  | ||||||
| GMC = (CXC, PKX) |  | ||||||
| PGK = (PHN, KLN) |  | ||||||
| NTH = (NGN, KVD) |  | ||||||
| PKH = (PMJ, MFC) |  | ||||||
| JDN = (HNF, BFD) |  | ||||||
| FBH = (SBH, SBH) |  | ||||||
| JDD = (FGT, XDR) |  | ||||||
| HKJ = (XRF, STP) |  | ||||||
| KLT = (MGS, JSK) |  | ||||||
| GHD = (HJB, KRK) |  | ||||||
| HRP = (FVP, HSR) |  | ||||||
| PTR = (PNC, JDT) |  | ||||||
| LJP = (SGP, QLJ) |  | ||||||
| JVT = (TTK, KBC) |  | ||||||
| ZZZ = (VMM, MPF) |  | ||||||
| BTD = (GLX, LTR) |  | ||||||
| GTC = (QKB, HMR) |  | ||||||
| NDF = (CXB, MMM) |  | ||||||
| DGB = (NQN, HCP) |  | ||||||
| JSJ = (QLH, LQK) |  | ||||||
| NBB = (KQV, QPH) |  | ||||||
| XGC = (RQL, CNR) |  | ||||||
| QHD = (GRX, QGJ) |  | ||||||
| RFX = (FPJ, BNV) |  | ||||||
| LPN = (NCB, SDH) |  | ||||||
| NVG = (PCH, GLB) |  | ||||||
							
								
								
									
										16
									
								
								08/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								08/part1.pl
									
									
									
									
									
								
							| @@ -1,16 +0,0 @@ | |||||||
| :- op(700, xfx, l). |  | ||||||
| :- op(700, xfx, r). |  | ||||||
|  |  | ||||||
| From l To :- From to To-_. |  | ||||||
| From r To :- From to _-To. |  | ||||||
|  |  | ||||||
| answer(Answer) :- path([], aaa, Path), length(Path, Answer). |  | ||||||
|  |  | ||||||
| path(_, zzz, []) :- !.  % getting full path instead of just length for debugging |  | ||||||
| path(Directions, From, [Move | Cdr]) :- |  | ||||||
|     next_step(Directions, Move, Remain), |  | ||||||
|     G =.. [Move, From, To], G, |  | ||||||
|     path(Remain, To, Cdr). |  | ||||||
|  |  | ||||||
| next_step([Move | Remain], Move, Remain). |  | ||||||
| next_step([], Move, Remain) :- direction(Str), atom_chars(Str, [Move | Remain]). |  | ||||||
| @@ -1,85 +0,0 @@ | |||||||
| :- table direction_loop/1. |  | ||||||
|  |  | ||||||
| :- op(700, xfx, l). |  | ||||||
| :- op(700, xfx, r). |  | ||||||
| From l To :- From to To-_. |  | ||||||
| From r To :- From to _-To. |  | ||||||
|  |  | ||||||
| % We want to satisfy {Offset_i + Stride_i*Loops_i + Sub_ij = Z} |  | ||||||
| answer() :- |  | ||||||
|     starts(Starts), |  | ||||||
|     maplist([S, S-Off-Stride-Loop]>>(zloop([], S, 0, [], Off, Stride, Loop)), |  | ||||||
|             Starts, Events), |  | ||||||
|     maplist(split, Events, EquationSets), |  | ||||||
|     pick(EquationSets, Eqs), |  | ||||||
|     index1(Eqs, IEqs), |  | ||||||
|     write('Find N_i such that: '), |  | ||||||
|     foldl(write_eq, IEqs, _, _), |  | ||||||
|     write('Z\n'), |  | ||||||
|     % foldl(satisfy, EquationsN, _, Answer), |  | ||||||
|     true. |  | ||||||
|  |  | ||||||
| write_eq(I-(A-B-C), _, _) :- |  | ||||||
|     writef('%t + %t*N%t ', [A, B, I]), |  | ||||||
|     (C =\= 0 -> writef('+ %t ', [C]); true), |  | ||||||
|     write('= '). |  | ||||||
|  |  | ||||||
| % satisfy((A-B-C), N, Z, Z) :- natnum(N), Z is A + B*N + C. |  | ||||||
|  |  | ||||||
| % [mma-2-2-[0-mmz], nna-3-6-[0-nnz, 3-nnz]] -> [2-2-0, 3-6-0, 3-6-3] |  | ||||||
| split(_-_-_-[], []). |  | ||||||
| split(A-Offset-Stride-[Sub-_ | Loop], [Offset-Stride-Sub | Cdr]) :- |  | ||||||
|     split(A-Offset-Stride-Loop, Cdr). |  | ||||||
|  |  | ||||||
| % Everything above this is not needed to get the input answer |  | ||||||
| % starts(Starts), |  | ||||||
| % maplist([S, S-Off-Stride-Loop]>>(zloop([], S, 0, [], Off, Stride, Loop)), |  | ||||||
| %         Starts, Loops). |  | ||||||
| % then find the LCD of the strides (which are equal to offsets). |  | ||||||
|  |  | ||||||
| zloop(_, _, _, Zs, Offset, Stride, Loop) :- |  | ||||||
|     Zs = [FirstZIndex-Z | _], reverse(Zs, [LastZIndex-Z | ReversedZs]), |  | ||||||
|     DeltaZ is LastZIndex - FirstZIndex, DeltaZ =\= 0, |  | ||||||
|     direction_len(Len), |  | ||||||
|     divmod(DeltaZ, Len, _, 0), |  | ||||||
|     Offset = FirstZIndex, Stride = DeltaZ, |  | ||||||
|     foldl([Idx-Z, NewIdx-Z, Off, Off]>>(NewIdx is Idx - Off), |  | ||||||
|           ReversedZs, ReversedLoop, Offset, _), |  | ||||||
|     reverse(ReversedLoop, Loop), |  | ||||||
|     !. |  | ||||||
|  |  | ||||||
| zloop(Directions, Node, Index, Zs, Offset, Stride, Loop) :- |  | ||||||
|     (   is_end(Node) |  | ||||||
|     ->  append(Zs, [Index-Node], NewZs) |  | ||||||
|     ;   NewZs = Zs |  | ||||||
|     ), |  | ||||||
|     next_step(Directions, Move, Remain), |  | ||||||
|     G =.. [Move, Node, To], G, |  | ||||||
|     NewIndex is Index + 1, |  | ||||||
|     zloop(Remain, To, NewIndex, NewZs, Offset, Stride, Loop). |  | ||||||
|  |  | ||||||
| starts(Starts) :- findall(X, X to _, Nodes), include(is_start, Nodes, Starts). |  | ||||||
|  |  | ||||||
| is_start(Node) :- atom_chars(Node, [_, _, a]). |  | ||||||
| is_end(Node) :- atom_chars(Node, [_, _, z]). |  | ||||||
|  |  | ||||||
| next_step([Move | Remain], Move, Remain). |  | ||||||
| next_step([], Move, Remain) :- direction_list([Move | Remain]). |  | ||||||
|  |  | ||||||
| direction_list(Dir) :- direction(Str), atom_chars(Str, Dir). |  | ||||||
| direction_len(Len) :- direction_list(D), length(D, Len). |  | ||||||
|  |  | ||||||
| % pick([[1,2,3], [4], [5,6]], X). X = [1,4,5]; X = [1,4,6]; X = [2,4,5]; ... |  | ||||||
| pick(ListOfLists, Items) :- |  | ||||||
|     maplist([SubList, X]>>(member(X, SubList)), ListOfLists, Items). |  | ||||||
|  |  | ||||||
| index1(L, IL) :- reverse(L, RL), index1r(RL, IRL), reverse(IRL, IL). |  | ||||||
| index1r([X], [1-X]). |  | ||||||
| index1r([X, Y | Cdr], [NextI-X, I-Y | ICdr]) :- |  | ||||||
|     index1r([Y | Cdr], [I-Y | ICdr]), NextI is I + 1. |  | ||||||
|  |  | ||||||
| same_elements([_]). |  | ||||||
| same_elements([X-_, Y-Z2 | Cdr]) :- X =:= Y, same_elements([Y-Z2 | Cdr]). |  | ||||||
|  |  | ||||||
| natnum(0). |  | ||||||
| natnum(N) :- natnum(N0), N is N0 + 1. |  | ||||||
| @@ -1,86 +0,0 @@ | |||||||
| % :- table step_at/2. |  | ||||||
| % :- table node_at/3. |  | ||||||
| :- table reachable_endnode/2. |  | ||||||
|  |  | ||||||
| :- op(700, xfx, l). |  | ||||||
| :- op(700, xfx, r). |  | ||||||
| From l To :- From to To-_. |  | ||||||
| From r To :- From to _-To. |  | ||||||
|  |  | ||||||
| answer(Answer) :- |  | ||||||
|     starts(Starts), |  | ||||||
|     routes(Starts, [Route1 | RestOfRoutes]), |  | ||||||
|     foldl(unify2, RestOfRoutes, Route1, _-(_-Answer-_)). |  | ||||||
|  |  | ||||||
| % unify2 combines 2 routes into one with its own stride-offsets-dests |  | ||||||
| unify2(Route1, Route2, NewRoute) :- |  | ||||||
|     once(findnsols(2, S, converge(Route1, Route2, S), SolutionPair)), |  | ||||||
|     SolutionPair = [NewA-LenA-NewZ, _-LenB-_], |  | ||||||
|     NewStride is LenB - LenA, |  | ||||||
|     NewRoute = NewA-(NewStride-LenA-[0-NewZ]). |  | ||||||
|  |  | ||||||
| % Len = Stride1*X1 + Offset1 + Dest1 = Stride2*X2 + Offset2 + Dest2 |  | ||||||
| % For performance, Route1's Stride should =< Route2's Stride |  | ||||||
| converge(Route1, Route2, NewA-Len-NewZ) :- |  | ||||||
|     writef('Combining %t - %t\n', [Route1, Route2]), |  | ||||||
|     Route1 = A1-(Stride1-Offset1-Dests1), |  | ||||||
|     Route2 = A2-(Stride2-Offset2-Dests2), |  | ||||||
|     natnum(X2), |  | ||||||
|     pick([Dests1, Dests2], [Dest1-Z1, Dest2-Z2]), |  | ||||||
|     0 is (Stride2*X2 + Offset2 + Dest2 - Offset1 - Dest1) mod Stride1, |  | ||||||
|     Len is Stride2*X2 + Offset2 + Dest2, |  | ||||||
|     atom_concat(A1, A2, NewA), atom_concat(Z1, Z2, NewZ). |  | ||||||
|  |  | ||||||
| routes(Starts, Routes) :- |  | ||||||
|     maplist([S, S-Route]>>(route(S, Route)), Starts, Routes). |  | ||||||
|  |  | ||||||
| % route builds a route (Stride-Offset-Internals) for a particular starting node. |  | ||||||
| route(Start, Stride-FirstN-[0-FirstDest | Dests]) :- |  | ||||||
|     direction_len(DirLen), |  | ||||||
|     once(reachable_endnode(Start, FirstN-FirstDest)), |  | ||||||
|     findall(ShiftedN-Dest, |  | ||||||
|             (   reachable_endnode(Start, N-Dest), |  | ||||||
|                 ShiftedN is N - FirstN, |  | ||||||
|                 ShiftedN =\= 0, |  | ||||||
|                 (0 is ShiftedN mod DirLen -> !; true)), |  | ||||||
|             TmpDests), |  | ||||||
|     last(TmpDests, Stride-LastDest), |  | ||||||
|     append(Dests, [Stride-LastDest], TmpDests). |  | ||||||
|      |  | ||||||
| % Dest is reachable from Start after N steps |  | ||||||
| reachable_endnode(Start, N-Dest) :- |  | ||||||
|     natnum(N), |  | ||||||
|     node_at(N, Start, Dest), |  | ||||||
|     is_end(Dest). |  | ||||||
|  |  | ||||||
| starts(Starts) :- findall(X, X to _, Nodes), include(is_start, Nodes, Starts). |  | ||||||
|  |  | ||||||
| is_start(Node) :- atom_chars(Node, [_, _, a]). |  | ||||||
| is_end(Node) :- atom_chars(Node, [_, _, z]). |  | ||||||
|  |  | ||||||
| % node_at(N, Dir, From, Dest) :- Dest is reached after moving N step from From. |  | ||||||
| node_at(0, Start, Start). |  | ||||||
| node_at(N, From, Dest) :- |  | ||||||
|     N > 0, |  | ||||||
|     PrevN is N - 1, |  | ||||||
|     step_at(PrevN, PrevStep), |  | ||||||
|     G =.. [PrevStep, PrevNode, Dest], G, |  | ||||||
|     node_at(PrevN, From, PrevNode). |  | ||||||
|  |  | ||||||
| % Step is the N-th step (counting starts from 0). |  | ||||||
| step_at(N, Step) :- |  | ||||||
|     direction_list(Dir), |  | ||||||
|     length(Dir, DirLen), |  | ||||||
|     divmod(N, DirLen, _, Remainder), |  | ||||||
|     nth0(Remainder, Dir, Step). |  | ||||||
|  |  | ||||||
| direction_list(Dir) :- direction(Str), atom_chars(Str, Dir). |  | ||||||
| direction_len(Len) :- direction_list(D), length(D, Len). |  | ||||||
|  |  | ||||||
| % pick one item from each sublist of ListOfLists & put them into Items in order. |  | ||||||
| % [[1,2,3], [4], [5,6]] -> [1,4,5]; [1,4,6]; [2,4,5]; [2,4,6]; [3,4,5]; [3,4,6]. |  | ||||||
| pick(ListOfLists, Items) :- |  | ||||||
|     maplist([SubList, X]>>(member(X, SubList)), ListOfLists, Items). |  | ||||||
|  |  | ||||||
| natnum(0). |  | ||||||
| natnum(N) :- natnum(N0), N is N0 + 1. |  | ||||||
| @@ -1,25 +0,0 @@ | |||||||
| :- op(700, xfx, l). |  | ||||||
| :- op(700, xfx, r). |  | ||||||
|  |  | ||||||
| From l To :- From to To-_. |  | ||||||
| From r To :- From to _-To. |  | ||||||
|  |  | ||||||
| answer(Answer) :- starts(Starts), path([], Starts, Answer). |  | ||||||
|  |  | ||||||
| path(_, EndNodes, []) :- all_ends(EndNodes), !. |  | ||||||
| path(Directions, FromList, Moves) :- |  | ||||||
|     next_step(Directions, Move, Remain), |  | ||||||
|     maplist(Move, FromList, ToList), |  | ||||||
|     path(Remain, ToList, RemainingMoves), |  | ||||||
|     Moves is RemainingMoves + 1. |  | ||||||
|  |  | ||||||
| next_step([Move | Remain], Move, Remain). |  | ||||||
| next_step([], Move, Remain) :- direction(Str), atom_chars(Str, [Move | Remain]). |  | ||||||
|  |  | ||||||
| starts(StartNodes) :- |  | ||||||
|     findall(Node, Node to _, Nodes), |  | ||||||
|     include(is_start, Nodes, StartNodes). |  | ||||||
| all_ends(Nodes) :- maplist(is_end, Nodes). |  | ||||||
|  |  | ||||||
| is_start(Node) :- atom_chars(Node, [_, _, a]). |  | ||||||
| is_end(Node) :- atom_chars(Node, [_, _, z]). |  | ||||||
| @@ -1,78 +0,0 @@ | |||||||
| :- table direction_loop/1. |  | ||||||
|  |  | ||||||
| :- op(700, xfx, l). |  | ||||||
| :- op(700, xfx, r). |  | ||||||
| From l To :- From to To-_. |  | ||||||
| From r To :- From to _-To. |  | ||||||
|  |  | ||||||
| answer(Answer) :- |  | ||||||
|     starts(Starts), |  | ||||||
|     maplist([S, S-Off-Stride-Loop]>>(zloop([], S, 0, [], Off, Stride, Loop)), |  | ||||||
|             Starts, Events), |  | ||||||
|     maplist([Node, Node-0-0]>>(true), Starts, StartPositions), |  | ||||||
|     next_zevent(Events, StartPositions, Answer). |  | ||||||
|  |  | ||||||
| next_zevent(AllZEvents, CurrPositions, Index) :- |  | ||||||
|     maplist(index_of, AllZEvents, CurrPositions, Candidates), |  | ||||||
|     writef('curr=%t, cand=%t, idx=%t\n', [CurrPositions, Candidates, Index]), |  | ||||||
|     (   same_elements(Candidates) |  | ||||||
|     ->  Candidates = [Index-_ | _] |  | ||||||
|     ;   min_member(_-Z, Candidates), |  | ||||||
|         member(Z-NLoops-SubLoop, CurrPositions), |  | ||||||
|         member(Z-Offset-Stride-Loop, AllZEvents), |  | ||||||
|         next(Z-Offset-Stride-Loop, Z-NLoops-SubLoop, Z-NextNLoops-NextSubLoop), |  | ||||||
|         select(Z-_-_, CurrPositions, Z-NextNLoops-NextSubLoop, NextPositions), |  | ||||||
|         % writef('next=%t, z=%t, idx=%t\n', [NextPositions, Z, Index]), |  | ||||||
|         next_zevent(AllZEvents, NextPositions, Index) |  | ||||||
|     ). |  | ||||||
|  |  | ||||||
| index_of(A-Offset-Stride-Loop, A-NLoops-SubLoop, Index-A) :- |  | ||||||
|     nth0(SubLoop, Loop, LoopPosition-_), |  | ||||||
|     Index is Offset + NLoops*Stride + LoopPosition. |  | ||||||
|  |  | ||||||
| next(A-_-_-Loop, A-NLoops-SubLoop, A-NextNLoops-NextSubLoop) :- |  | ||||||
|     length(Loop, LoopLen), |  | ||||||
|     (   SubLoop < LoopLen - 1 |  | ||||||
|     ->  NextNLoops is NLoops, NextSubLoop is SubLoop + 1 |  | ||||||
|     ;   NextNLoops is NLoops + 1, NextSubLoop is 0). |  | ||||||
|  |  | ||||||
| % Everything above this is not needed to get the input answer |  | ||||||
| % starts(Starts), |  | ||||||
| % maplist([S, S-Off-Stride-Loop]>>(zloop([], S, 0, [], Off, Stride, Loop)), |  | ||||||
| %         Starts, Loops). |  | ||||||
| % then find the LCD of the strides (which are equal to offsets). |  | ||||||
|  |  | ||||||
| zloop(_, _, _, Zs, Offset, Stride, Loop) :- |  | ||||||
|     Zs = [FirstZIndex-Z | _], reverse(Zs, [LastZIndex-Z | ReversedZs]), |  | ||||||
|     DeltaZ is LastZIndex - FirstZIndex, DeltaZ =\= 0, |  | ||||||
|     direction_len(Len), |  | ||||||
|     divmod(DeltaZ, Len, _, 0), |  | ||||||
|     Offset = FirstZIndex, Stride = DeltaZ, |  | ||||||
|     foldl([Idx-Z, NewIdx-Z, Off, Off]>>(NewIdx is Idx - Off), |  | ||||||
|           ReversedZs, ReversedLoop, Offset, _), |  | ||||||
|     reverse(ReversedLoop, Loop), |  | ||||||
|     !. |  | ||||||
|  |  | ||||||
| zloop(Directions, Node, Index, Zs, Offset, Stride, Loop) :- |  | ||||||
|     (   is_end(Node) |  | ||||||
|     ->  append(Zs, [Index-Node], NewZs) |  | ||||||
|     ;   NewZs = Zs |  | ||||||
|     ), |  | ||||||
|     next_step(Directions, Move, Remain), |  | ||||||
|     G =.. [Move, Node, To], G, |  | ||||||
|     NewIndex is Index + 1, |  | ||||||
|     zloop(Remain, To, NewIndex, NewZs, Offset, Stride, Loop). |  | ||||||
|  |  | ||||||
| starts(Starts) :- findall(X, X to _, Nodes), include(is_start, Nodes, Starts). |  | ||||||
|  |  | ||||||
| is_start(Node) :- atom_chars(Node, [_, _, a]). |  | ||||||
| is_end(Node) :- atom_chars(Node, [_, _, z]). |  | ||||||
|  |  | ||||||
| next_step([Move | Remain], Move, Remain). |  | ||||||
| next_step([], Move, Remain) :- direction_list([Move | Remain]). |  | ||||||
|  |  | ||||||
| direction_list(Dir) :- direction(Str), atom_chars(Str, Dir). |  | ||||||
| direction_len(Len) :- direction_list(D), length(D, Len). |  | ||||||
|  |  | ||||||
| same_elements([_]). |  | ||||||
| same_elements([X-_, Y-Z2 | Cdr]) :- X =:= Y, same_elements([Y-Z2 | Cdr]). |  | ||||||
							
								
								
									
										63
									
								
								08/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										63
									
								
								08/part2.pl
									
									
									
									
									
								
							| @@ -1,63 +0,0 @@ | |||||||
| :- op(700, xfx, l). |  | ||||||
| :- op(700, xfx, r). |  | ||||||
| From l To :- From to To-_. |  | ||||||
| From r To :- From to _-To. |  | ||||||
|  |  | ||||||
| answer(Answer) :- |  | ||||||
|     findall(Node, (Node to _, atom_chars(Node, [_, _, a])), Starts), |  | ||||||
|     routes(Starts, [Route1 | RestOfRoutes]), |  | ||||||
|     foldl(unify2, RestOfRoutes, Route1, _-(_-Answer-_)). |  | ||||||
|  |  | ||||||
| % unify2 combines 2 routes into one with its own stride-offsets-dests |  | ||||||
| unify2(Route1, Route2, NewRoute) :- |  | ||||||
|     writef('Combining %t + %t', [Route1, Route2]), |  | ||||||
|     once(findnsols(2, S, converge(Route1, Route2, S), SolutionPair)), |  | ||||||
|     SolutionPair = [NewA-LenA-NewZ, _-LenB-_], |  | ||||||
|     NewStride is LenB - LenA, |  | ||||||
|     NewRoute = NewA-(NewStride-LenA-[0-NewZ]), |  | ||||||
|     writef(' --> %t\n', [NewRoute]). |  | ||||||
|  |  | ||||||
| % Len = Stride1*X1 + Offset1 + Dest1 = Stride2*X2 + Offset2 + Dest2 |  | ||||||
| % For performance, Route1's Stride should =< Route2's Stride |  | ||||||
| converge(Route1, Route2, NewA-Len-NewZ) :- |  | ||||||
|     Route1 = A1-(Stride1-Offset1-Dests1), |  | ||||||
|     Route2 = A2-(Stride2-Offset2-Dests2), |  | ||||||
|     natnum(X2), |  | ||||||
|     pick([Dests1, Dests2], [Dest1-Z1, Dest2-Z2]), |  | ||||||
|     0 is (Stride2*X2 + Offset2 + Dest2 - Offset1 - Dest1) mod Stride1, |  | ||||||
|     Len is Stride2*X2 + Offset2 + Dest2, |  | ||||||
|     atom_concat(A1, A2, NewA), atom_concat(Z1, Z2, NewZ). |  | ||||||
|  |  | ||||||
| routes(Starts, Routes) :- |  | ||||||
|     maplist([S, S-Route]>>(route_at(S, Route)), Starts, Routes). |  | ||||||
|  |  | ||||||
| % route_at(N, Node, Dests, AllDests) means going N steps will arrive at Node |  | ||||||
| % passing through Dests. |  | ||||||
| route_at(Start, Route) :- route_at(0, Start, [], Route). |  | ||||||
| route_at(N, FirstZ, [FirstZN-FirstZ | Zs], Stride-Offset-AllZs) :- |  | ||||||
|     Stride is N - FirstZN, direction_looped(Stride), |  | ||||||
|     Offset is FirstZN, |  | ||||||
|     maplist({Offset}/[N-X, M-X]>>(M is N-Offset), [FirstZN-FirstZ | Zs], AllZs), |  | ||||||
|     !. |  | ||||||
| route_at(N, Node, Dests, AllDests) :- |  | ||||||
|     (   atom_chars(Node, [_, _, z]) |  | ||||||
|     ->  append(Dests, [N-Node], NextDests) |  | ||||||
|     ;   NextDests = Dests), |  | ||||||
|     Nplus1 is N + 1, step_at(N, Step), call(Step, Node, NextNode), |  | ||||||
|     route_at(Nplus1, NextNode, NextDests, AllDests). |  | ||||||
|  |  | ||||||
| % Step is the N-th step (counting starts from 0). |  | ||||||
| step_at(N, Step) :- |  | ||||||
|     direction_list(Dir), length(Dir, DirLen), Remainder is N mod DirLen, |  | ||||||
|     nth0(Remainder, Dir, Step). |  | ||||||
|  |  | ||||||
| direction_looped(Len) :- direction_list(D), length(D, DLen), 0 is Len mod DLen. |  | ||||||
| direction_list(Dir) :- direction(Str), atom_chars(Str, Dir). |  | ||||||
|  |  | ||||||
| % pick one item from each sublist of ListOfLists & put them into Items in order. |  | ||||||
| % [[1,2,3], [4], [5,6]] -> [1,4,5]; [1,4,6]; [2,4,5]; [2,4,6]; [3,4,5]; [3,4,6]. |  | ||||||
| pick(ListOfLists, Items) :- |  | ||||||
|     maplist([SubList, X]>>(member(X, SubList)), ListOfLists, Items). |  | ||||||
|  |  | ||||||
| natnum(0). |  | ||||||
| natnum(N) :- natnum(N0), N is N0 + 1. |  | ||||||
| @@ -1,83 +0,0 @@ | |||||||
| :- op(700, xfx, l). |  | ||||||
| :- op(700, xfx, r). |  | ||||||
| From l To :- From to To-_. |  | ||||||
| From r To :- From to _-To. |  | ||||||
|  |  | ||||||
| answer(Answer) :- |  | ||||||
|     starts(Starts), |  | ||||||
|     routes(Starts, Routes), |  | ||||||
|     collapse_routes(Routes, _-(_-Answer-_)). |  | ||||||
|  |  | ||||||
| collapse_routes([X], X). |  | ||||||
| collapse_routes(Routes, Collapsed) :- |  | ||||||
|     writef('Collapsing: %t\n', [Routes]), |  | ||||||
|     sort(2, @=<, Routes, [Route1, Route2 | CdrRoutes]), |  | ||||||
|     unify2(Route1, Route2, NewRoute), |  | ||||||
|     collapse_routes([NewRoute | CdrRoutes], Collapsed). |  | ||||||
|  |  | ||||||
| % unify2 combines 2 routes into one with its own stride-offsets-dests |  | ||||||
| unify2(Route1, Route2, Route12) :- unify2(Route1, Route2, 0-0-0-0, [], Route12). |  | ||||||
| unify2(Route1, Route2, N1-Dest1-N2-Dest2, Founds, NewRoute) :- |  | ||||||
|     Route1 = A1-(Stride1-Offset1-Dests1), |  | ||||||
|     Route2 = A2-(Stride2-Offset2-Dests2), |  | ||||||
|     nth0(Dest1, Dests1, C1-Z1), |  | ||||||
|     nth0(Dest2, Dests2, C2-Z2), |  | ||||||
|     Len1 is Offset1 + Stride1*N1 + C1, |  | ||||||
|     Len2 is Offset2 + Stride2*N2 + C2, |  | ||||||
|     next(Dests1, N1-Dest1, NextN1-NextDest1), |  | ||||||
|     (   Len1 =:= Len2 |  | ||||||
|     ->  (   Founds = [OldLen] |  | ||||||
|         ->  atom_concat(A1, A2, NewA), atom_concat(Z1, Z2, NewZ), |  | ||||||
|             NewStride is Len1 - OldLen, |  | ||||||
|             NewRoute = NewA-(NewStride-OldLen-[0-NewZ]), |  | ||||||
|             ! |  | ||||||
|         ;   unify2(Route1, Route2, NextN1-NextDest1-N2-Dest2, [Len1], NewRoute) |  | ||||||
|         ) |  | ||||||
|     ;   Len1 < Len2 |  | ||||||
|     ->  unify2(Route1, Route2, NextN1-NextDest1-N2-Dest2, Founds, NewRoute) |  | ||||||
|     ;   next(Dests2, N2-Dest2, NextN2-NextDest2), |  | ||||||
|         unify2(Route1, Route2, N1-Dest1-NextN2-NextDest2, Founds, NewRoute) |  | ||||||
|     ). |  | ||||||
|  |  | ||||||
| % next(Dests, NumberOfLoops-WhichInternalZ, NextNumberOfLoops-NextInternalZ) |  | ||||||
| next(Dests, NLoops-Dest, NextNLoops-NextDest) :- |  | ||||||
|     length(Dests, DestsLen), |  | ||||||
|     (   Dest < DestsLen - 1 |  | ||||||
|     ->  NextNLoops is NLoops, NextDest is Dest + 1 |  | ||||||
|     ;   NextNLoops is NLoops + 1, NextDest is 0). |  | ||||||
|  |  | ||||||
| routes(Starts, Routes) :- |  | ||||||
|     maplist([S, S-Route]>>(zloop(S, Route)), Starts, Routes). |  | ||||||
|  |  | ||||||
| % zloop builds a route (Stride-Offset-Internals for a particular starting node. |  | ||||||
| zloop(Node, Route) :- zloop([], Node, 0, [], Route). |  | ||||||
| zloop(_Direction, _Node, _Index, Zs, Stride-Offset-Dests) :- |  | ||||||
|     Zs = [FirstZIndex-Z | _], reverse(Zs, [LastZIndex-Z | ReversedZs]), |  | ||||||
|     DeltaZ is LastZIndex - FirstZIndex, DeltaZ =\= 0, |  | ||||||
|     direction_len(Len), |  | ||||||
|     divmod(DeltaZ, Len, _, 0), |  | ||||||
|     Offset = FirstZIndex, Stride = DeltaZ, |  | ||||||
|     foldl([Idx-Z, NewIdx-Z, Off, Off]>>(NewIdx is Idx - Off), |  | ||||||
|           ReversedZs, ReversedDests, Offset, _), |  | ||||||
|     reverse(ReversedDests, Dests), |  | ||||||
|     !. |  | ||||||
| zloop(Directions, Node, Index, Zs, Route) :- |  | ||||||
|     (   is_end(Node) |  | ||||||
|     ->  append(Zs, [Index-Node], NewZs) |  | ||||||
|     ;   NewZs = Zs |  | ||||||
|     ), |  | ||||||
|     next_step(Directions, Move, Remain), |  | ||||||
|     G =.. [Move, Node, To], G, |  | ||||||
|     NewIndex is Index + 1, |  | ||||||
|     zloop(Remain, To, NewIndex, NewZs, Route). |  | ||||||
|  |  | ||||||
| starts(Starts) :- findall(X, X to _, Nodes), include(is_start, Nodes, Starts). |  | ||||||
|  |  | ||||||
| is_start(Node) :- atom_chars(Node, [_, _, a]). |  | ||||||
| is_end(Node) :- atom_chars(Node, [_, _, z]). |  | ||||||
|  |  | ||||||
| next_step([Move | Remain], Move, Remain). |  | ||||||
| next_step([], Move, Remain) :- direction_list([Move | Remain]). |  | ||||||
|  |  | ||||||
| direction_list(Dir) :- direction(Str), atom_chars(Str, Dir). |  | ||||||
| direction_len(Len) :- direction_list(D), length(D, Len). |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| % cat input.txt \ |  | ||||||
| %   | sed -r -e 's~^(.*) = \((.*), (.*)\)$~\L\1 to \L\2-\L\3.~' \ |  | ||||||
| %   | sed -r -e 's~^([RL]+)$~:- op(700, xfx, to).\ndirection("\L\1").~' > input.pl |  | ||||||
| :- op(700, xfx, to). |  | ||||||
| direction("llr"). |  | ||||||
|  |  | ||||||
| aaa to bbb-bbb. |  | ||||||
| bbb to aaa-zzz. |  | ||||||
| zzz to zzz-zzz. |  | ||||||
| @@ -1,9 +0,0 @@ | |||||||
| RL |  | ||||||
|  |  | ||||||
| AAA = (BBB, CCC) |  | ||||||
| BBB = (DDD, EEE) |  | ||||||
| CCC = (ZZZ, GGG) |  | ||||||
| DDD = (DDD, DDD) |  | ||||||
| EEE = (EEE, EEE) |  | ||||||
| GGG = (GGG, GGG) |  | ||||||
| ZZZ = (ZZZ, ZZZ) |  | ||||||
							
								
								
									
										19
									
								
								08/test2.pl
									
									
									
									
									
								
							
							
						
						
									
										19
									
								
								08/test2.pl
									
									
									
									
									
								
							| @@ -1,19 +0,0 @@ | |||||||
| :- op(700, xfx, to). |  | ||||||
| direction("lr"). |  | ||||||
|  |  | ||||||
| mma to mmb-xxx. |  | ||||||
| mmb to xxx-mmz. |  | ||||||
| mmz to mmb-xxx. |  | ||||||
| nna to nnb-xxx. |  | ||||||
| nnb to nnc-nnc. |  | ||||||
| nnc to nnz-nnz. |  | ||||||
| nnz to nnb-nnb. |  | ||||||
| ooa to ooz-oob. |  | ||||||
| oob to ood-ooc. |  | ||||||
| ooc to ooa-oox. |  | ||||||
| ood to ooz-ood. |  | ||||||
| ooz to oob-ooz. |  | ||||||
| xxx to xxx-xxx. |  | ||||||
|  |  | ||||||
| % Routes = [mma-(2-2-[0-mmz]), nna-(6-3-[0-nnz, 3-nnz]), ooa-(8-1-[0-ooz, 1-ooz])]. |  | ||||||
| % X = mmannaooa-(24-18-[0-mmznnzooz]). |  | ||||||
							
								
								
									
										10
									
								
								08/test2.txt
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								08/test2.txt
									
									
									
									
									
								
							| @@ -1,10 +0,0 @@ | |||||||
| LR |  | ||||||
|  |  | ||||||
| 11A = (11B, XXX) |  | ||||||
| 11B = (XXX, 11Z) |  | ||||||
| 11Z = (11B, XXX) |  | ||||||
| 22A = (22B, XXX) |  | ||||||
| 22B = (22C, 22C) |  | ||||||
| 22C = (22Z, 22Z) |  | ||||||
| 22Z = (22B, 22B) |  | ||||||
| XXX = (XXX, XXX) |  | ||||||
							
								
								
									
										202
									
								
								09/input.pl
									
									
									
									
									
								
							
							
						
						
									
										202
									
								
								09/input.pl
									
									
									
									
									
								
							| @@ -1,202 +0,0 @@ | |||||||
| input([ |  | ||||||
| [28, 38, 58, 115, 255, 558, 1167, 2343, 4564, 8699, 16328, 30378, 56447, 105549, 199601, 381868, 735876, 1418100, 2712150, 5115341, 9472583], |  | ||||||
| [24, 34, 56, 103, 191, 343, 593, 990, 1602, 2520, 3862, 5777, 8449, 12101, 16999, 23456, 31836, 42558, 56100, 73003, 93875], |  | ||||||
| [12, 30, 66, 118, 187, 291, 486, 901, 1807, 3760, 7885, 16402, 33536, 67001, 130303, 246169, 451478, 804146, 1392500, 2347766, 3860393], |  | ||||||
| [11, 7, -1, -10, 4, 101, 392, 1052, 2337, 4631, 8595, 15584, 28661, 54781, 109041, 222274, 453659, 910327, 1775963, 3349730, 6094694], |  | ||||||
| [13, 26, 56, 110, 200, 360, 677, 1347, 2785, 5847, 12267, 25493, 52275, 105732, 211455, 420013, 833076, 1658291, 3323777, 6713131, 13636877], |  | ||||||
| [24, 36, 50, 68, 92, 124, 166, 220, 288, 372, 474, 596, 740, 908, 1102, 1324, 1576, 1860, 2178, 2532, 2924], |  | ||||||
| [4, 10, 18, 35, 81, 207, 523, 1232, 2664, 5299, 9766, 16819, 27345, 42607, 65306, 103013, 177906, 352348, 792280, 1916515, 4732055], |  | ||||||
| [2, 4, 15, 46, 115, 246, 479, 915, 1841, 4022, 9326, 21995, 51143, 115539, 252570, 534754, 1099830, 2205374, 4328183, 8346246, 15873877], |  | ||||||
| [6, 16, 41, 104, 240, 508, 1016, 1959, 3670, 6684, 11815, 20246, 33632, 54216, 84958, 129677, 193206, 281560, 402117, 563812, 777344], |  | ||||||
| [10, 24, 59, 127, 240, 410, 649, 969, 1382, 1900, 2535, 3299, 4204, 5262, 6485, 7885, 9474, 11264, 13267, 15495, 17960], |  | ||||||
| [1, 3, 19, 65, 161, 334, 621, 1072, 1753, 2749, 4167, 6139, 8825, 12416, 17137, 23250, 31057, 40903, 53179, 68325, 86833], |  | ||||||
| [1, 3, 14, 46, 118, 256, 493, 869, 1431, 2233, 3336, 4808, 6724, 9166, 12223, 15991, 20573, 26079, 32626, 40338, 49346], |  | ||||||
| [5, 20, 54, 111, 200, 339, 551, 863, 1338, 2203, 4189, 9270, 22068, 52271, 118490, 254073, 515553, 994838, 1837662, 3275301, 5689494], |  | ||||||
| [11, 19, 37, 74, 152, 315, 630, 1176, 2019, 3189, 4728, 6991, 11599, 23863, 58350, 151043, 385257, 945993, 2232085, 5082986, 11226568], |  | ||||||
| [-6, -5, -1, 6, 16, 29, 45, 64, 86, 111, 139, 170, 204, 241, 281, 324, 370, 419, 471, 526, 584], |  | ||||||
| [19, 44, 79, 123, 175, 234, 299, 369, 443, 520, 599, 679, 759, 838, 915, 989, 1059, 1124, 1183, 1235, 1279], |  | ||||||
| [20, 26, 41, 76, 144, 261, 459, 824, 1572, 3189, 6707, 14297, 30581, 65483, 140200, 299218, 633600, 1324592, 2722729, 5487182, 10824554], |  | ||||||
| [2, 13, 49, 134, 316, 686, 1400, 2714, 5060, 9211, 16601, 29879, 53781, 96407, 171038, 298877, 513930, 873445, 1482345, 2550372, 4520094], |  | ||||||
| [7, 22, 55, 116, 218, 381, 645, 1090, 1862, 3209, 5540, 9533, 16335, 27918, 47680, 81409, 138761, 235440, 396309, 659706, 1083288], |  | ||||||
| [23, 34, 43, 54, 73, 105, 151, 202, 234, 223, 220, 555, 2284, 8074, 23894, 62315, 149406, 340397, 757350, 1681105, 3771572], |  | ||||||
| [-2, 9, 31, 72, 157, 346, 769, 1701, 3724, 8065, 17266, 36441, 75513, 153008, 302220, 580858, 1085650, 1973817, 3493849, 6028622, 10154597], |  | ||||||
| [17, 35, 83, 175, 326, 554, 878, 1305, 1800, 2233, 2292, 1349, -1702, -8485, -20570, -37084, -47977, -18173, 145725, 659887, 1980386], |  | ||||||
| [6, 19, 49, 119, 273, 598, 1257, 2530, 4856, 8858, 15310, 24963, 38082, 53479, 66865, 68818, 44405, -18660, -94790, -14282, 809438], |  | ||||||
| [17, 21, 22, 20, 15, 7, -4, -18, -35, -55, -78, -104, -133, -165, -200, -238, -279, -323, -370, -420, -473], |  | ||||||
| [8, 23, 59, 139, 312, 672, 1383, 2710, 5056, 9005, 15371, 25253, 40096, 61758, 92583, 135480, 194008, 272467, 375995, 510671, 683624], |  | ||||||
| [9, 16, 34, 63, 103, 154, 216, 289, 373, 468, 574, 691, 819, 958, 1108, 1269, 1441, 1624, 1818, 2023, 2239], |  | ||||||
| [8, 19, 59, 140, 275, 481, 794, 1315, 2308, 4381, 8817, 18206, 37692, 77458, 157694, 318613, 640892, 1287715, 2591041, 5226414, 10560561], |  | ||||||
| [8, 21, 37, 57, 82, 107, 117, 88, -4, -163, -339, -377, 54, 1555, 5117, 12270, 25264, 47285, 82709, 137397, 219034], |  | ||||||
| [22, 34, 44, 52, 58, 62, 64, 64, 62, 58, 52, 44, 34, 22, 8, -8, -26, -46, -68, -92, -118], |  | ||||||
| [28, 57, 114, 220, 416, 779, 1446, 2651, 4785, 8494, 14832, 25483, 43057, 71450, 116238, 185052, 287858, 437047, 647230, 934638, 1316054], |  | ||||||
| [16, 20, 24, 28, 32, 36, 40, 44, 48, 52, 56, 60, 64, 68, 72, 76, 80, 84, 88, 92, 96], |  | ||||||
| [28, 39, 48, 62, 97, 180, 347, 630, 1022, 1413, 1518, 905, -557, -1064, 7553, 50137, 189888, 570667, 1494764, 3559032, 7883557], |  | ||||||
| [5, 0, 3, 30, 106, 262, 542, 1035, 1947, 3728, 7269, 14184, 27192, 50614, 91000, 157901, 264801, 430224, 679031, 1043922, 1567158], |  | ||||||
| [4, 21, 55, 119, 239, 461, 864, 1591, 2913, 5356, 9967, 18894, 36631, 72557, 145803, 294037, 588486, 1158435, 2229571, 4181885, 7634411], |  | ||||||
| [8, 11, 15, 33, 81, 182, 384, 805, 1728, 3777, 8206, 17321, 35023, 67400, 123199, 213865, 352632, 551879, 817609, 1139457, 1474069], |  | ||||||
| [6, 15, 30, 69, 162, 358, 754, 1560, 3223, 6658, 13679, 27799, 55705, 109973, 214073, 411584, 783020, 1476065, 2758724, 5110417, 9373988], |  | ||||||
| [18, 26, 37, 54, 84, 138, 231, 382, 614, 954, 1433, 2086, 2952, 4074, 5499, 7278, 9466, 12122, 15309, 19094, 23548], |  | ||||||
| [3, -2, -7, -12, -17, -22, -27, -32, -37, -42, -47, -52, -57, -62, -67, -72, -77, -82, -87, -92, -97], |  | ||||||
| [16, 32, 61, 121, 242, 466, 847, 1451, 2356, 3652, 5441, 7837, 10966, 14966, 19987, 26191, 33752, 42856, 53701, 66497, 81466], |  | ||||||
| [13, 35, 79, 160, 302, 554, 1015, 1865, 3399, 6061, 10475, 17470, 28096, 43628, 65555, 95551, 135425, 187047, 252247, 332684, 429682], |  | ||||||
| [13, 6, -9, -20, 11, 156, 538, 1364, 2981, 5967, 11279, 20495, 36207, 62647, 106658, 179157, 297277, 487420, 789503, 1262734, 1993315], |  | ||||||
| [14, 11, 18, 51, 141, 348, 790, 1714, 3660, 7803, 16602, 34939, 71995, 144184, 279550, 524126, 950858, 1671811, 2854498, 4743307, 7687145], |  | ||||||
| [2, 7, 22, 56, 123, 242, 437, 737, 1176, 1793, 2632, 3742, 5177, 6996, 9263, 12047, 15422, 19467, 24266, 29908, 36487], |  | ||||||
| [19, 34, 68, 128, 220, 349, 519, 733, 993, 1300, 1654, 2054, 2498, 2983, 3505, 4059, 4639, 5238, 5848, 6460, 7064], |  | ||||||
| [21, 48, 85, 132, 195, 292, 468, 836, 1684, 3739, 8772, 20876, 48964, 111327, 243473, 510946, 1029407, 1994954, 3728471, 6738732, 11810049], |  | ||||||
| [11, 27, 55, 108, 210, 394, 696, 1143, 1733, 2405, 2997, 3190, 2436, -132, -5810, -16455, -34641, -63841, -108637, -174960, -270362], |  | ||||||
| [12, 12, 12, 25, 90, 292, 791, 1869, 4012, 8064, 15537, 29266, 54829, 103647, 199701, 393835, 793523, 1623291, 3344337, 6885726, 14081159], |  | ||||||
| [5, 13, 31, 72, 164, 358, 736, 1410, 2499, 4070, 6039, 8076, 9700, 11088, 15835, 38309, 120943, 371965, 1044017, 2693426, 6497234], |  | ||||||
| [-1, -4, 4, 46, 162, 411, 867, 1607, 2698, 4206, 6273, 9338, 14615, 24985, 46510, 90835, 178809, 345728, 648682, 1176574, 2063472], |  | ||||||
| [8, 16, 23, 40, 92, 216, 455, 847, 1408, 2108, 2839, 3374, 3316, 2036, -1401, -8323, -20552, -40520, -71401, -117260, -183220], |  | ||||||
| [27, 54, 93, 143, 215, 340, 581, 1059, 2009, 3892, 7603, 14833, 28665, 54510, 101519, 184641, 327535, 566586, 956321, 1576571, 2541779], |  | ||||||
| [18, 25, 37, 63, 114, 201, 333, 515, 746, 1017, 1309, 1591, 1818, 1929, 1845, 1467, 674, -679, -2763, -5777, -9950], |  | ||||||
| [11, 23, 58, 131, 266, 508, 956, 1834, 3618, 7240, 14408, 28142, 53779, 101035, 188408, 352630, 668776, 1292502, 2547568, 5104551, 10339633], |  | ||||||
| [20, 30, 55, 112, 230, 464, 919, 1792, 3444, 6514, 12092, 22012, 39486, 70717, 129039, 244932, 488666, 1018738, 2181538, 4711697, 10130222], |  | ||||||
| [8, 15, 22, 29, 36, 43, 50, 57, 64, 71, 78, 85, 92, 99, 106, 113, 120, 127, 134, 141, 148], |  | ||||||
| [8, 17, 18, 5, -32, -110, -256, -510, -928, -1585, -2578, -4029, -6088, -8936, -12788, -17896, -24552, -33091, -43894, -57391, -74064], |  | ||||||
| [0, 6, 28, 73, 155, 304, 573, 1043, 1826, 3066, 4938, 7645, 11413, 16484, 23107, 31527, 41972, 54638, 69672, 87153, 107071], |  | ||||||
| [8, 14, 26, 39, 49, 61, 112, 320, 974, 2687, 6657, 15139, 32341, 66134, 131237, 254984, 487637, 921079, 1723959, 3210704, 5981290], |  | ||||||
| [-3, 6, 32, 88, 209, 468, 1005, 2092, 4276, 8669, 17497, 35106, 69812, 137381, 267702, 517614, 995199, 1904592, 3626038, 6854228, 12829699], |  | ||||||
| [16, 14, 18, 32, 52, 64, 53, 40, 180, 979, 3722, 11247, 29252, 68383, 147421, 297965, 571096, 1046604, 1845466, 3146378, 5207268], |  | ||||||
| [0, 19, 60, 146, 330, 708, 1432, 2721, 4864, 8205, 13096, 19800, 28322, 38142, 47820, 54439, 52848, 34663, -13020, -109250, -281238], |  | ||||||
| [19, 37, 70, 119, 185, 269, 372, 495, 639, 805, 994, 1207, 1445, 1709, 2000, 2319, 2667, 3045, 3454, 3895, 4369], |  | ||||||
| [8, 18, 30, 51, 92, 174, 350, 764, 1787, 4310, 10347, 24225, 54843, 119816, 252855, 516572, 1024178, 1975442, 3715028, 6825207, 12270294], |  | ||||||
| [9, 31, 64, 108, 163, 229, 306, 394, 493, 603, 724, 856, 999, 1153, 1318, 1494, 1681, 1879, 2088, 2308, 2539], |  | ||||||
| [27, 36, 46, 65, 110, 223, 504, 1178, 2725, 6116, 13214, 27417, 54640, 104755, 193632, 345950, 598975, 1007532, 1650430, 2638633, 4125506], |  | ||||||
| [-3, -9, -19, -25, -9, 63, 252, 660, 1449, 2882, 5441, 10155, 19412, 38768, 80661, 171586, 365345, 766697, 1572457, 3141343, 6110353], |  | ||||||
| [9, 13, 16, 19, 30, 81, 256, 730, 1819, 4041, 8188, 15409, 27304, 46029, 74412, 116080, 175597, 258613, 372024, 524143, 724882], |  | ||||||
| [8, 17, 26, 35, 44, 53, 62, 71, 80, 89, 98, 107, 116, 125, 134, 143, 152, 161, 170, 179, 188], |  | ||||||
| [13, 29, 69, 150, 300, 564, 1014, 1770, 3055, 5340, 9688, 18482, 36824, 75023, 152753, 305660, 595433, 1124631, 2057879, 3651414, 6293380], |  | ||||||
| [19, 39, 64, 101, 169, 299, 534, 929, 1551, 2479, 3804, 5629, 8069, 11251, 15314, 20409, 26699, 34359, 43576, 54549, 67489], |  | ||||||
| [26, 48, 79, 119, 168, 226, 293, 369, 454, 548, 651, 763, 884, 1014, 1153, 1301, 1458, 1624, 1799, 1983, 2176], |  | ||||||
| [16, 28, 45, 62, 80, 120, 240, 563, 1330, 3003, 6482, 13603, 28310, 59352, 126262, 272164, 590489, 1279633, 2753130, 5858989, 12311553], |  | ||||||
| [16, 27, 38, 49, 60, 71, 82, 93, 104, 115, 126, 137, 148, 159, 170, 181, 192, 203, 214, 225, 236], |  | ||||||
| [16, 26, 52, 107, 212, 412, 806, 1601, 3204, 6384, 12578, 24502, 47411, 91748, 178785, 352718, 706597, 1437520, 2962583, 6158201, 12843931], |  | ||||||
| [15, 23, 44, 100, 234, 527, 1138, 2396, 4995, 10379, 21457, 43857, 88008, 172421, 328611, 608145, 1092295, 1904695, 3227218, 5318970, 8537806], |  | ||||||
| [19, 35, 67, 125, 219, 359, 555, 817, 1155, 1579, 2099, 2725, 3467, 4335, 5339, 6489, 7795, 9267, 10915, 12749, 14779], |  | ||||||
| [14, 9, -2, -25, -60, -96, -107, -38, 250, 1146, 3714, 10678, 28555, 72047, 172745, 395881, 871826, 1854119, 3824278, 7677249, 15042442], |  | ||||||
| [0, 14, 48, 119, 263, 559, 1175, 2446, 5004, 10002, 19512, 37235, 69743, 128583, 233715, 418934, 740144, 1287614, 2203656, 3707527, 6129775], |  | ||||||
| [-6, -13, -11, 9, 54, 127, 233, 409, 798, 1797, 4331, 10342, 23629, 51210, 105348, 206191, 384454, 682459, 1149765, 1826027, 2697892], |  | ||||||
| [14, 13, 12, 11, 10, 9, 8, 7, 6, 5, 4, 3, 2, 1, 0, -1, -2, -3, -4, -5, -6], |  | ||||||
| [9, 15, 23, 41, 93, 228, 528, 1127, 2265, 4422, 8622, 17094, 34685, 71869, 151157, 320706, 682873, 1452897, 3076233, 6455943, 13379245], |  | ||||||
| [26, 38, 54, 85, 154, 309, 648, 1354, 2736, 5284, 9786, 17637, 31605, 57512, 107535, 206117, 399770, 772302, 1467138, 2718337, 4891512], |  | ||||||
| [7, 2, -4, -11, -19, -28, -38, -49, -61, -74, -88, -103, -119, -136, -154, -173, -193, -214, -236, -259, -283], |  | ||||||
| [17, 40, 72, 120, 202, 355, 665, 1340, 2867, 6327, 14000, 30508, 64985, 135242, 275772, 552897, 1092529, 2128842, 4085140, 7700052, 14210216], |  | ||||||
| [-3, -4, -7, -12, -19, -28, -39, -52, -67, -84, -103, -124, -147, -172, -199, -228, -259, -292, -327, -364, -403], |  | ||||||
| [9, 21, 38, 62, 99, 161, 268, 450, 749, 1221, 1938, 2990, 4487, 6561, 9368, 13090, 17937, 24149, 31998, 41790, 53867], |  | ||||||
| [2, 9, 39, 99, 204, 393, 760, 1519, 3132, 6545, 13600, 27720, 54996, 105835, 197349, 356668, 625334, 1064865, 1763453, 2843561, 4469892], |  | ||||||
| [20, 33, 49, 75, 125, 228, 457, 1004, 2337, 5480, 12453, 26893, 54846, 105671, 192927, 335020, 555266, 880875, 1340177, 1957191, 2742379], |  | ||||||
| [18, 21, 16, 6, 5, 57, 270, 860, 2190, 4774, 9202, 15936, 24945, 35235, 44593, 50493, 54394, 73951, 171296, 510662, 1464845], |  | ||||||
| [10, 11, 18, 38, 71, 100, 71, -142, -790, -2316, -5409, -10945, -19511, -29701, -33227, -2480, 138638, 579164, 1757487, 4641596, 11293649], |  | ||||||
| [25, 33, 43, 67, 138, 323, 742, 1611, 3346, 6797, 13731, 27756, 55976, 111792, 219447, 421300, 789851, 1449309, 2618271, 4700169, 8479106], |  | ||||||
| [27, 42, 62, 88, 120, 169, 286, 615, 1492, 3635, 8492, 18826, 39628, 79522, 153115, 285551, 522357, 951296, 1749478, 3279940, 6279276], |  | ||||||
| [-1, 11, 47, 125, 280, 574, 1106, 2022, 3525, 5885, 9449, 14651, 22022, 32200, 45940, 64124, 87771, 118047, 156275, 203945, 262724], |  | ||||||
| [13, 21, 51, 115, 225, 393, 631, 951, 1365, 1885, 2523, 3291, 4201, 5265, 6495, 7903, 9501, 11301, 13315, 15555, 18033], |  | ||||||
| [20, 35, 53, 83, 140, 245, 425, 713, 1148, 1775, 2645, 3815, 5348, 7313, 9785, 12845, 16580, 21083, 26453, 32795, 40220], |  | ||||||
| [10, 26, 63, 132, 248, 429, 694, 1074, 1663, 2751, 5098, 10427, 22235, 47044, 96239, 188667, 354200, 638496, 1109225, 1864062, 3040786], |  | ||||||
| [6, -1, -9, -15, -17, -13, 13, 141, 635, 2188, 6391, 16606, 39556, 88146, 186315, 377108, 735668, 1389501, 2549183, 4553679, 7935653], |  | ||||||
| [9, 15, 43, 117, 265, 514, 885, 1388, 2017, 2745, 3519, 4255, 4833, 5092, 4825, 3774, 1625, -1997, -7533, -15495, -26471], |  | ||||||
| [7, 22, 41, 65, 106, 207, 489, 1245, 3117, 7431, 16845, 36609, 76972, 157632, 315649, 618971, 1188707, 2234572, 4109585, 7392185, 13006510], |  | ||||||
| [10, 9, 5, -1, 3, 51, 224, 700, 1840, 4321, 9327, 18809, 35825, 64971, 112914, 189038, 306214, 481705, 738217, 1105107, 1619759], |  | ||||||
| [12, 16, 30, 69, 148, 282, 486, 775, 1164, 1668, 2302, 3081, 4020, 5134, 6438, 7947, 9676, 11640, 13854, 16333, 19092], |  | ||||||
| [1, 0, 10, 42, 98, 172, 270, 462, 979, 2368, 5718, 12970, 27324, 53756, 99658, 175614, 296325, 481696, 758098, 1159818, 1730710], |  | ||||||
| [8, 19, 38, 73, 142, 283, 562, 1079, 1973, 3430, 5708, 9217, 14739, 23954, 40566, 72513, 136014, 262573, 510546, 983505, 1858428], |  | ||||||
| [9, 24, 57, 114, 205, 359, 643, 1184, 2197, 4026, 7209, 12582, 21441, 35785, 58667, 94684, 150641, 236428, 366153, 559578, 843909], |  | ||||||
| [8, 14, 22, 32, 44, 58, 74, 92, 112, 134, 158, 184, 212, 242, 274, 308, 344, 382, 422, 464, 508], |  | ||||||
| [24, 34, 44, 54, 64, 74, 84, 94, 104, 114, 124, 134, 144, 154, 164, 174, 184, 194, 204, 214, 224], |  | ||||||
| [16, 30, 63, 126, 233, 405, 686, 1187, 2184, 4316, 8979, 19130, 40965, 87415, 185254, 389023, 807192, 1649322, 3307839, 6494862, 12463897], |  | ||||||
| [-7, -7, 1, 32, 121, 335, 787, 1666, 3321, 6479, 12739, 25563, 52073, 106047, 212569, 414805, 783321, 1428197, 2513885, 4276266, 7040633], |  | ||||||
| [-2, 1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58], |  | ||||||
| [13, 27, 38, 41, 36, 48, 177, 688, 2156, 5707, 13455, 29337, 60698, 121182, 235783, 449463, 842011, 1554867, 2842648, 5177133, 9461476], |  | ||||||
| [15, 42, 93, 182, 326, 549, 884, 1374, 2086, 3178, 5119, 9300, 19562, 45721, 111199, 268798, 632393, 1439844, 3177921, 6832092, 14389654], |  | ||||||
| [7, 28, 73, 151, 265, 408, 559, 679, 707, 556, 109, -785, -2315, -4712, -8253, -13265, -20129, -29284, -41231, -56537, -75839], |  | ||||||
| [8, 5, 13, 42, 97, 177, 284, 446, 766, 1532, 3473, 8340, 20149, 47680, 109278, 241921, 518597, 1082840, 2220086, 4508651, 9140126], |  | ||||||
| [17, 27, 40, 71, 149, 317, 632, 1165, 2001, 3239, 4992, 7387, 10565, 14681, 19904, 26417, 34417, 44115, 55736, 69519, 85717], |  | ||||||
| [24, 37, 47, 65, 117, 257, 594, 1347, 2963, 6367, 13474, 28217, 58615, 120994, 248715, 510261, 1046343, 2144574, 4386122, 8926186, 18016274], |  | ||||||
| [11, 16, 36, 80, 158, 277, 445, 706, 1254, 2711, 6703, 16929, 40991, 93338, 199774, 404089, 777493, 1431666, 2536382, 4342822, 7213860], |  | ||||||
| [0, -2, 8, 48, 141, 321, 657, 1303, 2580, 5096, 9915, 18799, 34571, 61685, 107144, 181982, 303624, 499562, 812938, 1310810, 2096097], |  | ||||||
| [4, 15, 39, 91, 211, 473, 995, 1967, 3741, 7078, 13740, 27774, 58093, 123376, 261026, 543285, 1106377, 2204300, 4310572, 8314176, 15899538], |  | ||||||
| [-7, 6, 36, 87, 163, 272, 446, 788, 1568, 3411, 7651, 16966, 36460, 75419, 150039, 287505, 531891, 952452, 1654990, 2797097, 4608209], |  | ||||||
| [13, 29, 56, 95, 152, 244, 405, 692, 1191, 2023, 3350, 5381, 8378, 12662, 18619, 26706, 37457, 51489, 69508, 92315, 120812], |  | ||||||
| [15, 27, 59, 125, 237, 417, 722, 1283, 2361, 4428, 8300, 15415, 28528, 53504, 103742, 210470, 445527, 969865, 2133765, 4678765, 10135083], |  | ||||||
| [20, 31, 57, 122, 274, 596, 1223, 2377, 4439, 8101, 14695, 26909, 50338, 96812, 191434, 387177, 794467, 1639641, 3377468, 6902112, 13932807], |  | ||||||
| [10, 37, 91, 200, 416, 820, 1528, 2716, 4696, 8091, 14175, 25464, 46666, 86122, 157896, 284700, 501870, 862641, 1445003, 2360456, 3765020], |  | ||||||
| [6, 24, 54, 95, 153, 251, 440, 812, 1516, 2778, 4926, 8421, 13895, 22197, 34448, 52106, 77042, 111628, 158838, 222363, 306741], |  | ||||||
| [9, 24, 49, 84, 125, 162, 193, 281, 693, 2172, 6405, 16762, 39393, 84782, 169869, 320863, 576881, 994560, 1653801, 2664816, 4176661], |  | ||||||
| [3, 10, 23, 57, 149, 386, 945, 2142, 4499, 8866, 16685, 30566, 55492, 101260, 187366, 352765, 675303, 1309938, 2562335, 5026719, 9836291], |  | ||||||
| [15, 29, 55, 109, 226, 481, 1024, 2134, 4299, 8344, 15672, 28779, 52397, 95981, 178896, 340733, 660899, 1294259, 2533505, 4914517, 9388784], |  | ||||||
| [14, 33, 78, 166, 331, 644, 1248, 2423, 4711, 9165, 17861, 34963, 68917, 136884, 273538, 548338, 1099300, 2198986, 4383250, 8701159, 17195603], |  | ||||||
| [7, 5, 5, 7, 11, 17, 25, 35, 47, 61, 77, 95, 115, 137, 161, 187, 215, 245, 277, 311, 347], |  | ||||||
| [0, 2, 9, 21, 38, 60, 87, 119, 156, 198, 245, 297, 354, 416, 483, 555, 632, 714, 801, 893, 990], |  | ||||||
| [8, 11, 29, 79, 200, 478, 1087, 2365, 4957, 10076, 19965, 38689, 73433, 136495, 248086, 439830, 758518, 1269449, 2059289, 3241351, 4974534], |  | ||||||
| [9, 26, 71, 154, 282, 459, 686, 961, 1279, 1632, 2009, 2396, 2776, 3129, 3432, 3659, 3781, 3766, 3579, 3182, 2534], |  | ||||||
| [-8, -9, -1, 23, 70, 147, 261, 419, 628, 895, 1227, 1631, 2114, 2683, 3345, 4107, 4976, 5959, 7063, 8295, 9662], |  | ||||||
| [14, 38, 88, 183, 349, 621, 1047, 1694, 2656, 4064, 6098, 9001, 13095, 18799, 26649, 37320, 51650, 70666, 95612, 127979, 169537], |  | ||||||
| [1, 4, 7, 10, 13, 16, 19, 22, 25, 28, 31, 34, 37, 40, 43, 46, 49, 52, 55, 58, 61], |  | ||||||
| [10, 17, 33, 71, 156, 319, 593, 1016, 1655, 2681, 4550, 8393, 16823, 35591, 76964, 166498, 356232, 749489, 1545759, 3118955, 6149158], |  | ||||||
| [-2, 5, 20, 55, 147, 378, 896, 1945, 3924, 7507, 13868, 25067, 44665, 78648, 136752, 234293, 394618, 652305, 1057252, 1679807, 2617103], |  | ||||||
| [-2, -3, -3, 12, 76, 250, 640, 1443, 3044, 6202, 12405, 24581, 48599, 96524, 193673, 393656, 809674, 1677915, 3482413, 7194006, 14714566], |  | ||||||
| [-5, -2, 2, 11, 40, 131, 388, 1045, 2594, 6015, 13162, 27362, 54272, 103007, 187497, 327953, 552225, 896728, 1406510, 2133961, 3135644], |  | ||||||
| [-1, -2, -3, -4, -5, -6, -7, -8, -9, -10, -11, -12, -13, -14, -15, -16, -17, -18, -19, -20, -21], |  | ||||||
| [6, 23, 51, 90, 140, 201, 273, 356, 450, 555, 671, 798, 936, 1085, 1245, 1416, 1598, 1791, 1995, 2210, 2436], |  | ||||||
| [22, 44, 78, 135, 237, 421, 758, 1410, 2772, 5783, 12540, 27421, 59046, 123639, 250801, 493519, 945638, 1772306, 3262446, 5917591, 10599023], |  | ||||||
| [24, 37, 60, 106, 197, 375, 727, 1435, 2867, 5730, 11311, 21837, 40990, 74618, 131688, 225532, 375442, 608675, 962934, 1489396, 2256363], |  | ||||||
| [12, 20, 49, 112, 222, 392, 635, 964, 1392, 1932, 2597, 3400, 4354, 5472, 6767, 8252, 9940, 11844, 13977, 16352, 18982], |  | ||||||
| [2, 7, 24, 61, 126, 227, 372, 569, 826, 1151, 1552, 2037, 2614, 3291, 4076, 4977, 6002, 7159, 8456, 9901, 11502], |  | ||||||
| [12, 11, 22, 60, 158, 379, 821, 1618, 2953, 5122, 8728, 15159, 27666, 53731, 110255, 234858, 510014, 1112985, 2415218, 5172306, 10872818], |  | ||||||
| [17, 24, 49, 120, 294, 677, 1456, 2952, 5715, 10719, 19792, 36560, 68444, 130715, 254454, 501802, 994701, 1968430, 3870295, 7539464, 14530122], |  | ||||||
| [25, 40, 65, 122, 253, 535, 1117, 2293, 4630, 9184, 17861, 34010, 63355, 115342, 204806, 353380, 588983, 939636, 1414390, 1959381, 2372399], |  | ||||||
| [25, 52, 90, 138, 195, 260, 332, 410, 493, 580, 670, 762, 855, 948, 1040, 1130, 1217, 1300, 1378, 1450, 1515], |  | ||||||
| [0, 2, 24, 87, 221, 468, 885, 1547, 2550, 4014, 6086, 8943, 12795, 17888, 24507, 32979, 43676, 57018, 73476, 93575, 117897], |  | ||||||
| [19, 32, 61, 117, 214, 369, 603, 947, 1457, 2242, 3509, 5629, 9228, 15307, 25395, 41739, 67535, 107204, 166717, 253973, 379234], |  | ||||||
| [23, 32, 38, 44, 60, 103, 197, 373, 669, 1130, 1808, 2762, 4058, 5769, 7975, 10763, 14227, 18468, 23594, 29720, 36968], |  | ||||||
| [4, 11, 19, 35, 76, 180, 439, 1069, 2539, 5797, 12662, 26510, 53500, 104832, 201057, 380617, 717363, 1357502, 2598934, 5062820, 10063437], |  | ||||||
| [10, 19, 23, 14, -24, -121, -314, -610, -897, -761, 888, 6598, 22021, 59353, 144459, 331532, 733040, 1580211, 3343069, 6963206, 14293206], |  | ||||||
| [3, 17, 48, 105, 201, 354, 600, 1028, 1847, 3495, 6800, 13203, 25053, 45984, 81384, 138966, 229451, 367373, 572016, 868493, 1288977], |  | ||||||
| [-4, -3, 10, 49, 132, 289, 583, 1147, 2252, 4449, 8873, 17855, 36050, 72341, 142802, 274973, 513588, 927669, 1618516, 2727541, 4442064], |  | ||||||
| [19, 39, 74, 133, 236, 422, 765, 1415, 2696, 5313, 10758, 22099, 45557, 93732, 192181, 392487, 797276, 1606233, 3197558, 6267150, 12058959], |  | ||||||
| [-7, -10, -13, -16, -19, -22, -25, -28, -31, -34, -37, -40, -43, -46, -49, -52, -55, -58, -61, -64, -67], |  | ||||||
| [21, 44, 74, 122, 221, 432, 849, 1603, 2865, 4848, 7808, 12044, 17897, 25748, 36015, 49149, 65629, 85956, 110646, 140222, 175205], |  | ||||||
| [18, 26, 39, 66, 116, 198, 321, 494, 726, 1026, 1403, 1866, 2424, 3086, 3861, 4758, 5786, 6954, 8271, 9746, 11388], |  | ||||||
| [21, 40, 78, 164, 356, 766, 1605, 3259, 6420, 12322, 23187, 43106, 79841, 148586, 279840, 535679, 1042583, 2055644, 4079972, 8092520, 15934162], |  | ||||||
| [20, 37, 62, 95, 136, 185, 242, 307, 380, 461, 550, 647, 752, 865, 986, 1115, 1252, 1397, 1550, 1711, 1880], |  | ||||||
| [0, 2, 15, 48, 121, 283, 642, 1407, 2942, 5832, 10961, 19602, 33519, 55081, 87388, 134409, 201132, 293726, 419715, 588164, 809877], |  | ||||||
| [8, 13, 15, 13, 15, 42, 131, 338, 755, 1592, 3455, 8105, 20256, 51423, 127543, 303162, 686530, 1482119, 3060047, 6065853, 11589253], |  | ||||||
| [12, 30, 59, 93, 125, 157, 214, 361, 722, 1498, 2987, 5640, 10262, 18599, 34737, 67942, 137708, 281702, 566759, 1101727, 2048287], |  | ||||||
| [-3, 10, 49, 127, 264, 492, 863, 1464, 2440, 4028, 6633, 11078, 19417, 37246, 79490, 183510, 436575, 1030078, 2361565, 5219525, 11107638], |  | ||||||
| [16, 33, 54, 90, 174, 378, 846, 1849, 3867, 7702, 14625, 26559, 46299, 77769, 126315, 199032, 305122, 456279, 667096, 955488, 1343124], |  | ||||||
| [19, 43, 88, 176, 343, 647, 1194, 2198, 4111, 7897, 15598, 31482, 64323, 131829, 269087, 544536, 1090317, 2160903, 4249054, 8320480, 16296305], |  | ||||||
| [22, 41, 67, 112, 212, 447, 969, 2039, 4084, 7808, 14445, 26357, 48398, 90840, 175255, 345646, 688410, 1366499, 2675535, 5132758, 9613680], |  | ||||||
| [12, 25, 47, 89, 162, 277, 445, 677, 984, 1377, 1867, 2465, 3182, 4029, 5017, 6157, 7460, 8937, 10599, 12457, 14522], |  | ||||||
| [5, 0, -7, -1, 49, 197, 534, 1225, 2596, 5304, 10634, 21018, 41034, 79540, 154415, 302881, 602927, 1215420, 2462671, 4968277, 9895903], |  | ||||||
| [-9, -14, -15, 1, 65, 237, 627, 1430, 2974, 5775, 10594, 18507, 31038, 50464, 80459, 127293, 201992, 324897, 538038, 942790, 1811370], |  | ||||||
| [2, 4, 0, -10, -11, 41, 233, 709, 1684, 3458, 6430, 11112, 18143, 28303, 42527, 61919, 87766, 121552, 164972, 219946, 288633], |  | ||||||
| [7, 26, 67, 150, 317, 656, 1342, 2714, 5434, 10819, 21508, 42739, 84695, 166680, 324376, 622208, 1174037, 2177180, 3967333, 7105608, 12513901], |  | ||||||
| [12, 22, 38, 64, 119, 247, 532, 1123, 2276, 4424, 8309, 15295, 28210, 53572, 107038, 225653, 493336, 1090494, 2385292, 5093646, 10548309], |  | ||||||
| [14, 12, 10, 19, 59, 159, 357, 700, 1244, 2054, 3204, 4777, 6865, 9569, 12999, 17274, 22522, 28880, 36494, 45519, 56119], |  | ||||||
| [2, 14, 43, 115, 280, 632, 1341, 2710, 5286, 10076, 18959, 35465, 66244, 123814, 231609, 433008, 806986, 1494370, 2740499, 4962479, 8852304], |  | ||||||
| [16, 36, 82, 165, 307, 556, 1007, 1841, 3405, 6374, 12066, 23034, 44170, 84820, 163047, 314653, 612780, 1210538, 2432293, 4964944, 10250289], |  | ||||||
| [10, 8, 10, 20, 58, 188, 557, 1451, 3382, 7223, 14402, 27147, 48738, 83665, 137509, 216252, 324578, 462546, 619794, 766166, 837338], |  | ||||||
| [9, 22, 46, 85, 154, 288, 571, 1200, 2601, 5616, 11777, 23672, 45407, 83249, 146871, 252546, 431725, 752582, 1369644, 2629419, 5280540], |  | ||||||
| [16, 20, 35, 87, 210, 449, 878, 1653, 3133, 6129, 12402, 25663, 53593, 111897, 232285, 477770, 971150, 1946550, 3840269, 7447123, 14183748], |  | ||||||
| [22, 44, 94, 197, 405, 821, 1643, 3250, 6376, 12465, 24392, 47913, 94545, 187207, 371116, 734593, 1448530, 2841203, 5540681, 10747619, 20760527], |  | ||||||
| [4, 15, 42, 101, 226, 487, 1024, 2115, 4318, 8768, 17778, 36006, 72647, 145461, 288069, 563007, 1084756, 2059673, 3853830, 7105719, 12909204], |  | ||||||
| [15, 23, 48, 115, 271, 611, 1319, 2724, 5371, 10107, 18182, 31365, 52075, 83527, 129893, 196478, 289911, 418351, 591708, 821879, 1122999], |  | ||||||
| [7, 6, 17, 48, 107, 202, 341, 532, 783, 1102, 1497, 1976, 2547, 3218, 3997, 4892, 5911, 7062, 8353, 9792, 11387], |  | ||||||
| [-4, 3, 25, 70, 153, 309, 619, 1270, 2682, 5750, 12268, 25628, 51937, 101824, 193553, 358902, 655155, 1190487, 2177891, 4048307, 7684230], |  | ||||||
| [-2, 4, 19, 40, 65, 112, 264, 766, 2210, 5847, 14057, 30979, 63235, 120551, 215877, 364424, 581237, 878545, 1269600, 1800115, 2661524], |  | ||||||
| [18, 30, 45, 58, 64, 58, 35, -10, -82, -186, -327, -510, -740, -1022, -1361, -1762, -2230, -2770, -3387, -4086, -4872], |  | ||||||
| [8, 20, 59, 143, 292, 523, 844, 1247, 1700, 2138, 2453, 2483, 2000, 697, -1826, -6077, -12688, -22432, -36241, -55225, -80692], |  | ||||||
| [11, 12, 8, -7, -28, -26, 65, 361, 1041, 2360, 4662, 8393, 14114, 22514, 34423, 50825, 72871, 101892, 139412, 187161, 247088], |  | ||||||
| [6, 6, 19, 54, 113, 189, 264, 307, 272, 96, -303, -1028, -2205, -3985, -6546, -10095, -14870, -21142, -29217, -39438, -52187], |  | ||||||
| [26, 40, 63, 112, 222, 455, 906, 1708, 3036, 5116, 8278, 13187, 21602, 38439, 76677, 167925, 383519, 874229, 1941697, 4162964, 8603981], |  | ||||||
| [12, 19, 31, 58, 110, 209, 412, 843, 1741, 3551, 7128, 14215, 28539, 58216, 120779, 253209, 531098, 1103839, 2256973, 4519124, 8840092], |  | ||||||
| [14, 28, 47, 71, 102, 153, 266, 539, 1162, 2462, 4957, 9419, 16946, 29043, 47712, 75551, 115862, 172768, 251339, 357727, 499310], |  | ||||||
| [19, 22, 38, 89, 208, 457, 958, 1941, 3833, 7447, 14380, 27796, 53861, 104226, 200137, 378978, 704206, 1279303, 2264473, 3888958, 6437241], |  | ||||||
| [20, 38, 83, 177, 353, 665, 1204, 2120, 3650, 6152, 10145, 16355, 25767, 39683, 59786, 88210, 127616, 181274, 253151, 348005, 471485], |  | ||||||
| [18, 33, 52, 75, 103, 147, 258, 596, 1573, 4137, 10313, 24197, 53757, 114135, 233848, 466630, 914030, 1767831, 3387708, 6439669, 12137157], |  | ||||||
| [16, 32, 61, 98, 136, 164, 171, 173, 281, 836, 2678, 7743, 20501, 51456, 125378, 299753, 704238, 1621680, 3648963, 8007452, 17127734], |  | ||||||
| [0, 9, 25, 62, 141, 293, 566, 1037, 1844, 3286, 6097, 12096, 25583, 56164, 124287, 271914, 582905, 1221701, 2506400, 5046590, 10003946], |  | ||||||
| [-4, 12, 56, 141, 280, 486, 772, 1151, 1636, 2240, 2976, 3857, 4896, 6106, 7500, 9091, 10892, 12916, 15176, 17685, 20456] |  | ||||||
| ]). |  | ||||||
							
								
								
									
										200
									
								
								09/input.txt
									
									
									
									
									
								
							
							
						
						
									
										200
									
								
								09/input.txt
									
									
									
									
									
								
							| @@ -1,200 +0,0 @@ | |||||||
| 28 38 58 115 255 558 1167 2343 4564 8699 16328 30378 56447 105549 199601 381868 735876 1418100 2712150 5115341 9472583 |  | ||||||
| 24 34 56 103 191 343 593 990 1602 2520 3862 5777 8449 12101 16999 23456 31836 42558 56100 73003 93875 |  | ||||||
| 12 30 66 118 187 291 486 901 1807 3760 7885 16402 33536 67001 130303 246169 451478 804146 1392500 2347766 3860393 |  | ||||||
| 11 7 -1 -10 4 101 392 1052 2337 4631 8595 15584 28661 54781 109041 222274 453659 910327 1775963 3349730 6094694 |  | ||||||
| 13 26 56 110 200 360 677 1347 2785 5847 12267 25493 52275 105732 211455 420013 833076 1658291 3323777 6713131 13636877 |  | ||||||
| 24 36 50 68 92 124 166 220 288 372 474 596 740 908 1102 1324 1576 1860 2178 2532 2924 |  | ||||||
| 4 10 18 35 81 207 523 1232 2664 5299 9766 16819 27345 42607 65306 103013 177906 352348 792280 1916515 4732055 |  | ||||||
| 2 4 15 46 115 246 479 915 1841 4022 9326 21995 51143 115539 252570 534754 1099830 2205374 4328183 8346246 15873877 |  | ||||||
| 6 16 41 104 240 508 1016 1959 3670 6684 11815 20246 33632 54216 84958 129677 193206 281560 402117 563812 777344 |  | ||||||
| 10 24 59 127 240 410 649 969 1382 1900 2535 3299 4204 5262 6485 7885 9474 11264 13267 15495 17960 |  | ||||||
| 1 3 19 65 161 334 621 1072 1753 2749 4167 6139 8825 12416 17137 23250 31057 40903 53179 68325 86833 |  | ||||||
| 1 3 14 46 118 256 493 869 1431 2233 3336 4808 6724 9166 12223 15991 20573 26079 32626 40338 49346 |  | ||||||
| 5 20 54 111 200 339 551 863 1338 2203 4189 9270 22068 52271 118490 254073 515553 994838 1837662 3275301 5689494 |  | ||||||
| 11 19 37 74 152 315 630 1176 2019 3189 4728 6991 11599 23863 58350 151043 385257 945993 2232085 5082986 11226568 |  | ||||||
| -6 -5 -1 6 16 29 45 64 86 111 139 170 204 241 281 324 370 419 471 526 584 |  | ||||||
| 19 44 79 123 175 234 299 369 443 520 599 679 759 838 915 989 1059 1124 1183 1235 1279 |  | ||||||
| 20 26 41 76 144 261 459 824 1572 3189 6707 14297 30581 65483 140200 299218 633600 1324592 2722729 5487182 10824554 |  | ||||||
| 2 13 49 134 316 686 1400 2714 5060 9211 16601 29879 53781 96407 171038 298877 513930 873445 1482345 2550372 4520094 |  | ||||||
| 7 22 55 116 218 381 645 1090 1862 3209 5540 9533 16335 27918 47680 81409 138761 235440 396309 659706 1083288 |  | ||||||
| 23 34 43 54 73 105 151 202 234 223 220 555 2284 8074 23894 62315 149406 340397 757350 1681105 3771572 |  | ||||||
| -2 9 31 72 157 346 769 1701 3724 8065 17266 36441 75513 153008 302220 580858 1085650 1973817 3493849 6028622 10154597 |  | ||||||
| 17 35 83 175 326 554 878 1305 1800 2233 2292 1349 -1702 -8485 -20570 -37084 -47977 -18173 145725 659887 1980386 |  | ||||||
| 6 19 49 119 273 598 1257 2530 4856 8858 15310 24963 38082 53479 66865 68818 44405 -18660 -94790 -14282 809438 |  | ||||||
| 17 21 22 20 15 7 -4 -18 -35 -55 -78 -104 -133 -165 -200 -238 -279 -323 -370 -420 -473 |  | ||||||
| 8 23 59 139 312 672 1383 2710 5056 9005 15371 25253 40096 61758 92583 135480 194008 272467 375995 510671 683624 |  | ||||||
| 9 16 34 63 103 154 216 289 373 468 574 691 819 958 1108 1269 1441 1624 1818 2023 2239 |  | ||||||
| 8 19 59 140 275 481 794 1315 2308 4381 8817 18206 37692 77458 157694 318613 640892 1287715 2591041 5226414 10560561 |  | ||||||
| 8 21 37 57 82 107 117 88 -4 -163 -339 -377 54 1555 5117 12270 25264 47285 82709 137397 219034 |  | ||||||
| 22 34 44 52 58 62 64 64 62 58 52 44 34 22 8 -8 -26 -46 -68 -92 -118 |  | ||||||
| 28 57 114 220 416 779 1446 2651 4785 8494 14832 25483 43057 71450 116238 185052 287858 437047 647230 934638 1316054 |  | ||||||
| 16 20 24 28 32 36 40 44 48 52 56 60 64 68 72 76 80 84 88 92 96 |  | ||||||
| 28 39 48 62 97 180 347 630 1022 1413 1518 905 -557 -1064 7553 50137 189888 570667 1494764 3559032 7883557 |  | ||||||
| 5 0 3 30 106 262 542 1035 1947 3728 7269 14184 27192 50614 91000 157901 264801 430224 679031 1043922 1567158 |  | ||||||
| 4 21 55 119 239 461 864 1591 2913 5356 9967 18894 36631 72557 145803 294037 588486 1158435 2229571 4181885 7634411 |  | ||||||
| 8 11 15 33 81 182 384 805 1728 3777 8206 17321 35023 67400 123199 213865 352632 551879 817609 1139457 1474069 |  | ||||||
| 6 15 30 69 162 358 754 1560 3223 6658 13679 27799 55705 109973 214073 411584 783020 1476065 2758724 5110417 9373988 |  | ||||||
| 18 26 37 54 84 138 231 382 614 954 1433 2086 2952 4074 5499 7278 9466 12122 15309 19094 23548 |  | ||||||
| 3 -2 -7 -12 -17 -22 -27 -32 -37 -42 -47 -52 -57 -62 -67 -72 -77 -82 -87 -92 -97 |  | ||||||
| 16 32 61 121 242 466 847 1451 2356 3652 5441 7837 10966 14966 19987 26191 33752 42856 53701 66497 81466 |  | ||||||
| 13 35 79 160 302 554 1015 1865 3399 6061 10475 17470 28096 43628 65555 95551 135425 187047 252247 332684 429682 |  | ||||||
| 13 6 -9 -20 11 156 538 1364 2981 5967 11279 20495 36207 62647 106658 179157 297277 487420 789503 1262734 1993315 |  | ||||||
| 14 11 18 51 141 348 790 1714 3660 7803 16602 34939 71995 144184 279550 524126 950858 1671811 2854498 4743307 7687145 |  | ||||||
| 2 7 22 56 123 242 437 737 1176 1793 2632 3742 5177 6996 9263 12047 15422 19467 24266 29908 36487 |  | ||||||
| 19 34 68 128 220 349 519 733 993 1300 1654 2054 2498 2983 3505 4059 4639 5238 5848 6460 7064 |  | ||||||
| 21 48 85 132 195 292 468 836 1684 3739 8772 20876 48964 111327 243473 510946 1029407 1994954 3728471 6738732 11810049 |  | ||||||
| 11 27 55 108 210 394 696 1143 1733 2405 2997 3190 2436 -132 -5810 -16455 -34641 -63841 -108637 -174960 -270362 |  | ||||||
| 12 12 12 25 90 292 791 1869 4012 8064 15537 29266 54829 103647 199701 393835 793523 1623291 3344337 6885726 14081159 |  | ||||||
| 5 13 31 72 164 358 736 1410 2499 4070 6039 8076 9700 11088 15835 38309 120943 371965 1044017 2693426 6497234 |  | ||||||
| -1 -4 4 46 162 411 867 1607 2698 4206 6273 9338 14615 24985 46510 90835 178809 345728 648682 1176574 2063472 |  | ||||||
| 8 16 23 40 92 216 455 847 1408 2108 2839 3374 3316 2036 -1401 -8323 -20552 -40520 -71401 -117260 -183220 |  | ||||||
| 27 54 93 143 215 340 581 1059 2009 3892 7603 14833 28665 54510 101519 184641 327535 566586 956321 1576571 2541779 |  | ||||||
| 18 25 37 63 114 201 333 515 746 1017 1309 1591 1818 1929 1845 1467 674 -679 -2763 -5777 -9950 |  | ||||||
| 11 23 58 131 266 508 956 1834 3618 7240 14408 28142 53779 101035 188408 352630 668776 1292502 2547568 5104551 10339633 |  | ||||||
| 20 30 55 112 230 464 919 1792 3444 6514 12092 22012 39486 70717 129039 244932 488666 1018738 2181538 4711697 10130222 |  | ||||||
| 8 15 22 29 36 43 50 57 64 71 78 85 92 99 106 113 120 127 134 141 148 |  | ||||||
| 8 17 18 5 -32 -110 -256 -510 -928 -1585 -2578 -4029 -6088 -8936 -12788 -17896 -24552 -33091 -43894 -57391 -74064 |  | ||||||
| 0 6 28 73 155 304 573 1043 1826 3066 4938 7645 11413 16484 23107 31527 41972 54638 69672 87153 107071 |  | ||||||
| 8 14 26 39 49 61 112 320 974 2687 6657 15139 32341 66134 131237 254984 487637 921079 1723959 3210704 5981290 |  | ||||||
| -3 6 32 88 209 468 1005 2092 4276 8669 17497 35106 69812 137381 267702 517614 995199 1904592 3626038 6854228 12829699 |  | ||||||
| 16 14 18 32 52 64 53 40 180 979 3722 11247 29252 68383 147421 297965 571096 1046604 1845466 3146378 5207268 |  | ||||||
| 0 19 60 146 330 708 1432 2721 4864 8205 13096 19800 28322 38142 47820 54439 52848 34663 -13020 -109250 -281238 |  | ||||||
| 19 37 70 119 185 269 372 495 639 805 994 1207 1445 1709 2000 2319 2667 3045 3454 3895 4369 |  | ||||||
| 8 18 30 51 92 174 350 764 1787 4310 10347 24225 54843 119816 252855 516572 1024178 1975442 3715028 6825207 12270294 |  | ||||||
| 9 31 64 108 163 229 306 394 493 603 724 856 999 1153 1318 1494 1681 1879 2088 2308 2539 |  | ||||||
| 27 36 46 65 110 223 504 1178 2725 6116 13214 27417 54640 104755 193632 345950 598975 1007532 1650430 2638633 4125506 |  | ||||||
| -3 -9 -19 -25 -9 63 252 660 1449 2882 5441 10155 19412 38768 80661 171586 365345 766697 1572457 3141343 6110353 |  | ||||||
| 9 13 16 19 30 81 256 730 1819 4041 8188 15409 27304 46029 74412 116080 175597 258613 372024 524143 724882 |  | ||||||
| 8 17 26 35 44 53 62 71 80 89 98 107 116 125 134 143 152 161 170 179 188 |  | ||||||
| 13 29 69 150 300 564 1014 1770 3055 5340 9688 18482 36824 75023 152753 305660 595433 1124631 2057879 3651414 6293380 |  | ||||||
| 19 39 64 101 169 299 534 929 1551 2479 3804 5629 8069 11251 15314 20409 26699 34359 43576 54549 67489 |  | ||||||
| 26 48 79 119 168 226 293 369 454 548 651 763 884 1014 1153 1301 1458 1624 1799 1983 2176 |  | ||||||
| 16 28 45 62 80 120 240 563 1330 3003 6482 13603 28310 59352 126262 272164 590489 1279633 2753130 5858989 12311553 |  | ||||||
| 16 27 38 49 60 71 82 93 104 115 126 137 148 159 170 181 192 203 214 225 236 |  | ||||||
| 16 26 52 107 212 412 806 1601 3204 6384 12578 24502 47411 91748 178785 352718 706597 1437520 2962583 6158201 12843931 |  | ||||||
| 15 23 44 100 234 527 1138 2396 4995 10379 21457 43857 88008 172421 328611 608145 1092295 1904695 3227218 5318970 8537806 |  | ||||||
| 19 35 67 125 219 359 555 817 1155 1579 2099 2725 3467 4335 5339 6489 7795 9267 10915 12749 14779 |  | ||||||
| 14 9 -2 -25 -60 -96 -107 -38 250 1146 3714 10678 28555 72047 172745 395881 871826 1854119 3824278 7677249 15042442 |  | ||||||
| 0 14 48 119 263 559 1175 2446 5004 10002 19512 37235 69743 128583 233715 418934 740144 1287614 2203656 3707527 6129775 |  | ||||||
| -6 -13 -11 9 54 127 233 409 798 1797 4331 10342 23629 51210 105348 206191 384454 682459 1149765 1826027 2697892 |  | ||||||
| 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0 -1 -2 -3 -4 -5 -6 |  | ||||||
| 9 15 23 41 93 228 528 1127 2265 4422 8622 17094 34685 71869 151157 320706 682873 1452897 3076233 6455943 13379245 |  | ||||||
| 26 38 54 85 154 309 648 1354 2736 5284 9786 17637 31605 57512 107535 206117 399770 772302 1467138 2718337 4891512 |  | ||||||
| 7 2 -4 -11 -19 -28 -38 -49 -61 -74 -88 -103 -119 -136 -154 -173 -193 -214 -236 -259 -283 |  | ||||||
| 17 40 72 120 202 355 665 1340 2867 6327 14000 30508 64985 135242 275772 552897 1092529 2128842 4085140 7700052 14210216 |  | ||||||
| -3 -4 -7 -12 -19 -28 -39 -52 -67 -84 -103 -124 -147 -172 -199 -228 -259 -292 -327 -364 -403 |  | ||||||
| 9 21 38 62 99 161 268 450 749 1221 1938 2990 4487 6561 9368 13090 17937 24149 31998 41790 53867 |  | ||||||
| 2 9 39 99 204 393 760 1519 3132 6545 13600 27720 54996 105835 197349 356668 625334 1064865 1763453 2843561 4469892 |  | ||||||
| 20 33 49 75 125 228 457 1004 2337 5480 12453 26893 54846 105671 192927 335020 555266 880875 1340177 1957191 2742379 |  | ||||||
| 18 21 16 6 5 57 270 860 2190 4774 9202 15936 24945 35235 44593 50493 54394 73951 171296 510662 1464845 |  | ||||||
| 10 11 18 38 71 100 71 -142 -790 -2316 -5409 -10945 -19511 -29701 -33227 -2480 138638 579164 1757487 4641596 11293649 |  | ||||||
| 25 33 43 67 138 323 742 1611 3346 6797 13731 27756 55976 111792 219447 421300 789851 1449309 2618271 4700169 8479106 |  | ||||||
| 27 42 62 88 120 169 286 615 1492 3635 8492 18826 39628 79522 153115 285551 522357 951296 1749478 3279940 6279276 |  | ||||||
| -1 11 47 125 280 574 1106 2022 3525 5885 9449 14651 22022 32200 45940 64124 87771 118047 156275 203945 262724 |  | ||||||
| 13 21 51 115 225 393 631 951 1365 1885 2523 3291 4201 5265 6495 7903 9501 11301 13315 15555 18033 |  | ||||||
| 20 35 53 83 140 245 425 713 1148 1775 2645 3815 5348 7313 9785 12845 16580 21083 26453 32795 40220 |  | ||||||
| 10 26 63 132 248 429 694 1074 1663 2751 5098 10427 22235 47044 96239 188667 354200 638496 1109225 1864062 3040786 |  | ||||||
| 6 -1 -9 -15 -17 -13 13 141 635 2188 6391 16606 39556 88146 186315 377108 735668 1389501 2549183 4553679 7935653 |  | ||||||
| 9 15 43 117 265 514 885 1388 2017 2745 3519 4255 4833 5092 4825 3774 1625 -1997 -7533 -15495 -26471 |  | ||||||
| 7 22 41 65 106 207 489 1245 3117 7431 16845 36609 76972 157632 315649 618971 1188707 2234572 4109585 7392185 13006510 |  | ||||||
| 10 9 5 -1 3 51 224 700 1840 4321 9327 18809 35825 64971 112914 189038 306214 481705 738217 1105107 1619759 |  | ||||||
| 12 16 30 69 148 282 486 775 1164 1668 2302 3081 4020 5134 6438 7947 9676 11640 13854 16333 19092 |  | ||||||
| 1 0 10 42 98 172 270 462 979 2368 5718 12970 27324 53756 99658 175614 296325 481696 758098 1159818 1730710 |  | ||||||
| 8 19 38 73 142 283 562 1079 1973 3430 5708 9217 14739 23954 40566 72513 136014 262573 510546 983505 1858428 |  | ||||||
| 9 24 57 114 205 359 643 1184 2197 4026 7209 12582 21441 35785 58667 94684 150641 236428 366153 559578 843909 |  | ||||||
| 8 14 22 32 44 58 74 92 112 134 158 184 212 242 274 308 344 382 422 464 508 |  | ||||||
| 24 34 44 54 64 74 84 94 104 114 124 134 144 154 164 174 184 194 204 214 224 |  | ||||||
| 16 30 63 126 233 405 686 1187 2184 4316 8979 19130 40965 87415 185254 389023 807192 1649322 3307839 6494862 12463897 |  | ||||||
| -7 -7 1 32 121 335 787 1666 3321 6479 12739 25563 52073 106047 212569 414805 783321 1428197 2513885 4276266 7040633 |  | ||||||
| -2 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 |  | ||||||
| 13 27 38 41 36 48 177 688 2156 5707 13455 29337 60698 121182 235783 449463 842011 1554867 2842648 5177133 9461476 |  | ||||||
| 15 42 93 182 326 549 884 1374 2086 3178 5119 9300 19562 45721 111199 268798 632393 1439844 3177921 6832092 14389654 |  | ||||||
| 7 28 73 151 265 408 559 679 707 556 109 -785 -2315 -4712 -8253 -13265 -20129 -29284 -41231 -56537 -75839 |  | ||||||
| 8 5 13 42 97 177 284 446 766 1532 3473 8340 20149 47680 109278 241921 518597 1082840 2220086 4508651 9140126 |  | ||||||
| 17 27 40 71 149 317 632 1165 2001 3239 4992 7387 10565 14681 19904 26417 34417 44115 55736 69519 85717 |  | ||||||
| 24 37 47 65 117 257 594 1347 2963 6367 13474 28217 58615 120994 248715 510261 1046343 2144574 4386122 8926186 18016274 |  | ||||||
| 11 16 36 80 158 277 445 706 1254 2711 6703 16929 40991 93338 199774 404089 777493 1431666 2536382 4342822 7213860 |  | ||||||
| 0 -2 8 48 141 321 657 1303 2580 5096 9915 18799 34571 61685 107144 181982 303624 499562 812938 1310810 2096097 |  | ||||||
| 4 15 39 91 211 473 995 1967 3741 7078 13740 27774 58093 123376 261026 543285 1106377 2204300 4310572 8314176 15899538 |  | ||||||
| -7 6 36 87 163 272 446 788 1568 3411 7651 16966 36460 75419 150039 287505 531891 952452 1654990 2797097 4608209 |  | ||||||
| 13 29 56 95 152 244 405 692 1191 2023 3350 5381 8378 12662 18619 26706 37457 51489 69508 92315 120812 |  | ||||||
| 15 27 59 125 237 417 722 1283 2361 4428 8300 15415 28528 53504 103742 210470 445527 969865 2133765 4678765 10135083 |  | ||||||
| 20 31 57 122 274 596 1223 2377 4439 8101 14695 26909 50338 96812 191434 387177 794467 1639641 3377468 6902112 13932807 |  | ||||||
| 10 37 91 200 416 820 1528 2716 4696 8091 14175 25464 46666 86122 157896 284700 501870 862641 1445003 2360456 3765020 |  | ||||||
| 6 24 54 95 153 251 440 812 1516 2778 4926 8421 13895 22197 34448 52106 77042 111628 158838 222363 306741 |  | ||||||
| 9 24 49 84 125 162 193 281 693 2172 6405 16762 39393 84782 169869 320863 576881 994560 1653801 2664816 4176661 |  | ||||||
| 3 10 23 57 149 386 945 2142 4499 8866 16685 30566 55492 101260 187366 352765 675303 1309938 2562335 5026719 9836291 |  | ||||||
| 15 29 55 109 226 481 1024 2134 4299 8344 15672 28779 52397 95981 178896 340733 660899 1294259 2533505 4914517 9388784 |  | ||||||
| 14 33 78 166 331 644 1248 2423 4711 9165 17861 34963 68917 136884 273538 548338 1099300 2198986 4383250 8701159 17195603 |  | ||||||
| 7 5 5 7 11 17 25 35 47 61 77 95 115 137 161 187 215 245 277 311 347 |  | ||||||
| 0 2 9 21 38 60 87 119 156 198 245 297 354 416 483 555 632 714 801 893 990 |  | ||||||
| 8 11 29 79 200 478 1087 2365 4957 10076 19965 38689 73433 136495 248086 439830 758518 1269449 2059289 3241351 4974534 |  | ||||||
| 9 26 71 154 282 459 686 961 1279 1632 2009 2396 2776 3129 3432 3659 3781 3766 3579 3182 2534 |  | ||||||
| -8 -9 -1 23 70 147 261 419 628 895 1227 1631 2114 2683 3345 4107 4976 5959 7063 8295 9662 |  | ||||||
| 14 38 88 183 349 621 1047 1694 2656 4064 6098 9001 13095 18799 26649 37320 51650 70666 95612 127979 169537 |  | ||||||
| 1 4 7 10 13 16 19 22 25 28 31 34 37 40 43 46 49 52 55 58 61 |  | ||||||
| 10 17 33 71 156 319 593 1016 1655 2681 4550 8393 16823 35591 76964 166498 356232 749489 1545759 3118955 6149158 |  | ||||||
| -2 5 20 55 147 378 896 1945 3924 7507 13868 25067 44665 78648 136752 234293 394618 652305 1057252 1679807 2617103 |  | ||||||
| -2 -3 -3 12 76 250 640 1443 3044 6202 12405 24581 48599 96524 193673 393656 809674 1677915 3482413 7194006 14714566 |  | ||||||
| -5 -2 2 11 40 131 388 1045 2594 6015 13162 27362 54272 103007 187497 327953 552225 896728 1406510 2133961 3135644 |  | ||||||
| -1 -2 -3 -4 -5 -6 -7 -8 -9 -10 -11 -12 -13 -14 -15 -16 -17 -18 -19 -20 -21 |  | ||||||
| 6 23 51 90 140 201 273 356 450 555 671 798 936 1085 1245 1416 1598 1791 1995 2210 2436 |  | ||||||
| 22 44 78 135 237 421 758 1410 2772 5783 12540 27421 59046 123639 250801 493519 945638 1772306 3262446 5917591 10599023 |  | ||||||
| 24 37 60 106 197 375 727 1435 2867 5730 11311 21837 40990 74618 131688 225532 375442 608675 962934 1489396 2256363 |  | ||||||
| 12 20 49 112 222 392 635 964 1392 1932 2597 3400 4354 5472 6767 8252 9940 11844 13977 16352 18982 |  | ||||||
| 2 7 24 61 126 227 372 569 826 1151 1552 2037 2614 3291 4076 4977 6002 7159 8456 9901 11502 |  | ||||||
| 12 11 22 60 158 379 821 1618 2953 5122 8728 15159 27666 53731 110255 234858 510014 1112985 2415218 5172306 10872818 |  | ||||||
| 17 24 49 120 294 677 1456 2952 5715 10719 19792 36560 68444 130715 254454 501802 994701 1968430 3870295 7539464 14530122 |  | ||||||
| 25 40 65 122 253 535 1117 2293 4630 9184 17861 34010 63355 115342 204806 353380 588983 939636 1414390 1959381 2372399 |  | ||||||
| 25 52 90 138 195 260 332 410 493 580 670 762 855 948 1040 1130 1217 1300 1378 1450 1515 |  | ||||||
| 0 2 24 87 221 468 885 1547 2550 4014 6086 8943 12795 17888 24507 32979 43676 57018 73476 93575 117897 |  | ||||||
| 19 32 61 117 214 369 603 947 1457 2242 3509 5629 9228 15307 25395 41739 67535 107204 166717 253973 379234 |  | ||||||
| 23 32 38 44 60 103 197 373 669 1130 1808 2762 4058 5769 7975 10763 14227 18468 23594 29720 36968 |  | ||||||
| 4 11 19 35 76 180 439 1069 2539 5797 12662 26510 53500 104832 201057 380617 717363 1357502 2598934 5062820 10063437 |  | ||||||
| 10 19 23 14 -24 -121 -314 -610 -897 -761 888 6598 22021 59353 144459 331532 733040 1580211 3343069 6963206 14293206 |  | ||||||
| 3 17 48 105 201 354 600 1028 1847 3495 6800 13203 25053 45984 81384 138966 229451 367373 572016 868493 1288977 |  | ||||||
| -4 -3 10 49 132 289 583 1147 2252 4449 8873 17855 36050 72341 142802 274973 513588 927669 1618516 2727541 4442064 |  | ||||||
| 19 39 74 133 236 422 765 1415 2696 5313 10758 22099 45557 93732 192181 392487 797276 1606233 3197558 6267150 12058959 |  | ||||||
| -7 -10 -13 -16 -19 -22 -25 -28 -31 -34 -37 -40 -43 -46 -49 -52 -55 -58 -61 -64 -67 |  | ||||||
| 21 44 74 122 221 432 849 1603 2865 4848 7808 12044 17897 25748 36015 49149 65629 85956 110646 140222 175205 |  | ||||||
| 18 26 39 66 116 198 321 494 726 1026 1403 1866 2424 3086 3861 4758 5786 6954 8271 9746 11388 |  | ||||||
| 21 40 78 164 356 766 1605 3259 6420 12322 23187 43106 79841 148586 279840 535679 1042583 2055644 4079972 8092520 15934162 |  | ||||||
| 20 37 62 95 136 185 242 307 380 461 550 647 752 865 986 1115 1252 1397 1550 1711 1880 |  | ||||||
| 0 2 15 48 121 283 642 1407 2942 5832 10961 19602 33519 55081 87388 134409 201132 293726 419715 588164 809877 |  | ||||||
| 8 13 15 13 15 42 131 338 755 1592 3455 8105 20256 51423 127543 303162 686530 1482119 3060047 6065853 11589253 |  | ||||||
| 12 30 59 93 125 157 214 361 722 1498 2987 5640 10262 18599 34737 67942 137708 281702 566759 1101727 2048287 |  | ||||||
| -3 10 49 127 264 492 863 1464 2440 4028 6633 11078 19417 37246 79490 183510 436575 1030078 2361565 5219525 11107638 |  | ||||||
| 16 33 54 90 174 378 846 1849 3867 7702 14625 26559 46299 77769 126315 199032 305122 456279 667096 955488 1343124 |  | ||||||
| 19 43 88 176 343 647 1194 2198 4111 7897 15598 31482 64323 131829 269087 544536 1090317 2160903 4249054 8320480 16296305 |  | ||||||
| 22 41 67 112 212 447 969 2039 4084 7808 14445 26357 48398 90840 175255 345646 688410 1366499 2675535 5132758 9613680 |  | ||||||
| 12 25 47 89 162 277 445 677 984 1377 1867 2465 3182 4029 5017 6157 7460 8937 10599 12457 14522 |  | ||||||
| 5 0 -7 -1 49 197 534 1225 2596 5304 10634 21018 41034 79540 154415 302881 602927 1215420 2462671 4968277 9895903 |  | ||||||
| -9 -14 -15 1 65 237 627 1430 2974 5775 10594 18507 31038 50464 80459 127293 201992 324897 538038 942790 1811370 |  | ||||||
| 2 4 0 -10 -11 41 233 709 1684 3458 6430 11112 18143 28303 42527 61919 87766 121552 164972 219946 288633 |  | ||||||
| 7 26 67 150 317 656 1342 2714 5434 10819 21508 42739 84695 166680 324376 622208 1174037 2177180 3967333 7105608 12513901 |  | ||||||
| 12 22 38 64 119 247 532 1123 2276 4424 8309 15295 28210 53572 107038 225653 493336 1090494 2385292 5093646 10548309 |  | ||||||
| 14 12 10 19 59 159 357 700 1244 2054 3204 4777 6865 9569 12999 17274 22522 28880 36494 45519 56119 |  | ||||||
| 2 14 43 115 280 632 1341 2710 5286 10076 18959 35465 66244 123814 231609 433008 806986 1494370 2740499 4962479 8852304 |  | ||||||
| 16 36 82 165 307 556 1007 1841 3405 6374 12066 23034 44170 84820 163047 314653 612780 1210538 2432293 4964944 10250289 |  | ||||||
| 10 8 10 20 58 188 557 1451 3382 7223 14402 27147 48738 83665 137509 216252 324578 462546 619794 766166 837338 |  | ||||||
| 9 22 46 85 154 288 571 1200 2601 5616 11777 23672 45407 83249 146871 252546 431725 752582 1369644 2629419 5280540 |  | ||||||
| 16 20 35 87 210 449 878 1653 3133 6129 12402 25663 53593 111897 232285 477770 971150 1946550 3840269 7447123 14183748 |  | ||||||
| 22 44 94 197 405 821 1643 3250 6376 12465 24392 47913 94545 187207 371116 734593 1448530 2841203 5540681 10747619 20760527 |  | ||||||
| 4 15 42 101 226 487 1024 2115 4318 8768 17778 36006 72647 145461 288069 563007 1084756 2059673 3853830 7105719 12909204 |  | ||||||
| 15 23 48 115 271 611 1319 2724 5371 10107 18182 31365 52075 83527 129893 196478 289911 418351 591708 821879 1122999 |  | ||||||
| 7 6 17 48 107 202 341 532 783 1102 1497 1976 2547 3218 3997 4892 5911 7062 8353 9792 11387 |  | ||||||
| -4 3 25 70 153 309 619 1270 2682 5750 12268 25628 51937 101824 193553 358902 655155 1190487 2177891 4048307 7684230 |  | ||||||
| -2 4 19 40 65 112 264 766 2210 5847 14057 30979 63235 120551 215877 364424 581237 878545 1269600 1800115 2661524 |  | ||||||
| 18 30 45 58 64 58 35 -10 -82 -186 -327 -510 -740 -1022 -1361 -1762 -2230 -2770 -3387 -4086 -4872 |  | ||||||
| 8 20 59 143 292 523 844 1247 1700 2138 2453 2483 2000 697 -1826 -6077 -12688 -22432 -36241 -55225 -80692 |  | ||||||
| 11 12 8 -7 -28 -26 65 361 1041 2360 4662 8393 14114 22514 34423 50825 72871 101892 139412 187161 247088 |  | ||||||
| 6 6 19 54 113 189 264 307 272 96 -303 -1028 -2205 -3985 -6546 -10095 -14870 -21142 -29217 -39438 -52187 |  | ||||||
| 26 40 63 112 222 455 906 1708 3036 5116 8278 13187 21602 38439 76677 167925 383519 874229 1941697 4162964 8603981 |  | ||||||
| 12 19 31 58 110 209 412 843 1741 3551 7128 14215 28539 58216 120779 253209 531098 1103839 2256973 4519124 8840092 |  | ||||||
| 14 28 47 71 102 153 266 539 1162 2462 4957 9419 16946 29043 47712 75551 115862 172768 251339 357727 499310 |  | ||||||
| 19 22 38 89 208 457 958 1941 3833 7447 14380 27796 53861 104226 200137 378978 704206 1279303 2264473 3888958 6437241 |  | ||||||
| 20 38 83 177 353 665 1204 2120 3650 6152 10145 16355 25767 39683 59786 88210 127616 181274 253151 348005 471485 |  | ||||||
| 18 33 52 75 103 147 258 596 1573 4137 10313 24197 53757 114135 233848 466630 914030 1767831 3387708 6439669 12137157 |  | ||||||
| 16 32 61 98 136 164 171 173 281 836 2678 7743 20501 51456 125378 299753 704238 1621680 3648963 8007452 17127734 |  | ||||||
| 0 9 25 62 141 293 566 1037 1844 3286 6097 12096 25583 56164 124287 271914 582905 1221701 2506400 5046590 10003946 |  | ||||||
| -4 12 56 141 280 486 772 1151 1636 2240 2976 3857 4896 6106 7500 9091 10892 12916 15176 17685 20456 |  | ||||||
							
								
								
									
										25
									
								
								09/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										25
									
								
								09/part1.pl
									
									
									
									
									
								
							| @@ -1,25 +0,0 @@ | |||||||
| % :- use_module(library(readln)). |  | ||||||
| % :- initialization(start, main). |  | ||||||
|  |  | ||||||
| start :- |  | ||||||
|     input(Input), |  | ||||||
|     findall(P, (member(L, Input), predict(L, P)), Ps), |  | ||||||
|     sum_list(Ps, Answer), |  | ||||||
|     writef('Answer=%t\n', [Answer]). |  | ||||||
|  |  | ||||||
| predict(L, 0) :- maplist(=:=(0), L), !. |  | ||||||
| predict(L, X) :- |  | ||||||
|     foldl([Li1, Li2, C, D]>>(Li2 is Li1 - C, D = Li1), L, [_ | NewL], 0, _), |  | ||||||
|     predict(NewL, SubX), |  | ||||||
|     last(L, LastL), |  | ||||||
|     X is SubX + LastL. |  | ||||||
|  |  | ||||||
| % this does not work very lame readln cannot handle negative numbers |  | ||||||
| % input(Lines) :- |  | ||||||
| %     readln(LineTmp), |  | ||||||
| %     (   (last(LineTmp, end_of_file); LineTmp = []) |  | ||||||
| %     ->  Lines = [] |  | ||||||
| %     ;   Line = LineTmp, |  | ||||||
| %         input(CdrLine), |  | ||||||
| %         Lines = [Line | CdrLine] |  | ||||||
| %     ). |  | ||||||
							
								
								
									
										11
									
								
								09/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								09/part2.pl
									
									
									
									
									
								
							| @@ -1,11 +0,0 @@ | |||||||
| start :- |  | ||||||
|     input(Input), |  | ||||||
|     maplist(predict, Input, Ps), |  | ||||||
|     sum_list(Ps, Answer), |  | ||||||
|     writef('Answer=%t\n', [Answer]). |  | ||||||
|  |  | ||||||
| predict(L, 0) :- maplist(=:=(0), L), !. |  | ||||||
| predict(L, X) :- |  | ||||||
|     foldl([Li1, Li2, C, D]>>(Li2 is Li1 - C, D = Li1), L, [_ | NewL], 0, _), |  | ||||||
|     predict(NewL, SubX), |  | ||||||
|     L = [L1 | _], X is L1 - SubX. |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| input([ |  | ||||||
| [0, 3, 6, 9, 12, 15], |  | ||||||
| [1, 3, 6, 10, 15, 21], |  | ||||||
| [10, 13, 16, 21, 30, 45] |  | ||||||
| ]). |  | ||||||
| @@ -1,3 +0,0 @@ | |||||||
| 0 3 6 9 12 15 |  | ||||||
| 1 3 6 10 15 21 |  | ||||||
| 10 13 16 21 30 45 |  | ||||||
							
								
								
									
										
											BIN
										
									
								
								10/fill.png
									
									
									
									
									
								
							
							
						
						
									
										
											BIN
										
									
								
								10/fill.png
									
									
									
									
									
								
							
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 22 KiB | 
| @@ -1,142 +0,0 @@ | |||||||
| input([ |  | ||||||
| ["└", "┐", "┐", "┐", "┌", "┘", "┌", "┐", "┐", "┌", "─", "┐", "┐", "─", "┌", "─", "┐", "┌", "┐", ".", "┌", "┌", ".", "┘", "┐", ".", "─", "┘", "─", "─", "┘", "┐", "┌", "│", "┐", "┌", ".", "┌", "┘", ".", "└", "─", "│", "┌", "│", "─", "┌", "│", "┌", "┘", "┐", "─", "┘", "┐", "┌", "─", "┘", "┌", "┌", "─", "┐", ".", "└", "┐", "┌", "└", "┐", "┘", "─", "┌", "┌", "│", "┐", "─", "─", "┐", ".", "└", "─", "─", "│", "┐", "┐", ".", "┌", "─", "┘", "┐", "┐", ".", "─", "┐", "┌", "┘", "┐", "┌", "┐", "┌", "┌", "─", "─", ".", "┌", "┌", "┘", "┐", "─", "┐", "─", "┌", "│", ".", "┌", "└", "─", "└", "─", "┌", "┐", ".", "┌", "│", "─", "┌", "┌", "┐", "┌", "│", "─", "┐", "─", "│", "┐", "─", ".", "┌", "┌", "─", "┐", "."], |  | ||||||
| ["└", "─", "─", "┐", "┐", "─", "┌", "┘", "└", "│", "┐", "└", "┐", "┐", ".", "┌", "┘", "─", "┌", "─", "┐", ".", "│", ".", "┌", "┘", "┘", "┘", ".", "┌", "┌", "┌", "│", "┌", "┌", "─", "┐", "┐", "│", "─", "│", "┌", "┘", "─", "┌", "┘", "│", "└", "┌", "┘", "│", "─", "└", "─", "┘", "└", "└", "┌", "│", "└", "┐", "┐", "│", "┌", "┐", "└", "┐", "─", "│", "┘", "└", "─", "┘", "┐", "└", "└", "┌", "┐", "│", "┌", "└", "└", "─", "─", "┐", "┘", ".", "─", "┌", "─", "│", "─", "└", "─", "┐", "┘", "┌", "┐", "┘", "┐", "┌", "┘", "─", "┌", "─", "┐", "┐", "│", ".", "┌", "└", "┘", "┌", "┘", "┐", "└", "┘", "└", "│", "┐", ".", "└", "┐", "└", "└", "┐", "┌", "┘", "┌", "┘", "│", "└", "┘", "└", "┌", "┌", "┘", "┘", "│", "┐"], |  | ||||||
| [".", "│", "└", "│", "└", "┌", "┘", "┐", "─", "┘", "─", "┘", "│", "│", "─", "┐", "┘", "└", "└", "─", "┘", "─", "─", "─", "┘", "└", "┐", "┌", "┐", "└", "─", "└", "┌", "┐", "└", "┐", "└", "┐", "┐", "┘", "┌", "┐", "└", "┐", "─", "─", "┘", "┐", "┌", "┐", "│", ".", "┌", "┐", "└", "┌", ".", "└", "│", "─", "│", "┌", "└", "┘", "│", "└", "│", "┌", "│", "┌", "┌", "┘", "┘", "└", "┘", "┌", "┌", "┘", "─", "┐", "│", "│", "└", "┌", "┐", "┘", "┐", "┌", "┘", "┌", "─", "┐", ".", "└", "┐", "└", "│", "└", "┌", "┘", "┐", "└", "└", "│", "┐", "┘", "┌", "┘", "┌", "│", ".", "│", "│", "│", "┌", "┐", "┘", "┘", "│", "└", "─", "┐", "│", "┘", "┐", "└", "┘", ".", "┌", "┐", "─", "─", "┐", "└", "┐", "┘", "┐", "┌", "┘", "─"], |  | ||||||
| ["┌", "┐", "┘", "│", ".", "└", "─", "┘", "─", "└", "┐", "┌", "┐", "┘", "┌", "┘", ".", "┐", "└", "┘", "│", "─", "┘", ".", ".", ".", "└", "│", "─", "│", "└", "│", "│", "│", "┌", "┘", "┌", "┘", ".", ".", "└", "─", "┌", "┘", "└", "└", "┐", "┐", "└", "└", "┘", "┐", "└", "┐", "┐", "┘", "│", "─", "┐", "┘", "│", "┌", "─", "─", "┐", "─", "┘", "┌", "└", "┐", "│", "┌", "┐", "┌", "┌", "┘", "└", "┘", "┘", "┌", "┘", "┐", "┐", "└", "─", "┐", "─", "└", "┐", "┌", ".", "│", "┘", ".", "│", "┌", "│", ".", "└", "─", "│", "┐", ".", ".", "│", "┌", "└", "─", "┌", "┘", "┌", "─", "┐", "─", "└", "┘", "┌", "└", "│", "─", "└", "│", "└", "│", "─", "│", "┌", "┐", "└", "└", "┐", "└", "└", ".", "│", "┌", "┌", "│", "│", "."], |  | ||||||
| ["┘", "│", "─", "└", "┐", "┘", ".", "│", "│", "│", "└", ".", "┌", ".", "┌", "┘", ".", "│", "┐", "└", "┌", ".", "│", "┌", "┌", ".", "└", "└", "┐", "│", "└", "┌", "┘", "│", "│", "┌", "┘", "│", ".", "┐", ".", "└", "┐", "│", "┌", "└", "┌", "┐", "─", "└", ".", "─", "┘", "└", "┐", ".", "┌", "┐", "┘", "─", "└", "┘", "┘", "┐", "└", "│", "┌", "┘", "│", "│", "┘", "─", "─", "─", "┘", "┌", "┐", "┘", "└", "┘", "└", "└", "─", "┐", ".", "└", "┌", "┘", "┘", "┘", "└", "┐", "└", "┌", "┐", "┘", "┘", "┌", "┌", "┌", "─", "┐", "┐", "┐", "┌", "┌", "┐", "│", "│", "│", "└", "─", "┘", "┌", "│", "─", "─", "┐", "┘", "└", "┌", "└", "┐", ".", "┌", "┌", "┌", "┌", "┐", "│", "└", "┐", "┐", ".", "│", ".", "┘", "└", "─", "┐"], |  | ||||||
| ["┘", "┐", "┌", "┐", "│", ".", "┌", "─", "│", "┐", "─", "┌", "┘", "┐", "└", "─", "┐", "┘", "┌", ".", ".", "┘", ".", "│", "┘", "┐", "│", "└", "└", "─", "│", "└", "┐", "└", "┘", "└", "─", "┐", "─", "─", "┐", "┘", "┘", "└", "┌", "┘", "│", "└", "┐", "┌", "┐", ".", "┌", "┘", "┐", "┐", "│", "└", "┘", "└", "┐", "┌", "└", "┌", "┌", "┌", "┐", "└", "┐", "┘", "─", "┐", "─", "│", "└", "└", "┘", ".", "│", "│", "│", ".", "└", "┘", "┐", "└", "┌", ".", "└", "┌", "│", "│", "─", "│", "│", "┌", "┌", "┌", "─", "┘", "┌", "┘", "─", "┘", "┐", "└", "─", ".", "┐", "┐", "─", "┘", "┐", "┌", "│", "└", "┘", "┌", "─", "┌", "─", "┐", "└", "─", "┌", "┌", "┐", "└", "┌", "│", "│", ".", "┌", "┐", "┘", ".", ".", "┐", ".", "┐"], |  | ||||||
| ["└", "┌", ".", "└", "│", "─", "┘", "┐", "└", "┘", "─", "┐", ".", "┌", "│", "┘", ".", "┌", "└", "┐", "─", "└", "┌", "┐", "┌", "┐", "└", "─", "┘", ".", "┐", "┐", "└", "─", "┐", "┌", "─", "┘", "┐", ".", "┌", "┌", "┐", "┌", "│", "┌", "┌", "┐", "└", "─", "│", "┐", "┐", "┌", "┘", "─", "┘", "┌", "┌", ".", "│", "┐", "┌", "┌", "┐", "│", "│", "─", "│", "┐", "└", "┘", ".", "─", "┌", "└", "─", ".", "└", "─", "┌", "┘", "┐", "┐", "│", "┐", ".", ".", "└", "┌", "┐", "│", "┐", "│", "│", "┌", "┌", "┘", "┌", "─", "┘", "└", "│", "┌", "┘", "└", "└", "┌", ".", "┌", "┐", "│", "┌", "┘", "└", "┐", "┌", "┘", "└", "└", "└", "─", "└", "─", "│", "│", ".", "┌", "┘", "│", "│", "┐", "│", ".", "┌", "┌", "─", "┘", "┐", "│"], |  | ||||||
| ["└", "│", "┐", "└", "│", "┐", "┌", "─", "┘", ".", "┘", "│", "┌", "┌", "┌", "─", "┌", "┘", "─", "┐", "┘", "┌", "└", "┘", "│", ".", "┌", "┘", "│", ".", "┌", "─", "─", "─", "┘", "└", "─", "─", "┐", "┘", ".", "└", "┘", "─", "┘", "┐", ".", "┌", "┐", "┘", "│", "└", "┐", "┐", "┘", "┐", ".", "┌", "┌", ".", "└", "┌", "┌", "┘", "│", "│", "│", "┐", "┌", "┐", "┐", "└", "│", "┐", "│", "┌", "┌", "─", "┘", ".", ".", "│", "│", "│", "─", "─", "─", "─", "┌", "┐", "┌", "─", "─", "┘", "└", "┐", "└", "┐", "│", ".", "│", "┌", "└", "─", "┘", ".", "┌", "┘", "─", "│", "┌", "└", "┐", "┐", "┌", "┘", "│", "┘", ".", "┌", "─", "┌", "┘", "┘", "└", "─", "┘", "└", "└", "┌", "│", "┐", "┐", "┌", "┐", "└", "─", ".", "└", "┌"], |  | ||||||
| ["┐", "─", "─", "─", "└", "┌", "┐", "│", ".", "┌", "└", "┐", "┘", "└", "│", "┌", "┐", "└", "─", "└", "─", "┐", "┌", "└", "│", "┐", "┌", "┐", ".", "┌", "└", "┐", "┌", "┐", "┌", "─", "─", "─", "┘", ".", "┐", "─", "┐", ".", ".", "└", "└", "─", "┘", "┌", "└", "┘", "┌", "─", "┐", "┐", "┌", "┐", "┌", "┐", "│", "┌", "└", "┐", "└", "┘", "│", "┌", "│", "│", "┘", "┐", "└", "─", "┌", "─", "┐", "─", "└", ".", "┌", "┌", "┌", "┐", ".", ".", "┌", "┌", "┘", "│", "│", "┌", "─", "┐", "┌", "┘", "┌", "│", "│", ".", "└", "┐", ".", "│", "─", "┌", "│", ".", "┌", "┐", "└", "┘", "│", "┌", "┘", "┐", "│", "┘", ".", "│", ".", "─", "┐", "┐", "┌", "─", "┘", "─", "└", "│", "┘", "└", "┌", "─", "┘", "┐", "└", "┌", ".", "."], |  | ||||||
| ["└", "┘", "┐", ".", "┌", "└", "┘", "└", "─", "─", "┐", "└", "┐", "│", "│", "─", "│", "┐", "└", "┌", "│", "┐", "┘", "┐", "┌", "─", "┘", "│", "┌", "┐", "│", "└", "┘", "│", "└", "─", "┐", "│", "└", "┌", "└", "─", "─", "┐", ".", ".", "│", "┘", "└", "┐", "└", "┌", "└", "┐", "└", "┐", "│", "│", "│", "└", "┐", "┌", "─", "┘", "┌", "─", "┘", "┌", "┘", "│", ".", "┌", "┐", "┌", "┘", "┐", "└", "┘", "┌", "└", "┐", "┌", "┘", "│", "┌", "┐", "┌", "┘", "┌", "┘", "└", "┘", "┘", "│", "│", "┌", "─", "┘", "│", "┐", "┐", "└", "┌", "┌", "┘", "┌", "─", "└", "│", "└", "┐", "│", "└", "┘", "┐", "─", "┐", "─", "┌", "┘", "└", "└", "└", "┐", "─", "┐", "┌", "┐", "┌", "─", ".", "│", "│", "┐", "┌", "┐", "┌", "┘", "┐", "."], |  | ||||||
| ["└", "└", "┌", "─", "└", "┌", "─", "┐", "│", "│", "┘", "┌", "└", "─", "└", "└", "┌", "┐", "┐", "┐", "┌", "─", "─", "┌", "└", "┐", "┌", "┘", "│", "└", "─", "┐", "┌", "│", "┌", "┐", "└", "┐", "─", "┘", "┘", "┐", ".", "└", "─", "┌", "┐", ".", "┌", "┌", "┐", "─", "│", "└", "┐", "│", "│", "│", "│", "┌", "┘", "└", "─", "┐", "│", "┌", "┐", "│", "┌", "┘", "┌", "┐", "│", "│", "│", "┌", "┘", "┌", "┐", "┐", "┌", "└", "┐", "│", "│", "│", "└", "┐", "│", "└", "│", "┌", "┐", "│", "│", "│", "┌", "┐", "│", "┌", "┐", "─", "┘", "┘", "┐", "┘", "┐", "┐", "│", ".", "└", "─", "┐", "┘", "│", "┐", "└", "┌", "┘", ".", ".", "┌", "└", "─", "┐", "│", "┐", "│", "│", "┌", "─", "┐", "─", "┐", "─", "└", "┘", "┘", "─", "┐"], |  | ||||||
| ["│", "─", "│", ".", "┌", "─", "┐", "└", "┐", "│", "┘", "┌", "┘", ".", "│", "┘", "│", "│", "└", "┌", "┐", "┌", "┐", "┘", "┌", "┘", "│", "└", "└", "─", "┐", "└", "─", "┘", "│", "└", "─", "┘", ".", "└", "┌", "┐", "┐", ".", "└", "│", "│", ".", "┌", "┘", "└", "┐", "┌", "─", "┘", "└", "┘", "└", "┘", "└", "┐", "┌", "─", "┘", "│", "│", "└", "┘", "└", "─", "┘", "└", "┐", "┘", "┐", "┘", "┐", "┌", "┐", "─", "┌", "┌", "┘", "│", "│", "└", "─", "┘", "└", "┐", "┌", "┘", "└", "┘", "│", "│", "│", "└", "┘", "│", "│", "┐", "┌", "│", "┌", "┘", "│", "─", "┌", "┘", ".", "┌", "─", "─", "┘", "┐", "┌", "└", "─", "┌", "┌", "─", "┐", "│", "└", "┘", "┌", "─", "┐", "┘", ".", "└", "└", "│", "┘", ".", "│", "┐", ".", "┐"], |  | ||||||
| ["┘", "┐", "│", "┌", "┐", "─", "└", ".", "┌", "┌", "─", ".", ".", "┌", "┐", "┌", "│", "└", "┐", "│", "│", "─", "│", "│", "└", "┐", "└", "─", "─", "┐", "└", "─", "─", "┐", "└", "┐", "┌", "┐", "┌", "┐", "│", "│", "─", "┌", "┐", "│", "│", "─", "└", "─", "┐", "│", "└", "─", "─", "┐", "┌", "─", "─", "─", "┘", "└", "┐", "┌", "┘", "│", "┌", "─", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "─", "┘", "│", "┌", "┐", "└", "┐", "│", "│", "┌", "─", "─", "─", "┘", "└", "─", "─", "┐", "│", "│", "│", "┐", "┌", "┘", "└", "─", "─", "┐", ".", "┐", "│", "┐", "└", ".", "┌", "┌", "└", "─", "─", "┌", "┐", ".", "┌", "─", "┌", "─", "┘", "┐", "┘", "─", "┐", "┌", "┘", "┌", "─", "┐", "┘", "┘", "└", "│", "└", "│", "┌", "└"], |  | ||||||
| [".", "─", "┘", "└", "┘", ".", "│", "┐", "│", "│", "┘", "┌", "┌", "│", "│", "┌", "┘", "┌", "┘", "│", "│", "┐", "│", "─", "┌", "┘", "┌", "─", "─", "┘", "┌", "─", "─", "┘", "┌", "┘", "│", "│", "│", "│", "│", "│", ".", "│", "└", "┘", "└", "┐", "┐", "┌", "┘", "└", "┐", "┌", "─", "┘", "└", "─", "─", "┐", "┌", "─", "┘", "└", "─", "┘", "└", "─", "─", "─", "─", "┐", "┘", "│", "│", "└", "┐", "┌", "┘", "│", "└", "─", "┘", "└", "┘", "└", "┐", "┌", "┐", "┘", ".", "┌", "┐", "│", "└", "┘", "│", "┌", "┘", "┌", "─", "─", "─", "┘", "┌", "┌", "│", "┐", ".", "┌", "┌", "┌", "┐", "┌", "─", "┘", "┘", "┌", "┘", "┐", "│", "└", "┌", "─", "┐", "─", "│", "┘", "┘", "┐", ".", ".", ".", "┌", "┌", "┘", "┐", "┘", "┌", "└"], |  | ||||||
| ["┐", "┌", "┘", ".", "└", "─", "┘", "┐", "┘", "└", "┐", "┌", "└", "│", "│", "└", "┐", "└", "┐", "│", "└", "┐", "┌", "─", "┘", "┌", "┘", "└", "┌", "┐", "└", "─", "─", "┐", "└", "┐", "│", "│", "│", "│", "│", "└", "┐", "└", "┐", "┌", "─", "┘", "┌", "┘", "┌", "─", "┘", "└", "─", "─", "─", "─", "┐", "│", "└", "─", "┐", "┌", "─", "─", "┐", "┌", "─", "─", "─", "┘", "┌", "┘", "└", "┐", "│", "└", "┐", "└", "─", "─", "┐", "┌", "─", "┐", "│", "│", "│", "┐", "┌", "┘", "└", "┘", "┌", "─", "┘", "│", "┌", "┘", "┌", "─", "┐", "─", "│", "│", "┌", "┐", "┐", "┌", "─", "┘", "│", "┐", ".", ".", "┌", "┘", "│", "┌", "│", ".", "┘", "└", "┐", "─", "└", "┐", "└", "│", "└", "─", "─", "┌", "│", "┘", "─", "┌", "─", "┘"], |  | ||||||
| ["─", "┐", "─", "┌", "┘", "┌", "└", ".", "┘", "┌", "┐", "─", "┌", "┘", "└", "┐", "└", "┐", "└", "┘", "┌", "┘", "└", "─", "┐", "└", "─", "┐", "│", "└", "┐", "┌", "─", "┘", "┌", "┘", "│", "│", "│", "│", "│", "┌", "┘", "│", "│", "│", ".", "┌", "┘", "┌", "┘", "└", "┌", "┐", "┌", "─", "┐", "┌", "┘", "└", "┐", "┌", "┘", "└", "─", "┐", "└", "┘", "│", "┌", "┐", "─", "└", "─", "┐", "│", "│", "┌", "┘", "┌", "─", "┐", "└", "┘", "┌", "┘", "└", "┘", "└", "┐", "│", "┌", "─", "┐", "│", "┌", "┐", "│", "│", "┌", "┘", "┌", "┘", "┌", "┐", "┐", "│", "│", "─", "└", "┐", "┌", "┘", "┐", "─", "┌", "┐", "─", "┌", "│", "│", "┌", "│", "└", "┘", "┐", "┌", "┘", ".", "─", "─", "└", "─", "└", "┌", ".", "└", "┘", "┐", "│"], |  | ||||||
| ["│", "│", ".", "┌", "┐", "┘", "│", "┌", "└", "┘", "│", "│", "└", "─", "┐", "│", "└", "└", "─", "┐", "└", "┐", "┌", "┐", "│", "┌", "─", "┘", "│", "┌", "┘", "└", "─", "┐", "│", "┌", "┘", "│", "│", "└", "┘", "│", "┘", "┌", "┘", "│", "┌", "┘", "┌", "┘", "┌", "┐", "│", "└", "┘", "┌", "┘", "└", "─", "┐", "└", "┘", "┌", "─", "─", "┘", "┌", "┐", "┌", "┘", "└", "┐", "┌", "─", "┘", "│", "│", "└", "┐", "└", "┐", "└", "┐", "┌", "┘", "┌", "┐", "┌", "┐", "│", "└", "┘", "┌", "┘", "└", "┘", "│", "│", "└", "┘", "┌", "┘", "┌", "┘", "└", "┐", "│", "│", "┘", "┌", "┘", "│", "┌", "┐", "┐", "│", "└", "─", "┐", ".", "└", "┐", "┘", ".", "└", "┌", "┐", ".", "└", "┘", "┌", "┘", "┌", "┐", "│", "┘", "┘", "─", "└", "┐"], |  | ||||||
| ["─", "┐", "┐", "└", "┐", "┌", "┌", "│", "┘", "┌", "─", "─", "┌", "─", "┘", "└", "─", "─", "┐", "└", "┐", "│", "│", "└", "┘", "│", ".", "┌", "┘", "└", "┐", "┌", "─", "┘", "└", "┘", "┌", "┘", "└", "─", "┐", "└", "┐", "└", "┐", "└", "┘", "┌", "┘", "┘", "│", "│", "└", "┐", "┌", "┘", "┌", "─", "─", "┘", "┌", "┐", "└", "─", "┐", "└", "│", "└", "┘", "┌", "─", "┘", "└", "─", "┐", "│", "│", "┌", "┘", "└", "└", "┐", "│", "└", "─", "┘", "└", "┘", "│", "└", "┐", ".", "└", "┐", "┌", "┐", "└", "┘", "┌", "─", "┘", "─", "│", "┌", "─", "┘", "│", "│", "│", "└", "┐", "│", "│", "└", "┐", "└", "┐", "┌", "┘", "┐", "─", "│", "┘", "┐", "┌", "┘", ".", "┌", "└", "┐", "┘", "─", "└", "└", "┘", "└", "└", "│", ".", "│"], |  | ||||||
| ["│", "└", "┐", "┘", "└", "┘", "┘", "│", ".", "└", "│", "┌", "└", "┐", "┌", "─", "─", "┐", "└", "─", "┘", "│", "└", "─", "┐", "└", "┐", "└", "┐", "┌", "┘", "└", "─", "─", "─", "┐", "│", "┌", "┐", "│", "│", "┌", "┘", "┌", "└", "┐", "┌", "┘", "┌", "┐", "│", "│", "┌", "┘", "└", "┐", "└", "┐", "┌", "─", "┘", "│", "┌", "─", "┘", "┌", "┘", "┌", "─", "┘", "┌", "─", "┐", "┌", "┘", "└", "┘", "└", "┐", "┌", "─", "┘", "└", "┐", "│", "┌", "─", "─", "┘", "┌", "┘", "┌", "┐", "└", "┘", "│", "┌", "─", "┘", "┌", "─", "┐", "│", "│", "┌", "┐", "│", "└", "┐", "┌", "┘", "└", "┘", "┌", "┘", "┌", "┘", "│", "─", "┌", "┐", "│", "┌", "─", "┐", "└", "┐", "─", "└", "│", "─", ".", "│", "┘", "┌", "─", "─", "│", "┐", "."], |  | ||||||
| ["└", "│", ".", "┌", "┘", "┐", "┌", "─", "│", ".", "│", "┐", "┌", "└", "┘", "┌", "┐", "└", "─", "┐", "┌", "┘", "┌", "┐", "│", "┌", "┘", "┌", "┘", "└", "┐", "┌", "┐", "┌", "─", "┘", "│", "│", "│", "┌", "┘", "└", "─", "┐", "┌", "┘", "└", "┐", "│", "│", "│", "└", "┘", "┌", "─", "┘", "┌", "└", "┘", "┌", "─", "┘", "└", "─", "┐", "└", "┐", "└", "┐", "─", "│", "┌", "┘", "│", "┌", "─", "─", "─", "┘", "└", "─", "─", "┐", "└", "┐", "└", "─", "─", "┐", "└", "┐", "│", "└", "─", "┐", "│", "└", "─", "┐", "└", "┐", "└", "┘", "│", "│", "│", "└", "┐", "│", "└", "┐", "┌", "─", "┘", ".", "└", "┐", "└", "─", "┐", "┘", "┐", "│", "┌", "─", "┐", "┘", "│", "└", "┘", "│", ".", "│", "─", "└", "┐", "─", "└", "─", "┐"], |  | ||||||
| ["│", "└", "┘", "─", ".", "└", "└", "─", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "└", "┐", "┌", "┘", "└", "─", "┘", "└", "┘", "└", "─", "┘", "┌", "─", "┘", "│", "│", "│", "┌", "┐", "└", "┘", "│", "└", "┐", "┌", "─", "┘", "└", "┐", "┌", "┘", "│", "│", "└", "─", "┐", "│", "─", "┌", "┐", "┌", "┐", "└", "─", "┐", "┌", "─", "┘", "┌", "┘", "┌", "┘", "┌", "┘", "│", "─", "│", "│", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "┌", "┘", "┌", "─", "┐", "│", "┌", "┘", "│", "┌", "─", "┘", "│", "┌", "─", "┘", "│", "└", "─", "┐", "└", "┘", "└", "┐", "│", "│", "┌", "┘", "└", "┐", "┌", "┐", "┘", "│", "┌", "─", "┘", "┌", "┐", "┐", "┘", ".", "┘", "┌", "─", "┘", "─", "┌", "┌", "┘", "└", "└", "┘", "┐", "┐", "│", "│"], |  | ||||||
| ["│", "─", "└", "┌", "─", "─", "└", "┐", "│", "└", "┘", "│", "│", "│", "└", "─", "┐", "│", "└", "┐", "┌", "─", "─", "─", "─", "┐", "┌", "─", "┘", "┌", "┐", "│", "│", "└", "┘", "└", "─", "┐", "└", "┐", "│", "└", "┐", "┘", "─", "│", "│", "┌", "┘", "└", "┐", "┌", "┘", "└", "┐", "│", "│", "│", "└", "─", "─", "┘", "│", "┌", "┐", "│", "┌", "┘", "┌", "┘", "┌", "┘", "┌", "┘", "│", "│", "│", "│", "│", "│", "│", "│", "┌", "┘", "┐", "└", "┐", "└", "┘", "└", "─", "┘", "└", "┐", "┌", "┘", "└", "─", "─", "┐", "┌", "─", "┘", "┌", "┐", "┌", "┘", "│", "│", "│", "┌", "─", "┘", "│", "└", "┐", "│", "└", "─", "─", "┘", "└", "┐", "│", "┐", ".", "│", "┐", "│", ".", "┐", "└", "┘", "┐", "└", "┘", "│", "└", "┌", "┘"], |  | ||||||
| ["┘", "─", "─", "┘", ".", "└", "└", "└", "└", "─", "┐", "└", "┘", "│", "┌", "┐", "│", "│", "┌", "└", "┘", "┐", "┌", "─", "┐", "│", "└", "─", "┐", "│", "│", "│", "└", "┐", "┘", "┌", "┐", "│", "┌", "┘", "└", "┐", "└", "┐", "┌", "┘", "└", "┘", "┌", "─", "┘", "└", "┐", "┌", "┘", "│", "│", "└", "─", "─", "─", "┐", "│", "│", "│", "│", "└", "─", "┘", "┌", "┘", "│", "└", "┐", "│", "│", "│", "│", "│", "│", "│", "│", "│", "┘", "│", "┐", "└", "─", "─", "─", "─", "┐", "┌", "┘", "│", "┌", "─", "─", "─", "┘", "│", "┌", "─", "┘", "└", "┘", "┌", "┘", "└", "┘", "│", "┌", "┐", "└", "┐", "│", "│", "┌", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "│", "┌", "┐", "┌", "┐", "┐", "┌", "│", "┐", ".", "│", "┌", "└", "┌"], |  | ||||||
| ["│", "┌", "└", ".", "┌", "└", "│", "└", "┌", "┐", "└", "─", "┐", "└", "┘", "└", "┘", "└", "─", "─", "─", "┐", "│", "┌", "┘", "└", "─", "┐", "└", "┘", "│", "└", "┐", "│", "┌", "┘", "│", "│", "│", "┌", "┐", "└", "┐", "└", "┘", "┌", "─", "─", "┘", "┌", "┌", "┐", "│", "│", "│", "│", "│", "┌", "┐", "┌", "─", "┘", "└", "┘", "└", "┘", "┌", "─", "─", "┘", "┌", "─", "─", "┘", "└", "┘", "│", "│", "└", "┘", "│", "│", "└", "┐", "└", "┌", "┐", "│", "┌", "─", "─", "┘", "│", "┌", "┘", "│", "┌", "─", "┐", "┌", "┘", "└", "┐", ".", "┌", "┐", "└", "┐", "┌", "─", "┘", "│", "└", "┐", "│", "└", "┘", "└", "─", "─", "─", "┐", "┌", "┘", "│", "┌", "│", "└", "┘", "─", "┌", "┐", "─", "│", "└", "┘", "│", "┌", "┌", "┘"], |  | ||||||
| ["│", "│", "┘", "┌", "┐", "┘", "┌", "─", "┘", "└", "─", "─", "┘", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "└", "┘", "└", "─", "┐", "┌", "┘", "┌", "─", "┘", "┌", "┘", "│", "│", "┌", "┘", "│", "│", "│", "│", "─", "│", "┌", "─", "┘", "┌", "┐", "┌", "┐", "│", "│", "│", "│", "┌", "┘", "│", "│", "│", "└", "─", "─", "─", "┐", "┌", "┐", "└", "─", "┐", "┌", "└", "─", "─", "─", "─", "┐", "│", "└", "┐", "┌", "┘", "└", "┐", "│", "┌", "┘", "└", "┐", "└", "─", "─", "┐", "└", "┘", "┌", "┘", "└", "┐", "│", "└", "┐", "┌", "┘", "┌", "┘", "└", "┐", "│", "└", "─", "┐", "│", "┌", "┘", "└", "┐", "┌", "─", "─", "─", "─", "┘", "└", "┐", "└", "┐", "┌", "┐", "└", "┌", "┘", "│", "┌", "│", "┐", "─", "┘", "└", "│", "┘"], |  | ||||||
| ["│", "└", "┐", "─", "┌", "─", "└", "─", "─", "─", "─", "─", "┐", "│", "└", "┘", "│", "│", "└", "┘", "└", "─", "─", "─", "┐", "│", "└", "┐", "│", "┌", "┐", "└", "┐", "│", "│", "└", "┐", "│", "└", "┘", "│", "┌", "┘", "│", "┌", "┐", "│", "└", "┘", "│", "│", "│", "│", "│", "└", "┐", "│", "│", "└", "┐", "┌", "┐", "┌", "┘", "│", "└", "─", "┐", "│", "┌", "─", "┐", "┌", "┐", "┌", "┘", "└", "─", "┘", "│", "└", "┌", "│", "│", "│", "┌", "─", "┘", "┘", "┌", "┐", "└", "─", "┐", "│", "┌", "┐", "│", "└", "┐", "│", "│", "┌", "┘", "┌", "─", "┘", "└", "┐", "┌", "┘", "│", "│", "┌", "┐", "│", "│", "┌", "┐", "└", "┌", "┐", "┌", "┘", "┌", "┘", "│", "└", "┐", "└", "┐", "│", "┌", "│", "└", "┐", "┘", "│", "└", "└"], |  | ||||||
| ["─", ".", "│", "└", "│", "┘", "│", ".", "┌", "─", "─", "─", "┘", "│", "┌", "─", "┘", "└", "─", "┐", "│", "┌", "─", "─", "┘", "└", "─", "┘", "│", "│", "│", "─", "│", "│", "│", "┌", "┘", "└", "┐", "┌", "┘", "└", "┐", "└", "┘", "│", "│", "┌", "─", "┘", "│", "│", "│", "│", "┌", "┘", "│", "└", "┐", "│", "│", "└", "┘", "┌", "┘", "┌", "┐", "└", "┘", "│", "┌", "┘", "│", "│", "└", "─", "─", "─", "┐", "└", "┐", "┌", "┘", "└", "┘", "└", "┐", "┌", "─", "┘", "│", "┌", "┐", "│", "└", "┘", "│", "│", "┌", "┘", "│", "│", "└", "┐", "└", "─", "┐", "─", "│", "│", "┐", "│", "│", "│", "│", "│", "└", "┘", "└", "─", "┘", "│", "│", "┌", "┘", "┌", "│", "┌", "┘", "┌", "┘", "└", "┐", "─", "┐", ".", "┌", "│", "─", "."], |  | ||||||
| ["└", "─", "┐", ".", "│", ".", "┌", "┐", "└", "─", "┐", "┌", "┐", "│", "└", "┐", "┌", "─", "─", "┘", "┌", "┘", "┌", "┐", "┌", "┐", "┌", "┐", "└", "┘", "└", "─", "┘", "│", "│", "└", "┐", "┌", "┘", "│", "┐", "└", "└", "┐", "┌", "┘", "│", "│", "┌", "┐", "│", "│", "│", "│", "└", "┐", "│", "┌", "┘", "│", "└", "─", "┐", "│", "┌", "│", "└", "┐", "┌", "┘", "└", "─", "┘", "│", "┌", "┐", "┌", "┐", "│", "┌", "┘", "│", "┌", "─", "─", "─", "┘", "└", "─", "┐", "│", "│", "│", "│", "┌", "┐", "│", "│", "└", "┐", "│", "│", "┌", "┘", "┌", "─", "┘", "┌", "┘", "└", "┐", "│", "│", "│", "│", "│", "┌", "─", "─", "┐", "┌", "┘", "│", "│", "┌", "┐", "│", "└", "─", "┘", "┌", "─", "┘", "┘", "└", "│", "┐", "┘", "└", "┘"], |  | ||||||
| ["┌", "┌", ".", "┌", "┌", "─", "└", "┌", "─", "─", "┘", "│", "│", "│", "┘", "│", "│", "┌", "─", "┐", "└", "┐", "│", "│", "│", "└", "┘", "└", "─", "─", "─", "┐", "┌", "┘", "│", "┌", "┘", "└", "┐", "└", "┐", "└", "┌", "┘", "│", "─", "│", "│", "│", "│", "│", "│", "│", "└", "┐", "│", "│", "└", "┐", "└", "┐", "┌", "│", "└", "┐", "│", "┌", "┘", "└", "─", "─", "─", "┐", "└", "┘", "│", "│", "└", "┘", "│", "│", "│", "│", "┌", "─", "─", "┐", "┌", "─", "┘", "└", "┘", "│", "│", "│", "└", "┘", "│", "┌", "┘", "│", "│", "│", "┌", "┘", "┌", "┐", "└", "┐", "┌", "┘", "│", "└", "┘", "└", "┘", "└", "─", "┐", "└", "┘", "┘", "│", "│", "│", "│", "│", "┌", "─", "─", "┘", "┘", "│", "│", "│", "└", "┘", ".", "┌", "┘"], |  | ||||||
| ["┌", "└", "─", "┐", "┘", ".", ".", "└", "─", "┐", "┌", "┘", "└", "┘", "│", "└", "┘", "└", "┐", "└", "┐", "│", "│", "│", "│", "┌", "─", "─", "─", "─", "─", "┘", "└", "┐", "│", "│", "┌", "┐", "└", "┐", "└", "┐", "└", "┐", "│", "┌", "┘", "│", "│", "│", "│", "│", "│", "┌", "┘", "│", "│", ".", "└", "┐", "│", "┌", "┘", "┌", "┘", "│", "│", "┌", "┐", "┌", "┌", "┐", "└", "─", "┐", "│", "└", "─", "┐", "└", "┐", "│", "└", "┘", "┌", "─", "┘", "└", "─", "─", "─", "┐", "└", "┘", "└", "┐", "┌", "┘", "└", "┐", "│", "│", "│", "└", "┐", "│", "│", "┌", "┘", "└", "┐", "│", "┌", "─", "─", "─", "─", "┐", "└", "─", "┐", "┌", "┘", "│", "│", "│", "│", "│", "┌", "─", "┐", "│", "└", "┐", "┘", "┘", "│", "┌", "└", "┘"], |  | ||||||
| ["─", "┐", "┘", ".", "│", "┌", "│", "┌", "└", "└", "┘", "┘", "┘", "└", "┘", "│", "┌", "┐", "└", "┐", "│", "└", "┘", "└", "┘", "└", "┐", "┌", "─", "─", "─", "─", "┐", "└", "┘", "└", "┘", "└", "┐", "└", "┐", "└", "┐", "│", "└", "┘", "┌", "┘", "│", "└", "┘", "│", "│", "│", "┌", "┘", "└", "┐", "┌", "┘", "└", "┘", "┌", "┘", "┌", "┘", "│", "│", "└", "─", "┘", "└", "─", "┐", "│", "│", "┌", "┐", "│", "┌", "┘", "└", "─", "┐", "└", "┐", "┌", "┐", "┐", "┌", "┐", "└", "─", "┐", "┌", "┘", "└", "─", "┐", "│", "│", "│", "│", "┌", "┘", "│", "│", "│", "┌", "┐", "└", "┘", "└", "─", "┐", "┌", "┐", "└", "─", "─", "┘", "└", "┐", "└", "┘", "└", "┘", "└", "┘", "┌", "┘", "┐", "┘", "│", ".", "┘", "└", "┐", "┐", "."], |  | ||||||
| ["└", "│", "─", "─", "└", "┐", "│", "┐", ".", "└", "│", "─", "┌", "┘", ".", "┌", "┘", "│", "┌", "┘", "└", "─", "┐", "┐", "┌", "┐", "└", "┘", "┌", "─", "─", "─", "┘", "┌", "─", "─", "─", "─", "┘", "─", "│", "┌", "┘", "│", "┌", "┐", "└", "┐", "└", "┐", "┌", "┘", "│", "│", "│", "┌", "─", "┘", "└", "─", "─", "┐", "└", "┐", "│", "┌", "┘", "└", "─", "─", "┐", "┌", "─", "┘", "│", "└", "┘", "│", "│", "└", "┐", "┌", "─", "┘", "┌", "┘", "│", "│", "┌", "┘", "│", "┌", "─", "┘", "│", "┌", "┐", "┌", "┘", "└", "┘", "│", "│", "└", "┐", "│", "│", "│", "│", "└", "─", "─", "─", "─", "┘", "│", "│", "─", "┌", "┐", "└", "┌", "┘", "┌", "┐", "┌", "┐", "┌", "─", "┘", "┐", "│", "└", "┌", "┘", "└", "─", "└", "└", "┐"], |  | ||||||
| ["│", "┘", "┘", "│", "└", "└", "┌", "┐", "┐", "│", "└", "│", "│", ".", "┌", "└", "┐", "│", "└", "─", "┐", "┌", "┘", "┌", "┘", "└", "─", "─", "┘", "┌", "┐", "┌", "┐", "└", "┐", "┘", "┌", "┐", "─", "┌", "┘", "└", "┐", "└", "┘", "└", "┐", "└", "─", "┘", "└", "┐", "│", "│", "│", "│", "┌", "┐", "┌", "─", "┐", "│", "┌", "┘", "│", "│", "┌", "─", "─", "┐", "│", "│", "┌", "┐", "└", "─", "┐", "│", "│", "┌", "┘", "└", "─", "┐", "│", "└", "│", "│", "│", "┌", "┘", "└", "─", "┐", "│", "│", "│", "└", "─", "─", "┐", "│", "│", "┌", "┘", "│", "│", "│", "└", "─", "┐", "┌", "─", "─", "┐", "│", "└", "─", "┘", "└", "─", "┘", "┌", "┘", "│", "│", "│", "└", "─", "─", "┐", "┘", "┐", "┐", "┘", "┐", "─", "└", "┌", "┌"], |  | ||||||
| [".", "┌", "─", "┐", "─", "└", "│", "┘", "└", "└", "┐", "└", "┌", "─", "─", "─", "┘", "└", "─", "─", "┘", "└", "┐", "└", "─", "─", "─", "─", "─", "┘", "└", "┘", "└", "┐", "└", "┐", "│", "└", "┐", "└", "─", "┐", "└", "┐", "┌", "┐", "└", "─", "┐", "┌", "─", "┘", "│", "│", "│", "└", "┘", "│", "└", "┐", "│", "│", "└", "┐", "│", "│", "└", "─", "┐", "│", "│", "│", "│", "└", "┐", "┌", "┘", "└", "┘", "│", "┌", "─", "┐", "│", "│", "┌", "┘", "│", "│", "│", "┌", "┐", "┌", "┘", "└", "┘", "│", "┌", "┐", "┌", "┘", "│", "│", "│", "┌", "┘", "└", "┘", "┌", "─", "┘", "│", "┌", "─", "┘", "└", "┐", "┌", "─", "─", "┐", "┌", "┘", "─", "└", "┘", "└", "┐", "┌", "─", "┘", "└", "└", "┘", "┌", "┘", "┐", "─", "┌", "│"], |  | ||||||
| ["┐", "│", "┌", "└", "┐", ".", "│", "─", ".", "└", "┌", "─", "└", "─", "─", "─", "─", "─", "─", "─", "┐", "┌", "┘", "┌", "┐", "┌", "─", "─", "─", "─", "─", "─", "─", "┘", "┌", "┘", "│", "┌", "┘", "┌", "┐", "│", "┌", "┘", "│", "│", "┌", "┐", "│", "│", "┌", "┐", "│", "│", "│", "┌", "─", "┘", "┌", "│", "│", "└", "┐", "│", "│", "│", "┌", "┐", "│", "│", "│", "│", "└", "┐", "│", "│", "┌", "─", "─", "┘", "└", "┐", "│", "│", "│", "└", "┐", "│", "│", "│", "│", "│", "└", "─", "─", "┐", "│", "│", "│", "└", "┐", "│", "│", "│", "└", "┐", "┌", "┐", "└", "─", "┐", "│", "└", "─", "┐", "│", "│", "└", "─", "┐", "│", "└", "─", "─", "─", "┐", "┌", "┘", "└", "─", "┐", "─", "┘", "│", "┌", "┌", "└", ".", "─", "│"], |  | ||||||
| ["└", "┘", ".", "└", "─", "┌", "┘", "┌", "└", "─", "┌", "┌", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "│", "└", "─", "┘", "│", "└", "─", "┐", "┌", "─", "─", "─", "─", "┐", "└", "─", "┘", "│", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "│", "└", "┘", "└", "┘", "│", "│", "│", "│", "│", "┌", "┐", "┌", "┘", "└", "┐", "│", "│", "│", "│", "│", "│", "│", "│", "│", "│", "┌", "┘", "│", "│", "└", "─", "┐", "┌", "┐", "│", "│", "│", "└", "┐", "│", "│", "│", "│", "│", "└", "┐", "┌", "┐", "│", "│", "│", "│", "┌", "┘", "└", "┘", "└", "─", "┘", "│", "│", "┌", "┐", "└", "┘", "┌", "┐", "└", "─", "┘", "┌", "┐", "│", "└", "─", "─", "─", "─", "┘", "│", "┌", "┐", "┌", "┘", ".", "└", "┘", ".", "│", "┘", "─", "└", "│"], |  | ||||||
| ["│", "│", "┐", "│", "┐", "┘", "└", "─", "┘", "│", "│", "┌", "┘", "└", "┘", "│", "│", "│", "│", "│", "└", "─", "─", "┐", "│", "┌", "┐", "└", "┘", "┌", "─", "─", "─", "┘", "┌", "─", "┐", "│", "└", "┐", "└", "┘", "│", "└", "┐", "│", "└", "─", "─", "┐", "└", "│", "│", "│", "│", "└", "┘", "│", "└", "┐", "┌", "┘", "│", "│", "│", "│", "│", "│", "│", "└", "┘", "│", "│", "─", "│", "│", "┌", "─", "┘", "│", "└", "┘", "│", "│", ".", "│", "│", "│", "│", "│", "└", "┐", "│", "│", "└", "┘", "└", "┘", "└", "┘", "┌", "─", "─", "─", "─", "─", "┘", "└", "┘", "└", "┐", "┌", "┘", "│", "┌", "┐", "┌", "┘", "│", "└", "─", "┐", "┌", "┐", "┌", "┐", "└", "┘", "└", "┘", "┌", "┐", "┐", "┐", ".", "│", "└", "─", "┘", "│"], |  | ||||||
| ["─", "└", "┘", "─", "┐", "─", "┘", "│", "└", "└", "─", "└", "┐", "┌", "┐", "└", "┘", "└", "┘", "│", "┌", "┐", "┌", "┘", "└", "┘", "│", "┌", "┐", "└", "─", "─", "─", "┐", "│", "┌", "┘", "└", "┐", "└", "┐", "┌", "┘", "┌", "┘", "└", "┐", "┌", "┐", "│", "┌", "┘", "│", "│", "└", "─", "┐", "│", "┌", "┘", "│", "┌", "┘", "└", "┘", "│", "│", "│", "│", "┌", "─", "┘", "└", "┐", "│", "│", "│", "┌", "┐", "└", "─", "┐", "│", "│", "┌", "┘", "│", "└", "┘", "└", "┐", "│", "│", "└", "─", "─", "─", "┐", "┌", "─", "┘", "┌", "┐", "┌", "─", "─", "─", "─", "┐", "┌", "┘", "└", "┐", "│", "│", "│", "└", "┐", "│", "┌", "─", "┘", "│", "│", "│", "│", "┌", "─", "─", "─", "┘", "└", "┐", "─", "┐", "└", "┐", "┘", ".", "┌"], |  | ||||||
| ["│", ".", "┌", "└", "┐", "┐", "┌", "┌", "┘", "┐", ".", "└", "└", "┘", "└", "─", "─", "─", "┐", "└", "┘", "│", "└", "─", "─", "┐", "│", "│", "│", "┌", "─", "─", "┐", "└", "┘", "└", "┐", "┌", "┘", "┌", "┘", "└", "┐", "└", "┐", "┘", "│", "│", "│", "│", "└", "┐", "│", "└", "┐", "┌", "┘", "│", "│", "┌", "┘", "└", "─", "─", "┐", "│", "│", "│", "│", "└", "┐", "┌", "┐", "│", "│", "│", "│", "│", "│", "┌", "─", "┘", "│", "│", "└", "┐", "│", "└", "┌", "┐", "│", "│", "│", "┌", "─", "─", "─", "┘", "│", "┌", "┐", "│", "└", "┘", "┌", "─", "┐", "┌", "┘", "└", "─", "─", "┘", "└", "┘", "└", "─", "┘", "└", "┘", "┌", "┐", "│", "│", "│", "└", "┘", "┌", "─", "┐", "┌", "─", "┘", "─", "┐", "└", "┘", "┐", "─", "│"], |  | ||||||
| ["│", ".", "│", "└", "│", "│", "│", "│", "─", "┌", "┐", "└", "└", "┌", "┐", "┌", "┐", "┌", "└", "─", "┐", "│", "┘", "┌", "┐", "│", "│", "│", "│", "└", "─", "┐", "└", "─", "─", "─", "┘", "└", "┐", "└", "┐", ".", "│", "┌", "┘", "┌", "┘", "│", "│", "│", "┐", "│", "└", "┐", "│", "└", "┐", "│", "│", "│", "┌", "┐", "┌", "─", "┘", "└", "┘", "│", "│", "┌", "┘", "│", "│", "│", "│", "│", "│", "│", "│", "└", "─", "┐", "│", "│", "┌", "┘", "└", "┐", "│", "└", "┘", "│", "│", "└", "─", "─", "┐", "┌", "┘", "│", "│", "└", "┐", "┐", "└", "┐", "└", "┘", "┌", "┐", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "│", "│", "└", "┘", "┌", "─", "┘", "│", "│", "└", "┐", "┘", "│", "│", "┐", "┐", "│", ".", "│"], |  | ||||||
| ["└", "└", "┘", "┘", "┌", "│", "│", "│", ".", "└", "┌", "┌", "─", "┘", "└", "┘", "└", "─", "─", "─", "┘", "└", "─", "┘", "└", "┘", "│", "│", "│", "┌", "┐", "└", "─", "─", "─", "─", "─", "┐", "└", "┐", "│", "┌", "┘", "│", "┐", "│", "┌", "┘", "│", "│", "┌", "┘", "┌", "┘", "│", "┌", "┘", "│", "│", "│", "│", "│", "└", "┐", "┌", "─", "┐", "│", "│", "└", "┐", "│", "└", "┘", "│", "│", "│", "│", "└", "┐", "┌", "┘", "└", "┘", "└", "┐", "┌", "┘", "│", "┌", "┐", "│", "└", "┐", "┌", "┐", "│", "│", "┌", "┘", "└", "─", "┘", "┌", "┐", "└", "─", "┐", "│", "└", "┐", "│", "│", "│", "│", "│", "└", "┘", "│", "│", "┌", "┘", "│", "┌", "─", "┘", "┌", "─", "┐", "└", "─", "┘", "─", "┌", ".", "┌", "│", "└", "─", "│"], |  | ||||||
| ["└", "│", "│", ".", ".", "┘", "┐", "┘", "─", "└", "┌", "└", "┐", "┌", "─", "┐", "┌", "─", "─", "─", "─", "┐", "┌", "─", "─", "┐", "└", "┘", "└", "┘", "└", "┐", "┌", "┌", "┐", "┌", "┐", "└", "┐", "└", "┘", "└", "┐", "└", "┐", "│", "│", "┌", "┘", "│", "└", "┐", "└", "┐", "│", "└", "┐", "│", "│", "└", "┘", "└", "┐", "└", "┘", "┌", "┘", "│", "│", "┌", "┘", "│", "┌", "─", "┘", "│", "│", "└", "┐", "│", "│", "┌", "─", "─", "─", "┘", "│", "┌", "┘", "│", "│", "└", "┐", "└", "┘", "│", "│", "│", "│", "┌", "─", "─", "─", "┘", "└", "─", "─", "┘", "│", "┌", "┘", "│", "│", "│", "└", "┘", "┌", "─", "┘", "│", "│", "┘", "│", "└", "─", "─", "┘", "┌", "┘", "┌", "─", "─", "─", "┐", "┐", "─", ".", "┐", "└", "└"], |  | ||||||
| ["┌", "┌", "┌", "─", "┐", "─", "─", "┐", "┌", "─", "└", "┌", "┘", "│", "└", "└", "┘", "┌", "─", "─", "┐", "└", "┘", "┌", "┐", "└", "─", "─", "┐", "┌", "┐", "└", "─", "┘", "└", "┘", "└", "─", "┘", "┌", "┐", "│", "│", "┌", "┘", "│", "│", "└", "─", "┘", "│", "│", "┌", "┘", "│", "┌", "┘", "│", "└", "─", "─", "┐", "└", "┐", "┌", "┘", ".", "└", "┘", "└", "─", "┘", "│", "┌", "┐", "│", "└", "─", "┘", "└", "┘", "└", "┐", "┌", "┐", "┌", "┘", "└", "┐", "│", "└", "┐", "└", "─", "┐", "│", "│", "│", "│", "└", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "└", "─", "┘", "└", "┘", "┌", "┐", "└", "─", "─", "┘", "└", "─", "┘", "┌", "┐", "┌", "─", "┘", "└", "│", "┌", "─", "─", "┘", "┘", "┌", "─", "┐", "┌", "┘"], |  | ||||||
| ["┌", "└", "└", "┐", "┌", "─", ".", "└", ".", "│", "┌", "┘", "┌", "┘", "─", "└", "┌", "┘", "┌", "┐", "└", "─", "─", "┘", "└", "─", "─", "─", "┘", "│", "└", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "└", "┐", "│", "└", "┐", "│", "└", "─", "┐", "┌", "─", "┘", "└", "┐", "│", "└", "┐", "│", "┌", "┐", "┌", "┘", "┌", "┘", "└", "─", "─", "─", "┐", "┌", "─", "─", "┘", "│", "│", "└", "─", "─", "┐", "┌", "┐", "┐", "│", "│", "│", "└", "┐", "┌", "┘", "└", "┐", "└", "┐", "┌", "┘", "│", "│", "└", "┘", "┌", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┐", "│", "│", "┌", "─", "─", "┐", "┌", "─", "─", "┘", "│", "└", "┐", "┌", "┐", "│", "│", "┌", "┐", "└", "─", "┘", "│", "│", "└", "│"], |  | ||||||
| ["└", "│", "└", "┐", "┘", "└", "┌", ".", "┌", "─", "└", "┐", "│", "─", "┌", "┐", "└", "┐", "│", "└", "┐", "┌", "┐", "┌", "─", "┐", "┌", "─", "┐", "│", "┌", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "└", "─", "┘", "└", "─", "─", "┘", "│", "┌", "─", "┐", "│", "│", "┌", "┘", "│", "│", "│", "│", "┐", "│", "┌", "┐", "┌", "┐", "┌", "┘", "└", "─", "─", "┐", "│", "└", "┐", "┌", "─", "┘", "│", "│", "┌", "┘", "│", "└", "┐", "│", "└", "┐", "┌", "┘", "┌", "┘", "└", "┐", "└", "┘", "┌", "┐", "└", "─", "─", "─", "─", "─", "┐", "┌", "─", "─", "─", "─", "─", "┐", "│", "│", "└", "┘", "┌", "─", "┘", "└", "─", "┐", "┐", "└", "┐", "└", "┘", "└", "┘", "└", "┘", "│", "┐", "─", "┌", "─", "┌", ".", "│"], |  | ||||||
| ["┌", "│", "─", "│", ".", "─", "┘", "┌", "└", "└", "└", "└", "┘", "┐", "│", "│", "┌", "┘", "│", "┌", "└", "┘", "└", "┘", "┌", "┘", "└", "┐", "└", "┘", "└", "─", "─", "─", "─", "┐", "┌", "┐", "┌", "─", "┐", "┌", "┐", "┌", "─", "┐", "┌", "─", "┐", "│", "└", "┐", "│", "│", "│", "│", "┌", "┘", "│", "└", "┘", "┌", "┘", "│", "│", "│", "└", "┘", "┌", "─", "─", "─", "┘", "└", "┐", "│", "└", "─", "─", "┘", "│", "└", "─", "┘", "└", "│", "│", "│", "│", "│", "│", "└", "─", "┐", "│", "┌", "─", "┘", "└", "─", "─", "─", "┐", "┌", "┐", "└", "┘", "┌", "─", "┐", "┌", "┐", "│", "│", "└", "─", "┐", "└", "─", "─", "─", "┐", "└", "─", "┐", "│", "┌", "─", "─", "┐", "┌", "┐", "└", "┐", "─", "┌", "─", "└", "─", "│"], |  | ||||||
| ["┘", ".", ".", "└", ".", "┘", ".", "│", "─", "└", "┌", "└", "┌", "─", "┘", "│", "└", "┐", "│", "┌", "─", "─", "─", "─", "┘", "┌", "─", "┘", "┘", "┌", "─", "─", "─", "─", "─", "┘", "│", "│", "│", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "┌", "┘", "└", "─", "┘", "└", "┘", "│", "│", "└", "┐", "└", "─", "┐", "└", "┐", "│", "│", "└", "┐", "┌", "└", "─", "┐", "┌", "─", "┐", "│", "│", "┌", "┐", "┌", "┐", "│", "┌", "─", "─", "─", "┘", "└", "┐", "│", "└", "─", "─", "┐", "│", "│", "└", "─", "┐", "┌", "┐", "┌", "┐", "└", "┘", "└", "─", "─", "┘", "└", "└", "┘", "└", "┘", "│", "┌", "┐", "└", "┐", "┌", "┐", "└", "│", "┌", "─", "┘", "│", "└", "─", "┐", "└", "┘", "└", "─", "┘", "─", "│", ".", ".", "─", "┘"], |  | ||||||
| ["┌", "┌", ".", "┌", "┌", ".", "─", "─", "─", "─", "┘", "┘", "└", "─", "┐", "└", "┐", "└", "┘", "└", "─", "─", "─", "─", "┐", "│", "┌", "─", "┐", "└", "─", "┐", "┌", "─", "─", "─", "┘", "│", "│", "└", "─", "┘", "└", "┘", "└", "─", "┘", "└", "─", "─", "┐", "┌", "┐", "┌", "┘", "│", "┐", "└", "┐", "┌", "┘", ".", "└", "┘", "└", "┐", "│", "┌", "─", "─", "┘", "└", "┐", "└", "┘", "│", "│", "└", "┘", "└", "┘", "│", "┌", "┐", "┌", "┐", "┌", "┘", "│", "┌", "┐", "┌", "┘", "└", "┘", "┌", "┐", "└", "┘", "└", "┘", "└", "─", "─", "─", "─", "─", "─", "─", "┐", "┌", "┌", "┐", "└", "┘", "└", "┐", "└", "┘", "└", "┐", "│", "└", "─", "┐", "│", "┌", "┐", "└", "┐", "┘", "│", "│", "┘", "┌", "┐", "─", "│", ".", "┐"], |  | ||||||
| ["─", "┘", "─", "─", "└", "│", "┌", "┘", "┘", ".", "│", "└", "└", "┐", "└", "┐", "│", "┌", "┐", "┌", "┐", "┌", "─", "┐", "└", "┘", "└", "┐", "└", "┐", "┌", "┘", "│", "┌", "─", "─", "─", "┘", "└", "┐", "┌", "─", "┐", "┌", "┐", "┌", "┐", "┌", "─", "┐", "└", "┘", "│", "└", "─", "┘", "┌", "─", "┘", "└", "─", "┐", "┌", "─", "─", "┘", "│", "└", "┐", "┌", "┐", "┌", "┘", "┌", "─", "┘", "└", "─", "─", "─", "┐", "│", "│", "│", "│", "└", "┘", "┌", "┘", "│", "└", "┘", "┌", "─", "─", "┘", "│", "─", "┌", "─", "─", "─", "─", "─", "┐", "┌", "┐", "┌", "─", "┘", "┌", "┘", "└", "┐", "┌", "┐", "└", "─", "─", "─", "┘", "│", "┌", "─", "┘", "└", "┘", "│", "┌", "┘", "│", "└", "│", "┘", "─", "│", "┐", "└", "┘", "┘"], |  | ||||||
| ["│", ".", "│", "│", "└", "└", "┘", "┘", ".", "┌", "┐", "┐", "└", "┌", "┌", "┘", "└", "┘", "└", "┘", "│", "└", "┐", "│", "┌", "─", "┐", "└", "┐", "└", "┘", "┌", "┘", "└", "─", "─", "─", "─", "─", "┘", "└", "┐", "│", "│", "│", "│", "│", "└", "┐", "│", "┌", "┐", "│", "┌", "┐", "┌", "└", "─", "┐", "┌", "─", "┘", "└", "─", "─", "┐", "└", "┐", "└", "┘", "└", "┘", "│", "└", "┐", "┌", "─", "┐", "┌", "─", "┘", "│", "│", "│", "└", "─", "┐", "└", "┐", "└", "─", "┐", "└", "─", "─", "┐", "└", "┐", "│", "┌", "─", "┐", "┌", "┐", "└", "┘", "└", "┘", "└", "┌", "┘", "┌", "┐", "└", "┘", "└", "─", "─", "─", "─", "┐", "│", "└", "─", "─", "┐", "┘", "│", "└", "─", "┐", "┌", "┐", "┘", "┐", "│", "─", "┘", ".", "│"], |  | ||||||
| ["└", "┐", "└", "└", "┐", "┐", "┘", ".", "┌", "─", "┐", "┐", "┐", "└", "└", "─", "─", "─", "─", "┐", "└", "─", "┘", "│", "└", "┐", "│", "┐", "└", "─", "─", "┘", "┘", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "─", "┘", "│", "│", "│", "│", "└", "─", "┘", "└", "┘", "│", "└", "┘", "└", "─", "┐", "┌", "┘", "└", "┐", "┌", "┌", "┌", "─", "┘", "┌", "┘", "└", "┌", "┐", "┌", "─", "─", "┘", "└", "┐", "│", "└", "┐", "┌", "┘", "│", "│", "┌", "┐", "│", "┌", "┘", "┌", "┐", "│", "┌", "─", "┐", "└", "┐", "│", "│", "└", "┐", "└", "┘", "└", "─", "─", "─", "─", "─", "┘", "┌", "┘", "└", "─", "─", "─", "─", "┐", "┌", "─", "┘", "└", "─", "─", "┐", "└", "┐", "│", "┌", "─", "┘", "┌", "┐", "┐", "┌", "┐", "┐", "─", "└", "│"], |  | ||||||
| ["└", "┐", "│", "└", "└", "─", "┐", ".", "└", "┐", "└", "─", "┐", ".", "┌", "┌", "─", "┐", "│", "└", "─", "─", "┐", "│", "┌", "┘", "└", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "└", "┘", "└", "┘", "│", "│", "┌", "┐", "└", "┘", "│", "└", "─", "─", "─", "─", "┐", "└", "─", "─", "─", "─", "┘", "└", "─", "┐", "└", "┐", "┌", "┘", "┌", "┐", "│", ".", "┌", "┘", "└", "┘", "┌", "─", "┐", "┌", "┘", "│", "┌", "┘", "└", "┐", "│", "└", "┘", "│", "│", "└", "─", "┘", "└", "┘", "└", "┐", "│", "┌", "┘", "└", "┘", "┌", "┘", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "┌", "┐", "┌", "─", "─", "┐", "│", "└", "─", "┐", "┌", "┐", "┌", "└", "─", "┘", "└", "┘", "┌", "─", "┘", "│", "─", "┌", "┘", "┌", "─", "┘", "└"], |  | ||||||
| ["│", ".", "┌", "┘", "┌", "│", "│", "┌", "┌", "│", "┌", "─", "┘", "┌", "┐", "└", "┐", "│", "┌", "┐", "┌", "┌", "┘", "│", "│", "┌", "┐", "└", "┘", "└", "┘", "│", "└", "─", "─", "─", "┐", "┌", "┘", "└", "┘", "└", "┐", "┌", "┘", "┌", "┐", "┌", "─", "┐", "└", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "┌", "┘", "└", "┐", "│", "│", "└", "┐", "└", "─", "┐", "┌", "┘", "┌", "┘", "└", "┐", "│", "│", "┌", "─", "┘", "└", "─", "┐", "│", "└", "┐", "┌", "─", "─", "─", "─", "┘", "│", "└", "┐", "┌", "┐", "│", "┌", "┘", "│", "│", "└", "┘", "└", "┘", "│", "└", "─", "┘", "└", "┘", "┌", "─", "┘", "└", "─", "┐", "└", "┘", "└", "─", "┐", "┌", "─", "─", "─", "┘", "┌", "┐", "│", "┘", "┘", "┌", "┐", "└", "─", "┘"], |  | ||||||
| ["┌", "┌", "│", "│", "┌", "┌", "┌", "─", "─", "┘", "│", "┌", "─", "┘", "└", "─", "┘", "└", "┘", "└", "┐", "└", "┐", "│", "└", "┘", "└", "┐", "┌", "─", "┐", "└", "─", "─", "─", "─", "┘", "└", "─", "─", "─", "─", "┘", "└", "─", "┘", "│", "└", "┐", "└", "┐", "└", "┘", "└", "┘", "└", "┘", "│", "└", "─", "┘", "┌", "┐", "│", "│", "└", "┐", "│", "┌", "─", "┘", "└", "┐", "└", "┐", "┌", "┘", "│", "│", "└", "─", "┐", "┌", "─", "┘", "└", "─", "┘", "└", "─", "─", "─", "─", "┐", "│", "│", "└", "┘", "└", "┘", "└", "┐", "│", "└", "─", "─", "┐", "┌", "┘", "┌", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "┐", "└", "─", "─", "─", "─", "┘", "└", "─", "┐", "┌", "─", "┘", "└", "┘", "┌", "┐", "┐", "└", "┐", "└", "┘"], |  | ||||||
| ["│", "─", "┌", "─", "┐", "│", "└", "─", "─", "┐", "│", "└", "─", "─", "─", "─", "─", "─", "─", "┐", "└", "┐", "│", "│", "└", "┌", "─", "┘", "│", "┘", "└", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┐", "┌", "─", "─", "─", "┐", "└", "┐", "└", "┐", "└", "┐", "┌", "┐", "┌", "─", "┐", "└", "─", "─", "─", "┘", "│", "└", "┘", "┌", "│", "│", "└", "┐", "┌", "─", "┘", "┌", "┘", "└", "┐", "└", "┘", "┐", "┌", "┘", "│", "┌", "─", "─", "─", "┐", "┌", "─", "─", "┐", "┘", "│", "│", "┌", "┐", "┌", "┐", "┌", "┐", "│", "└", "─", "─", "─", "┘", "└", "┐", "└", "─", "┐", "┌", "─", "─", "┘", "└", "┘", "└", "┐", "└", "┌", "┐", "┘", "┌", "┐", "┌", "┘", "└", "─", "─", "─", "┐", "─", "┘", "└", "─", "┐", "┐", "┘"], |  | ||||||
| ["│", "└", "└", "┐", "└", "─", "─", "─", "┐", "│", "│", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "└", "┐", "│", "│", "└", "┐", "└", "─", "─", "┘", "┌", "┐", "┌", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "│", "┌", "─", "─", "┘", "┌", "└", "─", "┘", "┌", "┘", "│", "│", "└", "┐", "└", "─", "─", "─", "─", "┐", "│", "┌", "─", "─", "┘", "│", ".", "│", "│", "┌", "┐", "│", "┌", "┐", "└", "─", "┐", "┌", "┘", "┌", "┘", "└", "─", "─", "┐", "└", "┘", "┌", "┐", "│", "┌", "┘", "│", "│", "│", "│", "│", "│", "│", "└", "─", "─", "─", "┐", "┌", "┐", "└", "─", "─", "┘", "│", "┌", "─", "┐", "┌", "─", "┐", "└", "─", "┘", "└", "┐", "│", "└", "┘", "┌", "─", "─", "┐", "┌", "┘", "┌", "┘", "┐", "└", "└", "─", "┐"], |  | ||||||
| ["┌", "─", "─", "┘", "┌", "─", "─", "┐", "└", "┘", "│", "│", "│", "│", "│", "│", "│", "│", "│", ".", "│", "│", "└", "┐", "│", "┌", "┐", "┌", "┐", "│", "│", "└", "─", "─", "─", "┐", "┌", "─", "─", "─", "─", "┘", "└", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "└", "┐", "│", "└", "┐", "│", "┌", "┐", "─", "┌", "┐", "└", "┘", "└", "┐", "┌", "┐", "└", "┐", "│", "│", "│", "│", "└", "┘", "└", "┐", "┌", "┘", "└", "─", "┘", "┌", "┐", "┌", "┐", "└", "─", "┐", "│", "└", "┘", "└", "┐", "│", "│", "│", "│", "│", "│", "│", "┌", "┐", "┌", "┐", "└", "┘", "└", "─", "┐", "┌", "─", "┘", "└", "┐", "│", "└", "┐", "└", "─", "─", "─", "─", "┘", "│", "┌", "─", "┘", "┌", "┐", "└", "┘", ".", "┌", "┘", "│", "─", "─", "┘", "─"], |  | ||||||
| ["│", "┌", "─", "┐", "│", "┘", "└", "└", "─", "┐", "│", "│", "│", "│", "│", "│", "└", "┘", "└", "─", "┘", "└", "─", "┘", "└", "┘", "└", "┘", "└", "┘", "└", "┐", ".", "┌", "─", "┘", "│", "┌", "─", "─", "─", "─", "─", "┘", "│", "│", "│", "└", "┘", "│", "│", "└", "┘", "┌", "└", "┘", "│", "└", "─", "┘", "└", "┐", "┌", "┐", "│", "│", "└", "┐", "│", "│", "└", "┘", "└", "┐", "┌", "┐", "│", "│", "─", "└", "┌", "┐", "│", "│", "│", "│", "┌", "─", "┘", "│", "┌", "─", "┐", "│", "│", "│", "└", "┘", "└", "┘", "└", "┘", "└", "┘", "│", "┌", "─", "─", "─", "┘", "│", "┌", "─", "─", "┘", "└", "─", "┘", "┌", "┌", "┐", "│", "┌", "┐", "│", "└", "─", "─", "┘", "│", "┌", "─", "┐", "┐", "─", "┘", "└", "─", "│", "."], |  | ||||||
| ["└", "┘", "┌", "└", "┘", "┘", ".", "└", "┌", "┘", "└", "┘", "└", "┘", "└", "┘", "┌", "┐", "┌", "─", "┐", "┌", "┐", "┌", "─", "┐", "┌", "┐", "┌", "─", "┐", "└", "┐", "└", "─", "─", "┘", "└", "─", "─", "─", "┐", "┌", "┐", "│", "│", "│", "┌", "┐", "└", "─", "─", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "─", "┘", "│", "└", "┘", "└", "┐", "│", "│", "└", "┐", "┌", "┐", "└", "┘", "│", "│", "└", "┐", "┌", "┘", "└", "┘", "│", "│", "│", "└", "─", "┐", "│", "└", "┐", "│", "│", "│", "└", "┐", "┌", "┐", "┌", "─", "─", "─", "┐", "└", "┘", "┌", "┐", "┌", "┐", "│", "└", "─", "─", "─", "┐", "┌", "─", "─", "┘", "└", "┐", "│", "│", "│", "┌", "─", "─", "─", "┘", "└", "┐", "│", "└", "│", ".", "│", "└", "┘", "─"], |  | ||||||
| ["│", "└", "│", "─", "┌", "┐", "┌", "┐", "└", "─", "┐", "┌", "┐", "┌", "─", "┐", "│", "│", "│", "┐", "│", "│", "│", "│", "┌", "┘", "│", "│", "└", "┐", "└", "┐", "└", "─", "─", "─", "┐", "┌", "┐", "┌", "┐", "└", "┘", "└", "┘", "│", "│", "│", "└", "─", "─", "─", "─", "─", "─", "┐", "┌", "┘", "│", "└", "─", "┐", "└", "┐", "┌", "┐", "│", "│", "└", "┐", "│", "│", "│", "┌", "┐", "│", "│", "┌", "┘", "└", "─", "─", "┐", "└", "┘", "└", "─", "─", "┘", "└", "─", "┘", "└", "┘", "└", "─", "┘", "│", "└", "┘", "┌", "─", "─", "┘", "┌", "─", "┘", "└", "┘", "└", "┘", "┌", "┐", "┌", "┐", "└", "┘", "┌", "─", "─", "─", "┘", "│", "└", "┘", "└", "┐", "┌", "┐", "┌", "─", "┘", "└", "─", "┐", "─", "│", "┘", "┘", "."], |  | ||||||
| ["│", "┘", "┌", "─", "┘", "└", "┘", "└", "─", "─", "┘", "│", "└", "┘", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "│", "│", "└", "┐", "│", "│", "┌", "┘", "┌", "└", "┐", "┌", "─", "┐", "└", "┘", "└", "┘", "└", "─", "─", "─", "┐", "└", "┘", "└", "┐", "┌", "┐", "┌", "─", "─", "┐", "└", "┘", "└", "└", "─", "─", "┘", "┌", "┘", "│", "│", "│", "│", "┌", "┘", "│", "│", "│", "│", "└", "┘", "│", "│", "┘", ".", "┌", "─", "┘", "┌", "┐", "┌", "┐", "┌", "─", "─", "─", "─", "─", "┐", "┌", "┐", "┌", "┘", "┐", "┌", "┘", "┌", "─", "┐", "│", "┌", "─", "┐", "┌", "─", "┐", "│", "└", "┘", "│", "┌", "┐", "└", "─", "┐", "┌", "┐", "│", "┌", "─", "─", "┘", "│", "└", "┘", "┌", "─", "─", "─", "┘", "│", "│", "─", "┌", "┌"], |  | ||||||
| ["│", "│", "└", "┐", "┌", "─", "┐", "┌", "─", "┐", "┌", "┘", "┌", "─", "┘", "┌", "┘", "└", "┘", "└", "─", "┘", "│", "│", "┌", "│", "│", "│", "│", "┌", "─", "─", "┘", "└", "┐", "└", "─", "┐", "┌", "─", "┐", "┌", "┐", "┐", "└", "─", "─", "┐", "└", "┘", "└", "┘", "┌", "┐", "└", "─", "─", "─", "─", "─", "─", "┐", "│", "┌", "┘", "│", "│", "│", "└", "┐", "└", "┘", "│", "│", "┘", "└", "└", "┘", "┌", "─", "┘", "┌", "─", "┘", "│", "│", "└", "┘", "└", "┌", "─", "─", "─", "┘", "│", "│", "│", "┌", "┐", "└", "┐", "│", ".", "└", "┘", "│", "└", "└", "┘", "┌", "┘", "└", "┐", "└", "└", "┘", "└", "─", "─", "┘", "│", "└", "┘", "└", "─", "┐", "┘", "│", "┌", "─", "┘", "┌", "─", "─", "─", "┐", "┘", "┐", ".", "│"], |  | ||||||
| [".", "─", "└", "└", "┘", "┌", "┘", "└", "┐", "└", "┘", "┘", "└", "┐", "┌", "┘", ".", "┌", "─", "─", "─", "─", "┘", "└", "┐", "│", "│", "│", "│", "└", "─", "─", "─", "─", "┘", "┌", "─", "┘", "│", "┌", "┘", "│", "└", "─", "─", "─", "┐", "│", "┌", "┐", "┌", "─", "┘", "│", "┌", "─", "┐", "┌", "─", "┐", "┌", "┘", "└", "┘", "┌", "│", "│", "└", "┐", "│", "┘", "─", "│", "│", "┐", "┐", ".", "┌", "└", "─", "─", "┘", "┐", "┌", "│", "└", "┐", "┌", "─", "┘", "┌", "─", "─", "┐", "│", "│", "│", "│", "└", "┐", "└", "┘", "┌", "─", "┐", "└", "─", "─", "┐", "└", "─", "┐", "└", "─", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "┌", "─", "─", "┐", "└", "─", "┘", "└", "┐", "┌", "┘", "┌", "─", "─", "┘", "└", "┐", "─", "┐"], |  | ||||||
| ["│", ".", "│", "─", "└", "└", "┐", "┌", "┘", "┌", "─", "─", "┐", "└", "┘", "┌", "─", "┘", "┌", "┐", "┌", "─", "┐", "┌", "┘", "└", "┘", "└", "┘", "┌", "┐", "┐", "┌", "─", "─", "┘", "┌", "─", "┘", "└", "┐", "│", "┌", "─", "─", "─", "┘", "└", "┘", "└", "┘", "┌", "┐", "└", "┘", "┌", "└", "┘", "┌", "┘", "└", "─", "─", "─", "┐", "└", "┘", "┌", "┘", "└", "┐", "┘", "└", "┘", "─", "┐", "─", "┌", "─", "─", "─", "─", "┐", "┐", "└", "─", "┘", "└", "─", "─", "┘", "┌", "─", "┘", "│", "└", "┘", "│", "┌", "┘", "┌", "┐", "└", "┐", "│", "┌", "─", "─", "┘", "┌", "┐", "└", "─", "─", "┘", "│", "│", "│", "│", "│", "┌", "┘", "┌", "┐", "└", "─", "┐", "┌", "┐", "└", "┘", "┌", "┘", "│", "│", "│", "┘", "└", "┌", "┐"], |  | ||||||
| ["┌", ".", "┘", "┐", "┌", "└", "└", "┘", "┌", "└", "─", "┐", "│", "┌", "─", "┘", "┌", "┐", "│", "│", "│", "┌", "┘", "│", "┌", "┐", "┌", "┐", "┌", "┘", "└", "┐", "└", "─", "─", "─", "┘", "┌", "─", "┐", "└", "┘", "└", "┐", "┘", "┌", "┐", "┌", "┐", "┌", "─", "┘", "└", "┐", "┌", "┌", "─", "┐", "└", "─", "─", "─", "─", "┐", "│", "│", "┌", "└", "─", "┐", "└", "┐", "┘", ".", "└", "─", "┌", "└", "─", "─", "─", "┐", "└", "─", "┐", "│", "┌", "─", "─", "─", "─", "┘", "┌", "─", "┘", "┌", "┐", "│", "│", "┌", "┘", "└", "─", "┘", "└", "┘", "┌", "─", "┐", "│", "└", "─", "─", "─", "─", "┘", "└", "┘", "└", "┘", "└", "─", "┘", "└", "─", "┐", "│", "│", "│", "┌", "┐", "└", "─", "─", "─", "┐", "┐", "─", "┌", "┘"], |  | ||||||
| ["└", "┌", "│", "─", "┌", "┐", ".", "┌", "─", "─", "─", "┘", "│", "└", "┐", "┌", "┘", "│", "│", "│", "│", "│", "┌", "┘", "│", "│", "│", "│", "└", "─", "┐", "└", "─", "─", "─", "─", "─", "┘", "┌", "└", "┐", "┌", "─", "┘", "┌", "┘", "└", "┘", "│", "│", "┌", "─", "┐", "└", "┐", "└", "┐", "│", "┌", "─", "─", "┐", "┘", "│", "│", "┐", "┘", "┘", "└", "│", "┌", "┘", "└", "┐", "│", ".", "└", "┘", "│", "┌", "─", "┘", "┌", "┐", "└", "─", "┘", "┌", "┐", "┌", "┐", "┌", "┘", "┌", "─", "┘", "└", "┘", "└", "┘", "┌", "─", "─", "┐", "┌", "┐", "│", "┌", "┘", "│", "┌", "─", "─", "─", "┐", "┌", "┐", "┌", "┐", "┌", "─", "─", "─", "─", "─", "┘", "└", "┘", "└", "┘", "│", "┌", "─", "─", "─", "┘", ".", "└", "└", "┘"], |  | ||||||
| [".", "┌", "│", "│", "└", "│", ".", "└", "─", "─", "─", "┐", "└", "┐", "│", "│", "│", "└", "┘", "└", "┘", "└", "┘", "┌", "┘", "└", "┘", "└", "─", "┐", "└", "─", "─", "─", "─", "─", "─", "─", "─", "┐", "│", "└", "─", "─", "┘", "┌", "─", "┐", "└", "┘", "└", "┐", "└", "┐", "└", "─", "┘", "└", "┘", "┌", "┐", "│", "│", "│", "│", "┘", "└", "─", "─", "└", "┘", "┐", "┌", "┘", "┌", ".", "┐", "┌", "┌", "└", "─", "┐", "│", "└", "┐", "┌", "┐", "│", "│", "│", "│", "└", "┐", "└", "┐", "┌", "─", "─", "─", "─", "┘", "┌", "┐", "└", "┘", "└", "┘", "└", "─", "┘", "└", "─", "─", "┐", "│", "│", "│", "│", "│", "└", "─", "─", "─", "─", "┐", "┌", "┐", "┌", "─", "┐", "│", "└", "─", "─", "─", "┐", "┌", "┐", "┘", "┘"], |  | ||||||
| [".", "└", "─", "─", "─", "─", "┌", "─", "┘", "─", "┌", "└", "┐", "│", "└", "┘", "┌", "┐", "┌", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "─", "┐", "└", "─", "─", "┐", "┌", "─", "─", "─", "─", "─", "┘", "└", "─", "─", "─", "─", "┘", ".", "└", "─", "┐", "┌", "┘", ".", "└", "┐", "┌", "─", "┐", "┌", "┘", "└", "┘", "─", "└", "┘", "│", "│", ".", "└", "│", "┘", "│", "┘", ".", "└", "└", "┘", "┌", "─", "┌", "─", "┘", "│", "└", "│", "│", "│", "│", "│", "│", "│", "┌", "┘", "┐", "└", "┘", "┌", "┐", "┌", "─", "─", "┘", "└", "─", "─", "─", "─", "┐", "┌", "─", "─", "┐", "┌", "┘", "│", "│", "└", "┘", "└", "┐", "┌", "┐", "┌", "─", "┘", "│", "│", "│", "┌", "┘", "└", "─", "┐", "┌", "┐", "│", "┌", "└", "│", "┘"], |  | ||||||
| [".", "└", "┐", "└", "┐", "─", "┘", "─", "└", "┌", "─", "─", "┘", "└", "┐", "└", "│", "│", "└", "─", "─", "─", "─", "─", "┘", "│", "│", "┐", "└", "─", "─", "┐", "└", "┘", "┌", "─", "─", "─", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "─", "─", "┐", "│", "└", "┐", "┌", "┐", "└", "┘", ".", "└", "┘", "┌", "┐", "┌", "│", "┌", "└", "┘", "─", "┌", ".", "│", "┐", "┘", "│", ".", "┐", "┐", "┌", "┐", "┐", "└", "─", "┐", "└", "┐", "│", "│", "│", "│", "│", "│", "└", "┘", "┐", "┌", "┐", "┌", "┘", "│", "└", "─", "┐", "┌", "─", "─", "─", "─", "┐", "│", "└", "─", "┐", "│", "└", "┐", "│", "└", "─", "┐", "┌", "┘", "│", "│", "└", "─", "─", "┘", "└", "┘", "└", "─", "┐", "┐", "└", "┘", "└", "┘", "┐", "┌", "│", "┘"], |  | ||||||
| ["┘", "└", "┘", "┐", "│", "│", "┌", "│", "│", "└", "─", "┐", "┌", "┐", "└", "─", "┘", "└", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "└", "┘", "┌", "┐", "┌", "┐", "└", "─", "┐", "│", "┌", "─", "─", "┘", "│", "└", "┘", "└", "┘", "└", "┘", "┌", "─", "┘", "└", "─", "┘", "│", "│", "┌", "┐", "┌", "─", "─", "┘", "└", "─", "┐", "┐", "│", "└", "┐", "┘", "┌", "└", "┌", "─", "└", "┐", "└", "└", "┐", "┘", "│", "│", "└", "│", "┌", "┘", "└", "┘", "└", "┘", "└", "┘", "─", "┌", "┐", "│", "│", "└", "┐", "└", "─", "┐", "└", "┘", "┌", "─", "─", "─", "┘", "└", "─", "┐", "│", "└", "─", "┘", "└", "─", "─", "┘", "└", "─", "┘", "└", "┐", "┌", "─", "┐", "┌", "─", "─", "┐", "└", "─", "┐", "─", "┘", "│", "│", "┌", "┐", "┘"], |  | ||||||
| ["└", "│", "└", "─", "┐", "┘", "┌", "┌", "┌", "┐", "─", "└", "┘", "│", "┌", "┐", "┌", "┐", "└", "┘", "└", "┘", "└", "┘", "└", "─", "┐", "│", "└", "┘", "└", "─", "┐", "└", "┘", "└", "─", "─", "─", "┘", "┌", "┐", "┌", "─", "─", "─", "┘", "┌", "┐", "┘", "┌", "┐", "│", "└", "┘", "│", "│", "┌", "─", "─", "┐", "┌", "┘", "└", "┐", "┘", "└", "─", "┐", "┌", "│", "│", "└", ".", "─", "┌", "┘", "─", "│", "└", "┌", "└", "┘", "┌", "│", "┘", "│", "┌", "┐", "┐", "┌", "┘", "│", "│", "└", "─", "┘", "┌", "─", "┘", "┌", "┐", "└", "─", "─", "─", "─", "─", "┐", "│", "└", "─", "─", "─", "─", "─", "┐", "│", "─", "┌", "─", "┐", "│", "└", "┐", "│", "│", "┌", "┐", "└", "┐", "┌", "┘", "│", "│", "│", "─", "┘", "│", "┐"], |  | ||||||
| ["┌", "│", "│", "┌", "┌", "┐", "┌", "┌", "│", "└", "─", "─", "┐", "└", "┘", "└", "┘", "└", "─", "─", "─", "─", "─", "─", "─", "┐", "│", "└", "─", "─", "─", "┐", "│", "┌", "┐", "┌", "─", "─", "─", "─", "┘", "└", "┘", "┌", "─", "─", "─", "┘", "└", "─", "┘", "└", "┘", "┌", "┐", "└", "┘", "└", "─", "┐", "└", "┘", "┘", "┐", "│", ".", "│", "┘", "│", "┌", "┌", "│", "┌", "┌", "┐", "│", "└", "─", "│", "┘", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "│", "┌", "┘", "┌", "┘", "└", "─", "┐", "┌", "┘", "┌", "┐", "│", "│", "┌", "┐", "─", "┌", "─", "─", "┘", "└", "┐", "┌", "─", "─", "─", "┐", "└", "┐", "┌", "┘", "┌", "┘", "└", "─", "┘", "└", "┘", "│", "└", "┐", "└", "┘", "┘", "─", "┌", "┌", "┐", "└", "│", "┐"], |  | ||||||
| ["└", "└", "─", "┌", "└", "┐", "┐", "┘", "└", "─", "─", "┐", "│", "└", "┌", "┐", "┌", "─", "─", "┐", "┌", "─", "─", "─", "─", "┘", "└", "─", "─", "─", "┐", "│", "│", "│", "└", "┘", "┌", "┐", "┘", "┌", "─", "─", "─", "┘", "┌", "─", "─", "┐", "┌", "─", "┐", "┌", "┐", "│", "└", "┐", "┌", "┐", "┌", "┘", "┌", "┐", "┘", "┌", "┌", "─", "└", "┌", "┌", "─", "┐", "┘", "─", "┘", "└", ".", "│", "┘", "└", "─", "│", "└", "┘", "└", "┘", "│", "└", "┐", "│", "└", "┐", "│", "┌", "─", "─", "┘", "└", "─", "┘", "└", "┘", "└", "┘", "└", "┐", "└", "─", "─", "─", "┐", "│", "└", "─", "┐", "┐", "└", "┐", "│", "└", "┐", "│", "┘", "┌", "┐", "│", "┌", "─", "┘", "┌", "┘", "─", "└", "└", "┐", "│", "─", "─", "┐", "│", "┘"], |  | ||||||
| ["│", "┐", ".", "─", "┐", ".", "│", "┐", "┌", "─", "─", "┘", "└", "┐", "│", "└", "┘", "┌", "┐", "└", "┘", "┌", "┐", "┌", "─", "┐", "┌", "┐", "┌", "┐", "└", "┘", "│", "└", "─", "─", "┘", "└", "─", "┘", "┌", "─", "─", "┐", "└", "─", "┐", "│", "│", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "│", "└", "─", "┘", "└", "─", "┐", "─", "─", "┌", "┌", "└", "┐", "│", ".", "│", "│", ".", "┌", "─", ".", "└", "┌", "└", "─", "─", "┐", "┌", "┘", "┌", "┘", "└", "─", "┘", "│", "└", "─", "┐", "┌", "┐", "┌", "┐", "┌", "─", "┐", "┌", "┐", "└", "─", "─", "─", "┐", "│", "└", "┐", "┌", "┘", "┌", "┐", "└", "┘", "┌", "┘", "└", "─", "┘", "└", "┐", "│", "┌", "─", "┘", "┌", "┐", "┘", "│", "┌", "┘", ".", "│", "─", "─", "┐"], |  | ||||||
| ["┌", "┐", "└", "─", "│", "─", "└", "└", "│", "┌", "─", "─", "┐", "│", "└", "┐", "┌", "┘", "S", "┐", "┌", "┘", "└", "┘", "┘", "│", "│", "│", "│", "└", "─", "┐", "└", "─", "─", "─", "┐", "┌", "─", "┐", "│", "┌", "┐", "└", "─", "─", "┘", "└", "┘", "└", "─", "┘", "└", "┘", "│", "┌", "┘", "│", "┌", "─", "─", "─", "─", "┘", "┌", "┌", "─", "─", "┐", "│", "│", "┐", "┘", ".", "┐", "└", "│", "─", "┌", "│", "─", "└", "┌", "┘", "│", "┐", "└", "─", "─", "─", "┐", "└", "┐", ".", "└", "┘", "└", "┘", "└", "┘", "┌", "│", "│", "│", "┌", "─", "─", "┐", "└", "┘", "┌", "┘", "└", "┐", "│", "│", "┌", "┐", "│", "┌", "─", "─", "─", "┐", "└", "┘", "└", "─", "─", "┘", "│", "└", "┘", "┘", ".", ".", "└", "┐", "┐", "┘"], |  | ||||||
| ["┐", "┐", "└", "┌", "─", "┘", "┌", "┌", "└", "┘", "┌", "─", "┘", "└", "─", "┘", "│", "┌", "─", "┘", "│", "┌", "─", "─", "─", "┘", "│", "│", "│", "┌", "─", "┘", "┌", "┐", "┌", "┐", "└", "┘", "┌", "│", "└", "┘", "└", "─", "─", "┐", "┌", "┐", "┌", "┐", "┌", "─", "─", "┐", "└", "┘", "┌", "┘", "└", "─", "─", "┐", "┌", "┐", "┐", "│", "┌", "┐", "└", "┘", "└", "┐", "└", "─", "─", "┌", "┐", ".", "─", "┌", "┐", "┐", "└", "┐", "│", "┌", "┐", "┌", "┐", "┐", "└", "┐", "└", "─", "┐", "┌", "┐", "┌", "─", "─", "┐", "│", "│", "└", "┘", "┌", "┐", "└", "─", "┐", "└", "─", "─", "┘", "│", "│", "│", "└", "┘", "└", "─", "─", "┐", "└", "┐", "┌", "┐", "┌", "─", "┐", "└", "┐", "│", "┐", "─", "│", "┐", "└", "┐", "."], |  | ||||||
| ["┌", "┌", "┘", "│", "└", ".", "┌", "┘", "│", "┌", "│", "┌", "─", "┐", "┌", "─", "┘", "└", "─", "┐", "│", "└", "─", "─", "─", "─", "┘", "└", "┘", "└", "─", "─", "┘", "└", "┘", "└", "─", "─", "┐", "└", "─", "─", "┐", "┌", "┐", "└", "┘", "└", "┘", "└", "┘", "┌", "─", "┘", "┌", "┐", "└", "─", "─", "─", "┐", "└", "┘", "└", "┐", "└", "┘", "└", "┐", "┌", "─", "┘", "─", "│", "─", "┘", "┘", "┐", ".", "│", "│", "─", "│", "│", "│", "│", "│", "│", "│", "┌", "┐", "└", "─", "┐", "│", "│", "│", "└", "─", "┐", "│", "└", "┘", "┌", "─", "┘", "└", "─", "─", "┘", "┌", "┐", "┌", "─", "┘", "└", "┘", "┌", "┐", "┌", "─", "─", "┘", "┌", "└", "┘", "│", "└", "┐", "└", "─", "┘", "┐", "┌", "┐", "│", "┘", "┌", "└", "─"], |  | ||||||
| ["└", "┘", "┌", "┘", "─", "└", "└", "┐", "┌", "└", "└", "┘", ".", "│", "│", "┌", "─", "─", "┐", "│", "│", "┌", "─", "─", "─", "─", "─", "┐", "┌", "┐", "┌", "┐", "┌", "─", "┐", "┌", "─", "┐", "└", "─", "─", "┐", "└", "┘", "└", "─", "─", "┐", "┌", "─", "─", "┘", "┌", "┐", "│", "└", "─", "─", "─", "┐", "└", "┐", "┌", "─", "┘", "┌", "─", "─", "┘", "└", "┐", "┘", "┘", "│", "│", "│", "└", "┌", "─", "│", "└", "─", "─", "┘", "└", "┘", "└", "┘", "└", "┘", "└", "─", "─", "┘", "└", "┘", "└", "┐", "┌", "┘", "└", "┐", "─", "└", "─", "─", "─", "─", "─", "─", "┘", "└", "┘", "┌", "─", "─", "─", "┘", "│", "│", "┌", "─", "─", "┐", "┌", "┐", "└", "┐", "└", "┐", "┌", "─", "┐", "┘", "┐", "┘", "┐", "─", "└", "┘"], |  | ||||||
| ["│", "│", "└", "┘", ".", "│", "└", "┐", ".", "│", "┐", "┌", "─", "│", "│", "│", "┌", "┐", "└", "┘", "│", "└", "─", "─", "─", "─", "┐", "│", "│", "│", "│", "│", "└", "┐", "│", "└", "┐", "└", "┐", "┌", "┐", "│", "┐", "┌", "┐", "┌", "┐", "└", "┘", "┌", "┐", "─", "│", "└", "┘", "┌", "┐", "┌", "─", "┘", "└", "└", "┘", "┘", "┐", "└", "─", "─", "┐", "┌", "┘", ".", "┌", "─", "┐", "┘", "─", "└", "┌", "└", "─", "─", "─", "┐", "┌", "┐", "┌", "─", "─", "─", "─", "┐", "┌", "─", "─", "─", "┐", "│", "└", "─", "┐", "│", "┌", "┐", "┌", "─", "─", "─", "┐", "┌", "─", "─", "─", "┘", "┌", "─", "─", "┐", "└", "┘", "│", "┌", "─", "┘", "│", "│", "┌", "└", "┐", "└", "┘", "┌", "┘", ".", "│", ".", "─", "─", "└", "┌"], |  | ||||||
| ["└", "└", "┐", ".", "┌", "│", ".", "│", "┌", "┌", "└", "┘", "┘", "└", "┘", "└", "┘", "└", "─", "─", "┘", "┌", "┌", "─", "─", "─", "┘", "└", "┘", "└", "┘", "└", "─", "┘", "└", "─", "┘", "└", "│", "│", "│", "└", "─", "┘", "└", "┘", "└", "─", "┐", "│", "└", "┐", "│", "┌", "─", "┘", "└", "┘", "┌", "─", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "└", "─", "─", "┘", "┌", "┘", "┘", ".", "│", ".", "┌", "─", "─", "─", "┘", "│", "│", "│", "┌", "─", "─", "─", "┘", "│", "┌", "─", "─", "┘", "└", "─", "─", "┘", "└", "┘", "│", "└", "─", "─", "┐", "└", "┘", "─", "┌", "┐", "│", "│", "┌", "┐", "└", "─", "─", "┘", "└", "─", "─", "┘", "└", "─", "┐", "│", "┌", "─", "┘", "└", "┌", "┌", "─", "└", "─", "┐", "┘"], |  | ||||||
| ["┌", "┘", "┐", ".", "│", "│", "─", "┌", "┘", "│", "│", "┐", ".", "└", "┌", "─", "─", "─", "┐", "─", "┌", "┐", "└", "┐", "┌", "┐", "┌", "┐", "┌", "─", "┐", "┌", "┐", "┌", "─", "─", "─", "┐", "└", "┘", "└", "─", "─", "┐", "┌", "─", "─", "─", "┘", "└", "┐", "│", "│", "└", "┐", "┌", "┐", "┌", "┘", "┌", "┘", "│", "└", "┘", "│", "│", "│", "│", "┌", "┐", "┌", "┐", "┌", "┘", "└", "─", "┐", "┐", "─", "└", "┐", "┌", "┐", "┌", "┘", "└", "┘", "└", "─", "┐", "┌", "┐", "│", "└", "─", "─", "─", "─", "┐", "┌", "─", "─", "┐", "└", "─", "─", "─", "┘", "┘", "┌", "─", "┘", "└", "─", "┘", "│", "└", "┐", "┌", "─", "┐", "┌", "┐", "┌", "─", "─", "─", "┘", "└", "┘", "│", "│", ".", "└", "│", ".", "│", ".", "│", "┐"], |  | ||||||
| ["┌", "└", "┌", "└", "─", "┐", "┐", ".", "│", "┌", "┌", "┘", ".", "│", "└", "┐", "┌", "┐", "└", "┐", "│", "│", "┌", "┘", "│", "└", "┘", "└", "┘", "┘", "└", "┘", "│", "└", "┐", "┌", "─", "┘", "┌", "┐", "│", "┌", "┐", "│", "│", "┌", "─", "─", "┐", "┌", "┘", "│", "│", "┌", "┘", "│", "│", "│", "┌", "┘", "┐", "└", "─", "┐", "│", "│", "└", "┘", "│", "│", "│", "└", "┘", "┘", "│", "└", ".", "│", "└", "└", "└", "┘", "└", "┘", "┌", "─", "─", "─", "─", "┘", "│", "│", "│", "┌", "─", "┐", "┌", "┐", "│", "│", "┌", "┐", "└", "─", "─", "─", "─", "┐", "┌", "┘", "┌", "┐", "┌", "┐", "┌", "┘", "┘", "└", "┘", "└", "│", "│", "│", "└", "─", "─", "┐", "┌", "┐", "└", "┌", "─", "┐", "┘", "┘", "─", "┐", "┌", "─", "┐"], |  | ||||||
| ["┘", ".", "┘", "┘", ".", "│", "┐", "┌", "┐", "└", "┘", ".", "└", "┌", "┐", "└", "┘", "└", "┐", "│", "│", "│", "└", "─", "┘", "┘", "┌", "─", "─", "─", "─", "┐", "└", "─", "┘", "└", "─", "┐", "│", "│", "┌", "┘", "│", "└", "┘", "│", "┌", "─", "┘", "└", "┐", "└", "┘", "└", "┐", "│", "└", "┘", "└", "┐", "┌", "┐", "┌", "┘", "│", "│", "┌", "─", "┘", "└", "┘", "┌", "┐", "│", "│", "┘", "┌", "│", ".", "┌", "┌", "─", "─", "┐", "└", "─", "┐", "┌", "─", "┐", "│", "└", "┘", "└", "┐", "└", "┘", "└", "┘", "│", "│", "└", "┐", "┌", "─", "─", "─", "┘", "│", "┌", "┘", "└", "┘", "│", "│", "┌", "┐", "┘", "┌", "┐", "└", "┘", "│", "┌", "─", "─", "┘", "│", "└", "─", "┐", "┘", "┘", "┘", ".", ".", "│", "└", "┘", "│"], |  | ||||||
| ["└", "┌", "│", "┘", "│", ".", "┌", "└", "┐", "┐", "└", "│", "│", "│", "│", "┌", "┐", "┌", "┘", "└", "┘", "│", "┌", "┐", "┌", "─", "┘", "┌", "┐", "┌", "┐", "└", "─", "─", "─", "─", "─", "┘", "│", "│", "└", "┐", "└", "┐", "└", "│", "│", "┌", "─", "─", "┘", "┌", "┐", "┌", "┘", "│", "┌", "┐", "┌", "┘", "│", "│", "└", "┐", "│", "│", "│", "┌", "┐", "┘", "┌", "┘", "└", "┐", "┌", "┐", "┌", "┌", "┐", "└", "└", "─", "┐", "│", "┌", "┐", "└", "┘", "│", "└", "┘", "┌", "┌", "┐", "└", "─", "─", "─", "┐", "│", "└", "┐", "└", "┘", "┌", "┐", "┌", "─", "┘", "└", "─", "─", "┐", "└", "┘", "│", "└", "─", "┘", "└", "─", "┐", "└", "┘", "┌", "─", "┐", "│", "┌", "─", "┘", ".", "┌", "┐", "┐", "─", "┘", "┐", ".", "│"], |  | ||||||
| [".", "└", "┘", "─", "└", "─", "┐", "┐", "┌", "┌", "─", "─", "─", "┘", "│", "│", "│", "└", "─", "─", "┐", "│", "│", "│", "│", "┌", "─", "┘", "└", "┘", "└", "─", "─", "─", "─", "─", "┐", "┌", "┘", "│", "┌", "┘", "┌", "┘", "┌", "┘", "└", "┘", "┌", "┐", "┌", "┘", "└", "┘", "┌", "│", "│", "└", "┘", "└", "│", "│", "│", "│", "└", "┘", "└", "┘", "│", "┌", "┘", "┌", "─", "┘", "│", "└", "┐", "│", "│", "┌", "─", "┐", "│", "└", "┘", "└", "┐", "┌", "┐", "┌", "─", "─", "┘", "└", "─", "─", "─", "┐", "└", "┘", "│", "└", "─", "─", "┘", "└", "┘", "┌", "─", "─", "─", "─", "┘", "┌", "┐", "│", "┌", "─", "─", "─", "─", "┘", "┘", "┌", "┘", "┌", "┘", "│", "│", "┌", "┐", "┌", "┐", "│", "┌", "┐", "└", "└", "┌", "┘"], |  | ||||||
| ["┌", "│", "│", "┌", "│", "─", "┌", "─", "└", "└", "─", "─", "─", "┐", "└", "┘", "└", "─", "─", "┐", "│", "│", "│", "│", "└", "┘", "┌", "─", "┐", "┌", "─", "─", "─", "─", "─", "─", "┘", "│", "┌", "┘", "└", "┐", "│", "┘", "└", "┐", "┌", "─", "┘", "└", "┘", "┌", "─", "─", "─", "┘", "└", "─", "─", "┐", "│", "└", "┐", "└", "─", "┐", "┌", "─", "┘", "│", "┌", "┘", "─", "┌", "┘", "┌", "┘", "│", "│", "└", "┐", "│", "└", "┐", "┌", "─", "┘", "│", "│", "└", "─", "─", "┐", "┌", "┐", "┌", "┐", "└", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "┌", "─", "┐", "┌", "┐", "│", "│", "│", "│", "┌", "─", "─", "┐", "┌", "┐", "└", "┐", "└", "┐", "│", "└", "┘", "└", "┘", "└", "─", "─", "┐", ".", "│", "└", "┘"], |  | ||||||
| ["┌", "│", "┐", "┐", "│", "─", "│", "└", "┘", "┌", "┐", "┌", "┐", "└", "─", "─", "─", "─", "┐", "│", "│", "│", "│", "└", "┐", "┘", "└", "┐", "│", "└", "─", "┐", "┌", "─", "─", "─", "─", "┘", "└", "─", "─", "┘", "└", "┐", "┌", "┘", "└", "┐", "┌", "┐", "┌", "└", "─", "┐", "┌", "─", "─", "─", "─", "┘", "└", "┐", "│", "┌", "─", "┘", "└", "┐", "─", "│", "└", "─", "┐", "│", "┌", "┘", "┌", "┘", "└", "─", "┘", "│", "┌", "┘", "└", "─", "┐", "│", "│", "┌", "┐", "│", "└", "┘", "└", "┘", "└", "─", "─", "─", "─", "─", "─", "─", "─", "┐", "┌", "┐", "└", "┐", "│", "│", "└", "┘", "└", "┘", "└", "┘", "┌", "─", "┘", "│", "└", "─", "┘", "┌", "┘", "│", "┌", "─", "─", "┐", "┌", "┐", "┌", "┘", ".", "└", "┐", "│"], |  | ||||||
| ["┌", "┘", "│", "└", ".", "┌", "─", "┐", "─", "│", "└", "┘", "│", "┌", "─", "─", "─", "┐", "│", "└", "┘", "│", "└", "┐", "│", "┌", "┐", "│", "└", "─", "┐", "└", "┘", "┌", "─", "─", "─", "─", "┐", "┌", "┐", "┌", "┐", "└", "┘", "┌", "─", "┘", "│", "│", "┌", "┐", "┌", "│", "└", "─", "─", "┐", "┐", "┌", "┐", "│", "│", "└", "┐", "┌", "┐", "└", "─", "┘", "┌", "─", "┘", "│", "└", "┐", "│", "┌", "─", "─", "┐", "└", "┘", "┌", "─", "─", "┘", "│", "│", "│", "└", "─", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "─", "┌", "┐", "┌", "─", "─", "┘", "│", "└", "─", "┘", "└", "┘", "┌", "─", "┐", "┌", "─", "─", "┘", "┌", "┐", "│", "┌", "─", "┐", "└", "─", "┘", "└", "─", "┐", "└", "┘", "│", "│", "┘", "│", ".", "└", "."], |  | ||||||
| ["└", "─", "┘", "─", "┌", "┐", ".", "┘", ".", "└", "─", "┐", "│", "└", "─", "─", "┐", "│", "└", "─", "┐", "└", "┐", "│", "│", "│", "│", "└", "─", "┐", "│", "┌", "┐", "└", "─", "─", "─", "┐", "└", "┘", "│", "│", "│", "┌", "┐", "└", "┐", "┌", "┘", "└", "┘", "└", "─", "┘", "┌", "─", "┐", "└", "┐", "│", "└", "┘", "└", "┐", "└", "┘", "│", "┌", "┐", "┌", "┘", "┌", "┐", "│", "┌", "┘", "└", "┘", "┌", "┐", "└", "─", "┐", "│", "┌", "┐", "─", "│", "│", "│", "┌", "┐", "└", "┘", "└", "┘", "└", "┘", "│", "┌", "┘", "│", "└", "─", "─", "─", "┘", "┌", "┐", "┌", "┐", "┌", "┘", "┘", "│", "└", "─", "─", "─", "┘", "└", "┘", "└", "┐", "└", "─", "┐", "┌", "─", "┐", "└", "─", "┐", "└", "┘", "─", "┐", "─", "│", "┐"], |  | ||||||
| ["└", "┐", "┐", "┌", "┌", "└", "┐", "└", "┌", "─", "─", "┘", "└", "─", "┐", "┐", "│", "└", "┐", "┘", "└", "┐", "└", "┘", "└", "┘", "│", "┌", "┐", "│", "│", "│", "│", "┌", "─", "─", "┐", "└", "─", "┐", "└", "┘", "└", "┘", "└", "┐", "└", "┘", "┌", "─", "─", "─", "─", "┐", "└", "┐", "└", "─", "┘", "└", "─", "─", "┐", "└", "┐", "┌", "┘", "│", "│", "│", "┐", "│", "│", "│", "│", "└", "┌", "─", "┘", "│", "┐", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "└", "┘", "└", "─", "─", "─", "─", "─", "┐", "│", "│", "┌", "┘", "┘", "┌", "┐", "┌", "─", "┘", "└", "┘", "│", "└", "─", "┐", "│", "┌", "─", "┐", "┌", "─", "─", "─", "─", "┘", "┌", "┐", "└", "┘", "┐", "│", "┌", "─", "┘", "┐", "┘", "┌", "└", "┐", "│", "│"], |  | ||||||
| [".", "│", "┌", "┌", "┐", "┘", "┐", "└", "└", "─", "─", "┐", "┌", "┐", "└", "┐", "└", "┐", "└", "┐", "┐", "└", "┐", "┌", "─", "┐", "└", "┘", "│", "│", "└", "┘", "│", "└", "─", "┐", "│", "┌", "┐", "└", "┐", "┌", "┐", "┌", "┌", "│", "┌", "┐", "└", "─", "─", "─", "┐", "│", "┌", "┘", "└", "┌", "┐", "└", "┌", "┐", "└", "┐", "│", "└", "┐", "│", "└", "┘", "┌", "┘", "│", "│", "└", "┐", "└", "─", "┐", "└", "┐", "└", "┐", "│", "│", "│", "└", "┐", "└", "┐", "┌", "─", "┐", "┌", "─", "─", "─", "┘", "└", "┘", "└", "─", "┐", "│", "│", "└", "─", "─", "─", "┐", "└", "─", "─", "┘", "└", "┘", ".", "│", "└", "─", "─", "─", "─", "─", "┘", "└", "┐", "┌", "┌", "┘", "└", "─", "─", "┐", "─", "┘", "─", "└", "─", "┐"], |  | ||||||
| ["│", "─", "┌", "┘", "│", "│", "┌", "┐", ".", "┌", "┐", "└", "┘", "└", "┐", "└", "┐", "│", "┌", "┘", "┌", "┐", "└", "┘", "┌", "┘", "┌", "┐", "│", "└", "─", "┐", "│", "┌", "─", "┘", "│", "│", "└", "┐", "└", "┘", "└", "┐", "┌", "┘", "│", "└", "┐", "┌", "┐", "┌", "┘", "│", "│", "┌", "┐", "│", "└", "┐", "│", "└", "┐", "│", "│", "─", "│", "└", "┐", "┐", "└", "┐", "└", "┘", "┌", "┘", "┌", "─", "┘", "┌", "┘", "┌", "┘", "└", "┘", "│", "┌", "┘", "┌", "┘", "└", "┐", "│", "└", "─", "─", "─", "┐", "┌", "─", "─", "┐", "└", "┘", "└", "─", "─", "─", "─", "┘", "┌", "─", "─", "─", "┐", "┌", "─", "┘", "┌", "┐", "┌", "┐", "┌", "─", "─", "┐", "└", "┐", "│", "┌", "┐", "┌", "─", "┘", "┘", "─", "┐", "└", "─", "┘"], |  | ||||||
| ["└", "└", "└", "┐", "└", "─", "┘", "│", "┌", "┘", "└", "─", "─", "┐", "└", "┐", "└", "┘", "└", "─", "┘", "└", "─", "─", "┘", "┌", "┘", "│", "└", "─", "─", "┘", "└", "┘", "┌", "┐", "└", "┘", "┌", "└", "─", "─", "─", "┘", "└", "─", "┘", "┘", "└", "┘", "│", "└", "┐", "│", "│", "│", "│", "└", "┐", "└", "┘", "┌", "┘", "│", "└", "─", "┘", "┌", "┘", "┌", "┐", "└", "┐", "┌", "┘", "┘", "└", "─", "┐", "│", "┌", "┘", "┌", "─", "─", "┘", "└", "┐", "│", "┌", "┌", "┘", "│", "┌", "─", "─", "─", "┘", "│", "┌", "─", "┘", "┌", "┐", "┌", "─", "─", "┐", "┌", "─", "┘", "┌", "─", "─", "┘", "│", "┌", "┐", "│", "│", "│", "│", "└", "─", "┐", "└", "─", "┘", "└", "┘", "│", "└", "─", "┐", "┌", "─", "┘", "┌", "┘", "│"], |  | ||||||
| ["┘", ".", "└", "└", "─", "─", "┐", "│", "└", "─", "┐", "┌", "┐", "└", "┐", "└", "┐", "┌", "─", "─", "─", "─", "┐", "┌", "─", "┘", "┐", "└", "─", "─", "┐", "┌", "┐", "┌", "┘", "└", "─", "─", "─", "─", "┐", "┘", "┌", "┐", "┌", "─", "─", "─", "─", "┐", "└", "─", "┘", "└", "┘", "│", "│", "│", "└", "─", "┐", "└", "┐", "└", "─", "┐", "┌", "┘", "┌", "┘", "│", "┌", "┘", "└", "┐", "┌", "─", "─", "┘", "│", "└", "┐", "│", "┌", "┐", "┌", "┌", "┘", "└", "┐", "└", "┐", "│", "└", "─", "─", "─", "─", "┘", "└", "┐", "┌", "┘", "└", "┘", "┌", "┐", "└", "┘", "┌", "─", "┘", "┘", "┌", "┐", "└", "┘", "└", "┘", "└", "┘", "└", "─", "┐", "└", "─", "─", "─", "┐", "└", "│", "┌", "─", "┘", "┘", "┌", "┐", ".", "┌", "┘"], |  | ||||||
| ["│", "┐", "│", "└", "┌", "─", "┘", "└", "─", "┐", "│", "│", "└", "┐", "└", "─", "┘", "│", "┌", "─", "─", "─", "┘", "│", "┌", "─", "─", "─", "─", "─", "┘", "│", "│", "│", "┌", "─", "─", "─", "─", "─", "┘", "┌", "┘", "└", "┘", "┌", "─", "─", "─", "┘", "┌", "─", "┐", "┌", "┐", "│", "│", "┌", "─", "┐", "└", "┐", "│", "┌", "─", "┘", "└", "┐", "└", "┐", "└", "┘", "┌", "─", "┘", "└", "─", "─", "┐", "└", "─", "┘", "│", "│", "└", "┐", "└", "─", "┐", "│", "┌", "┘", "└", "┐", "┌", "┐", "┌", "┐", "┌", "─", "┘", "│", "┐", "┌", "┐", "│", "└", "─", "─", "┘", "┌", "─", "┐", "│", "└", "─", "─", "─", "─", "─", "─", "─", "┐", "│", "┌", "─", "─", "┐", "│", "┐", "└", "┘", ".", "│", "└", "└", "┌", "┐", "┘", "┐"], |  | ||||||
| ["│", "─", "└", "┘", "└", "┐", "┌", "─", "─", "┘", "└", "┘", "│", "└", "─", "─", "─", "┘", "└", "┐", "┌", "┐", "┌", "┘", "│", "┌", "─", "┐", "┌", "─", "┐", "│", "└", "┘", "└", "┐", "┌", "┐", "─", "┌", "─", "┘", "┌", "─", "─", "┘", "┌", "─", "─", "┐", "└", "┐", "│", "│", "│", "│", "│", "│", "┌", "┘", "┌", "┘", "│", "└", "─", "┐", "┌", "┘", "┌", "┘", "┌", "┐", "│", "┌", "┐", "┌", "┐", "─", "└", "─", "┐", "┌", "┘", "└", "┐", "│", "┌", "┐", "│", "│", "│", "┌", "┐", "└", "┘", "└", "┘", "│", "└", "─", "┐", "│", "┌", "┘", "└", "┘", "┌", "┐", "┌", "─", "┘", "┌", "┘", "│", "┌", "─", "─", "─", "─", "─", "─", "─", "┘", "│", "└", "─", "┐", "└", "┘", "┘", "┌", "└", "─", "┐", ".", "│", "┘", "┌", "─", "─"], |  | ||||||
| ["┐", "│", "└", "┌", "─", "┘", "└", "─", "─", "┐", "┌", "┐", "┌", "─", "─", "─", "─", "─", "┐", "│", "│", "│", "└", "┐", "└", "┘", "┌", "└", "┘", "└", "└", "┘", "┌", "─", "┐", "└", "┘", "└", "┐", "│", "┌", "─", "┘", "─", "┌", "┐", "└", "┐", "┌", "┘", "┌", "┘", "└", "┘", "│", "│", "│", "│", "└", "┐", "└", "┐", "└", "─", "─", "┘", "└", "┐", "│", "┌", "┘", "└", "┘", "│", "│", "│", "│", "┌", "┐", "┌", "┘", "└", "┐", "┌", "┘", "└", "┘", "└", "┘", "│", "└", "┘", "└", "─", "─", "┐", "┌", "┘", "┌", "┐", "└", "┘", "└", "┐", "┌", "┐", "│", "│", "│", "┌", "─", "┘", "┌", "┘", "└", "┐", "┌", "─", "─", "─", "┐", "┌", "┐", "└", "─", "┐", "└", "┐", "└", "┘", "┐", "┐", "└", "│", "┌", "│", "┌", "┘", "┘", "│"], |  | ||||||
| ["└", "┐", ".", "└", "─", "┐", "┌", "─", "─", "┘", "│", "│", "└", "─", "─", "─", "─", "┐", "│", "└", "┘", "└", "─", "┘", "┌", "─", "─", "─", "─", "┐", "┌", "┐", "└", "┐", "└", "─", "─", "┐", "└", "┘", "└", "─", "─", "─", "┘", "│", "┌", "┘", "└", "┐", "└", "─", "─", "┐", "│", "│", "│", "└", "┐", "└", "┐", "│", "┌", "┐", "┌", "─", "┐", "│", "│", "└", "─", "┐", "┌", "┘", "│", "│", "│", "│", "│", "└", "┐", "┌", "┘", "└", "┐", "┌", "┐", "┌", "┐", "└", "┐", "┌", "┐", "└", "┌", "┘", "└", "─", "┘", "└", "─", "─", "┐", "└", "┘", "└", "┘", "│", "│", "└", "─", "─", "┘", "┌", "┐", "└", "┘", "┌", "─", "─", "┘", "│", "└", "─", "┐", "└", "─", "┘", ".", "│", "└", "┘", "─", "└", "─", "┘", "┌", "┘", "┌", "│"], |  | ||||||
| ["┌", "┌", "┌", "─", "─", "┘", "└", "─", "─", "┐", "│", "│", "┌", "┐", "┌", "┐", "┌", "┘", "└", "─", "─", "┐", "┌", "┐", "└", "─", "─", "─", "┐", "└", "┘", "└", "┐", "└", "─", "─", "┐", "└", "┐", "┌", "┐", "┌", "─", "┐", "┌", "┘", "│", "┌", "─", "┘", "┌", "┐", "┌", "┘", "└", "┘", "└", "┐", "│", "┌", "┘", "└", "┘", "│", "│", "┌", "┘", "│", "│", "┌", "─", "┘", "└", "┐", "└", "┘", "│", "│", "│", "┌", "┘", "│", "┌", "┐", "└", "┘", "└", "┘", "└", "┐", "│", "│", "└", "┐", "└", "┐", "┌", "┐", "┌", "─", "─", "─", "┘", "┌", "─", "─", "─", "┘", "│", "┌", "─", "─", "─", "┘", "└", "─", "─", "┘", "┌", "┐", "┌", "┘", "┌", "┐", "└", "─", "─", "─", "┐", ".", "│", "┘", "│", "└", "└", "┐", "┌", "─", "─", "┐"], |  | ||||||
| ["│", "┘", "└", "─", "─", "─", "┐", "┌", "─", "┘", "│", "│", "│", "│", "│", "│", "└", "─", "─", "┐", "┌", "┘", "│", "│", "┌", "┐", "┌", "┐", "└", "─", "─", "┐", "└", "─", "─", "─", "┘", "┘", "└", "┘", "│", "│", "┌", "└", "┘", "┌", "│", "│", "┌", "─", "┘", "│", "└", "┐", "┌", "┐", "┌", "┘", "│", "└", "┐", "┌", "┐", "└", "┘", "└", "┐", "└", "┘", "└", "┐", "┌", "┐", "│", "┌", "─", "┘", "│", "│", "└", "┐", "│", "│", "└", "─", "─", "┐", "┌", "┐", "│", "│", "└", "┐", "│", "─", "└", "┘", "│", "└", "┐", "┌", "─", "┐", "└", "─", "─", "─", "─", "┘", "└", "┐", "┌", "┐", "┌", "┐", "┌", "─", "─", "┘", "└", "┘", "┌", "┘", "└", "─", "─", "─", "─", "┘", "┌", "─", ".", "┘", "│", "┘", "┌", "─", "┌", "┘", "."], |  | ||||||
| ["└", ".", "│", "┌", "─", "─", "┘", "└", "─", "─", "┘", "└", "┘", "└", "┘", "│", "┐", "┌", "─", "┘", "└", "─", "┘", "│", "│", "│", "│", "│", "┌", "─", "┐", "│", "┌", "┐", "┌", "┐", "┌", "┐", "┌", "┐", "└", "┘", "┌", "─", "─", "─", "┘", "│", "└", "┐", "┌", "┘", "─", "│", "│", "└", "┘", ".", "└", "┐", "└", "┘", "│", "└", "┌", "┐", "└", "┐", "┌", "┐", "└", "┘", "│", "│", "│", "┌", "┐", "│", "└", "┐", "│", "└", "┘", "┌", "─", "─", "┘", "│", "└", "┘", "└", "─", "┘", "│", "┌", "─", "┐", "│", "┌", "┘", "└", "┐", "│", "┌", "┐", "┌", "─", "┐", "┌", "─", "┘", "│", "│", "│", "└", "┘", "┌", "─", "─", "┐", "┌", "┘", "┌", "┐", "┌", "┐", "┐", "┌", "┐", "─", "┐", "─", "┘", "┌", "─", "└", ".", "┘", "─", "┐"], |  | ||||||
| ["┌", "─", "└", "└", "─", "┐", "┌", "┐", "┌", "─", "┐", "┌", "┐", "┌", "┐", "└", "┐", "└", "┐", "┌", "┐", "┌", "┐", "└", "┘", "└", "┘", "└", "┘", "┌", "┘", "└", "┘", "└", "┘", "└", "┘", "└", "┘", "└", "─", "┐", "└", "─", "─", "─", "┐", "└", "─", "┘", "└", "─", "┐", "│", "│", "┌", "┐", "┌", "┐", "│", "┌", "─", "┘", "┌", "┘", "└", "─", "┘", "│", "└", "─", "─", "┘", "│", "└", "┘", "│", "└", "┐", "│", "│", "┌", "─", "┘", "┌", "─", "┐", "└", "─", "┐", "┌", "─", "─", "┘", "└", "┐", "│", "│", "└", "─", "┐", "│", "└", "┘", "└", "┘", "─", "└", "┘", "┌", "┐", "│", "│", "│", "┌", "─", "┘", "┌", "┐", "└", "┘", "┌", "┘", "└", "┘", "└", "─", "┘", "│", ".", "┌", "┐", "└", "┘", "└", "│", "┌", "┘", "┌", "│"], |  | ||||||
| ["┌", "┐", ".", "┌", "─", "┘", "│", "│", "│", "┌", "┘", "│", "└", "┘", "└", "┐", "│", "┘", "└", "┘", "└", "┘", "└", "─", "─", "─", "─", "─", "┐", "│", "┌", "┐", "┌", "┐", "┐", "┌", "┐", "┌", "─", "─", "─", "┘", "│", "┌", "┐", "┌", "│", "┌", "┐", "┌", "┐", "┌", "┘", "│", "│", "│", "└", "┘", "│", "│", "│", "┌", "┐", "└", "─", "─", "─", "┐", "│", "┌", "┐", "┌", "─", "┘", "┌", "─", "┘", "┌", "┘", "│", "│", "│", "┌", "┐", "└", "┐", "│", "┌", "─", "┘", "└", "─", "┐", "┘", "┌", "┘", "│", "└", "┐", "┌", "┘", "│", "┌", "─", "─", "─", "─", "─", "─", "┘", "└", "┘", "└", "┘", "└", "─", "─", "┘", "└", "┐", "│", "│", "┌", "─", "─", "─", "─", "─", "┘", "┐", "┘", "└", "┐", "┘", "┌", "┌", "┘", "┌", "─", "┐"], |  | ||||||
| ["└", "┘", "─", "│", "┌", "┐", "│", "└", "┘", "│", "┌", "┘", "┌", "─", "─", "┘", "└", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "└", "┘", "└", "┘", "└", "─", "┘", "└", "┘", "┌", "─", "─", "─", "┐", "│", "│", "┌", "┘", "│", "└", "┘", "│", "│", "┌", "┘", "│", "└", "─", "┐", "│", "│", "│", "│", "│", "┌", "─", "─", "┐", "│", "└", "┘", "│", "└", "─", "┐", "└", "┐", "┌", "└", "┐", "│", "│", "│", "│", "└", "┐", "│", "│", "│", "┌", "┐", "┌", "─", "┘", "┌", "┘", "┌", "┘", ".", "│", "└", "┐", "└", "┘", ".", "┌", "─", "─", "─", "─", "─", "┐", "┌", "─", "─", "─", "─", "─", "─", "─", "┘", "┌", "┘", "└", "─", "─", "─", "─", "┐", "┌", "┐", "┐", "┘", "└", "┌", "┌", "└", "─", "└", "┘", "│"], |  | ||||||
| ["└", "│", "┌", "┘", "│", "└", "┘", "┌", "─", "┘", "└", "┐", "│", "┌", "┐", "┌", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┐", "┌", "┐", "┌", "─", "┐", "┌", "─", "─", "┐", "┌", "┐", "│", "┌", "─", "─", "┘", "│", "│", "└", "┐", "│", "┌", "┐", "└", "┘", "│", "┌", "┘", "┌", "┐", "│", "│", "│", "│", "│", "│", "└", "─", "┐", "│", "│", "┌", "─", "┘", "┌", "┐", "│", "┌", "┘", "┌", "┐", "│", "│", "│", "│", "│", "┌", "┘", "│", "│", "└", "┘", "│", "│", "┌", "┐", "└", "┐", "│", "┌", "┐", "│", "┌", "┘", "└", "┌", "┐", "└", "─", "─", "─", "─", "┐", "│", "└", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "─", "─", "─", "┘", "│", "└", "┐", "┐", "┌", "┐", "┘", "┌", "┌", "┘", "┘", "┐"], |  | ||||||
| ["┌", "└", "│", "┌", "┘", "┌", "┐", "│", "┌", "─", "─", "┘", "└", "┘", "└", "┘", "┌", "─", "─", "─", "┐", "┌", "─", "┐", "┌", "─", "┘", "│", "│", "│", "┌", "┘", "│", "┌", "─", "┘", "│", "│", "│", "└", "─", "┐", "┌", "┘", "│", "┌", "┘", "│", "│", "└", "┐", "┌", "┘", "│", "┌", "┘", "│", "│", "└", "┘", "│", "│", "└", "┐", "┌", "┘", "└", "┘", "└", "┐", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "│", "│", "│", "│", "│", "│", "┌", "┘", "└", "┐", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "│", "│", "│", "└", "┐", "┌", "┘", "└", "┐", "┌", "┐", "┌", "┐", "│", "│", "┌", "─", "┐", "┌", "─", "─", "─", "─", "─", "─", "┘", "└", "┘", "│", "┌", "─", "─", "┘", "┌", "┘", "┌", "┐", "┘", ".", "└", "┐", "┌", "┐", "┐"], |  | ||||||
| ["└", "└", "└", "┘", "└", "│", "│", "└", "┘", "┌", "┐", "┌", "─", "┐", "┌", "─", "┘", "┌", "┐", "┌", "┘", "└", "┐", "│", "└", "─", "─", "┘", "└", "┘", "└", "┐", "│", "└", "┐", "┌", "┘", "│", "└", "─", "┐", "│", "│", "┘", "└", "┘", "┌", "┘", "│", "┌", "┘", "└", "┐", "│", "└", "┐", "└", "┘", "┌", "┐", "│", "│", "│", "│", "└", "─", "─", "─", "┐", "│", "│", "└", "│", "│", "│", "└", "┐", "│", "│", "│", "│", "│", "│", "│", "└", "─", "┐", "│", "│", "┌", "┘", "│", "│", "└", "┐", "└", "┘", "│", "└", "┐", "│", "└", "─", "┐", "│", "│", "│", "│", "│", "│", "└", "┘", "┌", "┘", "└", "─", "─", "─", "─", "─", "─", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "┘", "┌", "┘", "└", "─", "┐", "└", "└", "┌", "┘", "└"], |  | ||||||
| ["└", "┐", "┌", "┌", "┐", "│", "└", "─", "─", "┘", "│", "│", "┌", "┘", "└", "┐", "┌", "┘", "│", "│", "│", "┌", "┘", "└", "─", "─", "─", "─", "┐", "┌", "┐", "│", "│", "┌", "┘", "└", "┐", "└", "┐", "┌", "┘", "│", "└", "─", "┐", "│", "└", "┐", "│", "└", "─", "─", "┘", "│", "┌", "┘", "┘", "┌", "┘", "│", "│", "└", "┐", "│", "┌", "┐", "┌", "─", "┘", "│", "│", "┌", "┘", "│", "│", "┌", "┘", "│", "│", "│", "│", "└", "┘", "└", "┐", "┌", "┘", "└", "┘", "└", "─", "┘", "└", "┐", "│", "┐", "┌", "┘", "┌", "┘", "│", "┌", "─", "┘", "└", "┘", "│", "│", "└", "┘", "┌", "┐", "└", "─", "┐", "┌", "─", "─", "─", "─", "┐", "┌", "─", "┐", "┌", "─", "┘", "└", "┘", "┐", "│", "┌", "─", "─", "┘", "┐", ".", "│", ".", "│"], |  | ||||||
| ["┌", "─", "─", "┘", "└", "┘", "┌", "─", "─", "┐", "└", "┘", "│", "┌", "┐", "└", "┘", "┌", "┘", "└", "┐", "└", "─", "─", "─", "─", "─", "┐", "└", "┘", "└", "┘", "│", "│", "┌", "┐", "│", "┌", "┘", "│", "┌", "┘", "┌", "┐", "│", "┌", "─", "┘", "└", "┐", "┌", "─", "┐", "└", "┘", "┌", "┐", "└", "┐", "└", "┘", "┌", "┘", "└", "┘", "│", "└", "─", "┐", "└", "┘", "│", "┌", "┘", "│", "└", "┐", "│", "│", "│", "└", "┐", "┌", "┐", "│", "│", "┌", "┐", "┌", "┐", "┌", "─", "─", "┘", "└", "┐", "│", "┌", "┘", "┌", "┘", "└", "─", "┐", "┌", "─", "┘", "└", "─", "─", "┘", "│", "┌", "─", "┘", "└", "┐", "┐", "┌", "┐", "└", "┘", "│", "└", "┘", "─", "┌", "─", "─", "─", "┘", "└", "┐", ".", "│", "┐", "└", "┐", "┐", "┌"], |  | ||||||
| ["│", "┌", "─", "─", "─", "┐", "│", ".", "┌", "┘", "┌", "┐", "└", "┘", "└", "┐", "┌", "┘", "┌", "┐", "└", "─", "─", "─", "─", "─", "─", "┘", "┌", "┐", "┌", "─", "┘", "│", "│", "│", "│", "└", "┐", "│", "└", "┐", "│", "│", "│", "└", "─", "┐", "┌", "┘", "└", "┐", "└", "─", "┐", "│", "└", "─", "┘", "┌", "┐", "└", "─", "─", "┐", "└", "┐", "┌", "┘", "┌", "─", "┘", "└", "┐", "└", "┐", "│", "│", "│", "└", "┐", "│", "│", "└", "┘", "└", "┘", "└", "┘", "│", "│", "┌", "┐", "┌", "┐", "│", "│", "└", "┐", "└", "┐", "┌", "┐", "│", "└", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "└", "─", "─", "┐", "└", "─", "┘", "└", "─", "─", "┐", "┌", "─", "─", "┘", "┌", "─", "┐", "┌", "┐", "└", "─", "┐", "─", "┐", ".", "┌", "│"], |  | ||||||
| ["└", "┘", "─", "┌", "─", "┘", "└", "┐", "└", "─", "┘", "└", "─", "─", "┐", "└", "┘", "┌", "┘", "│", "┌", "┐", "┌", "┐", "┌", "─", "─", "─", "┘", "│", "└", "─", "┐", "│", "│", "└", "┘", "┌", "┘", "└", "┐", "│", "│", "│", "│", "┌", "─", "┘", "└", "─", "┐", "│", "┌", "─", "┘", "└", "─", "─", "┐", "│", "└", "┐", "┌", "─", "┘", "┌", "┘", "│", ".", "└", "┐", "┌", "┐", "└", "┐", "│", "│", "│", "│", "┌", "┘", "│", "└", "─", "┐", "┌", "┐", "┌", "─", "┘", "│", "│", "│", "│", "│", "│", "└", "┐", "└", "┐", "│", "│", "│", "└", "┐", "│", "│", "└", "┘", "│", "└", "─", "─", "┐", "┌", "└", "┐", "┌", "┐", "┌", "─", "─", "┘", "│", "┌", "─", "─", "┘", "─", "└", "┘", "└", "─", "─", "┘", "─", "│", "─", "└", "┘"], |  | ||||||
| ["└", "└", "┌", "┘", "┌", "─", "─", "┘", "┌", "─", "─", "┐", "┌", "─", "┘", "┌", "┐", "└", "┐", "└", "┘", "│", "│", "└", "┘", "┌", "─", "─", "─", "┘", "┌", "┐", "│", "│", "│", "┌", "┌", "┘", "┌", "┐", "│", "└", "┘", "└", "┘", "└", "┐", "┌", "─", "┐", "└", "┘", "└", "┐", "┌", "┐", "┌", "┌", "┘", "└", "┐", "│", "└", "─", "┐", "└", "┐", "└", "┐", "─", "│", "│", "└", "┐", "│", "│", "│", "└", "┘", "│", "┌", "┘", "┌", "─", "┘", "│", "│", "└", "─", "┐", "│", "│", "└", "┘", "│", "│", "┌", "┘", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "│", "┌", "─", "┘", "┌", "─", "┐", "│", "┌", "─", "┘", "│", "│", "└", "─", "┐", "│", "│", "│", "┌", "─", "─", "─", "─", "─", "─", "─", "─", "┐", "─", "─", "┘", "└", "│"], |  | ||||||
| ["┌", "─", "└", "┐", "└", "┐", ".", ".", "└", "─", "┐", "└", "┘", "┌", "┐", "│", "└", "┐", "└", "─", "┐", "└", "┘", "┌", "─", "┘", "┌", "┐", "┌", "┐", "│", "│", "│", "│", "└", "┐", "│", "┌", "┘", "└", "┘", "┌", "┌", "─", "─", "─", "┘", "└", "┐", "└", "┐", "┌", "┐", "└", "┘", "└", "┐", "└", "┐", "┌", "┘", "│", "┌", "─", "┘", "┘", "└", "┐", "└", "┐", "└", "┘", "└", "└", "┘", "│", "└", "┐", "┌", "┘", "└", "┐", "└", "─", "┐", "│", "│", "┌", "─", "┘", "│", "└", "─", "┐", "└", "┘", "└", "┐", "│", "│", "└", "┘", "│", "│", "┌", "┘", "│", "└", "─", "┐", "└", "┐", "│", "│", "└", "┐", "┌", "┘", "│", "┌", "┐", "└", "─", "┘", "└", "┘", "┌", "┐", "┌", "─", "─", "─", "─", "─", "┘", "┐", ".", "└", "│", "│"], |  | ||||||
| ["┘", "┘", "┌", "└", "┐", "│", "┐", "└", "└", "┐", "└", "┐", "┌", "┘", "│", "└", "┐", "└", "┐", "┌", "┘", "┌", "─", "┘", "┌", "┐", "│", "│", "│", "└", "┘", "│", "│", "└", "┐", "│", "│", "│", "│", "┌", "─", "─", "┘", "┌", "┐", "┌", "─", "─", "┘", "┌", "┘", "│", "│", "┌", "┐", "┌", "┘", "┌", "│", "└", "┐", "│", "└", "─", "┐", "┌", "┐", "└", "┐", "│", "┌", "┌", "─", "─", "┐", "│", "┌", "┘", "└", "┐", "┌", "┘", "┌", "─", "┘", "│", "│", "└", "┐", "┌", "┘", "┌", "┐", "└", "─", "─", "┐", "│", "└", "─", "─", "┐", "│", "│", "└", "┐", "└", "┐", "┌", "┘", "┌", "┘", "│", "│", "┌", "┘", "└", "┐", "│", "│", "└", "┐", "┌", "┐", "┌", "┐", "│", "│", "└", "─", "┐", "┌", "─", "┐", "└", "┌", "─", "┐", "─", "┐"], |  | ||||||
| ["│", "┐", "└", "┐", "│", "│", "┘", "─", "└", "┘", ".", "│", "└", "┐", "└", "┐", "└", "┐", "│", "│", "┌", "┘", "┌", "─", "┘", "│", "│", "│", "└", "┐", "┘", "└", "┘", "└", "│", "│", "│", "└", "┐", "│", "┌", "┐", "┌", "┘", "│", "│", "┌", "─", "┐", "└", "┐", "│", "│", "│", "│", "└", "─", "┐", "└", "┐", "│", "│", "┌", "─", "┘", "│", "│", "┌", "┘", "└", "┐", "│", "┌", "─", "┘", "│", "│", "┌", "┐", "└", "┘", "┌", "┘", "┌", "┐", "│", "│", "┌", "┘", "│", "┌", "┘", "└", "─", "┐", "┌", "┘", "└", "─", "┐", "┌", "┘", "└", "┘", "└", "└", "┐", "│", "└", "┐", "└", "┐", "└", "┘", "│", "┌", "┐", "│", "│", "│", "┌", "┘", "│", "│", "│", "└", "┘", "└", "─", "─", "┘", "│", "┌", "┘", "┘", "└", "┐", "│", "└", "│"], |  | ||||||
| ["┘", "┘", "│", "┌", "└", "┘", "│", "└", "┘", "┐", "└", "└", "─", "┘", ".", "└", "┐", "│", "│", "│", "└", "┐", "│", "─", "┌", "┘", "│", "└", "┐", "└", "─", "─", "─", "┐", "│", "│", "│", "┌", "┘", "└", "┘", "└", "┘", "┌", "┘", "└", "┘", "┌", "┘", "┌", "┘", "│", "│", "│", "│", "┌", "┐", "└", "┐", "│", "│", "└", "┘", "┐", "┌", "┘", "└", "┘", "┌", "┐", "└", "┘", "└", "┐", "└", "│", "└", "┘", "└", "─", "┐", "└", "┐", "│", "│", "│", "│", "│", "┌", "┘", "│", "┌", "─", "─", "┘", "└", "─", "─", "┐", "│", "└", "─", "─", "┐", ".", "┌", "└", "┘", "─", "└", "┐", "│", "┌", "─", "┘", "│", "│", "│", "│", "│", "└", "┐", "│", "│", "└", "─", "─", "─", "┐", "┌", "─", "┘", "└", "┐", ".", "│", "┌", "│", "─", "┘"], |  | ||||||
| ["│", ".", "─", "┘", ".", "┌", "┐", "└", "┘", "┘", "└", "└", "└", "┌", "─", "─", "┘", "│", "│", "│", "┌", "┘", "│", "┌", "┘", "┌", "┘", "┌", "┘", "┌", "┐", "┌", "┐", "│", "└", "┘", "│", "│", "┌", "┐", "┌", "─", "─", "┘", "┌", "─", "┐", "└", "┐", "└", "─", "┘", "│", "│", "│", "│", "└", "┐", "│", "│", "└", "┐", "┌", "─", "┘", "┌", "─", "┐", "│", "└", "┐", "┌", "┐", "└", "┐", "└", "┐", "┌", "┐", "┌", "┘", "┌", "┘", "│", "│", "│", "└", "┘", "│", "┌", "┘", "└", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "│", "┌", "─", "┐", "└", "┐", "┌", "─", "─", "─", "─", "┘", "│", "└", "┐", "┌", "┘", "└", "┘", "│", "│", "┌", "┘", "│", "│", "┌", "┐", "┌", "┐", "└", "┘", "┌", "─", "┐", "│", "┐", "┌", "└", "┐", ".", "└"], |  | ||||||
| ["─", "┘", ".", "│", "┌", "│", "┐", "─", "┐", ".", "┌", "─", "┘", "└", "─", "─", "┐", "│", "│", "│", "└", "┐", "│", "└", "┐", "│", "│", "└", "┐", "│", "│", "│", "│", "└", "─", "┐", "│", "│", "│", "└", "┘", "┌", "─", "┐", "└", "┐", "└", "┐", "└", "┐", "┌", "─", "┘", "│", "│", "└", "┐", "└", "┘", "└", "┐", "│", "└", "─", "┐", "│", ".", "│", "└", "┐", "│", "│", "│", "┌", "┘", "┌", "┘", "│", "│", "│", "│", "│", "┌", "┘", "│", "└", "─", "┐", "│", "│", "┌", "┐", "└", "┘", "│", "│", "└", "┘", ".", "│", "│", "┌", "┘", "┌", "┘", "└", "┐", "┌", "─", "─", "┐", "│", "┌", "│", "│", "┌", "┐", "┘", "└", "┘", "│", "┌", "┘", "│", "│", "└", "┘", "│", "┌", "─", "┘", "│", "└", "┘", "│", "┌", "│", "└", "┐", "┘"], |  | ||||||
| [".", ".", ".", "│", "└", "└", "┘", "└", "└", "┐", ".", "│", ".", "│", "└", "└", "└", "┘", "└", "┘", "┌", "┘", "│", "┌", "┘", "│", "┌", "─", "┘", "│", "│", "│", "└", "─", "┐", "│", "└", "┘", "└", "─", "─", "┘", "┘", "│", "┌", "┘", "┐", "└", "┐", "│", "└", "┐", "┌", "┘", "│", "┌", "┘", "┌", "─", "─", "┘", "└", "┐", "┌", "┘", "│", "┌", "┘", "┌", "┘", "│", "│", "│", "└", "┐", "└", "┐", "│", "│", "└", "┐", "│", "│", "┌", "┘", "┌", "─", "┘", "│", "│", "│", "└", "─", "─", "┘", "└", "─", "─", "┐", "└", "┘", "│", "┌", "┘", "┌", "┐", "│", "│", "┌", "─", "┘", "│", "┌", "┘", "└", "┘", "└", "┐", "┌", "─", "┘", "└", "┐", "│", "└", "─", "┐", "│", "└", "┐", "└", "┘", "┐", "┘", "┌", "┌", "┌", ".", "─", "."], |  | ||||||
| ["│", "─", "┌", "┐", "─", "┌", "└", "└", "│", "─", "└", "┘", "┐", "┐", "│", ".", "└", "┘", "┘", "┘", "└", "┐", "│", "└", "┐", "│", "└", "┐", "┌", "┘", "│", "└", "─", "┐", "└", "┘", "┌", "─", "─", "─", "─", "─", "─", "┘", "│", "┌", "┌", "┐", "└", "┘", "┌", "┘", "│", "┌", "┘", "└", "┐", "│", "┌", "─", "─", "┐", "│", "└", "┐", "│", "└", "┐", "└", "┐", "│", "│", "└", "┐", "│", "┌", "┘", "│", "└", "┐", "│", "└", "┘", "└", "┐", "└", "─", "┐", "└", "┘", "└", "┐", "┌", "─", "┐", "┌", "─", "┐", "└", "─", "┐", "└", "┘", "┘", "│", "│", "│", "│", "│", "┌", "┐", "│", "└", "─", "─", "┐", "┌", "┘", "└", "┐", "┌", "┐", "│", "│", "┌", "┐", "│", "│", "┌", "┘", "─", "┌", "│", "┐", "┘", "│", "│", "┌", "┘", "┐"], |  | ||||||
| ["│", "┌", "│", "┘", ".", "└", ".", "┌", "─", "┐", "│", "└", "┘", "─", "└", "┘", "┘", ".", "│", ".", "└", "│", "└", "┐", "│", "│", "┌", "┘", "│", "┌", "┘", "┌", "┐", "└", "─", "┐", "└", "─", "┐", "┌", "─", "─", "─", "┐", "└", "┐", "│", "└", "─", "┐", "└", "─", "┘", "│", "┌", "┐", "│", "│", "└", "┐", "┌", "┘", "└", "┐", "│", "└", "┐", "│", "┌", "┘", "│", "└", "┐", "└", "┘", "└", "┐", "│", "┌", "┘", "└", "┐", "┌", "─", "┘", "┌", "┐", "└", "─", "┐", "┌", "┘", "└", "┐", "│", "└", "┐", "│", "┌", "┐", "└", "─", "─", "─", "┘", "│", "│", "│", "└", "┘", "│", "│", "┘", "┌", "┐", "└", "┘", "┌", "─", "┘", "│", "│", "│", "└", "┘", "│", "│", "└", "┘", "┘", "┌", "└", "┘", "┘", "└", "┌", "┘", "└", "┘", "┘"], |  | ||||||
| ["│", "└", "┘", "└", "─", "┘", "─", "─", "│", "└", "─", "┌", "┐", "┘", "└", "┐", "┘", "─", "┌", "┐", "│", "│", "┌", "┘", "│", "│", "└", "┐", "│", "└", "┐", "│", "│", "┌", "┐", "└", "┐", "┌", "┘", "│", "┌", "─", "─", "┘", "┌", "┘", "└", "─", "┐", "└", "─", "─", "─", "┘", "│", "│", "│", "│", "┌", "┘", "│", "┌", "┐", "│", "│", "┌", "┘", "└", "┘", "│", "└", "┐", "└", "─", "─", "┐", "│", "│", "└", "─", "┐", "│", "└", "┐", "┌", "┘", "│", "┌", "─", "┘", "└", "┐", "┌", "┘", "└", "┐", "│", "│", "│", "│", "┌", "┐", "┌", "┐", "┌", "┘", "└", "┘", "┌", "─", "┘", "└", "─", "┘", "└", "┐", "└", "│", "┌", "─", "┘", "│", "└", "┐", ".", "│", "└", "┐", "┘", ".", "│", "┘", "┐", "┌", "┌", "┘", "─", "│", "└", "│"], |  | ||||||
| ["┌", "└", "┐", "┘", "└", "┌", ".", "└", "┌", "┐", "┐", ".", "└", "─", "┌", "┘", "┐", ".", "┐", "┐", "┐", "│", "│", "└", "└", "┘", "┘", "└", "┘", "┐", "│", "│", "│", "│", "└", "┐", "│", "│", "┌", "┘", "└", "─", "┐", "┌", "┘", "┌", "─", "─", "┘", "┌", "─", "─", "─", "┐", "│", "└", "┘", "└", "┘", "┌", "┘", "│", "│", "│", "│", "│", "┌", "─", "┐", "┌", "─", "┘", "┌", "─", "─", "┘", "└", "┘", "┌", "─", "┘", "│", "┌", "┘", "└", "┐", "│", "└", "─", "─", "┐", "│", "│", "┌", "─", "┘", "│", "│", "│", "└", "┘", "│", "│", "│", "└", "─", "┐", "│", "└", "┐", "┌", "┐", "┌", "─", "┐", "└", "┐", "└", "┘", "┌", "─", "┘", "┌", "┘", "─", "└", "┐", "│", "┐", "┐", "┘", "│", "┌", "┌", "┌", "┘", "┌", "─", "─", "─"], |  | ||||||
| ["─", "┌", ".", "┌", "┘", "└", "┌", "┐", "└", "┐", "│", "┐", "│", ".", "┌", "└", "│", "┐", "┘", "│", "─", "└", "┘", "─", "┌", "─", "─", "─", "─", "─", "┘", "│", "└", "┘", "│", "└", "┘", "└", "┘", "┌", "─", "─", "┘", "└", "┐", "└", "┐", "┌", "┐", "│", "│", "┌", "─", "┘", "└", "─", "─", "┐", "┌", "┘", "┌", "┘", "│", "│", "│", "└", "┘", "┌", "┘", "└", "─", "┐", "└", "─", "─", "─", "─", "┐", "└", "┐", "┌", "┘", "└", "─", "┐", "│", "│", "┌", "─", "┐", "│", "│", "│", "└", "─", "┐", "│", "│", "└", "─", "┐", "│", "│", "│", "┌", "┐", "│", "┌", "─", "┘", "│", "│", "└", "┐", "└", "┐", "│", "┌", "┐", "└", "─", "┐", "└", "┐", "┘", "└", "│", "│", "│", "│", "┐", "│", "┌", "└", "┌", "┌", "┐", "└", "┐", "."], |  | ||||||
| [".", "─", "│", "└", "┐", "│", "┌", "│", "─", "┘", "─", "─", "┐", "┐", "┘", "└", "┘", "└", "┌", "│", "┐", "┌", "┘", "└", "└", "─", "─", "┐", "┌", "─", "┐", "└", "─", "─", "─", "─", "─", "─", "┐", "└", "─", "─", "┐", "┌", "┘", "┌", "┘", "│", "│", "│", "┌", "┘", "┌", "┐", "┌", "┐", "┌", "┘", "│", "┌", "┘", "┌", "┘", "│", "└", "─", "┐", "└", "┐", "┌", "─", "┘", "┌", "─", "┐", "┌", "─", "┘", "│", "└", "┘", "┌", "─", "─", "┘", "│", "│", "│", "┐", "└", "┘", "└", "┘", "│", "┌", "┘", "│", "│", "┌", "┐", "│", "│", "│", "│", "│", "└", "┘", "└", "┐", "┌", "┘", "│", "┌", "┘", "┌", "┘", "└", "┘", "└", "─", "┐", "└", "─", "┘", "└", "┌", "└", "┘", "┐", "┐", "┌", "┐", "┐", ".", "│", "│", "└", "┌", "┘", "┘"], |  | ||||||
| [".", "┌", "└", "│", ".", "─", "┘", "└", "┐", "│", ".", "┘", "└", "┐", "┐", "│", "┘", "┌", "│", "│", "─", "└", "┐", "┌", "─", "─", "─", "┘", "│", "│", "└", "┐", "┌", "─", "─", "─", "─", "─", "┘", "┌", "─", "─", "┘", "│", "┌", "┘", "┌", "┘", "│", "│", "└", "─", "┘", "│", "│", "└", "┘", "└", "│", "│", "─", "└", "┐", "└", "┐", "┌", "┘", "┌", "┘", "└", "┐", "┌", "┘", "┌", "┘", "└", "─", "─", "─", "─", "┐", "└", "─", "┐", "┌", "┘", "│", "└", "─", "─", "─", "┐", "┌", "─", "┘", "┌", "┘", "└", "┘", "│", "│", "└", "┘", "│", "│", "┌", "┐", "┌", "┘", "│", "┌", "┘", "└", "┐", "│", "┌", "─", "┐", "┌", "┐", "└", "─", "┐", "┘", "┐", "┘", "┌", "└", "┘", "┐", "┐", "└", "└", "─", "┌", "└", "─", "┘", "┘", "│"], |  | ||||||
| ["┌", "│", "─", "─", "┐", "│", "┐", "─", "│", "─", "┐", "│", "┐", "┘", "└", "└", "┘", "└", "┐", "┘", "┌", "│", "─", "└", "─", "─", "─", "┐", "│", "┌", "─", "┘", "└", "─", "─", "─", "─", "─", "┐", "└", "┐", "┌", "┐", "│", "└", "┐", "│", ".", "└", "┘", "─", "┌", "─", "┘", "└", "─", "─", "┐", "│", "│", "┌", "─", "┘", "┌", "┘", "└", "┐", "│", "┌", "─", "┘", "└", "┐", "└", "┐", "┌", "┐", "┌", "┐", "┌", "┘", "┌", "─", "┘", "└", "┐", "│", "┌", "─", "┐", "┌", "┘", "└", "┐", "┌", "┘", "┌", "┌", "─", "┘", "└", "┐", "┌", "┘", "└", "┘", "│", "└", "┐", "│", "│", "┌", "┐", "│", "│", "└", "┐", "└", "┘", "│", "┌", "─", "┘", "┘", "┐", ".", "│", "│", "─", "│", "┌", "─", "└", "─", "─", "┌", ".", "│", "┘", "┌"], |  | ||||||
| ["─", "┐", "─", "└", "┐", "└", "┘", "┐", "│", ".", "┌", "│", "└", "─", "┘", ".", "┌", ".", "└", "─", "─", "┐", "┐", "┘", "│", ".", "┌", "┘", "│", "│", "┌", "┐", "┌", "┐", "┌", "─", "─", "─", "┘", "└", "│", "│", "│", "│", "┌", "┘", "└", "┐", "┘", "┌", "─", "┘", "┌", "┐", "┌", "┐", "┌", "┘", "└", "┘", "└", "─", "┐", "│", "┌", "┐", "└", "┘", "│", "┌", "┐", "┌", "┘", "┌", "│", "│", "│", "│", "│", "│", "┌", "└", "┐", "┌", "─", "┘", "│", "│", "┌", "┘", "│", "┌", "─", "┘", "└", "─", "┐", "└", "─", "─", "┐", "│", "│", "┌", "─", "─", "┘", "┘", "│", "│", "│", "│", "│", "│", "│", "┌", "┘", "┘", ".", "│", "└", "┐", "│", "┌", "┐", "─", "┘", "┌", "─", "└", "┘", "┌", "┌", "┐", "└", "─", "┐", "└", "─", "┐"], |  | ||||||
| ["│", "│", "┌", "┐", "└", "┐", "┐", "└", "┐", ".", "─", "┐", "─", "┐", "┐", "└", "│", "│", "┘", "┐", "┐", "└", "┌", "─", "┐", "┌", "│", "┌", "┘", "│", "│", "│", "│", "│", "└", "┐", "│", "─", "│", "┘", "└", "┘", "│", "│", "│", "┌", "┐", "│", "┌", "└", "─", "─", "┘", "│", "│", "│", "└", "┐", "┌", "─", "─", "─", "┘", "└", "┘", "│", "┌", "┐", "└", "┘", "│", "└", "─", "┐", "└", "┘", "│", "│", "│", "│", "┌", "┐", "│", "└", "─", "┐", "│", "│", "└", "┐", "│", "│", "┌", "┐", "┌", "┐", "└", "┐", ".", "┌", "┘", "│", "│", "└", "┐", "─", "┌", "─", "┘", "│", "└", "┘", "└", "┘", "│", "│", "┘", "─", "─", "└", "─", "┘", "┐", "└", "┘", "─", "─", "┌", "─", "│", "└", "└", "┘", "─", ".", "┌", "┐", "┐", "└", "┌"], |  | ||||||
| ["─", "─", "┐", ".", "┌", "└", "─", "┌", "┘", ".", "└", ".", "│", "┌", "┌", "┘", "│", "┐", ".", "│", "┌", "┌", "└", "┐", "└", "└", "└", "┘", ".", "└", "┘", "│", "│", "└", "┐", "└", "─", "┐", "┐", "─", "│", "┘", "└", "┘", "│", "│", "└", "┘", "┌", "─", "─", "─", "─", "┘", "│", "└", "─", "┘", "└", "┐", "┌", "─", "┐", "┌", "┐", "└", "┘", "└", "─", "┐", "└", "┐", "┌", "┘", "└", "┌", "┘", "│", "│", "│", "│", "└", "┘", "┌", "─", "┘", "│", "└", "┐", "│", "│", "│", "│", "│", "│", "└", "┐", "└", "┐", "└", "┐", "│", "└", "┐", "│", "┘", "└", "┐", "┌", "┘", ".", "└", "└", "└", "│", "└", "┐", "┐", "└", "│", "┘", ".", "│", "┐", "│", "┐", ".", "┌", "─", "─", "└", "┐", "┘", "─", "┌", "┌", "│", "│", ".", "┐"], |  | ||||||
| ["└", "│", "└", "┐", "┘", ".", "└", "┘", "─", "┐", "┌", "│", "┐", ".", "┌", "┐", ".", "│", "┌", "┘", "─", "│", "┌", "└", ".", "└", "┘", "┘", ".", "└", "┌", "┘", "│", "┌", "┘", "┌", "┐", "└", "┐", "┘", ".", "─", "┌", "─", "┘", "└", "┐", "┌", "┘", "┌", "┐", "┌", "─", "┐", "└", "─", "┐", "┌", "─", "┘", "└", "┐", "│", "│", "│", "┌", "─", "─", "┐", "└", "┐", "└", "┘", "┌", "─", "┘", "┌", "┘", "└", "┘", "│", "┌", "─", "┘", ".", "└", "└", "┐", "│", "└", "┘", "│", "│", "└", "┘", "┌", "┘", "┌", "┘", "─", "└", "┘", ".", "└", "┘", "│", "┌", "│", "│", "┘", "┐", ".", "│", "└", "│", "┌", "┘", "┐", "┌", "│", "─", "┘", "│", "─", "│", "─", "─", "┘", ".", "│", ".", "┌", "┐", "─", "│", "└", "│", "└", "┘", "┘"], |  | ||||||
| [".", "└", "┐", "┘", "└", "┐", "┌", "│", "│", "└", "└", "┐", "└", "└", "┐", "└", "┐", "└", "┘", "│", "─", "─", "┐", ".", "│", "┘", "│", "┐", "┌", "┐", "└", "┐", "│", "└", "┐", "│", "│", "┌", "┘", "┐", "┌", "┌", "└", "─", "┐", "┌", "┘", "└", "┐", "│", "│", "└", "┐", "└", "┐", "┌", "┘", "│", "┌", "┐", "┌", "┘", "│", "│", "│", "└", "─", "┐", "└", "─", "┘", "│", ".", "└", "─", "─", "┘", "┐", "┘", "┌", "│", "└", "┐", ".", "┘", "┘", "└", "│", "│", "┘", "┌", "┘", "│", "└", "└", "└", "─", "┘", "┘", "│", "│", "─", "└", "└", "┘", "─", "┌", "└", "┘", ".", "┌", "─", "─", ".", "└", "┘", "┘", "│", "┌", "│", "┐", "┌", "│", "┘", "│", "┐", "┘", "┐", "└", "│", "┐", "│", "└", "┘", "┘", "┌", "─", "┐", "┌", "─"], |  | ||||||
| ["┐", "┘", "┌", "┘", "└", "┌", "┌", "┘", "│", "┘", "└", "┘", "│", "┌", "└", "┐", ".", "└", "─", "└", "─", "└", "└", "└", "─", "┌", "─", "└", "└", "─", "┌", "┘", "│", "┘", "│", "│", "└", "┘", "┐", "└", "│", "┘", "└", "└", "│", "│", "┘", "─", "└", "┘", "└", "─", "┘", "┘", "│", "│", "┌", "┘", "│", "│", "│", "┌", "┘", "│", "└", "─", "┐", "└", "─", "┐", "┘", "└", "┐", "│", "┘", "┘", "─", "┘", "─", "┐", "└", "─", "┘", "┐", "┘", "┐", "┌", "└", "┘", "└", "└", "┐", "│", "└", "│", "└", "└", "┐", ".", "└", "┌", "─", "┐", "┘", "│", "└", "┐", "┐", "└", "│", "└", "│", "└", "┐", "└", "│", "─", "┘", "─", "┐", "┘", "┐", ".", "┌", "─", "┘", "┌", "│", "┌", "└", "└", "┐", "└", "┌", "─", "┘", "│", ".", "┘", "│"], |  | ||||||
| ["┐", "│", "┌", "┐", ".", "─", "┘", ".", "│", "│", "┌", "│", "┌", "┘", ".", "│", ".", "┌", "─", "┘", ".", "─", "─", "┐", "─", "┌", "─", "│", "┐", "┌", "└", "─", "┘", "─", "└", "┘", "│", ".", "┘", "┌", "┘", ".", "│", "└", "└", "┘", "┘", "└", "│", "│", "┌", "─", "─", "─", "┘", "│", "└", "─", "┘", "│", "│", "└", "┐", "└", "┐", "┌", "┘", "┌", "─", "┘", ".", "└", "─", "┘", "│", "┐", ".", "└", "│", "┐", "─", "┘", "─", "┘", "┌", "└", "┐", "└", "┘", ".", "└", "└", "┘", "┐", "─", "┘", "┌", "┘", "┐", "└", "┌", "┘", "┘", "─", "┌", "─", ".", "┌", ".", "┐", "─", "│", "┐", "┌", "┐", "│", "┌", "┘", "┌", "│", ".", "┌", "─", "┐", "┘", ".", "│", "└", "┘", "─", "│", "│", "─", "┐", "┘", ".", "─", "┌", "─", "│"], |  | ||||||
| ["└", "│", "┐", "─", "┐", "│", "┌", "┐", "─", "─", "┌", "┌", "┐", "─", "─", "┘", "┌", "─", "┐", "└", "┐", ".", "│", "┐", "┐", "│", "└", "│", "┌", "┘", "└", "│", ".", "┐", "└", "┘", "┌", "┘", ".", "│", "└", "┐", "┌", "│", "─", "└", ".", "┌", "│", "┌", "└", "─", "─", "─", "┐", "└", "┐", "┌", "─", "┘", "│", "┘", "│", "┌", "┘", "└", "┐", "└", "─", "┐", "┐", "┘", "│", "─", "│", "─", "─", ".", "└", "└", "─", "┘", ".", "┌", "│", "┐", "│", "│", ".", "└", "└", "│", "┌", "┐", "┐", ".", "│", "─", "┌", "┌", "┐", "┘", "┘", "┌", "─", "┐", "─", "│", "┐", "│", "│", "┘", "┌", "┌", "└", "─", "│", ".", "┌", "┘", "┐", ".", "┐", "└", "┌", "┌", "─", "┌", "┘", "└", "└", "┘", "┘", ".", "└", "─", "┐", ".", "┐", "─"], |  | ||||||
| ["└", "└", "┌", "─", "─", "┌", "┌", "│", "┌", "┐", "─", "┘", "┘", "┌", "│", ".", "│", "┌", "┘", "┘", "┌", "└", "┐", "└", "┌", "┐", "─", "│", ".", "┘", "─", "─", ".", "└", "─", "┌", "┐", ".", "┌", "┘", "┌", "│", "─", "┐", "┐", "│", ".", "┌", "└", "└", "┘", "┐", ".", "┌", "│", "┌", "┘", "└", "─", "┐", "│", "┌", "┘", "└", "─", "┐", "│", "┌", "┐", "│", "┘", "┌", "┘", "│", "┘", "│", "┘", "└", "─", "─", ".", "└", "┐", "┘", "└", "┘", "┐", "│", ".", "└", "│", "└", "─", "┘", "┌", "┐", "│", ".", "┌", "┘", "│", ".", "└", "┐", "┐", "┐", "┌", "┘", "─", "┐", "┐", "│", "─", "┐", "┘", "─", "┘", "─", "┘", "└", "┐", "┐", "│", "─", "┌", "│", "┐", ".", "┌", "─", "┐", "┘", "└", "┐", "─", "│", "┐", "│", ".", "└"], |  | ||||||
| ["│", "─", "│", "┐", "│", ".", "│", "┌", "┐", "└", "│", "┘", "┌", "┌", "┐", "─", ".", "└", ".", "│", "│", "─", "└", ".", "┌", "┘", ".", "└", ".", "┘", "┐", "│", "┌", "┌", "┘", "│", "│", ".", "│", "─", "─", "│", "─", "┌", "┘", "─", "┐", "└", "└", "└", "└", "│", ".", "┌", "┘", "└", "┐", "┌", "┐", "│", "│", "└", "┐", "┌", "─", "┘", "└", "┘", "└", "┘", "└", "┘", "─", "┘", ".", "┘", "┐", "┌", "┐", "┐", "┐", ".", "│", "│", "┐", "┌", "┌", "┌", "┐", "┌", "┐", "└", "└", "┘", "└", ".", "└", "─", "┘", "┐", "└", "┐", "┌", "│", "│", "┐", "└", "└", "┐", "└", "┌", "─", "┘", "└", "─", "─", "└", "┐", ".", "└", "─", "┘", "│", "┌", "┌", "┘", "─", "│", "┐", "┌", "┌", "┐", "┌", "└", "┐", "─", "│", "┐", "┘", "│"], |  | ||||||
| ["┌", "┌", "─", "─", "┐", "┌", "└", "└", "┘", "┌", "│", "┐", "┌", "┌", "─", ".", "│", ".", "─", "┐", "│", "┐", "└", "┌", "┐", "┘", "─", "└", "┐", "│", "└", "─", "┘", "┘", "┐", "│", "┐", "┐", "┘", "┘", ".", ".", "└", "└", "┐", "┌", "│", "┌", "└", "│", ".", "└", "─", "└", "┐", "┌", "┘", "│", "└", "┘", "└", "┐", "│", "│", ".", "┌", "┐", "┘", "┘", "┘", ".", ".", "└", "│", "┐", "┘", "─", "┌", "┌", "┐", "┌", "│", "│", "│", "┌", "└", "└", "┌", "┌", "┌", "│", ".", "│", "┐", "│", "─", "│", ".", "┌", "─", "┘", "┌", "─", "└", "└", "─", "┌", "┐", "└", "─", "┘", "┌", "─", "┘", "┐", "┐", "┌", "─", "│", "┐", "┘", "─", "┌", ".", "│", "┘", "┘", "└", "┘", "┘", "│", "┌", "│", "│", "└", "│", ".", "│", "─", "┘"], |  | ||||||
| ["┌", "┐", "┐", "│", "└", "┌", "│", "┐", "┌", "┐", "└", "┐", "┐", "└", "│", ".", "┘", ".", "│", "┘", "└", "│", "─", "┐", "│", "│", "└", "└", "┌", "┌", "┘", "┘", "┘", "┐", "┌", "┘", "│", "│", "─", "─", "┐", "┌", "┐", ".", "┌", "└", "─", "│", "┌", "┘", "┐", "┐", "│", "─", "└", "┘", "┌", "┘", "┌", "┐", "┌", "┘", "│", "└", "─", "┘", "│", "┐", "┌", "┌", "┘", "┐", "┌", "─", "┐", "─", "─", "└", "│", "┐", "┌", "─", "─", "│", "┘", ".", "┌", "─", "─", "─", "┘", "─", "┌", "┐", "┘", "─", "─", "┐", "│", ".", "┌", "│", "┘", "─", "┐", "┌", "┐", "┘", ".", "┘", ".", "┌", "└", ".", "┌", "┌", "┌", "┘", "│", "┐", "└", "┌", "─", "┐", "└", "┐", ".", "┘", "│", "┌", "│", "└", "│", "│", "─", "└", "─", "┐", "┐", "│"], |  | ||||||
| ["└", "─", "┘", "┘", "└", "─", "┘", "┘", "┘", "└", "┐", "┘", "└", "─", "└", "─", "┘", "┘", "┘", "┌", "┘", "┘", "└", "┌", "─", "└", "─", ".", "┌", "┐", ".", "│", "└", "└", "└", "─", "─", "┘", "┐", "┘", "─", "└", "┌", "└", "┐", "└", "│", "┘", "┘", "┘", "┌", "─", "┘", "┐", ".", ".", "└", "─", "┘", "└", "┘", "┘", "└", "─", "─", "─", "┘", "─", "└", "┌", "─", "└", "┘", "┘", "└", "┐", ".", "└", "└", "┘", "┘", "┘", "┘", "┘", "└", "┘", ".", "└", "│", "┘", "─", "└", "┌", "└", "┘", "└", "─", "└", "─", "─", "│", "┘", "┘", "─", "└", "└", "┘", "└", "│", "┘", "─", "│", ".", "─", "┘", "│", ".", "└", "│", "┘", "└", "│", "┘", "┘", ".", "┌", "┌", "─", "─", "┐", "└", "─", "┌", "┘", "─", "└", "┘", ".", "┘", "─"] |  | ||||||
| ]). |  | ||||||
							
								
								
									
										142
									
								
								10/input.pl
									
									
									
									
									
								
							
							
						
						
									
										142
									
								
								10/input.pl
									
									
									
									
									
								
							| @@ -1,142 +0,0 @@ | |||||||
| input([ |  | ||||||
| ["L", "7", "7", "7", "F", "J", "F", "7", "7", "F", "-", "7", "7", "-", "F", "-", "7", "F", "7", ".", "F", "F", ".", "J", "7", ".", "-", "J", "-", "-", "J", "7", "F", "|", "7", "F", ".", "F", "J", ".", "L", "-", "|", "F", "|", "-", "F", "|", "F", "J", "7", "-", "J", "7", "F", "-", "J", "F", "F", "-", "7", ".", "L", "7", "F", "L", "7", "J", "-", "F", "F", "|", "7", "-", "-", "7", ".", "L", "-", "-", "|", "7", "7", ".", "F", "-", "J", "7", "7", ".", "-", "7", "F", "J", "7", "F", "7", "F", "F", "-", "-", ".", "F", "F", "J", "7", "-", "7", "-", "F", "|", ".", "F", "L", "-", "L", "-", "F", "7", ".", "F", "|", "-", "F", "F", "7", "F", "|", "-", "7", "-", "|", "7", "-", ".", "F", "F", "-", "7", "."], |  | ||||||
| ["L", "-", "-", "7", "7", "-", "F", "J", "L", "|", "7", "L", "7", "7", ".", "F", "J", "-", "F", "-", "7", ".", "|", ".", "F", "J", "J", "J", ".", "F", "F", "F", "|", "F", "F", "-", "7", "7", "|", "-", "|", "F", "J", "-", "F", "J", "|", "L", "F", "J", "|", "-", "L", "-", "J", "L", "L", "F", "|", "L", "7", "7", "|", "F", "7", "L", "7", "-", "|", "J", "L", "-", "J", "7", "L", "L", "F", "7", "|", "F", "L", "L", "-", "-", "7", "J", ".", "-", "F", "-", "|", "-", "L", "-", "7", "J", "F", "7", "J", "7", "F", "J", "-", "F", "-", "7", "7", "|", ".", "F", "L", "J", "F", "J", "7", "L", "J", "L", "|", "7", ".", "L", "7", "L", "L", "7", "F", "J", "F", "J", "|", "L", "J", "L", "F", "F", "J", "J", "|", "7"], |  | ||||||
| [".", "|", "L", "|", "L", "F", "J", "7", "-", "J", "-", "J", "|", "|", "-", "7", "J", "L", "L", "-", "J", "-", "-", "-", "J", "L", "7", "F", "7", "L", "-", "L", "F", "7", "L", "7", "L", "7", "7", "J", "F", "7", "L", "7", "-", "-", "J", "7", "F", "7", "|", ".", "F", "7", "L", "F", ".", "L", "|", "-", "|", "F", "L", "J", "|", "L", "|", "F", "|", "F", "F", "J", "J", "L", "J", "F", "F", "J", "-", "7", "|", "|", "L", "F", "7", "J", "7", "F", "J", "F", "-", "7", ".", "L", "7", "L", "|", "L", "F", "J", "7", "L", "L", "|", "7", "J", "F", "J", "F", "|", ".", "|", "|", "|", "F", "7", "J", "J", "|", "L", "-", "7", "|", "J", "7", "L", "J", ".", "F", "7", "-", "-", "7", "L", "7", "J", "7", "F", "J", "-"], |  | ||||||
| ["F", "7", "J", "|", ".", "L", "-", "J", "-", "L", "7", "F", "7", "J", "F", "J", ".", "7", "L", "J", "|", "-", "J", ".", ".", ".", "L", "|", "-", "|", "L", "|", "|", "|", "F", "J", "F", "J", ".", ".", "L", "-", "F", "J", "L", "L", "7", "7", "L", "L", "J", "7", "L", "7", "7", "J", "|", "-", "7", "J", "|", "F", "-", "-", "7", "-", "J", "F", "L", "7", "|", "F", "7", "F", "F", "J", "L", "J", "J", "F", "J", "7", "7", "L", "-", "7", "-", "L", "7", "F", ".", "|", "J", ".", "|", "F", "|", ".", "L", "-", "|", "7", ".", ".", "|", "F", "L", "-", "F", "J", "F", "-", "7", "-", "L", "J", "F", "L", "|", "-", "L", "|", "L", "|", "-", "|", "F", "7", "L", "L", "7", "L", "L", ".", "|", "F", "F", "|", "|", "."], |  | ||||||
| ["J", "|", "-", "L", "7", "J", ".", "|", "|", "|", "L", ".", "F", ".", "F", "J", ".", "|", "7", "L", "F", ".", "|", "F", "F", ".", "L", "L", "7", "|", "L", "F", "J", "|", "|", "F", "J", "|", ".", "7", ".", "L", "7", "|", "F", "L", "F", "7", "-", "L", ".", "-", "J", "L", "7", ".", "F", "7", "J", "-", "L", "J", "J", "7", "L", "|", "F", "J", "|", "|", "J", "-", "-", "-", "J", "F", "7", "J", "L", "J", "L", "L", "-", "7", ".", "L", "F", "J", "J", "J", "L", "7", "L", "F", "7", "J", "J", "F", "F", "F", "-", "7", "7", "7", "F", "F", "7", "|", "|", "|", "L", "-", "J", "F", "|", "-", "-", "7", "J", "L", "F", "L", "7", ".", "F", "F", "F", "F", "7", "|", "L", "7", "7", ".", "|", ".", "J", "L", "-", "7"], |  | ||||||
| ["J", "7", "F", "7", "|", ".", "F", "-", "|", "7", "-", "F", "J", "7", "L", "-", "7", "J", "F", ".", ".", "J", ".", "|", "J", "7", "|", "L", "L", "-", "|", "L", "7", "L", "J", "L", "-", "7", "-", "-", "7", "J", "J", "L", "F", "J", "|", "L", "7", "F", "7", ".", "F", "J", "7", "7", "|", "L", "J", "L", "7", "F", "L", "F", "F", "F", "7", "L", "7", "J", "-", "7", "-", "|", "L", "L", "J", ".", "|", "|", "|", ".", "L", "J", "7", "L", "F", ".", "L", "F", "|", "|", "-", "|", "|", "F", "F", "F", "-", "J", "F", "J", "-", "J", "7", "L", "-", ".", "7", "7", "-", "J", "7", "F", "|", "L", "J", "F", "-", "F", "-", "7", "L", "-", "F", "F", "7", "L", "F", "|", "|", ".", "F", "7", "J", ".", ".", "7", ".", "7"], |  | ||||||
| ["L", "F", ".", "L", "|", "-", "J", "7", "L", "J", "-", "7", ".", "F", "|", "J", ".", "F", "L", "7", "-", "L", "F", "7", "F", "7", "L", "-", "J", ".", "7", "7", "L", "-", "7", "F", "-", "J", "7", ".", "F", "F", "7", "F", "|", "F", "F", "7", "L", "-", "|", "7", "7", "F", "J", "-", "J", "F", "F", ".", "|", "7", "F", "F", "7", "|", "|", "-", "|", "7", "L", "J", ".", "-", "F", "L", "-", ".", "L", "-", "F", "J", "7", "7", "|", "7", ".", ".", "L", "F", "7", "|", "7", "|", "|", "F", "F", "J", "F", "-", "J", "L", "|", "F", "J", "L", "L", "F", ".", "F", "7", "|", "F", "J", "L", "7", "F", "J", "L", "L", "L", "-", "L", "-", "|", "|", ".", "F", "J", "|", "|", "7", "|", ".", "F", "F", "-", "J", "7", "|"], |  | ||||||
| ["L", "|", "7", "L", "|", "7", "F", "-", "J", ".", "J", "|", "F", "F", "F", "-", "F", "J", "-", "7", "J", "F", "L", "J", "|", ".", "F", "J", "|", ".", "F", "-", "-", "-", "J", "L", "-", "-", "7", "J", ".", "L", "J", "-", "J", "7", ".", "F", "7", "J", "|", "L", "7", "7", "J", "7", ".", "F", "F", ".", "L", "F", "F", "J", "|", "|", "|", "7", "F", "7", "7", "L", "|", "7", "|", "F", "F", "-", "J", ".", ".", "|", "|", "|", "-", "-", "-", "-", "F", "7", "F", "-", "-", "J", "L", "7", "L", "7", "|", ".", "|", "F", "L", "-", "J", ".", "F", "J", "-", "|", "F", "L", "7", "7", "F", "J", "|", "J", ".", "F", "-", "F", "J", "J", "L", "-", "J", "L", "L", "F", "|", "7", "7", "F", "7", "L", "-", ".", "L", "F"], |  | ||||||
| ["7", "-", "-", "-", "L", "F", "7", "|", ".", "F", "L", "7", "J", "L", "|", "F", "7", "L", "-", "L", "-", "7", "F", "L", "|", "7", "F", "7", ".", "F", "L", "7", "F", "7", "F", "-", "-", "-", "J", ".", "7", "-", "7", ".", ".", "L", "L", "-", "J", "F", "L", "J", "F", "-", "7", "7", "F", "7", "F", "7", "|", "F", "L", "7", "L", "J", "|", "F", "|", "|", "J", "7", "L", "-", "F", "-", "7", "-", "L", ".", "F", "F", "F", "7", ".", ".", "F", "F", "J", "|", "|", "F", "-", "7", "F", "J", "F", "|", "|", ".", "L", "7", ".", "|", "-", "F", "|", ".", "F", "7", "L", "J", "|", "F", "J", "7", "|", "J", ".", "|", ".", "-", "7", "7", "F", "-", "J", "-", "L", "|", "J", "L", "F", "-", "J", "7", "L", "F", ".", "."], |  | ||||||
| ["L", "J", "7", ".", "F", "L", "J", "L", "-", "-", "7", "L", "7", "|", "|", "-", "|", "7", "L", "F", "|", "7", "J", "7", "F", "-", "J", "|", "F", "7", "|", "L", "J", "|", "L", "-", "7", "|", "L", "F", "L", "-", "-", "7", ".", ".", "|", "J", "L", "7", "L", "F", "L", "7", "L", "7", "|", "|", "|", "L", "7", "F", "-", "J", "F", "-", "J", "F", "J", "|", ".", "F", "7", "F", "J", "7", "L", "J", "F", "L", "7", "F", "J", "|", "F", "7", "F", "J", "F", "J", "L", "J", "J", "|", "|", "F", "-", "J", "|", "7", "7", "L", "F", "F", "J", "F", "-", "L", "|", "L", "7", "|", "L", "J", "7", "-", "7", "-", "F", "J", "L", "L", "L", "7", "-", "7", "F", "7", "F", "-", ".", "|", "|", "7", "F", "7", "F", "J", "7", "."], |  | ||||||
| ["L", "L", "F", "-", "L", "F", "-", "7", "|", "|", "J", "F", "L", "-", "L", "L", "F", "7", "7", "7", "F", "-", "-", "F", "L", "7", "F", "J", "|", "L", "-", "7", "F", "|", "F", "7", "L", "7", "-", "J", "J", "7", ".", "L", "-", "F", "7", ".", "F", "F", "7", "-", "|", "L", "7", "|", "|", "|", "|", "F", "J", "L", "-", "7", "|", "F", "7", "|", "F", "J", "F", "7", "|", "|", "|", "F", "J", "F", "7", "7", "F", "L", "7", "|", "|", "|", "L", "7", "|", "L", "|", "F", "7", "|", "|", "|", "F", "7", "|", "F", "7", "-", "J", "J", "7", "J", "7", "7", "|", ".", "L", "-", "7", "J", "|", "7", "L", "F", "J", ".", ".", "F", "L", "-", "7", "|", "7", "|", "|", "F", "-", "7", "-", "7", "-", "L", "J", "J", "-", "7"], |  | ||||||
| ["|", "-", "|", ".", "F", "-", "7", "L", "7", "|", "J", "F", "J", ".", "|", "J", "|", "|", "L", "F", "7", "F", "7", "J", "F", "J", "|", "L", "L", "-", "7", "L", "-", "J", "|", "L", "-", "J", ".", "L", "F", "7", "7", ".", "L", "|", "|", ".", "F", "J", "L", "7", "F", "-", "J", "L", "J", "L", "J", "L", "7", "F", "-", "J", "|", "|", "L", "J", "L", "-", "J", "L", "7", "J", "7", "J", "7", "F", "7", "-", "F", "F", "J", "|", "|", "L", "-", "J", "L", "7", "F", "J", "L", "J", "|", "|", "|", "L", "J", "|", "|", "7", "F", "|", "F", "J", "|", "-", "F", "J", ".", "F", "-", "-", "J", "7", "F", "L", "-", "F", "F", "-", "7", "|", "L", "J", "F", "-", "7", "J", ".", "L", "L", "|", "J", ".", "|", "7", ".", "7"], |  | ||||||
| ["J", "7", "|", "F", "7", "-", "L", ".", "F", "F", "-", ".", ".", "F", "7", "F", "|", "L", "7", "|", "|", "-", "|", "|", "L", "7", "L", "-", "-", "7", "L", "-", "-", "7", "L", "7", "F", "7", "F", "7", "|", "|", "-", "F", "7", "|", "|", "-", "L", "-", "7", "|", "L", "-", "-", "7", "F", "-", "-", "-", "J", "L", "7", "F", "J", "|", "F", "-", "-", "-", "-", "-", "J", "F", "7", "F", "-", "J", "|", "F", "7", "L", "7", "|", "|", "F", "-", "-", "-", "J", "L", "-", "-", "7", "|", "|", "|", "7", "F", "J", "L", "-", "-", "7", ".", "7", "|", "7", "L", ".", "F", "F", "L", "-", "-", "F", "7", ".", "F", "-", "F", "-", "J", "7", "J", "-", "7", "F", "J", "F", "-", "7", "J", "J", "L", "|", "L", "|", "F", "L"], |  | ||||||
| [".", "-", "J", "L", "J", ".", "|", "7", "|", "|", "J", "F", "F", "|", "|", "F", "J", "F", "J", "|", "|", "7", "|", "-", "F", "J", "F", "-", "-", "J", "F", "-", "-", "J", "F", "J", "|", "|", "|", "|", "|", "|", ".", "|", "L", "J", "L", "7", "7", "F", "J", "L", "7", "F", "-", "J", "L", "-", "-", "7", "F", "-", "J", "L", "-", "J", "L", "-", "-", "-", "-", "7", "J", "|", "|", "L", "7", "F", "J", "|", "L", "-", "J", "L", "J", "L", "7", "F", "7", "J", ".", "F", "7", "|", "L", "J", "|", "F", "J", "F", "-", "-", "-", "J", "F", "F", "|", "7", ".", "F", "F", "F", "7", "F", "-", "J", "J", "F", "J", "7", "|", "L", "F", "-", "7", "-", "|", "J", "J", "7", ".", ".", ".", "F", "F", "J", "7", "J", "F", "L"], |  | ||||||
| ["7", "F", "J", ".", "L", "-", "J", "7", "J", "L", "7", "F", "L", "|", "|", "L", "7", "L", "7", "|", "L", "7", "F", "-", "J", "F", "J", "L", "F", "7", "L", "-", "-", "7", "L", "7", "|", "|", "|", "|", "|", "L", "7", "L", "7", "F", "-", "J", "F", "J", "F", "-", "J", "L", "-", "-", "-", "-", "7", "|", "L", "-", "7", "F", "-", "-", "7", "F", "-", "-", "-", "J", "F", "J", "L", "7", "|", "L", "7", "L", "-", "-", "7", "F", "-", "7", "|", "|", "|", "7", "F", "J", "L", "J", "F", "-", "J", "|", "F", "J", "F", "-", "7", "-", "|", "|", "F", "7", "7", "F", "-", "J", "|", "7", ".", ".", "F", "J", "|", "F", "|", ".", "J", "L", "7", "-", "L", "7", "L", "|", "L", "-", "-", "F", "|", "J", "-", "F", "-", "J"], |  | ||||||
| ["-", "7", "-", "F", "J", "F", "L", ".", "J", "F", "7", "-", "F", "J", "L", "7", "L", "7", "L", "J", "F", "J", "L", "-", "7", "L", "-", "7", "|", "L", "7", "F", "-", "J", "F", "J", "|", "|", "|", "|", "|", "F", "J", "|", "|", "|", ".", "F", "J", "F", "J", "L", "F", "7", "F", "-", "7", "F", "J", "L", "7", "F", "J", "L", "-", "7", "L", "J", "|", "F", "7", "-", "L", "-", "7", "|", "|", "F", "J", "F", "-", "7", "L", "J", "F", "J", "L", "J", "L", "7", "|", "F", "-", "7", "|", "F", "7", "|", "|", "F", "J", "F", "J", "F", "7", "7", "|", "|", "-", "L", "7", "F", "J", "7", "-", "F", "7", "-", "F", "|", "|", "F", "|", "L", "J", "7", "F", "J", ".", "-", "-", "L", "-", "L", "F", ".", "L", "J", "7", "|"], |  | ||||||
| ["|", "|", ".", "F", "7", "J", "|", "F", "L", "J", "|", "|", "L", "-", "7", "|", "L", "L", "-", "7", "L", "7", "F", "7", "|", "F", "-", "J", "|", "F", "J", "L", "-", "7", "|", "F", "J", "|", "|", "L", "J", "|", "J", "F", "J", "|", "F", "J", "F", "J", "F", "7", "|", "L", "J", "F", "J", "L", "-", "7", "L", "J", "F", "-", "-", "J", "F", "7", "F", "J", "L", "7", "F", "-", "J", "|", "|", "L", "7", "L", "7", "L", "7", "F", "J", "F", "7", "F", "7", "|", "L", "J", "F", "J", "L", "J", "|", "|", "L", "J", "F", "J", "F", "J", "L", "7", "|", "|", "J", "F", "J", "|", "F", "7", "7", "|", "L", "-", "7", ".", "L", "7", "J", ".", "L", "F", "7", ".", "L", "J", "F", "J", "F", "7", "|", "J", "J", "-", "L", "7"], |  | ||||||
| ["-", "7", "7", "L", "7", "F", "F", "|", "J", "F", "-", "-", "F", "-", "J", "L", "-", "-", "7", "L", "7", "|", "|", "L", "J", "|", ".", "F", "J", "L", "7", "F", "-", "J", "L", "J", "F", "J", "L", "-", "7", "L", "7", "L", "7", "L", "J", "F", "J", "J", "|", "|", "L", "7", "F", "J", "F", "-", "-", "J", "F", "7", "L", "-", "7", "L", "|", "L", "J", "F", "-", "J", "L", "-", "7", "|", "|", "F", "J", "L", "L", "7", "|", "L", "-", "J", "L", "J", "|", "L", "7", ".", "L", "7", "F", "7", "L", "J", "F", "-", "J", "-", "|", "F", "-", "J", "|", "|", "|", "L", "7", "|", "|", "L", "7", "L", "7", "F", "J", "7", "-", "|", "J", "7", "F", "J", ".", "F", "L", "7", "J", "-", "L", "L", "J", "L", "L", "|", ".", "|"], |  | ||||||
| ["|", "L", "7", "J", "L", "J", "J", "|", ".", "L", "|", "F", "L", "7", "F", "-", "-", "7", "L", "-", "J", "|", "L", "-", "7", "L", "7", "L", "7", "F", "J", "L", "-", "-", "-", "7", "|", "F", "7", "|", "|", "F", "J", "F", "L", "7", "F", "J", "F", "7", "|", "|", "F", "J", "L", "7", "L", "7", "F", "-", "J", "|", "F", "-", "J", "F", "J", "F", "-", "J", "F", "-", "7", "F", "J", "L", "J", "L", "7", "F", "-", "J", "L", "7", "|", "F", "-", "-", "J", "F", "J", "F", "7", "L", "J", "|", "F", "-", "J", "F", "-", "7", "|", "|", "F", "7", "|", "L", "7", "F", "J", "L", "J", "F", "J", "F", "J", "|", "-", "F", "7", "|", "F", "-", "7", "L", "7", "-", "L", "|", "-", ".", "|", "J", "F", "-", "-", "|", "7", "."], |  | ||||||
| ["L", "|", ".", "F", "J", "7", "F", "-", "|", ".", "|", "7", "F", "L", "J", "F", "7", "L", "-", "7", "F", "J", "F", "7", "|", "F", "J", "F", "J", "L", "7", "F", "7", "F", "-", "J", "|", "|", "|", "F", "J", "L", "-", "7", "F", "J", "L", "7", "|", "|", "|", "L", "J", "F", "-", "J", "F", "L", "J", "F", "-", "J", "L", "-", "7", "L", "7", "L", "7", "-", "|", "F", "J", "|", "F", "-", "-", "-", "J", "L", "-", "-", "7", "L", "7", "L", "-", "-", "7", "L", "7", "|", "L", "-", "7", "|", "L", "-", "7", "L", "7", "L", "J", "|", "|", "|", "L", "7", "|", "L", "7", "F", "-", "J", ".", "L", "7", "L", "-", "7", "J", "7", "|", "F", "-", "7", "J", "|", "L", "J", "|", ".", "|", "-", "L", "7", "-", "L", "-", "7"], |  | ||||||
| ["|", "L", "J", "-", ".", "L", "L", "-", "F", "7", "F", "7", "F", "7", "F", "J", "L", "7", "F", "J", "L", "-", "J", "L", "J", "L", "-", "J", "F", "-", "J", "|", "|", "|", "F", "7", "L", "J", "|", "L", "7", "F", "-", "J", "L", "7", "F", "J", "|", "|", "L", "-", "7", "|", "-", "F", "7", "F", "7", "L", "-", "7", "F", "-", "J", "F", "J", "F", "J", "F", "J", "|", "-", "|", "|", "F", "7", "F", "7", "F", "7", "F", "J", "F", "J", "F", "-", "7", "|", "F", "J", "|", "F", "-", "J", "|", "F", "-", "J", "|", "L", "-", "7", "L", "J", "L", "7", "|", "|", "F", "J", "L", "7", "F", "7", "J", "|", "F", "-", "J", "F", "7", "7", "J", ".", "J", "F", "-", "J", "-", "F", "F", "J", "L", "L", "J", "7", "7", "|", "|"], |  | ||||||
| ["|", "-", "L", "F", "-", "-", "L", "7", "|", "L", "J", "|", "|", "|", "L", "-", "7", "|", "L", "7", "F", "-", "-", "-", "-", "7", "F", "-", "J", "F", "7", "|", "|", "L", "J", "L", "-", "7", "L", "7", "|", "L", "7", "J", "-", "|", "|", "F", "J", "L", "7", "F", "J", "L", "7", "|", "|", "|", "L", "-", "-", "J", "|", "F", "7", "|", "F", "J", "F", "J", "F", "J", "F", "J", "|", "|", "|", "|", "|", "|", "|", "|", "F", "J", "7", "L", "7", "L", "J", "L", "-", "J", "L", "7", "F", "J", "L", "-", "-", "7", "F", "-", "J", "F", "7", "F", "J", "|", "|", "|", "F", "-", "J", "|", "L", "7", "|", "L", "-", "-", "J", "L", "7", "|", "7", ".", "|", "7", "|", ".", "7", "L", "J", "7", "L", "J", "|", "L", "F", "J"], |  | ||||||
| ["J", "-", "-", "J", ".", "L", "L", "L", "L", "-", "7", "L", "J", "|", "F", "7", "|", "|", "F", "L", "J", "7", "F", "-", "7", "|", "L", "-", "7", "|", "|", "|", "L", "7", "J", "F", "7", "|", "F", "J", "L", "7", "L", "7", "F", "J", "L", "J", "F", "-", "J", "L", "7", "F", "J", "|", "|", "L", "-", "-", "-", "7", "|", "|", "|", "|", "L", "-", "J", "F", "J", "|", "L", "7", "|", "|", "|", "|", "|", "|", "|", "|", "|", "J", "|", "7", "L", "-", "-", "-", "-", "7", "F", "J", "|", "F", "-", "-", "-", "J", "|", "F", "-", "J", "L", "J", "F", "J", "L", "J", "|", "F", "7", "L", "7", "|", "|", "F", "-", "-", "-", "-", "J", "F", "7", "F", "|", "F", "7", "F", "7", "7", "F", "|", "7", ".", "|", "F", "L", "F"], |  | ||||||
| ["|", "F", "L", ".", "F", "L", "|", "L", "F", "7", "L", "-", "7", "L", "J", "L", "J", "L", "-", "-", "-", "7", "|", "F", "J", "L", "-", "7", "L", "J", "|", "L", "7", "|", "F", "J", "|", "|", "|", "F", "7", "L", "7", "L", "J", "F", "-", "-", "J", "F", "F", "7", "|", "|", "|", "|", "|", "F", "7", "F", "-", "J", "L", "J", "L", "J", "F", "-", "-", "J", "F", "-", "-", "J", "L", "J", "|", "|", "L", "J", "|", "|", "L", "7", "L", "F", "7", "|", "F", "-", "-", "J", "|", "F", "J", "|", "F", "-", "7", "F", "J", "L", "7", ".", "F", "7", "L", "7", "F", "-", "J", "|", "L", "7", "|", "L", "J", "L", "-", "-", "-", "7", "F", "J", "|", "F", "|", "L", "J", "-", "F", "7", "-", "|", "L", "J", "|", "F", "F", "J"], |  | ||||||
| ["|", "|", "J", "F", "7", "J", "F", "-", "J", "L", "-", "-", "J", "F", "7", "F", "7", "F", "7", "F", "7", "L", "J", "L", "-", "7", "F", "J", "F", "-", "J", "F", "J", "|", "|", "F", "J", "|", "|", "|", "|", "-", "|", "F", "-", "J", "F", "7", "F", "7", "|", "|", "|", "|", "F", "J", "|", "|", "|", "L", "-", "-", "-", "7", "F", "7", "L", "-", "7", "F", "L", "-", "-", "-", "-", "7", "|", "L", "7", "F", "J", "L", "7", "|", "F", "J", "L", "7", "L", "-", "-", "7", "L", "J", "F", "J", "L", "7", "|", "L", "7", "F", "J", "F", "J", "L", "7", "|", "L", "-", "7", "|", "F", "J", "L", "7", "F", "-", "-", "-", "-", "J", "L", "7", "L", "7", "F", "7", "L", "F", "J", "|", "F", "|", "7", "-", "J", "L", "|", "J"], |  | ||||||
| ["|", "L", "7", "-", "F", "-", "L", "-", "-", "-", "-", "-", "7", "|", "L", "J", "|", "|", "L", "J", "L", "-", "-", "-", "7", "|", "L", "7", "|", "F", "7", "L", "7", "|", "|", "L", "7", "|", "L", "J", "|", "F", "J", "|", "F", "7", "|", "L", "J", "|", "|", "|", "|", "|", "L", "7", "|", "|", "L", "7", "F", "7", "F", "J", "|", "L", "-", "7", "|", "F", "-", "7", "F", "7", "F", "J", "L", "-", "J", "|", "L", "F", "|", "|", "|", "F", "-", "J", "J", "F", "7", "L", "-", "7", "|", "F", "7", "|", "L", "7", "|", "|", "F", "J", "F", "-", "J", "L", "7", "F", "J", "|", "|", "F", "7", "|", "|", "F", "7", "L", "F", "7", "F", "J", "F", "J", "|", "L", "7", "L", "7", "|", "F", "|", "L", "7", "J", "|", "L", "L"], |  | ||||||
| ["-", ".", "|", "L", "|", "J", "|", ".", "F", "-", "-", "-", "J", "|", "F", "-", "J", "L", "-", "7", "|", "F", "-", "-", "J", "L", "-", "J", "|", "|", "|", "-", "|", "|", "|", "F", "J", "L", "7", "F", "J", "L", "7", "L", "J", "|", "|", "F", "-", "J", "|", "|", "|", "|", "F", "J", "|", "L", "7", "|", "|", "L", "J", "F", "J", "F", "7", "L", "J", "|", "F", "J", "|", "|", "L", "-", "-", "-", "7", "L", "7", "F", "J", "L", "J", "L", "7", "F", "-", "J", "|", "F", "7", "|", "L", "J", "|", "|", "F", "J", "|", "|", "L", "7", "L", "-", "7", "-", "|", "|", "7", "|", "|", "|", "|", "|", "L", "J", "L", "-", "J", "|", "|", "F", "J", "F", "|", "F", "J", "F", "J", "L", "7", "-", "7", ".", "F", "|", "-", "."], |  | ||||||
| ["L", "-", "7", ".", "|", ".", "F", "7", "L", "-", "7", "F", "7", "|", "L", "7", "F", "-", "-", "J", "F", "J", "F", "7", "F", "7", "F", "7", "L", "J", "L", "-", "J", "|", "|", "L", "7", "F", "J", "|", "7", "L", "L", "7", "F", "J", "|", "|", "F", "7", "|", "|", "|", "|", "L", "7", "|", "F", "J", "|", "L", "-", "7", "|", "F", "|", "L", "7", "F", "J", "L", "-", "J", "|", "F", "7", "F", "7", "|", "F", "J", "|", "F", "-", "-", "-", "J", "L", "-", "7", "|", "|", "|", "|", "F", "7", "|", "|", "L", "7", "|", "|", "F", "J", "F", "-", "J", "F", "J", "L", "7", "|", "|", "|", "|", "|", "F", "-", "-", "7", "F", "J", "|", "|", "F", "7", "|", "L", "-", "J", "F", "-", "J", "J", "L", "|", "7", "J", "L", "J"], |  | ||||||
| ["F", "F", ".", "F", "F", "-", "L", "F", "-", "-", "J", "|", "|", "|", "J", "|", "|", "F", "-", "7", "L", "7", "|", "|", "|", "L", "J", "L", "-", "-", "-", "7", "F", "J", "|", "F", "J", "L", "7", "L", "7", "L", "F", "J", "|", "-", "|", "|", "|", "|", "|", "|", "|", "L", "7", "|", "|", "L", "7", "L", "7", "F", "|", "L", "7", "|", "F", "J", "L", "-", "-", "-", "7", "L", "J", "|", "|", "L", "J", "|", "|", "|", "|", "F", "-", "-", "7", "F", "-", "J", "L", "J", "|", "|", "|", "L", "J", "|", "F", "J", "|", "|", "|", "F", "J", "F", "7", "L", "7", "F", "J", "|", "L", "J", "L", "J", "L", "-", "7", "L", "J", "J", "|", "|", "|", "|", "|", "F", "-", "-", "J", "J", "|", "|", "|", "L", "J", ".", "F", "J"], |  | ||||||
| ["F", "L", "-", "7", "J", ".", ".", "L", "-", "7", "F", "J", "L", "J", "|", "L", "J", "L", "7", "L", "7", "|", "|", "|", "|", "F", "-", "-", "-", "-", "-", "J", "L", "7", "|", "|", "F", "7", "L", "7", "L", "7", "L", "7", "|", "F", "J", "|", "|", "|", "|", "|", "|", "F", "J", "|", "|", ".", "L", "7", "|", "F", "J", "F", "J", "|", "|", "F", "7", "F", "F", "7", "L", "-", "7", "|", "L", "-", "7", "L", "7", "|", "L", "J", "F", "-", "J", "L", "-", "-", "-", "7", "L", "J", "L", "7", "F", "J", "L", "7", "|", "|", "|", "L", "7", "|", "|", "F", "J", "L", "7", "|", "F", "-", "-", "-", "-", "7", "L", "-", "7", "F", "J", "|", "|", "|", "|", "|", "F", "-", "7", "|", "L", "7", "J", "J", "|", "F", "L", "J"], |  | ||||||
| ["-", "7", "J", ".", "|", "F", "|", "F", "L", "L", "J", "J", "J", "L", "J", "|", "F", "7", "L", "7", "|", "L", "J", "L", "J", "L", "7", "F", "-", "-", "-", "-", "7", "L", "J", "L", "J", "L", "7", "L", "7", "L", "7", "|", "L", "J", "F", "J", "|", "L", "J", "|", "|", "|", "F", "J", "L", "7", "F", "J", "L", "J", "F", "J", "F", "J", "|", "|", "L", "-", "J", "L", "-", "7", "|", "|", "F", "7", "|", "F", "J", "L", "-", "7", "L", "7", "F", "7", "7", "F", "7", "L", "-", "7", "F", "J", "L", "-", "7", "|", "|", "|", "|", "F", "J", "|", "|", "|", "F", "7", "L", "J", "L", "-", "7", "F", "7", "L", "-", "-", "J", "L", "7", "L", "J", "L", "J", "L", "J", "F", "J", "7", "J", "|", ".", "J", "L", "7", "7", "."], |  | ||||||
| ["L", "|", "-", "-", "L", "7", "|", "7", ".", "L", "|", "-", "F", "J", ".", "F", "J", "|", "F", "J", "L", "-", "7", "7", "F", "7", "L", "J", "F", "-", "-", "-", "J", "F", "-", "-", "-", "-", "J", "-", "|", "F", "J", "|", "F", "7", "L", "7", "L", "7", "F", "J", "|", "|", "|", "F", "-", "J", "L", "-", "-", "7", "L", "7", "|", "F", "J", "L", "-", "-", "7", "F", "-", "J", "|", "L", "J", "|", "|", "L", "7", "F", "-", "J", "F", "J", "|", "|", "F", "J", "|", "F", "-", "J", "|", "F", "7", "F", "J", "L", "J", "|", "|", "L", "7", "|", "|", "|", "|", "L", "-", "-", "-", "-", "J", "|", "|", "-", "F", "7", "L", "F", "J", "F", "7", "F", "7", "F", "-", "J", "7", "|", "L", "F", "J", "L", "-", "L", "L", "7"], |  | ||||||
| ["|", "J", "J", "|", "L", "L", "F", "7", "7", "|", "L", "|", "|", ".", "F", "L", "7", "|", "L", "-", "7", "F", "J", "F", "J", "L", "-", "-", "J", "F", "7", "F", "7", "L", "7", "J", "F", "7", "-", "F", "J", "L", "7", "L", "J", "L", "7", "L", "-", "J", "L", "7", "|", "|", "|", "|", "F", "7", "F", "-", "7", "|", "F", "J", "|", "|", "F", "-", "-", "7", "|", "|", "F", "7", "L", "-", "7", "|", "|", "F", "J", "L", "-", "7", "|", "L", "|", "|", "|", "F", "J", "L", "-", "7", "|", "|", "|", "L", "-", "-", "7", "|", "|", "F", "J", "|", "|", "|", "L", "-", "7", "F", "-", "-", "7", "|", "L", "-", "J", "L", "-", "J", "F", "J", "|", "|", "|", "L", "-", "-", "7", "J", "7", "7", "J", "7", "-", "L", "F", "F"], |  | ||||||
| [".", "F", "-", "7", "-", "L", "|", "J", "L", "L", "7", "L", "F", "-", "-", "-", "J", "L", "-", "-", "J", "L", "7", "L", "-", "-", "-", "-", "-", "J", "L", "J", "L", "7", "L", "7", "|", "L", "7", "L", "-", "7", "L", "7", "F", "7", "L", "-", "7", "F", "-", "J", "|", "|", "|", "L", "J", "|", "L", "7", "|", "|", "L", "7", "|", "|", "L", "-", "7", "|", "|", "|", "|", "L", "7", "F", "J", "L", "J", "|", "F", "-", "7", "|", "|", "F", "J", "|", "|", "|", "F", "7", "F", "J", "L", "J", "|", "F", "7", "F", "J", "|", "|", "|", "F", "J", "L", "J", "F", "-", "J", "|", "F", "-", "J", "L", "7", "F", "-", "-", "7", "F", "J", "-", "L", "J", "L", "7", "F", "-", "J", "L", "L", "J", "F", "J", "7", "-", "F", "|"], |  | ||||||
| ["7", "|", "F", "L", "7", ".", "|", "-", ".", "L", "F", "-", "L", "-", "-", "-", "-", "-", "-", "-", "7", "F", "J", "F", "7", "F", "-", "-", "-", "-", "-", "-", "-", "J", "F", "J", "|", "F", "J", "F", "7", "|", "F", "J", "|", "|", "F", "7", "|", "|", "F", "7", "|", "|", "|", "F", "-", "J", "F", "|", "|", "L", "7", "|", "|", "|", "F", "7", "|", "|", "|", "|", "L", "7", "|", "|", "F", "-", "-", "J", "L", "7", "|", "|", "|", "L", "7", "|", "|", "|", "|", "|", "L", "-", "-", "7", "|", "|", "|", "L", "7", "|", "|", "|", "L", "7", "F", "7", "L", "-", "7", "|", "L", "-", "7", "|", "|", "L", "-", "7", "|", "L", "-", "-", "-", "7", "F", "J", "L", "-", "7", "-", "J", "|", "F", "F", "L", ".", "-", "|"], |  | ||||||
| ["L", "J", ".", "L", "-", "F", "J", "F", "L", "-", "F", "F", "F", "7", "F", "7", "F", "7", "F", "7", "|", "L", "-", "J", "|", "L", "-", "7", "F", "-", "-", "-", "-", "7", "L", "-", "J", "|", "F", "J", "|", "|", "|", "F", "J", "|", "|", "L", "J", "L", "J", "|", "|", "|", "|", "|", "F", "7", "F", "J", "L", "7", "|", "|", "|", "|", "|", "|", "|", "|", "|", "|", "F", "J", "|", "|", "L", "-", "7", "F", "7", "|", "|", "|", "L", "7", "|", "|", "|", "|", "|", "L", "7", "F", "7", "|", "|", "|", "|", "F", "J", "L", "J", "L", "-", "J", "|", "|", "F", "7", "L", "J", "F", "7", "L", "-", "J", "F", "7", "|", "L", "-", "-", "-", "-", "J", "|", "F", "7", "F", "J", ".", "L", "J", ".", "|", "J", "-", "L", "|"], |  | ||||||
| ["|", "|", "7", "|", "7", "J", "L", "-", "J", "|", "|", "F", "J", "L", "J", "|", "|", "|", "|", "|", "L", "-", "-", "7", "|", "F", "7", "L", "J", "F", "-", "-", "-", "J", "F", "-", "7", "|", "L", "7", "L", "J", "|", "L", "7", "|", "L", "-", "-", "7", "L", "|", "|", "|", "|", "L", "J", "|", "L", "7", "F", "J", "|", "|", "|", "|", "|", "|", "|", "L", "J", "|", "|", "-", "|", "|", "F", "-", "J", "|", "L", "J", "|", "|", ".", "|", "|", "|", "|", "|", "L", "7", "|", "|", "L", "J", "L", "J", "L", "J", "F", "-", "-", "-", "-", "-", "J", "L", "J", "L", "7", "F", "J", "|", "F", "7", "F", "J", "|", "L", "-", "7", "F", "7", "F", "7", "L", "J", "L", "J", "F", "7", "7", "7", ".", "|", "L", "-", "J", "|"], |  | ||||||
| ["-", "L", "J", "-", "7", "-", "J", "|", "L", "L", "-", "L", "7", "F", "7", "L", "J", "L", "J", "|", "F", "7", "F", "J", "L", "J", "|", "F", "7", "L", "-", "-", "-", "7", "|", "F", "J", "L", "7", "L", "7", "F", "J", "F", "J", "L", "7", "F", "7", "|", "F", "J", "|", "|", "L", "-", "7", "|", "F", "J", "|", "F", "J", "L", "J", "|", "|", "|", "|", "F", "-", "J", "L", "7", "|", "|", "|", "F", "7", "L", "-", "7", "|", "|", "F", "J", "|", "L", "J", "L", "7", "|", "|", "L", "-", "-", "-", "7", "F", "-", "J", "F", "7", "F", "-", "-", "-", "-", "7", "F", "J", "L", "7", "|", "|", "|", "L", "7", "|", "F", "-", "J", "|", "|", "|", "|", "F", "-", "-", "-", "J", "L", "7", "-", "7", "L", "7", "J", ".", "F"], |  | ||||||
| ["|", ".", "F", "L", "7", "7", "F", "F", "J", "7", ".", "L", "L", "J", "L", "-", "-", "-", "7", "L", "J", "|", "L", "-", "-", "7", "|", "|", "|", "F", "-", "-", "7", "L", "J", "L", "7", "F", "J", "F", "J", "L", "7", "L", "7", "J", "|", "|", "|", "|", "L", "7", "|", "L", "7", "F", "J", "|", "|", "F", "J", "L", "-", "-", "7", "|", "|", "|", "|", "L", "7", "F", "7", "|", "|", "|", "|", "|", "|", "F", "-", "J", "|", "|", "L", "7", "|", "L", "F", "7", "|", "|", "|", "F", "-", "-", "-", "J", "|", "F", "7", "|", "L", "J", "F", "-", "7", "F", "J", "L", "-", "-", "J", "L", "J", "L", "-", "J", "L", "J", "F", "7", "|", "|", "|", "L", "J", "F", "-", "7", "F", "-", "J", "-", "7", "L", "J", "7", "-", "|"], |  | ||||||
| ["|", ".", "|", "L", "|", "|", "|", "|", "-", "F", "7", "L", "L", "F", "7", "F", "7", "F", "L", "-", "7", "|", "J", "F", "7", "|", "|", "|", "|", "L", "-", "7", "L", "-", "-", "-", "J", "L", "7", "L", "7", ".", "|", "F", "J", "F", "J", "|", "|", "|", "7", "|", "L", "7", "|", "L", "7", "|", "|", "|", "F", "7", "F", "-", "J", "L", "J", "|", "|", "F", "J", "|", "|", "|", "|", "|", "|", "|", "|", "L", "-", "7", "|", "|", "F", "J", "L", "7", "|", "L", "J", "|", "|", "L", "-", "-", "7", "F", "J", "|", "|", "L", "7", "7", "L", "7", "L", "J", "F", "7", "7", "F", "7", "F", "7", "F", "7", "F", "7", "F", "J", "|", "|", "L", "J", "F", "-", "J", "|", "|", "L", "7", "J", "|", "|", "7", "7", "|", ".", "|"], |  | ||||||
| ["L", "L", "J", "J", "F", "|", "|", "|", ".", "L", "F", "F", "-", "J", "L", "J", "L", "-", "-", "-", "J", "L", "-", "J", "L", "J", "|", "|", "|", "F", "7", "L", "-", "-", "-", "-", "-", "7", "L", "7", "|", "F", "J", "|", "7", "|", "F", "J", "|", "|", "F", "J", "F", "J", "|", "F", "J", "|", "|", "|", "|", "|", "L", "7", "F", "-", "7", "|", "|", "L", "7", "|", "L", "J", "|", "|", "|", "|", "L", "7", "F", "J", "L", "J", "L", "7", "F", "J", "|", "F", "7", "|", "L", "7", "F", "7", "|", "|", "F", "J", "L", "-", "J", "F", "7", "L", "-", "7", "|", "L", "7", "|", "|", "|", "|", "|", "L", "J", "|", "|", "F", "J", "|", "F", "-", "J", "F", "-", "7", "L", "-", "J", "-", "F", ".", "F", "|", "L", "-", "|"], |  | ||||||
| ["L", "|", "|", ".", ".", "J", "7", "J", "-", "L", "F", "L", "7", "F", "-", "7", "F", "-", "-", "-", "-", "7", "F", "-", "-", "7", "L", "J", "L", "J", "L", "7", "F", "F", "7", "F", "7", "L", "7", "L", "J", "L", "7", "L", "7", "|", "|", "F", "J", "|", "L", "7", "L", "7", "|", "L", "7", "|", "|", "L", "J", "L", "7", "L", "J", "F", "J", "|", "|", "F", "J", "|", "F", "-", "J", "|", "|", "L", "7", "|", "|", "F", "-", "-", "-", "J", "|", "F", "J", "|", "|", "L", "7", "L", "J", "|", "|", "|", "|", "F", "-", "-", "-", "J", "L", "-", "-", "J", "|", "F", "J", "|", "|", "|", "L", "J", "F", "-", "J", "|", "|", "J", "|", "L", "-", "-", "J", "F", "J", "F", "-", "-", "-", "7", "7", "-", ".", "7", "L", "L"], |  | ||||||
| ["F", "F", "F", "-", "7", "-", "-", "7", "F", "-", "L", "F", "J", "|", "L", "L", "J", "F", "-", "-", "7", "L", "J", "F", "7", "L", "-", "-", "7", "F", "7", "L", "-", "J", "L", "J", "L", "-", "J", "F", "7", "|", "|", "F", "J", "|", "|", "L", "-", "J", "|", "|", "F", "J", "|", "F", "J", "|", "L", "-", "-", "7", "L", "7", "F", "J", ".", "L", "J", "L", "-", "J", "|", "F", "7", "|", "L", "-", "J", "L", "J", "L", "7", "F", "7", "F", "J", "L", "7", "|", "L", "7", "L", "-", "7", "|", "|", "|", "|", "L", "-", "-", "-", "-", "-", "-", "-", "-", "J", "L", "-", "J", "L", "J", "F", "7", "L", "-", "-", "J", "L", "-", "J", "F", "7", "F", "-", "J", "L", "|", "F", "-", "-", "J", "J", "F", "-", "7", "F", "J"], |  | ||||||
| ["F", "L", "L", "7", "F", "-", ".", "L", ".", "|", "F", "J", "F", "J", "-", "L", "F", "J", "F", "7", "L", "-", "-", "J", "L", "-", "-", "-", "J", "|", "L", "-", "-", "-", "-", "-", "-", "-", "-", "J", "L", "7", "|", "L", "7", "|", "L", "-", "7", "F", "-", "J", "L", "7", "|", "L", "7", "|", "F", "7", "F", "J", "F", "J", "L", "-", "-", "-", "7", "F", "-", "-", "J", "|", "|", "L", "-", "-", "7", "F", "7", "7", "|", "|", "|", "L", "7", "F", "J", "L", "7", "L", "7", "F", "J", "|", "|", "L", "J", "F", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "7", "|", "|", "F", "-", "-", "7", "F", "-", "-", "J", "|", "L", "7", "F", "7", "|", "|", "F", "7", "L", "-", "J", "|", "|", "L", "|"], |  | ||||||
| ["L", "|", "L", "7", "J", "L", "F", ".", "F", "-", "L", "7", "|", "-", "F", "7", "L", "7", "|", "L", "7", "F", "7", "F", "-", "7", "F", "-", "7", "|", "F", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "J", "L", "-", "J", "L", "-", "-", "J", "|", "F", "-", "7", "|", "|", "F", "J", "|", "|", "|", "|", "7", "|", "F", "7", "F", "7", "F", "J", "L", "-", "-", "7", "|", "L", "7", "F", "-", "J", "|", "|", "F", "J", "|", "L", "7", "|", "L", "7", "F", "J", "F", "J", "L", "7", "L", "J", "F", "7", "L", "-", "-", "-", "-", "-", "7", "F", "-", "-", "-", "-", "-", "7", "|", "|", "L", "J", "F", "-", "J", "L", "-", "7", "7", "L", "7", "L", "J", "L", "J", "L", "J", "|", "7", "-", "F", "-", "F", ".", "|"], |  | ||||||
| ["F", "|", "-", "|", ".", "-", "J", "F", "L", "L", "L", "L", "J", "7", "|", "|", "F", "J", "|", "F", "L", "J", "L", "J", "F", "J", "L", "7", "L", "J", "L", "-", "-", "-", "-", "7", "F", "7", "F", "-", "7", "F", "7", "F", "-", "7", "F", "-", "7", "|", "L", "7", "|", "|", "|", "|", "F", "J", "|", "L", "J", "F", "J", "|", "|", "|", "L", "J", "F", "-", "-", "-", "J", "L", "7", "|", "L", "-", "-", "J", "|", "L", "-", "J", "L", "|", "|", "|", "|", "|", "|", "L", "-", "7", "|", "F", "-", "J", "L", "-", "-", "-", "7", "F", "7", "L", "J", "F", "-", "7", "F", "7", "|", "|", "L", "-", "7", "L", "-", "-", "-", "7", "L", "-", "7", "|", "F", "-", "-", "7", "F", "7", "L", "7", "-", "F", "-", "L", "-", "|"], |  | ||||||
| ["J", ".", ".", "L", ".", "J", ".", "|", "-", "L", "F", "L", "F", "-", "J", "|", "L", "7", "|", "F", "-", "-", "-", "-", "J", "F", "-", "J", "J", "F", "-", "-", "-", "-", "-", "J", "|", "|", "|", "F", "J", "|", "|", "|", "F", "J", "|", "F", "J", "L", "-", "J", "L", "J", "|", "|", "L", "7", "L", "-", "7", "L", "7", "|", "|", "L", "7", "F", "L", "-", "7", "F", "-", "7", "|", "|", "F", "7", "F", "7", "|", "F", "-", "-", "-", "J", "L", "7", "|", "L", "-", "-", "7", "|", "|", "L", "-", "7", "F", "7", "F", "7", "L", "J", "L", "-", "-", "J", "L", "L", "J", "L", "J", "|", "F", "7", "L", "7", "F", "7", "L", "|", "F", "-", "J", "|", "L", "-", "7", "L", "J", "L", "-", "J", "-", "|", ".", ".", "-", "J"], |  | ||||||
| ["F", "F", ".", "F", "F", ".", "-", "-", "-", "-", "J", "J", "L", "-", "7", "L", "7", "L", "J", "L", "-", "-", "-", "-", "7", "|", "F", "-", "7", "L", "-", "7", "F", "-", "-", "-", "J", "|", "|", "L", "-", "J", "L", "J", "L", "-", "J", "L", "-", "-", "7", "F", "7", "F", "J", "|", "7", "L", "7", "F", "J", ".", "L", "J", "L", "7", "|", "F", "-", "-", "J", "L", "7", "L", "J", "|", "|", "L", "J", "L", "J", "|", "F", "7", "F", "7", "F", "J", "|", "F", "7", "F", "J", "L", "J", "F", "7", "L", "J", "L", "J", "L", "-", "-", "-", "-", "-", "-", "-", "7", "F", "F", "7", "L", "J", "L", "7", "L", "J", "L", "7", "|", "L", "-", "7", "|", "F", "7", "L", "7", "J", "|", "|", "J", "F", "7", "-", "|", ".", "7"], |  | ||||||
| ["-", "J", "-", "-", "L", "|", "F", "J", "J", ".", "|", "L", "L", "7", "L", "7", "|", "F", "7", "F", "7", "F", "-", "7", "L", "J", "L", "7", "L", "7", "F", "J", "|", "F", "-", "-", "-", "J", "L", "7", "F", "-", "7", "F", "7", "F", "7", "F", "-", "7", "L", "J", "|", "L", "-", "J", "F", "-", "J", "L", "-", "7", "F", "-", "-", "J", "|", "L", "7", "F", "7", "F", "J", "F", "-", "J", "L", "-", "-", "-", "7", "|", "|", "|", "|", "L", "J", "F", "J", "|", "L", "J", "F", "-", "-", "J", "|", "-", "F", "-", "-", "-", "-", "-", "7", "F", "7", "F", "-", "J", "F", "J", "L", "7", "F", "7", "L", "-", "-", "-", "J", "|", "F", "-", "J", "L", "J", "|", "F", "J", "|", "L", "|", "J", "-", "|", "7", "L", "J", "J"], |  | ||||||
| ["|", ".", "|", "|", "L", "L", "J", "J", ".", "F", "7", "7", "L", "F", "F", "J", "L", "J", "L", "J", "|", "L", "7", "|", "F", "-", "7", "L", "7", "L", "J", "F", "J", "L", "-", "-", "-", "-", "-", "J", "L", "7", "|", "|", "|", "|", "|", "L", "7", "|", "F", "7", "|", "F", "7", "F", "L", "-", "7", "F", "-", "J", "L", "-", "-", "7", "L", "7", "L", "J", "L", "J", "|", "L", "7", "F", "-", "7", "F", "-", "J", "|", "|", "|", "L", "-", "7", "L", "7", "L", "-", "7", "L", "-", "-", "7", "L", "7", "|", "F", "-", "7", "F", "7", "L", "J", "L", "J", "L", "F", "J", "F", "7", "L", "J", "L", "-", "-", "-", "-", "7", "|", "L", "-", "-", "7", "J", "|", "L", "-", "7", "F", "7", "J", "7", "|", "-", "J", ".", "|"], |  | ||||||
| ["L", "7", "L", "L", "7", "7", "J", ".", "F", "-", "7", "7", "7", "L", "L", "-", "-", "-", "-", "7", "L", "-", "J", "|", "L", "7", "|", "7", "L", "-", "-", "J", "J", "F", "7", "F", "7", "F", "7", "F", "-", "J", "|", "|", "|", "|", "L", "-", "J", "L", "J", "|", "L", "J", "L", "-", "7", "F", "J", "L", "7", "F", "F", "F", "-", "J", "F", "J", "L", "F", "7", "F", "-", "-", "J", "L", "7", "|", "L", "7", "F", "J", "|", "|", "F", "7", "|", "F", "J", "F", "7", "|", "F", "-", "7", "L", "7", "|", "|", "L", "7", "L", "J", "L", "-", "-", "-", "-", "-", "J", "F", "J", "L", "-", "-", "-", "-", "7", "F", "-", "J", "L", "-", "-", "7", "L", "7", "|", "F", "-", "J", "F", "7", "7", "F", "7", "7", "-", "L", "|"], |  | ||||||
| ["L", "7", "|", "L", "L", "-", "7", ".", "L", "7", "L", "-", "7", ".", "F", "F", "-", "7", "|", "L", "-", "-", "7", "|", "F", "J", "L", "7", "F", "7", "F", "7", "F", "J", "L", "J", "L", "J", "|", "|", "F", "7", "L", "J", "|", "L", "-", "-", "-", "-", "7", "L", "-", "-", "-", "-", "J", "L", "-", "7", "L", "7", "F", "J", "F", "7", "|", ".", "F", "J", "L", "J", "F", "-", "7", "F", "J", "|", "F", "J", "L", "7", "|", "L", "J", "|", "|", "L", "-", "J", "L", "J", "L", "7", "|", "F", "J", "L", "J", "F", "J", "F", "7", "F", "7", "F", "7", "F", "7", "F", "J", "F", "7", "F", "-", "-", "7", "|", "L", "-", "7", "F", "7", "F", "L", "-", "J", "L", "J", "F", "-", "J", "|", "-", "F", "J", "F", "-", "J", "L"], |  | ||||||
| ["|", ".", "F", "J", "F", "|", "|", "F", "F", "|", "F", "-", "J", "F", "7", "L", "7", "|", "F", "7", "F", "F", "J", "|", "|", "F", "7", "L", "J", "L", "J", "|", "L", "-", "-", "-", "7", "F", "J", "L", "J", "L", "7", "F", "J", "F", "7", "F", "-", "7", "L", "7", "F", "7", "F", "7", "F", "7", "F", "J", "F", "J", "L", "7", "|", "|", "L", "7", "L", "-", "7", "F", "J", "F", "J", "L", "7", "|", "|", "F", "-", "J", "L", "-", "7", "|", "L", "7", "F", "-", "-", "-", "-", "J", "|", "L", "7", "F", "7", "|", "F", "J", "|", "|", "L", "J", "L", "J", "|", "L", "-", "J", "L", "J", "F", "-", "J", "L", "-", "7", "L", "J", "L", "-", "7", "F", "-", "-", "-", "J", "F", "7", "|", "J", "J", "F", "7", "L", "-", "J"], |  | ||||||
| ["F", "F", "|", "|", "F", "F", "F", "-", "-", "J", "|", "F", "-", "J", "L", "-", "J", "L", "J", "L", "7", "L", "7", "|", "L", "J", "L", "7", "F", "-", "7", "L", "-", "-", "-", "-", "J", "L", "-", "-", "-", "-", "J", "L", "-", "J", "|", "L", "7", "L", "7", "L", "J", "L", "J", "L", "J", "|", "L", "-", "J", "F", "7", "|", "|", "L", "7", "|", "F", "-", "J", "L", "7", "L", "7", "F", "J", "|", "|", "L", "-", "7", "F", "-", "J", "L", "-", "J", "L", "-", "-", "-", "-", "7", "|", "|", "L", "J", "L", "J", "L", "7", "|", "L", "-", "-", "7", "F", "J", "F", "-", "-", "-", "-", "J", "F", "7", "F", "7", "L", "-", "-", "-", "-", "J", "L", "-", "7", "F", "-", "J", "L", "J", "F", "7", "7", "L", "7", "L", "J"], |  | ||||||
| ["|", "-", "F", "-", "7", "|", "L", "-", "-", "7", "|", "L", "-", "-", "-", "-", "-", "-", "-", "7", "L", "7", "|", "|", "L", "F", "-", "J", "|", "J", "L", "-", "-", "-", "-", "-", "-", "-", "-", "-", "7", "F", "-", "-", "-", "7", "L", "7", "L", "7", "L", "7", "F", "7", "F", "-", "7", "L", "-", "-", "-", "J", "|", "L", "J", "F", "|", "|", "L", "7", "F", "-", "J", "F", "J", "L", "7", "L", "J", "7", "F", "J", "|", "F", "-", "-", "-", "7", "F", "-", "-", "7", "J", "|", "|", "F", "7", "F", "7", "F", "7", "|", "L", "-", "-", "-", "J", "L", "7", "L", "-", "7", "F", "-", "-", "J", "L", "J", "L", "7", "L", "F", "7", "J", "F", "7", "F", "J", "L", "-", "-", "-", "7", "-", "J", "L", "-", "7", "7", "J"], |  | ||||||
| ["|", "L", "L", "7", "L", "-", "-", "-", "7", "|", "|", "F", "7", "F", "7", "F", "7", "F", "7", "L", "7", "|", "|", "L", "7", "L", "-", "-", "J", "F", "7", "F", "-", "-", "-", "-", "-", "-", "-", "-", "J", "|", "F", "-", "-", "J", "F", "L", "-", "J", "F", "J", "|", "|", "L", "7", "L", "-", "-", "-", "-", "7", "|", "F", "-", "-", "J", "|", ".", "|", "|", "F", "7", "|", "F", "7", "L", "-", "7", "F", "J", "F", "J", "L", "-", "-", "7", "L", "J", "F", "7", "|", "F", "J", "|", "|", "|", "|", "|", "|", "|", "L", "-", "-", "-", "7", "F", "7", "L", "-", "-", "J", "|", "F", "-", "7", "F", "-", "7", "L", "-", "J", "L", "7", "|", "L", "J", "F", "-", "-", "7", "F", "J", "F", "J", "7", "L", "L", "-", "7"], |  | ||||||
| ["F", "-", "-", "J", "F", "-", "-", "7", "L", "J", "|", "|", "|", "|", "|", "|", "|", "|", "|", ".", "|", "|", "L", "7", "|", "F", "7", "F", "7", "|", "|", "L", "-", "-", "-", "7", "F", "-", "-", "-", "-", "J", "L", "7", "F", "7", "F", "7", "F", "7", "L", "7", "|", "L", "7", "|", "F", "7", "-", "F", "7", "L", "J", "L", "7", "F", "7", "L", "7", "|", "|", "|", "|", "L", "J", "L", "7", "F", "J", "L", "-", "J", "F", "7", "F", "7", "L", "-", "7", "|", "L", "J", "L", "7", "|", "|", "|", "|", "|", "|", "|", "F", "7", "F", "7", "L", "J", "L", "-", "7", "F", "-", "J", "L", "7", "|", "L", "7", "L", "-", "-", "-", "-", "J", "|", "F", "-", "J", "F", "7", "L", "J", ".", "F", "J", "|", "-", "-", "J", "-"], |  | ||||||
| ["|", "F", "-", "7", "|", "J", "L", "L", "-", "7", "|", "|", "|", "|", "|", "|", "L", "J", "L", "-", "J", "L", "-", "J", "L", "J", "L", "J", "L", "J", "L", "7", ".", "F", "-", "J", "|", "F", "-", "-", "-", "-", "-", "J", "|", "|", "|", "L", "J", "|", "|", "L", "J", "F", "L", "J", "|", "L", "-", "J", "L", "7", "F", "7", "|", "|", "L", "7", "|", "|", "L", "J", "L", "7", "F", "7", "|", "|", "-", "L", "F", "7", "|", "|", "|", "|", "F", "-", "J", "|", "F", "-", "7", "|", "|", "|", "L", "J", "L", "J", "L", "J", "L", "J", "|", "F", "-", "-", "-", "J", "|", "F", "-", "-", "J", "L", "-", "J", "F", "F", "7", "|", "F", "7", "|", "L", "-", "-", "J", "|", "F", "-", "7", "7", "-", "J", "L", "-", "|", "."], |  | ||||||
| ["L", "J", "F", "L", "J", "J", ".", "L", "F", "J", "L", "J", "L", "J", "L", "J", "F", "7", "F", "-", "7", "F", "7", "F", "-", "7", "F", "7", "F", "-", "7", "L", "7", "L", "-", "-", "J", "L", "-", "-", "-", "7", "F", "7", "|", "|", "|", "F", "7", "L", "-", "-", "-", "-", "-", "-", "J", "F", "7", "F", "-", "J", "|", "L", "J", "L", "7", "|", "|", "L", "7", "F", "7", "L", "J", "|", "|", "L", "7", "F", "J", "L", "J", "|", "|", "|", "L", "-", "7", "|", "L", "7", "|", "|", "|", "L", "7", "F", "7", "F", "-", "-", "-", "7", "L", "J", "F", "7", "F", "7", "|", "L", "-", "-", "-", "7", "F", "-", "-", "J", "L", "7", "|", "|", "|", "F", "-", "-", "-", "J", "L", "7", "|", "L", "|", ".", "|", "L", "J", "-"], |  | ||||||
| ["|", "L", "|", "-", "F", "7", "F", "7", "L", "-", "7", "F", "7", "F", "-", "7", "|", "|", "|", "7", "|", "|", "|", "|", "F", "J", "|", "|", "L", "7", "L", "7", "L", "-", "-", "-", "7", "F", "7", "F", "7", "L", "J", "L", "J", "|", "|", "|", "L", "-", "-", "-", "-", "-", "-", "7", "F", "J", "|", "L", "-", "7", "L", "7", "F", "7", "|", "|", "L", "7", "|", "|", "|", "F", "7", "|", "|", "F", "J", "L", "-", "-", "7", "L", "J", "L", "-", "-", "J", "L", "-", "J", "L", "J", "L", "-", "J", "|", "L", "J", "F", "-", "-", "J", "F", "-", "J", "L", "J", "L", "J", "F", "7", "F", "7", "L", "J", "F", "-", "-", "-", "J", "|", "L", "J", "L", "7", "F", "7", "F", "-", "J", "L", "-", "7", "-", "|", "J", "J", "."], |  | ||||||
| ["|", "J", "F", "-", "J", "L", "J", "L", "-", "-", "J", "|", "L", "J", "F", "J", "|", "|", "|", "F", "J", "|", "|", "|", "L", "7", "|", "|", "F", "J", "F", "L", "7", "F", "-", "7", "L", "J", "L", "J", "L", "-", "-", "-", "7", "L", "J", "L", "7", "F", "7", "F", "-", "-", "7", "L", "J", "L", "L", "-", "-", "J", "F", "J", "|", "|", "|", "|", "F", "J", "|", "|", "|", "|", "L", "J", "|", "|", "J", ".", "F", "-", "J", "F", "7", "F", "7", "F", "-", "-", "-", "-", "-", "7", "F", "7", "F", "J", "7", "F", "J", "F", "-", "7", "|", "F", "-", "7", "F", "-", "7", "|", "L", "J", "|", "F", "7", "L", "-", "7", "F", "7", "|", "F", "-", "-", "J", "|", "L", "J", "F", "-", "-", "-", "J", "|", "|", "-", "F", "F"], |  | ||||||
| ["|", "|", "L", "7", "F", "-", "7", "F", "-", "7", "F", "J", "F", "-", "J", "F", "J", "L", "J", "L", "-", "J", "|", "|", "F", "|", "|", "|", "|", "F", "-", "-", "J", "L", "7", "L", "-", "7", "F", "-", "7", "F", "7", "7", "L", "-", "-", "7", "L", "J", "L", "J", "F", "7", "L", "-", "-", "-", "-", "-", "-", "7", "|", "F", "J", "|", "|", "|", "L", "7", "L", "J", "|", "|", "J", "L", "L", "J", "F", "-", "J", "F", "-", "J", "|", "|", "L", "J", "L", "F", "-", "-", "-", "J", "|", "|", "|", "F", "7", "L", "7", "|", ".", "L", "J", "|", "L", "L", "J", "F", "J", "L", "7", "L", "L", "J", "L", "-", "-", "J", "|", "L", "J", "L", "-", "7", "J", "|", "F", "-", "J", "F", "-", "-", "-", "7", "J", "7", ".", "|"], |  | ||||||
| [".", "-", "L", "L", "J", "F", "J", "L", "7", "L", "J", "J", "L", "7", "F", "J", ".", "F", "-", "-", "-", "-", "J", "L", "7", "|", "|", "|", "|", "L", "-", "-", "-", "-", "J", "F", "-", "J", "|", "F", "J", "|", "L", "-", "-", "-", "7", "|", "F", "7", "F", "-", "J", "|", "F", "-", "7", "F", "-", "7", "F", "J", "L", "J", "F", "|", "|", "L", "7", "|", "J", "-", "|", "|", "7", "7", ".", "F", "L", "-", "-", "J", "7", "F", "|", "L", "7", "F", "-", "J", "F", "-", "-", "7", "|", "|", "|", "|", "L", "7", "L", "J", "F", "-", "7", "L", "-", "-", "7", "L", "-", "7", "L", "-", "7", "F", "7", "F", "7", "F", "J", "F", "-", "-", "7", "L", "-", "J", "L", "7", "F", "J", "F", "-", "-", "J", "L", "7", "-", "7"], |  | ||||||
| ["|", ".", "|", "-", "L", "L", "7", "F", "J", "F", "-", "-", "7", "L", "J", "F", "-", "J", "F", "7", "F", "-", "7", "F", "J", "L", "J", "L", "J", "F", "7", "7", "F", "-", "-", "J", "F", "-", "J", "L", "7", "|", "F", "-", "-", "-", "J", "L", "J", "L", "J", "F", "7", "L", "J", "F", "L", "J", "F", "J", "L", "-", "-", "-", "7", "L", "J", "F", "J", "L", "7", "J", "L", "J", "-", "7", "-", "F", "-", "-", "-", "-", "7", "7", "L", "-", "J", "L", "-", "-", "J", "F", "-", "J", "|", "L", "J", "|", "F", "J", "F", "7", "L", "7", "|", "F", "-", "-", "J", "F", "7", "L", "-", "-", "J", "|", "|", "|", "|", "|", "F", "J", "F", "7", "L", "-", "7", "F", "7", "L", "J", "F", "J", "|", "|", "|", "J", "L", "F", "7"], |  | ||||||
| ["F", ".", "J", "7", "F", "L", "L", "J", "F", "L", "-", "7", "|", "F", "-", "J", "F", "7", "|", "|", "|", "F", "J", "|", "F", "7", "F", "7", "F", "J", "L", "7", "L", "-", "-", "-", "J", "F", "-", "7", "L", "J", "L", "7", "J", "F", "7", "F", "7", "F", "-", "J", "L", "7", "F", "F", "-", "7", "L", "-", "-", "-", "-", "7", "|", "|", "F", "L", "-", "7", "L", "7", "J", ".", "L", "-", "F", "L", "-", "-", "-", "7", "L", "-", "7", "|", "F", "-", "-", "-", "-", "J", "F", "-", "J", "F", "7", "|", "|", "F", "J", "L", "-", "J", "L", "J", "F", "-", "7", "|", "L", "-", "-", "-", "-", "J", "L", "J", "L", "J", "L", "-", "J", "L", "-", "7", "|", "|", "|", "F", "7", "L", "-", "-", "-", "7", "7", "-", "F", "J"], |  | ||||||
| ["L", "F", "|", "-", "F", "7", ".", "F", "-", "-", "-", "J", "|", "L", "7", "F", "J", "|", "|", "|", "|", "|", "F", "J", "|", "|", "|", "|", "L", "-", "7", "L", "-", "-", "-", "-", "-", "J", "F", "L", "7", "F", "-", "J", "F", "J", "L", "J", "|", "|", "F", "-", "7", "L", "7", "L", "7", "|", "F", "-", "-", "7", "J", "|", "|", "7", "J", "J", "L", "|", "F", "J", "L", "7", "|", ".", "L", "J", "|", "F", "-", "J", "F", "7", "L", "-", "J", "F", "7", "F", "7", "F", "J", "F", "-", "J", "L", "J", "L", "J", "F", "-", "-", "7", "F", "7", "|", "F", "J", "|", "F", "-", "-", "-", "7", "F", "7", "F", "7", "F", "-", "-", "-", "-", "-", "J", "L", "J", "L", "J", "|", "F", "-", "-", "-", "J", ".", "L", "L", "J"], |  | ||||||
| [".", "F", "|", "|", "L", "|", ".", "L", "-", "-", "-", "7", "L", "7", "|", "|", "|", "L", "J", "L", "J", "L", "J", "F", "J", "L", "J", "L", "-", "7", "L", "-", "-", "-", "-", "-", "-", "-", "-", "7", "|", "L", "-", "-", "J", "F", "-", "7", "L", "J", "L", "7", "L", "7", "L", "-", "J", "L", "J", "F", "7", "|", "|", "|", "|", "J", "L", "-", "-", "L", "J", "7", "F", "J", "F", ".", "7", "F", "F", "L", "-", "7", "|", "L", "7", "F", "7", "|", "|", "|", "|", "L", "7", "L", "7", "F", "-", "-", "-", "-", "J", "F", "7", "L", "J", "L", "J", "L", "-", "J", "L", "-", "-", "7", "|", "|", "|", "|", "|", "L", "-", "-", "-", "-", "7", "F", "7", "F", "-", "7", "|", "L", "-", "-", "-", "7", "F", "7", "J", "J"], |  | ||||||
| [".", "L", "-", "-", "-", "-", "F", "-", "J", "-", "F", "L", "7", "|", "L", "J", "F", "7", "F", "-", "-", "-", "-", "J", "F", "7", "F", "-", "7", "L", "-", "-", "7", "F", "-", "-", "-", "-", "-", "J", "L", "-", "-", "-", "-", "J", ".", "L", "-", "7", "F", "J", ".", "L", "7", "F", "-", "7", "F", "J", "L", "J", "-", "L", "J", "|", "|", ".", "L", "|", "J", "|", "J", ".", "L", "L", "J", "F", "-", "F", "-", "J", "|", "L", "|", "|", "|", "|", "|", "|", "|", "F", "J", "7", "L", "J", "F", "7", "F", "-", "-", "J", "L", "-", "-", "-", "-", "7", "F", "-", "-", "7", "F", "J", "|", "|", "L", "J", "L", "7", "F", "7", "F", "-", "J", "|", "|", "|", "F", "J", "L", "-", "7", "F", "7", "|", "F", "L", "|", "J"], |  | ||||||
| [".", "L", "7", "L", "7", "-", "J", "-", "L", "F", "-", "-", "J", "L", "7", "L", "|", "|", "L", "-", "-", "-", "-", "-", "J", "|", "|", "7", "L", "-", "-", "7", "L", "J", "F", "-", "-", "-", "7", "F", "7", "F", "7", "F", "7", "F", "-", "-", "7", "|", "L", "7", "F", "7", "L", "J", ".", "L", "J", "F", "7", "F", "|", "F", "L", "J", "-", "F", ".", "|", "7", "J", "|", ".", "7", "7", "F", "7", "7", "L", "-", "7", "L", "7", "|", "|", "|", "|", "|", "|", "L", "J", "7", "F", "7", "F", "J", "|", "L", "-", "7", "F", "-", "-", "-", "-", "7", "|", "L", "-", "7", "|", "L", "7", "|", "L", "-", "7", "F", "J", "|", "|", "L", "-", "-", "J", "L", "J", "L", "-", "7", "7", "L", "J", "L", "J", "7", "F", "|", "J"], |  | ||||||
| ["J", "L", "J", "7", "|", "|", "F", "|", "|", "L", "-", "7", "F", "7", "L", "-", "J", "L", "7", "F", "7", "F", "7", "F", "7", "L", "J", "F", "7", "F", "7", "L", "-", "7", "|", "F", "-", "-", "J", "|", "L", "J", "L", "J", "L", "J", "F", "-", "J", "L", "-", "J", "|", "|", "F", "7", "F", "-", "-", "J", "L", "-", "7", "7", "|", "L", "7", "J", "F", "L", "F", "-", "L", "7", "L", "L", "7", "J", "|", "|", "L", "|", "F", "J", "L", "J", "L", "J", "L", "J", "-", "F", "7", "|", "|", "L", "7", "L", "-", "7", "L", "J", "F", "-", "-", "-", "J", "L", "-", "7", "|", "L", "-", "J", "L", "-", "-", "J", "L", "-", "J", "L", "7", "F", "-", "7", "F", "-", "-", "7", "L", "-", "7", "-", "J", "|", "|", "F", "7", "J"], |  | ||||||
| ["L", "|", "L", "-", "7", "J", "F", "F", "F", "7", "-", "L", "J", "|", "F", "7", "F", "7", "L", "J", "L", "J", "L", "J", "L", "-", "7", "|", "L", "J", "L", "-", "7", "L", "J", "L", "-", "-", "-", "J", "F", "7", "F", "-", "-", "-", "J", "F", "7", "J", "F", "7", "|", "L", "J", "|", "|", "F", "-", "-", "7", "F", "J", "L", "7", "J", "L", "-", "7", "F", "|", "|", "L", ".", "-", "F", "J", "-", "|", "L", "F", "L", "J", "F", "|", "J", "|", "F", "7", "7", "F", "J", "|", "|", "L", "-", "J", "F", "-", "J", "F", "7", "L", "-", "-", "-", "-", "-", "7", "|", "L", "-", "-", "-", "-", "-", "7", "|", "-", "F", "-", "7", "|", "L", "7", "|", "|", "F", "7", "L", "7", "F", "J", "|", "|", "|", "-", "J", "|", "7"], |  | ||||||
| ["F", "|", "|", "F", "F", "7", "F", "F", "|", "L", "-", "-", "7", "L", "J", "L", "J", "L", "-", "-", "-", "-", "-", "-", "-", "7", "|", "L", "-", "-", "-", "7", "|", "F", "7", "F", "-", "-", "-", "-", "J", "L", "J", "F", "-", "-", "-", "J", "L", "-", "J", "L", "J", "F", "7", "L", "J", "L", "-", "7", "L", "J", "J", "7", "|", ".", "|", "J", "|", "F", "F", "|", "F", "F", "7", "|", "L", "-", "|", "J", "F", "7", "F", "7", "F", "7", "F", "J", "|", "F", "J", "F", "J", "L", "-", "7", "F", "J", "F", "7", "|", "|", "F", "7", "-", "F", "-", "-", "J", "L", "7", "F", "-", "-", "-", "7", "L", "7", "F", "J", "F", "J", "L", "-", "J", "L", "J", "|", "L", "7", "L", "J", "J", "-", "F", "F", "7", "L", "|", "7"], |  | ||||||
| ["L", "L", "-", "F", "L", "7", "7", "J", "L", "-", "-", "7", "|", "L", "F", "7", "F", "-", "-", "7", "F", "-", "-", "-", "-", "J", "L", "-", "-", "-", "7", "|", "|", "|", "L", "J", "F", "7", "J", "F", "-", "-", "-", "J", "F", "-", "-", "7", "F", "-", "7", "F", "7", "|", "L", "7", "F", "7", "F", "J", "F", "7", "J", "F", "F", "-", "L", "F", "F", "-", "7", "J", "-", "J", "L", ".", "|", "J", "L", "-", "|", "L", "J", "L", "J", "|", "L", "7", "|", "L", "7", "|", "F", "-", "-", "J", "L", "-", "J", "L", "J", "L", "J", "L", "7", "L", "-", "-", "-", "7", "|", "L", "-", "7", "7", "L", "7", "|", "L", "7", "|", "J", "F", "7", "|", "F", "-", "J", "F", "J", "-", "L", "L", "7", "|", "-", "-", "7", "|", "J"], |  | ||||||
| ["|", "7", ".", "-", "7", ".", "|", "7", "F", "-", "-", "J", "L", "7", "|", "L", "J", "F", "7", "L", "J", "F", "7", "F", "-", "7", "F", "7", "F", "7", "L", "J", "|", "L", "-", "-", "J", "L", "-", "J", "F", "-", "-", "7", "L", "-", "7", "|", "|", "F", "J", "|", "|", "|", "F", "J", "|", "|", "L", "-", "J", "L", "-", "7", "-", "-", "F", "F", "L", "7", "|", ".", "|", "|", ".", "F", "-", ".", "L", "F", "L", "-", "-", "7", "F", "J", "F", "J", "L", "-", "J", "|", "L", "-", "7", "F", "7", "F", "7", "F", "-", "7", "F", "7", "L", "-", "-", "-", "7", "|", "L", "7", "F", "J", "F", "7", "L", "J", "F", "J", "L", "-", "J", "L", "7", "|", "F", "-", "J", "F", "7", "J", "|", "F", "J", ".", "|", "-", "-", "7"], |  | ||||||
| ["F", "7", "L", "-", "|", "-", "L", "L", "|", "F", "-", "-", "7", "|", "L", "7", "F", "J", "S", "7", "F", "J", "L", "J", "J", "|", "|", "|", "|", "L", "-", "7", "L", "-", "-", "-", "7", "F", "-", "7", "|", "F", "7", "L", "-", "-", "J", "L", "J", "L", "-", "J", "L", "J", "|", "F", "J", "|", "F", "-", "-", "-", "-", "J", "F", "F", "-", "-", "7", "|", "|", "7", "J", ".", "7", "L", "|", "-", "F", "|", "-", "L", "F", "J", "|", "7", "L", "-", "-", "-", "7", "L", "7", ".", "L", "J", "L", "J", "L", "J", "F", "|", "|", "|", "F", "-", "-", "7", "L", "J", "F", "J", "L", "7", "|", "|", "F", "7", "|", "F", "-", "-", "-", "7", "L", "J", "L", "-", "-", "J", "|", "L", "J", "J", ".", ".", "L", "7", "7", "J"], |  | ||||||
| ["7", "7", "L", "F", "-", "J", "F", "F", "L", "J", "F", "-", "J", "L", "-", "J", "|", "F", "-", "J", "|", "F", "-", "-", "-", "J", "|", "|", "|", "F", "-", "J", "F", "7", "F", "7", "L", "J", "F", "|", "L", "J", "L", "-", "-", "7", "F", "7", "F", "7", "F", "-", "-", "7", "L", "J", "F", "J", "L", "-", "-", "7", "F", "7", "7", "|", "F", "7", "L", "J", "L", "7", "L", "-", "-", "F", "7", ".", "-", "F", "7", "7", "L", "7", "|", "F", "7", "F", "7", "7", "L", "7", "L", "-", "7", "F", "7", "F", "-", "-", "7", "|", "|", "L", "J", "F", "7", "L", "-", "7", "L", "-", "-", "J", "|", "|", "|", "L", "J", "L", "-", "-", "7", "L", "7", "F", "7", "F", "-", "7", "L", "7", "|", "7", "-", "|", "7", "L", "7", "."], |  | ||||||
| ["F", "F", "J", "|", "L", ".", "F", "J", "|", "F", "|", "F", "-", "7", "F", "-", "J", "L", "-", "7", "|", "L", "-", "-", "-", "-", "J", "L", "J", "L", "-", "-", "J", "L", "J", "L", "-", "-", "7", "L", "-", "-", "7", "F", "7", "L", "J", "L", "J", "L", "J", "F", "-", "J", "F", "7", "L", "-", "-", "-", "7", "L", "J", "L", "7", "L", "J", "L", "7", "F", "-", "J", "-", "|", "-", "J", "J", "7", ".", "|", "|", "-", "|", "|", "|", "|", "|", "|", "|", "F", "7", "L", "-", "7", "|", "|", "|", "L", "-", "7", "|", "L", "J", "F", "-", "J", "L", "-", "-", "J", "F", "7", "F", "-", "J", "L", "J", "F", "7", "F", "-", "-", "J", "F", "L", "J", "|", "L", "7", "L", "-", "J", "7", "F", "7", "|", "J", "F", "L", "-"], |  | ||||||
| ["L", "J", "F", "J", "-", "L", "L", "7", "F", "L", "L", "J", ".", "|", "|", "F", "-", "-", "7", "|", "|", "F", "-", "-", "-", "-", "-", "7", "F", "7", "F", "7", "F", "-", "7", "F", "-", "7", "L", "-", "-", "7", "L", "J", "L", "-", "-", "7", "F", "-", "-", "J", "F", "7", "|", "L", "-", "-", "-", "7", "L", "7", "F", "-", "J", "F", "-", "-", "J", "L", "7", "J", "J", "|", "|", "|", "L", "F", "-", "|", "L", "-", "-", "J", "L", "J", "L", "J", "L", "J", "L", "-", "-", "J", "L", "J", "L", "7", "F", "J", "L", "7", "-", "L", "-", "-", "-", "-", "-", "-", "J", "L", "J", "F", "-", "-", "-", "J", "|", "|", "F", "-", "-", "7", "F", "7", "L", "7", "L", "7", "F", "-", "7", "J", "7", "J", "7", "-", "L", "J"], |  | ||||||
| ["|", "|", "L", "J", ".", "|", "L", "7", ".", "|", "7", "F", "-", "|", "|", "|", "F", "7", "L", "J", "|", "L", "-", "-", "-", "-", "7", "|", "|", "|", "|", "|", "L", "7", "|", "L", "7", "L", "7", "F", "7", "|", "7", "F", "7", "F", "7", "L", "J", "F", "7", "-", "|", "L", "J", "F", "7", "F", "-", "J", "L", "L", "J", "J", "7", "L", "-", "-", "7", "F", "J", ".", "F", "-", "7", "J", "-", "L", "F", "L", "-", "-", "-", "7", "F", "7", "F", "-", "-", "-", "-", "7", "F", "-", "-", "-", "7", "|", "L", "-", "7", "|", "F", "7", "F", "-", "-", "-", "7", "F", "-", "-", "-", "J", "F", "-", "-", "7", "L", "J", "|", "F", "-", "J", "|", "|", "F", "L", "7", "L", "J", "F", "J", ".", "|", ".", "-", "-", "L", "F"], |  | ||||||
| ["L", "L", "7", ".", "F", "|", ".", "|", "F", "F", "L", "J", "J", "L", "J", "L", "J", "L", "-", "-", "J", "F", "F", "-", "-", "-", "J", "L", "J", "L", "J", "L", "-", "J", "L", "-", "J", "L", "|", "|", "|", "L", "-", "J", "L", "J", "L", "-", "7", "|", "L", "7", "|", "F", "-", "J", "L", "J", "F", "-", "7", "F", "7", "F", "7", "F", "7", "F", "J", "L", "-", "-", "J", "F", "J", "J", ".", "|", ".", "F", "-", "-", "-", "J", "|", "|", "|", "F", "-", "-", "-", "J", "|", "F", "-", "-", "J", "L", "-", "-", "J", "L", "J", "|", "L", "-", "-", "7", "L", "J", "-", "F", "7", "|", "|", "F", "7", "L", "-", "-", "J", "L", "-", "-", "J", "L", "-", "7", "|", "F", "-", "J", "L", "F", "F", "-", "L", "-", "7", "J"], |  | ||||||
| ["F", "J", "7", ".", "|", "|", "-", "F", "J", "|", "|", "7", ".", "L", "F", "-", "-", "-", "7", "-", "F", "7", "L", "7", "F", "7", "F", "7", "F", "-", "7", "F", "7", "F", "-", "-", "-", "7", "L", "J", "L", "-", "-", "7", "F", "-", "-", "-", "J", "L", "7", "|", "|", "L", "7", "F", "7", "F", "J", "F", "J", "|", "L", "J", "|", "|", "|", "|", "F", "7", "F", "7", "F", "J", "L", "-", "7", "7", "-", "L", "7", "F", "7", "F", "J", "L", "J", "L", "-", "7", "F", "7", "|", "L", "-", "-", "-", "-", "7", "F", "-", "-", "7", "L", "-", "-", "-", "J", "J", "F", "-", "J", "L", "-", "J", "|", "L", "7", "F", "-", "7", "F", "7", "F", "-", "-", "-", "J", "L", "J", "|", "|", ".", "L", "|", ".", "|", ".", "|", "7"], |  | ||||||
| ["F", "L", "F", "L", "-", "7", "7", ".", "|", "F", "F", "J", ".", "|", "L", "7", "F", "7", "L", "7", "|", "|", "F", "J", "|", "L", "J", "L", "J", "J", "L", "J", "|", "L", "7", "F", "-", "J", "F", "7", "|", "F", "7", "|", "|", "F", "-", "-", "7", "F", "J", "|", "|", "F", "J", "|", "|", "|", "F", "J", "7", "L", "-", "7", "|", "|", "L", "J", "|", "|", "|", "L", "J", "J", "|", "L", ".", "|", "L", "L", "L", "J", "L", "J", "F", "-", "-", "-", "-", "J", "|", "|", "|", "F", "-", "7", "F", "7", "|", "|", "F", "7", "L", "-", "-", "-", "-", "7", "F", "J", "F", "7", "F", "7", "F", "J", "J", "L", "J", "L", "|", "|", "|", "L", "-", "-", "7", "F", "7", "L", "F", "-", "7", "J", "J", "-", "7", "F", "-", "7"], |  | ||||||
| ["J", ".", "J", "J", ".", "|", "7", "F", "7", "L", "J", ".", "L", "F", "7", "L", "J", "L", "7", "|", "|", "|", "L", "-", "J", "J", "F", "-", "-", "-", "-", "7", "L", "-", "J", "L", "-", "7", "|", "|", "F", "J", "|", "L", "J", "|", "F", "-", "J", "L", "7", "L", "J", "L", "7", "|", "L", "J", "L", "7", "F", "7", "F", "J", "|", "|", "F", "-", "J", "L", "J", "F", "7", "|", "|", "J", "F", "|", ".", "F", "F", "-", "-", "7", "L", "-", "7", "F", "-", "7", "|", "L", "J", "L", "7", "L", "J", "L", "J", "|", "|", "L", "7", "F", "-", "-", "-", "J", "|", "F", "J", "L", "J", "|", "|", "F", "7", "J", "F", "7", "L", "J", "|", "F", "-", "-", "J", "|", "L", "-", "7", "J", "J", "J", ".", ".", "|", "L", "J", "|"], |  | ||||||
| ["L", "F", "|", "J", "|", ".", "F", "L", "7", "7", "L", "|", "|", "|", "|", "F", "7", "F", "J", "L", "J", "|", "F", "7", "F", "-", "J", "F", "7", "F", "7", "L", "-", "-", "-", "-", "-", "J", "|", "|", "L", "7", "L", "7", "L", "|", "|", "F", "-", "-", "J", "F", "7", "F", "J", "|", "F", "7", "F", "J", "|", "|", "L", "7", "|", "|", "|", "F", "7", "J", "F", "J", "L", "7", "F", "7", "F", "F", "7", "L", "L", "-", "7", "|", "F", "7", "L", "J", "|", "L", "J", "F", "F", "7", "L", "-", "-", "-", "7", "|", "L", "7", "L", "J", "F", "7", "F", "-", "J", "L", "-", "-", "7", "L", "J", "|", "L", "-", "J", "L", "-", "7", "L", "J", "F", "-", "7", "|", "F", "-", "J", ".", "F", "7", "7", "-", "J", "7", ".", "|"], |  | ||||||
| [".", "L", "J", "-", "L", "-", "7", "7", "F", "F", "-", "-", "-", "J", "|", "|", "|", "L", "-", "-", "7", "|", "|", "|", "|", "F", "-", "J", "L", "J", "L", "-", "-", "-", "-", "-", "7", "F", "J", "|", "F", "J", "F", "J", "F", "J", "L", "J", "F", "7", "F", "J", "L", "J", "F", "|", "|", "L", "J", "L", "|", "|", "|", "|", "L", "J", "L", "J", "|", "F", "J", "F", "-", "J", "|", "L", "7", "|", "|", "F", "-", "7", "|", "L", "J", "L", "7", "F", "7", "F", "-", "-", "J", "L", "-", "-", "-", "7", "L", "J", "|", "L", "-", "-", "J", "L", "J", "F", "-", "-", "-", "-", "J", "F", "7", "|", "F", "-", "-", "-", "-", "J", "J", "F", "J", "F", "J", "|", "|", "F", "7", "F", "7", "|", "F", "7", "L", "L", "F", "J"], |  | ||||||
| ["F", "|", "|", "F", "|", "-", "F", "-", "L", "L", "-", "-", "-", "7", "L", "J", "L", "-", "-", "7", "|", "|", "|", "|", "L", "J", "F", "-", "7", "F", "-", "-", "-", "-", "-", "-", "J", "|", "F", "J", "L", "7", "|", "J", "L", "7", "F", "-", "J", "L", "J", "F", "-", "-", "-", "J", "L", "-", "-", "7", "|", "L", "7", "L", "-", "7", "F", "-", "J", "|", "F", "J", "-", "F", "J", "F", "J", "|", "|", "L", "7", "|", "L", "7", "F", "-", "J", "|", "|", "L", "-", "-", "7", "F", "7", "F", "7", "L", "-", "-", "-", "-", "-", "-", "-", "-", "-", "J", "F", "-", "7", "F", "7", "|", "|", "|", "|", "F", "-", "-", "7", "F", "7", "L", "7", "L", "7", "|", "L", "J", "L", "J", "L", "-", "-", "7", ".", "|", "L", "J"], |  | ||||||
| ["F", "|", "7", "7", "|", "-", "|", "L", "J", "F", "7", "F", "7", "L", "-", "-", "-", "-", "7", "|", "|", "|", "|", "L", "7", "J", "L", "7", "|", "L", "-", "7", "F", "-", "-", "-", "-", "J", "L", "-", "-", "J", "L", "7", "F", "J", "L", "7", "F", "7", "F", "L", "-", "7", "F", "-", "-", "-", "-", "J", "L", "7", "|", "F", "-", "J", "L", "7", "-", "|", "L", "-", "7", "|", "F", "J", "F", "J", "L", "-", "J", "|", "F", "J", "L", "-", "7", "|", "|", "F", "7", "|", "L", "J", "L", "J", "L", "-", "-", "-", "-", "-", "-", "-", "-", "7", "F", "7", "L", "7", "|", "|", "L", "J", "L", "J", "L", "J", "F", "-", "J", "|", "L", "-", "J", "F", "J", "|", "F", "-", "-", "7", "F", "7", "F", "J", ".", "L", "7", "|"], |  | ||||||
| ["F", "J", "|", "L", ".", "F", "-", "7", "-", "|", "L", "J", "|", "F", "-", "-", "-", "7", "|", "L", "J", "|", "L", "7", "|", "F", "7", "|", "L", "-", "7", "L", "J", "F", "-", "-", "-", "-", "7", "F", "7", "F", "7", "L", "J", "F", "-", "J", "|", "|", "F", "7", "F", "|", "L", "-", "-", "7", "7", "F", "7", "|", "|", "L", "7", "F", "7", "L", "-", "J", "F", "-", "J", "|", "L", "7", "|", "F", "-", "-", "7", "L", "J", "F", "-", "-", "J", "|", "|", "|", "L", "-", "7", "F", "7", "F", "7", "F", "7", "-", "F", "7", "F", "-", "-", "J", "|", "L", "-", "J", "L", "J", "F", "-", "7", "F", "-", "-", "J", "F", "7", "|", "F", "-", "7", "L", "-", "J", "L", "-", "7", "L", "J", "|", "|", "J", "|", ".", "L", "."], |  | ||||||
| ["L", "-", "J", "-", "F", "7", ".", "J", ".", "L", "-", "7", "|", "L", "-", "-", "7", "|", "L", "-", "7", "L", "7", "|", "|", "|", "|", "L", "-", "7", "|", "F", "7", "L", "-", "-", "-", "7", "L", "J", "|", "|", "|", "F", "7", "L", "7", "F", "J", "L", "J", "L", "-", "J", "F", "-", "7", "L", "7", "|", "L", "J", "L", "7", "L", "J", "|", "F", "7", "F", "J", "F", "7", "|", "F", "J", "L", "J", "F", "7", "L", "-", "7", "|", "F", "7", "-", "|", "|", "|", "F", "7", "L", "J", "L", "J", "L", "J", "|", "F", "J", "|", "L", "-", "-", "-", "J", "F", "7", "F", "7", "F", "J", "J", "|", "L", "-", "-", "-", "J", "L", "J", "L", "7", "L", "-", "7", "F", "-", "7", "L", "-", "7", "L", "J", "-", "7", "-", "|", "7"], |  | ||||||
| ["L", "7", "7", "F", "F", "L", "7", "L", "F", "-", "-", "J", "L", "-", "7", "7", "|", "L", "7", "J", "L", "7", "L", "J", "L", "J", "|", "F", "7", "|", "|", "|", "|", "F", "-", "-", "7", "L", "-", "7", "L", "J", "L", "J", "L", "7", "L", "J", "F", "-", "-", "-", "-", "7", "L", "7", "L", "-", "J", "L", "-", "-", "7", "L", "7", "F", "J", "|", "|", "|", "7", "|", "|", "|", "|", "L", "F", "-", "J", "|", "7", "F", "J", "|", "|", "|", "F", "J", "|", "L", "J", "L", "-", "-", "-", "-", "-", "7", "|", "|", "F", "J", "J", "F", "7", "F", "-", "J", "L", "J", "|", "L", "-", "7", "|", "F", "-", "7", "F", "-", "-", "-", "-", "J", "F", "7", "L", "J", "7", "|", "F", "-", "J", "7", "J", "F", "L", "7", "|", "|"], |  | ||||||
| [".", "|", "F", "F", "7", "J", "7", "L", "L", "-", "-", "7", "F", "7", "L", "7", "L", "7", "L", "7", "7", "L", "7", "F", "-", "7", "L", "J", "|", "|", "L", "J", "|", "L", "-", "7", "|", "F", "7", "L", "7", "F", "7", "F", "F", "|", "F", "7", "L", "-", "-", "-", "7", "|", "F", "J", "L", "F", "7", "L", "F", "7", "L", "7", "|", "L", "7", "|", "L", "J", "F", "J", "|", "|", "L", "7", "L", "-", "7", "L", "7", "L", "7", "|", "|", "|", "L", "7", "L", "7", "F", "-", "7", "F", "-", "-", "-", "J", "L", "J", "L", "-", "7", "|", "|", "L", "-", "-", "-", "7", "L", "-", "-", "J", "L", "J", ".", "|", "L", "-", "-", "-", "-", "-", "J", "L", "7", "F", "F", "J", "L", "-", "-", "7", "-", "J", "-", "L", "-", "7"], |  | ||||||
| ["|", "-", "F", "J", "|", "|", "F", "7", ".", "F", "7", "L", "J", "L", "7", "L", "7", "|", "F", "J", "F", "7", "L", "J", "F", "J", "F", "7", "|", "L", "-", "7", "|", "F", "-", "J", "|", "|", "L", "7", "L", "J", "L", "7", "F", "J", "|", "L", "7", "F", "7", "F", "J", "|", "|", "F", "7", "|", "L", "7", "|", "L", "7", "|", "|", "-", "|", "L", "7", "7", "L", "7", "L", "J", "F", "J", "F", "-", "J", "F", "J", "F", "J", "L", "J", "|", "F", "J", "F", "J", "L", "7", "|", "L", "-", "-", "-", "7", "F", "-", "-", "7", "L", "J", "L", "-", "-", "-", "-", "J", "F", "-", "-", "-", "7", "F", "-", "J", "F", "7", "F", "7", "F", "-", "-", "7", "L", "7", "|", "F", "7", "F", "-", "J", "J", "-", "7", "L", "-", "J"], |  | ||||||
| ["L", "L", "L", "7", "L", "-", "J", "|", "F", "J", "L", "-", "-", "7", "L", "7", "L", "J", "L", "-", "J", "L", "-", "-", "J", "F", "J", "|", "L", "-", "-", "J", "L", "J", "F", "7", "L", "J", "F", "L", "-", "-", "-", "J", "L", "-", "J", "J", "L", "J", "|", "L", "7", "|", "|", "|", "|", "L", "7", "L", "J", "F", "J", "|", "L", "-", "J", "F", "J", "F", "7", "L", "7", "F", "J", "J", "L", "-", "7", "|", "F", "J", "F", "-", "-", "J", "L", "7", "|", "F", "F", "J", "|", "F", "-", "-", "-", "J", "|", "F", "-", "J", "F", "7", "F", "-", "-", "7", "F", "-", "J", "F", "-", "-", "J", "|", "F", "7", "|", "|", "|", "|", "L", "-", "7", "L", "-", "J", "L", "J", "|", "L", "-", "7", "F", "-", "J", "F", "J", "|"], |  | ||||||
| ["J", ".", "L", "L", "-", "-", "7", "|", "L", "-", "7", "F", "7", "L", "7", "L", "7", "F", "-", "-", "-", "-", "7", "F", "-", "J", "7", "L", "-", "-", "7", "F", "7", "F", "J", "L", "-", "-", "-", "-", "7", "J", "F", "7", "F", "-", "-", "-", "-", "7", "L", "-", "J", "L", "J", "|", "|", "|", "L", "-", "7", "L", "7", "L", "-", "7", "F", "J", "F", "J", "|", "F", "J", "L", "7", "F", "-", "-", "J", "|", "L", "7", "|", "F", "7", "F", "F", "J", "L", "7", "L", "7", "|", "L", "-", "-", "-", "-", "J", "L", "7", "F", "J", "L", "J", "F", "7", "L", "J", "F", "-", "J", "J", "F", "7", "L", "J", "L", "J", "L", "J", "L", "-", "7", "L", "-", "-", "-", "7", "L", "|", "F", "-", "J", "J", "F", "7", ".", "F", "J"], |  | ||||||
| ["|", "7", "|", "L", "F", "-", "J", "L", "-", "7", "|", "|", "L", "7", "L", "-", "J", "|", "F", "-", "-", "-", "J", "|", "F", "-", "-", "-", "-", "-", "J", "|", "|", "|", "F", "-", "-", "-", "-", "-", "J", "F", "J", "L", "J", "F", "-", "-", "-", "J", "F", "-", "7", "F", "7", "|", "|", "F", "-", "7", "L", "7", "|", "F", "-", "J", "L", "7", "L", "7", "L", "J", "F", "-", "J", "L", "-", "-", "7", "L", "-", "J", "|", "|", "L", "7", "L", "-", "7", "|", "F", "J", "L", "7", "F", "7", "F", "7", "F", "-", "J", "|", "7", "F", "7", "|", "L", "-", "-", "J", "F", "-", "7", "|", "L", "-", "-", "-", "-", "-", "-", "-", "7", "|", "F", "-", "-", "7", "|", "7", "L", "J", ".", "|", "L", "L", "F", "7", "J", "7"], |  | ||||||
| ["|", "-", "L", "J", "L", "7", "F", "-", "-", "J", "L", "J", "|", "L", "-", "-", "-", "J", "L", "7", "F", "7", "F", "J", "|", "F", "-", "7", "F", "-", "7", "|", "L", "J", "L", "7", "F", "7", "-", "F", "-", "J", "F", "-", "-", "J", "F", "-", "-", "7", "L", "7", "|", "|", "|", "|", "|", "|", "F", "J", "F", "J", "|", "L", "-", "7", "F", "J", "F", "J", "F", "7", "|", "F", "7", "F", "7", "-", "L", "-", "7", "F", "J", "L", "7", "|", "F", "7", "|", "|", "|", "F", "7", "L", "J", "L", "J", "|", "L", "-", "7", "|", "F", "J", "L", "J", "F", "7", "F", "-", "J", "F", "J", "|", "F", "-", "-", "-", "-", "-", "-", "-", "J", "|", "L", "-", "7", "L", "J", "J", "F", "L", "-", "7", ".", "|", "J", "F", "-", "-"], |  | ||||||
| ["7", "|", "L", "F", "-", "J", "L", "-", "-", "7", "F", "7", "F", "-", "-", "-", "-", "-", "7", "|", "|", "|", "L", "7", "L", "J", "F", "L", "J", "L", "L", "J", "F", "-", "7", "L", "J", "L", "7", "|", "F", "-", "J", "-", "F", "7", "L", "7", "F", "J", "F", "J", "L", "J", "|", "|", "|", "|", "L", "7", "L", "7", "L", "-", "-", "J", "L", "7", "|", "F", "J", "L", "J", "|", "|", "|", "|", "F", "7", "F", "J", "L", "7", "F", "J", "L", "J", "L", "J", "|", "L", "J", "L", "-", "-", "7", "F", "J", "F", "7", "L", "J", "L", "7", "F", "7", "|", "|", "|", "F", "-", "J", "F", "J", "L", "7", "F", "-", "-", "-", "7", "F", "7", "L", "-", "7", "L", "7", "L", "J", "7", "7", "L", "|", "F", "|", "F", "J", "J", "|"], |  | ||||||
| ["L", "7", ".", "L", "-", "7", "F", "-", "-", "J", "|", "|", "L", "-", "-", "-", "-", "7", "|", "L", "J", "L", "-", "J", "F", "-", "-", "-", "-", "7", "F", "7", "L", "7", "L", "-", "-", "7", "L", "J", "L", "-", "-", "-", "J", "|", "F", "J", "L", "7", "L", "-", "-", "7", "|", "|", "|", "L", "7", "L", "7", "|", "F", "7", "F", "-", "7", "|", "|", "L", "-", "7", "F", "J", "|", "|", "|", "|", "|", "L", "7", "F", "J", "L", "7", "F", "7", "F", "7", "L", "7", "F", "7", "L", "F", "J", "L", "-", "J", "L", "-", "-", "7", "L", "J", "L", "J", "|", "|", "L", "-", "-", "J", "F", "7", "L", "J", "F", "-", "-", "J", "|", "L", "-", "7", "L", "-", "J", ".", "|", "L", "J", "-", "L", "-", "J", "F", "J", "F", "|"], |  | ||||||
| ["F", "F", "F", "-", "-", "J", "L", "-", "-", "7", "|", "|", "F", "7", "F", "7", "F", "J", "L", "-", "-", "7", "F", "7", "L", "-", "-", "-", "7", "L", "J", "L", "7", "L", "-", "-", "7", "L", "7", "F", "7", "F", "-", "7", "F", "J", "|", "F", "-", "J", "F", "7", "F", "J", "L", "J", "L", "7", "|", "F", "J", "L", "J", "|", "|", "F", "J", "|", "|", "F", "-", "J", "L", "7", "L", "J", "|", "|", "|", "F", "J", "|", "F", "7", "L", "J", "L", "J", "L", "7", "|", "|", "L", "7", "L", "7", "F", "7", "F", "-", "-", "-", "J", "F", "-", "-", "-", "J", "|", "F", "-", "-", "-", "J", "L", "-", "-", "J", "F", "7", "F", "J", "F", "7", "L", "-", "-", "-", "7", ".", "|", "J", "|", "L", "L", "7", "F", "-", "-", "7"], |  | ||||||
| ["|", "J", "L", "-", "-", "-", "7", "F", "-", "J", "|", "|", "|", "|", "|", "|", "L", "-", "-", "7", "F", "J", "|", "|", "F", "7", "F", "7", "L", "-", "-", "7", "L", "-", "-", "-", "J", "J", "L", "J", "|", "|", "F", "L", "J", "F", "|", "|", "F", "-", "J", "|", "L", "7", "F", "7", "F", "J", "|", "L", "7", "F", "7", "L", "J", "L", "7", "L", "J", "L", "7", "F", "7", "|", "F", "-", "J", "|", "|", "L", "7", "|", "|", "L", "-", "-", "7", "F", "7", "|", "|", "L", "7", "|", "-", "L", "J", "|", "L", "7", "F", "-", "7", "L", "-", "-", "-", "-", "J", "L", "7", "F", "7", "F", "7", "F", "-", "-", "J", "L", "J", "F", "J", "L", "-", "-", "-", "-", "J", "F", "-", ".", "J", "|", "J", "F", "-", "F", "J", "."], |  | ||||||
| ["L", ".", "|", "F", "-", "-", "J", "L", "-", "-", "J", "L", "J", "L", "J", "|", "7", "F", "-", "J", "L", "-", "J", "|", "|", "|", "|", "|", "F", "-", "7", "|", "F", "7", "F", "7", "F", "7", "F", "7", "L", "J", "F", "-", "-", "-", "J", "|", "L", "7", "F", "J", "-", "|", "|", "L", "J", ".", "L", "7", "L", "J", "|", "L", "F", "7", "L", "7", "F", "7", "L", "J", "|", "|", "|", "F", "7", "|", "L", "7", "|", "L", "J", "F", "-", "-", "J", "|", "L", "J", "L", "-", "J", "|", "F", "-", "7", "|", "F", "J", "L", "7", "|", "F", "7", "F", "-", "7", "F", "-", "J", "|", "|", "|", "L", "J", "F", "-", "-", "7", "F", "J", "F", "7", "F", "7", "7", "F", "7", "-", "7", "-", "J", "F", "-", "L", ".", "J", "-", "7"], |  | ||||||
| ["F", "-", "L", "L", "-", "7", "F", "7", "F", "-", "7", "F", "7", "F", "7", "L", "7", "L", "7", "F", "7", "F", "7", "L", "J", "L", "J", "L", "J", "F", "J", "L", "J", "L", "J", "L", "J", "L", "J", "L", "-", "7", "L", "-", "-", "-", "7", "L", "-", "J", "L", "-", "7", "|", "|", "F", "7", "F", "7", "|", "F", "-", "J", "F", "J", "L", "-", "J", "|", "L", "-", "-", "J", "|", "L", "J", "|", "L", "7", "|", "|", "F", "-", "J", "F", "-", "7", "L", "-", "7", "F", "-", "-", "J", "L", "7", "|", "|", "L", "-", "7", "|", "L", "J", "L", "J", "-", "L", "J", "F", "7", "|", "|", "|", "F", "-", "J", "F", "7", "L", "J", "F", "J", "L", "J", "L", "-", "J", "|", ".", "F", "7", "L", "J", "L", "|", "F", "J", "F", "|"], |  | ||||||
| ["F", "7", ".", "F", "-", "J", "|", "|", "|", "F", "J", "|", "L", "J", "L", "7", "|", "J", "L", "J", "L", "J", "L", "-", "-", "-", "-", "-", "7", "|", "F", "7", "F", "7", "7", "F", "7", "F", "-", "-", "-", "J", "|", "F", "7", "F", "|", "F", "7", "F", "7", "F", "J", "|", "|", "|", "L", "J", "|", "|", "|", "F", "7", "L", "-", "-", "-", "7", "|", "F", "7", "F", "-", "J", "F", "-", "J", "F", "J", "|", "|", "|", "F", "7", "L", "7", "|", "F", "-", "J", "L", "-", "7", "J", "F", "J", "|", "L", "7", "F", "J", "|", "F", "-", "-", "-", "-", "-", "-", "J", "L", "J", "L", "J", "L", "-", "-", "J", "L", "7", "|", "|", "F", "-", "-", "-", "-", "-", "J", "7", "J", "L", "7", "J", "F", "F", "J", "F", "-", "7"], |  | ||||||
| ["L", "J", "-", "|", "F", "7", "|", "L", "J", "|", "F", "J", "F", "-", "-", "J", "L", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "J", "L", "J", "L", "J", "L", "-", "J", "L", "J", "F", "-", "-", "-", "7", "|", "|", "F", "J", "|", "L", "J", "|", "|", "F", "J", "|", "L", "-", "7", "|", "|", "|", "|", "|", "F", "-", "-", "7", "|", "L", "J", "|", "L", "-", "7", "L", "7", "F", "L", "7", "|", "|", "|", "|", "L", "7", "|", "|", "|", "F", "7", "F", "-", "J", "F", "J", "F", "J", ".", "|", "L", "7", "L", "J", ".", "F", "-", "-", "-", "-", "-", "7", "F", "-", "-", "-", "-", "-", "-", "-", "J", "F", "J", "L", "-", "-", "-", "-", "7", "F", "7", "7", "J", "L", "F", "F", "L", "-", "L", "J", "|"], |  | ||||||
| ["L", "|", "F", "J", "|", "L", "J", "F", "-", "J", "L", "7", "|", "F", "7", "F", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "7", "F", "7", "F", "-", "7", "F", "-", "-", "7", "F", "7", "|", "F", "-", "-", "J", "|", "|", "L", "7", "|", "F", "7", "L", "J", "|", "F", "J", "F", "7", "|", "|", "|", "|", "|", "|", "L", "-", "7", "|", "|", "F", "-", "J", "F", "7", "|", "F", "J", "F", "7", "|", "|", "|", "|", "|", "F", "J", "|", "|", "L", "J", "|", "|", "F", "7", "L", "7", "|", "F", "7", "|", "F", "J", "L", "F", "7", "L", "-", "-", "-", "-", "7", "|", "L", "-", "-", "-", "-", "-", "-", "-", "-", "J", "F", "7", "F", "-", "-", "-", "J", "|", "L", "7", "7", "F", "7", "J", "F", "F", "J", "J", "7"], |  | ||||||
| ["F", "L", "|", "F", "J", "F", "7", "|", "F", "-", "-", "J", "L", "J", "L", "J", "F", "-", "-", "-", "7", "F", "-", "7", "F", "-", "J", "|", "|", "|", "F", "J", "|", "F", "-", "J", "|", "|", "|", "L", "-", "7", "F", "J", "|", "F", "J", "|", "|", "L", "7", "F", "J", "|", "F", "J", "|", "|", "L", "J", "|", "|", "L", "7", "F", "J", "L", "J", "L", "7", "F", "J", "|", "|", "|", "F", "J", "|", "|", "|", "|", "|", "|", "|", "F", "J", "L", "7", "F", "J", "|", "|", "|", "F", "J", "|", "|", "|", "|", "L", "7", "F", "J", "L", "7", "F", "7", "F", "7", "|", "|", "F", "-", "7", "F", "-", "-", "-", "-", "-", "-", "J", "L", "J", "|", "F", "-", "-", "J", "F", "J", "F", "7", "J", ".", "L", "7", "F", "7", "7"], |  | ||||||
| ["L", "L", "L", "J", "L", "|", "|", "L", "J", "F", "7", "F", "-", "7", "F", "-", "J", "F", "7", "F", "J", "L", "7", "|", "L", "-", "-", "J", "L", "J", "L", "7", "|", "L", "7", "F", "J", "|", "L", "-", "7", "|", "|", "J", "L", "J", "F", "J", "|", "F", "J", "L", "7", "|", "L", "7", "L", "J", "F", "7", "|", "|", "|", "|", "L", "-", "-", "-", "7", "|", "|", "L", "|", "|", "|", "L", "7", "|", "|", "|", "|", "|", "|", "|", "L", "-", "7", "|", "|", "F", "J", "|", "|", "L", "7", "L", "J", "|", "L", "7", "|", "L", "-", "7", "|", "|", "|", "|", "|", "|", "L", "J", "F", "J", "L", "-", "-", "-", "-", "-", "-", "-", "-", "-", "-", "J", "F", "7", "F", "J", "F", "J", "L", "-", "7", "L", "L", "F", "J", "L"], |  | ||||||
| ["L", "7", "F", "F", "7", "|", "L", "-", "-", "J", "|", "|", "F", "J", "L", "7", "F", "J", "|", "|", "|", "F", "J", "L", "-", "-", "-", "-", "7", "F", "7", "|", "|", "F", "J", "L", "7", "L", "7", "F", "J", "|", "L", "-", "7", "|", "L", "7", "|", "L", "-", "-", "J", "|", "F", "J", "J", "F", "J", "|", "|", "L", "7", "|", "F", "7", "F", "-", "J", "|", "|", "F", "J", "|", "|", "F", "J", "|", "|", "|", "|", "L", "J", "L", "7", "F", "J", "L", "J", "L", "-", "J", "L", "7", "|", "7", "F", "J", "F", "J", "|", "F", "-", "J", "L", "J", "|", "|", "L", "J", "F", "7", "L", "-", "7", "F", "-", "-", "-", "-", "7", "F", "-", "7", "F", "-", "J", "L", "J", "7", "|", "F", "-", "-", "J", "7", ".", "|", ".", "|"], |  | ||||||
| ["F", "-", "-", "J", "L", "J", "F", "-", "-", "7", "L", "J", "|", "F", "7", "L", "J", "F", "J", "L", "7", "L", "-", "-", "-", "-", "-", "7", "L", "J", "L", "J", "|", "|", "F", "7", "|", "F", "J", "|", "F", "J", "F", "7", "|", "F", "-", "J", "L", "7", "F", "-", "7", "L", "J", "F", "7", "L", "7", "L", "J", "F", "J", "L", "J", "|", "L", "-", "7", "L", "J", "|", "F", "J", "|", "L", "7", "|", "|", "|", "L", "7", "F", "7", "|", "|", "F", "7", "F", "7", "F", "-", "-", "J", "L", "7", "|", "F", "J", "F", "J", "L", "-", "7", "F", "-", "J", "L", "-", "-", "J", "|", "F", "-", "J", "L", "7", "7", "F", "7", "L", "J", "|", "L", "J", "-", "F", "-", "-", "-", "J", "L", "7", ".", "|", "7", "L", "7", "7", "F"], |  | ||||||
| ["|", "F", "-", "-", "-", "7", "|", ".", "F", "J", "F", "7", "L", "J", "L", "7", "F", "J", "F", "7", "L", "-", "-", "-", "-", "-", "-", "J", "F", "7", "F", "-", "J", "|", "|", "|", "|", "L", "7", "|", "L", "7", "|", "|", "|", "L", "-", "7", "F", "J", "L", "7", "L", "-", "7", "|", "L", "-", "J", "F", "7", "L", "-", "-", "7", "L", "7", "F", "J", "F", "-", "J", "L", "7", "L", "7", "|", "|", "|", "L", "7", "|", "|", "L", "J", "L", "J", "L", "J", "|", "|", "F", "7", "F", "7", "|", "|", "L", "7", "L", "7", "F", "7", "|", "L", "7", "F", "7", "F", "7", "F", "J", "L", "-", "-", "7", "L", "-", "J", "L", "-", "-", "7", "F", "-", "-", "J", "F", "-", "7", "F", "7", "L", "-", "7", "-", "7", ".", "F", "|"], |  | ||||||
| ["L", "J", "-", "F", "-", "J", "L", "7", "L", "-", "J", "L", "-", "-", "7", "L", "J", "F", "J", "|", "F", "7", "F", "7", "F", "-", "-", "-", "J", "|", "L", "-", "7", "|", "|", "L", "J", "F", "J", "L", "7", "|", "|", "|", "|", "F", "-", "J", "L", "-", "7", "|", "F", "-", "J", "L", "-", "-", "7", "|", "L", "7", "F", "-", "J", "F", "J", "|", ".", "L", "7", "F", "7", "L", "7", "|", "|", "|", "|", "F", "J", "|", "L", "-", "7", "F", "7", "F", "-", "J", "|", "|", "|", "|", "|", "|", "L", "7", "L", "7", "|", "|", "|", "L", "7", "|", "|", "L", "J", "|", "L", "-", "-", "7", "F", "L", "7", "F", "7", "F", "-", "-", "J", "|", "F", "-", "-", "J", "-", "L", "J", "L", "-", "-", "J", "-", "|", "-", "L", "J"], |  | ||||||
| ["L", "L", "F", "J", "F", "-", "-", "J", "F", "-", "-", "7", "F", "-", "J", "F", "7", "L", "7", "L", "J", "|", "|", "L", "J", "F", "-", "-", "-", "J", "F", "7", "|", "|", "|", "F", "F", "J", "F", "7", "|", "L", "J", "L", "J", "L", "7", "F", "-", "7", "L", "J", "L", "7", "F", "7", "F", "F", "J", "L", "7", "|", "L", "-", "7", "L", "7", "L", "7", "-", "|", "|", "L", "7", "|", "|", "|", "L", "J", "|", "F", "J", "F", "-", "J", "|", "|", "L", "-", "7", "|", "|", "L", "J", "|", "|", "F", "J", "F", "J", "|", "|", "|", "F", "J", "|", "|", "F", "-", "J", "F", "-", "7", "|", "F", "-", "J", "|", "|", "L", "-", "7", "|", "|", "|", "F", "-", "-", "-", "-", "-", "-", "-", "-", "7", "-", "-", "J", "L", "|"], |  | ||||||
| ["F", "-", "L", "7", "L", "7", ".", ".", "L", "-", "7", "L", "J", "F", "7", "|", "L", "7", "L", "-", "7", "L", "J", "F", "-", "J", "F", "7", "F", "7", "|", "|", "|", "|", "L", "7", "|", "F", "J", "L", "J", "F", "F", "-", "-", "-", "J", "L", "7", "L", "7", "F", "7", "L", "J", "L", "7", "L", "7", "F", "J", "|", "F", "-", "J", "J", "L", "7", "L", "7", "L", "J", "L", "L", "J", "|", "L", "7", "F", "J", "L", "7", "L", "-", "7", "|", "|", "F", "-", "J", "|", "L", "-", "7", "L", "J", "L", "7", "|", "|", "L", "J", "|", "|", "F", "J", "|", "L", "-", "7", "L", "7", "|", "|", "L", "7", "F", "J", "|", "F", "7", "L", "-", "J", "L", "J", "F", "7", "F", "-", "-", "-", "-", "-", "J", "7", ".", "L", "|", "|"], |  | ||||||
| ["J", "J", "F", "L", "7", "|", "7", "L", "L", "7", "L", "7", "F", "J", "|", "L", "7", "L", "7", "F", "J", "F", "-", "J", "F", "7", "|", "|", "|", "L", "J", "|", "|", "L", "7", "|", "|", "|", "|", "F", "-", "-", "J", "F", "7", "F", "-", "-", "J", "F", "J", "|", "|", "F", "7", "F", "J", "F", "|", "L", "7", "|", "L", "-", "7", "F", "7", "L", "7", "|", "F", "F", "-", "-", "7", "|", "F", "J", "L", "7", "F", "J", "F", "-", "J", "|", "|", "L", "7", "F", "J", "F", "7", "L", "-", "-", "7", "|", "L", "-", "-", "7", "|", "|", "L", "7", "L", "7", "F", "J", "F", "J", "|", "|", "F", "J", "L", "7", "|", "|", "L", "7", "F", "7", "F", "7", "|", "|", "L", "-", "7", "F", "-", "7", "L", "F", "-", "7", "-", "7"], |  | ||||||
| ["|", "7", "L", "7", "|", "|", "J", "-", "L", "J", ".", "|", "L", "7", "L", "7", "L", "7", "|", "|", "F", "J", "F", "-", "J", "|", "|", "|", "L", "7", "J", "L", "J", "L", "|", "|", "|", "L", "7", "|", "F", "7", "F", "J", "|", "|", "F", "-", "7", "L", "7", "|", "|", "|", "|", "L", "-", "7", "L", "7", "|", "|", "F", "-", "J", "|", "|", "F", "J", "L", "7", "|", "F", "-", "J", "|", "|", "F", "7", "L", "J", "F", "J", "F", "7", "|", "|", "F", "J", "|", "F", "J", "L", "-", "7", "F", "J", "L", "-", "7", "F", "J", "L", "J", "L", "L", "7", "|", "L", "7", "L", "7", "L", "J", "|", "F", "7", "|", "|", "|", "F", "J", "|", "|", "|", "L", "J", "L", "-", "-", "J", "|", "F", "J", "J", "L", "7", "|", "L", "|"], |  | ||||||
| ["J", "J", "|", "F", "L", "J", "|", "L", "J", "7", "L", "L", "-", "J", ".", "L", "7", "|", "|", "|", "L", "7", "|", "-", "F", "J", "|", "L", "7", "L", "-", "-", "-", "7", "|", "|", "|", "F", "J", "L", "J", "L", "J", "F", "J", "L", "J", "F", "J", "F", "J", "|", "|", "|", "|", "F", "7", "L", "7", "|", "|", "L", "J", "7", "F", "J", "L", "J", "F", "7", "L", "J", "L", "7", "L", "|", "L", "J", "L", "-", "7", "L", "7", "|", "|", "|", "|", "|", "F", "J", "|", "F", "-", "-", "J", "L", "-", "-", "7", "|", "L", "-", "-", "7", ".", "F", "L", "J", "-", "L", "7", "|", "F", "-", "J", "|", "|", "|", "|", "|", "L", "7", "|", "|", "L", "-", "-", "-", "7", "F", "-", "J", "L", "7", ".", "|", "F", "|", "-", "J"], |  | ||||||
| ["|", ".", "-", "J", ".", "F", "7", "L", "J", "J", "L", "L", "L", "F", "-", "-", "J", "|", "|", "|", "F", "J", "|", "F", "J", "F", "J", "F", "J", "F", "7", "F", "7", "|", "L", "J", "|", "|", "F", "7", "F", "-", "-", "J", "F", "-", "7", "L", "7", "L", "-", "J", "|", "|", "|", "|", "L", "7", "|", "|", "L", "7", "F", "-", "J", "F", "-", "7", "|", "L", "7", "F", "7", "L", "7", "L", "7", "F", "7", "F", "J", "F", "J", "|", "|", "|", "L", "J", "|", "F", "J", "L", "7", "F", "7", "F", "7", "F", "J", "|", "F", "-", "7", "L", "7", "F", "-", "-", "-", "-", "J", "|", "L", "7", "F", "J", "L", "J", "|", "|", "F", "J", "|", "|", "F", "7", "F", "7", "L", "J", "F", "-", "7", "|", "7", "F", "L", "7", ".", "L"], |  | ||||||
| ["-", "J", ".", "|", "F", "|", "7", "-", "7", ".", "F", "-", "J", "L", "-", "-", "7", "|", "|", "|", "L", "7", "|", "L", "7", "|", "|", "L", "7", "|", "|", "|", "|", "L", "-", "7", "|", "|", "|", "L", "J", "F", "-", "7", "L", "7", "L", "7", "L", "7", "F", "-", "J", "|", "|", "L", "7", "L", "J", "L", "7", "|", "L", "-", "7", "|", ".", "|", "L", "7", "|", "|", "|", "F", "J", "F", "J", "|", "|", "|", "|", "|", "F", "J", "|", "L", "-", "7", "|", "|", "F", "7", "L", "J", "|", "|", "L", "J", ".", "|", "|", "F", "J", "F", "J", "L", "7", "F", "-", "-", "7", "|", "F", "|", "|", "F", "7", "J", "L", "J", "|", "F", "J", "|", "|", "L", "J", "|", "F", "-", "J", "|", "L", "J", "|", "F", "|", "L", "7", "J"], |  | ||||||
| [".", ".", ".", "|", "L", "L", "J", "L", "L", "7", ".", "|", ".", "|", "L", "L", "L", "J", "L", "J", "F", "J", "|", "F", "J", "|", "F", "-", "J", "|", "|", "|", "L", "-", "7", "|", "L", "J", "L", "-", "-", "J", "J", "|", "F", "J", "7", "L", "7", "|", "L", "7", "F", "J", "|", "F", "J", "F", "-", "-", "J", "L", "7", "F", "J", "|", "F", "J", "F", "J", "|", "|", "|", "L", "7", "L", "7", "|", "|", "L", "7", "|", "|", "F", "J", "F", "-", "J", "|", "|", "|", "L", "-", "-", "J", "L", "-", "-", "7", "L", "J", "|", "F", "J", "F", "7", "|", "|", "F", "-", "J", "|", "F", "J", "L", "J", "L", "7", "F", "-", "J", "L", "7", "|", "L", "-", "7", "|", "L", "7", "L", "J", "7", "J", "F", "F", "F", ".", "-", "."], |  | ||||||
| ["|", "-", "F", "7", "-", "F", "L", "L", "|", "-", "L", "J", "7", "7", "|", ".", "L", "J", "J", "J", "L", "7", "|", "L", "7", "|", "L", "7", "F", "J", "|", "L", "-", "7", "L", "J", "F", "-", "-", "-", "-", "-", "-", "J", "|", "F", "F", "7", "L", "J", "F", "J", "|", "F", "J", "L", "7", "|", "F", "-", "-", "7", "|", "L", "7", "|", "L", "7", "L", "7", "|", "|", "L", "7", "|", "F", "J", "|", "L", "7", "|", "L", "J", "L", "7", "L", "-", "7", "L", "J", "L", "7", "F", "-", "7", "F", "-", "7", "L", "-", "7", "L", "J", "J", "|", "|", "|", "|", "|", "F", "7", "|", "L", "-", "-", "7", "F", "J", "L", "7", "F", "7", "|", "|", "F", "7", "|", "|", "F", "J", "-", "F", "|", "7", "J", "|", "|", "F", "J", "7"], |  | ||||||
| ["|", "F", "|", "J", ".", "L", ".", "F", "-", "7", "|", "L", "J", "-", "L", "J", "J", ".", "|", ".", "L", "|", "L", "7", "|", "|", "F", "J", "|", "F", "J", "F", "7", "L", "-", "7", "L", "-", "7", "F", "-", "-", "-", "7", "L", "7", "|", "L", "-", "7", "L", "-", "J", "|", "F", "7", "|", "|", "L", "7", "F", "J", "L", "7", "|", "L", "7", "|", "F", "J", "|", "L", "7", "L", "J", "L", "7", "|", "F", "J", "L", "7", "F", "-", "J", "F", "7", "L", "-", "7", "F", "J", "L", "7", "|", "L", "7", "|", "F", "7", "L", "-", "-", "-", "J", "|", "|", "|", "L", "J", "|", "|", "J", "F", "7", "L", "J", "F", "-", "J", "|", "|", "|", "L", "J", "|", "|", "L", "J", "J", "F", "L", "J", "J", "L", "F", "J", "L", "J", "J"], |  | ||||||
| ["|", "L", "J", "L", "-", "J", "-", "-", "|", "L", "-", "F", "7", "J", "L", "7", "J", "-", "F", "7", "|", "|", "F", "J", "|", "|", "L", "7", "|", "L", "7", "|", "|", "F", "7", "L", "7", "F", "J", "|", "F", "-", "-", "J", "F", "J", "L", "-", "7", "L", "-", "-", "-", "J", "|", "|", "|", "|", "F", "J", "|", "F", "7", "|", "|", "F", "J", "L", "J", "|", "L", "7", "L", "-", "-", "7", "|", "|", "L", "-", "7", "|", "L", "7", "F", "J", "|", "F", "-", "J", "L", "7", "F", "J", "L", "7", "|", "|", "|", "|", "F", "7", "F", "7", "F", "J", "L", "J", "F", "-", "J", "L", "-", "J", "L", "7", "L", "|", "F", "-", "J", "|", "L", "7", ".", "|", "L", "7", "J", ".", "|", "J", "7", "F", "F", "J", "-", "|", "L", "|"], |  | ||||||
| ["F", "L", "7", "J", "L", "F", ".", "L", "F", "7", "7", ".", "L", "-", "F", "J", "7", ".", "7", "7", "7", "|", "|", "L", "L", "J", "J", "L", "J", "7", "|", "|", "|", "|", "L", "7", "|", "|", "F", "J", "L", "-", "7", "F", "J", "F", "-", "-", "J", "F", "-", "-", "-", "7", "|", "L", "J", "L", "J", "F", "J", "|", "|", "|", "|", "|", "F", "-", "7", "F", "-", "J", "F", "-", "-", "J", "L", "J", "F", "-", "J", "|", "F", "J", "L", "7", "|", "L", "-", "-", "7", "|", "|", "F", "-", "J", "|", "|", "|", "L", "J", "|", "|", "|", "L", "-", "7", "|", "L", "7", "F", "7", "F", "-", "7", "L", "7", "L", "J", "F", "-", "J", "F", "J", "-", "L", "7", "|", "7", "7", "J", "|", "F", "F", "F", "J", "F", "-", "-", "-"], |  | ||||||
| ["-", "F", ".", "F", "J", "L", "F", "7", "L", "7", "|", "7", "|", ".", "F", "L", "|", "7", "J", "|", "-", "L", "J", "-", "F", "-", "-", "-", "-", "-", "J", "|", "L", "J", "|", "L", "J", "L", "J", "F", "-", "-", "J", "L", "7", "L", "7", "F", "7", "|", "|", "F", "-", "J", "L", "-", "-", "7", "F", "J", "F", "J", "|", "|", "|", "L", "J", "F", "J", "L", "-", "7", "L", "-", "-", "-", "-", "7", "L", "7", "F", "J", "L", "-", "7", "|", "|", "F", "-", "7", "|", "|", "|", "L", "-", "7", "|", "|", "L", "-", "7", "|", "|", "|", "F", "7", "|", "F", "-", "J", "|", "|", "L", "7", "L", "7", "|", "F", "7", "L", "-", "7", "L", "7", "J", "L", "|", "|", "|", "|", "7", "|", "F", "L", "F", "F", "7", "L", "7", "."], |  | ||||||
| [".", "-", "|", "L", "7", "|", "F", "|", "-", "J", "-", "-", "7", "7", "J", "L", "J", "L", "F", "|", "7", "F", "J", "L", "L", "-", "-", "7", "F", "-", "7", "L", "-", "-", "-", "-", "-", "-", "7", "L", "-", "-", "7", "F", "J", "F", "J", "|", "|", "|", "F", "J", "F", "7", "F", "7", "F", "J", "|", "F", "J", "F", "J", "|", "L", "-", "7", "L", "7", "F", "-", "J", "F", "-", "7", "F", "-", "J", "|", "L", "J", "F", "-", "-", "J", "|", "|", "|", "7", "L", "J", "L", "J", "|", "F", "J", "|", "|", "F", "7", "|", "|", "|", "|", "|", "L", "J", "L", "7", "F", "J", "|", "F", "J", "F", "J", "L", "J", "L", "-", "7", "L", "-", "J", "L", "F", "L", "J", "7", "7", "F", "7", "7", ".", "|", "|", "L", "F", "J", "J"], |  | ||||||
| [".", "F", "L", "|", ".", "-", "J", "L", "7", "|", ".", "J", "L", "7", "7", "|", "J", "F", "|", "|", "-", "L", "7", "F", "-", "-", "-", "J", "|", "|", "L", "7", "F", "-", "-", "-", "-", "-", "J", "F", "-", "-", "J", "|", "F", "J", "F", "J", "|", "|", "L", "-", "J", "|", "|", "L", "J", "L", "|", "|", "-", "L", "7", "L", "7", "F", "J", "F", "J", "L", "7", "F", "J", "F", "J", "L", "-", "-", "-", "-", "7", "L", "-", "7", "F", "J", "|", "L", "-", "-", "-", "7", "F", "-", "J", "F", "J", "L", "J", "|", "|", "L", "J", "|", "|", "F", "7", "F", "J", "|", "F", "J", "L", "7", "|", "F", "-", "7", "F", "7", "L", "-", "7", "J", "7", "J", "F", "L", "J", "7", "7", "L", "L", "-", "F", "L", "-", "J", "J", "|"], |  | ||||||
| ["F", "|", "-", "-", "7", "|", "7", "-", "|", "-", "7", "|", "7", "J", "L", "L", "J", "L", "7", "J", "F", "|", "-", "L", "-", "-", "-", "7", "|", "F", "-", "J", "L", "-", "-", "-", "-", "-", "7", "L", "7", "F", "7", "|", "L", "7", "|", ".", "L", "J", "-", "F", "-", "J", "L", "-", "-", "7", "|", "|", "F", "-", "J", "F", "J", "L", "7", "|", "F", "-", "J", "L", "7", "L", "7", "F", "7", "F", "7", "F", "J", "F", "-", "J", "L", "7", "|", "F", "-", "7", "F", "J", "L", "7", "F", "J", "F", "F", "-", "J", "L", "7", "F", "J", "L", "J", "|", "L", "7", "|", "|", "F", "7", "|", "|", "L", "7", "L", "J", "|", "F", "-", "J", "J", "7", ".", "|", "|", "-", "|", "F", "-", "L", "-", "-", "F", ".", "|", "J", "F"], |  | ||||||
| ["-", "7", "-", "L", "7", "L", "J", "7", "|", ".", "F", "|", "L", "-", "J", ".", "F", ".", "L", "-", "-", "7", "7", "J", "|", ".", "F", "J", "|", "|", "F", "7", "F", "7", "F", "-", "-", "-", "J", "L", "|", "|", "|", "|", "F", "J", "L", "7", "J", "F", "-", "J", "F", "7", "F", "7", "F", "J", "L", "J", "L", "-", "7", "|", "F", "7", "L", "J", "|", "F", "7", "F", "J", "F", "|", "|", "|", "|", "|", "|", "F", "L", "7", "F", "-", "J", "|", "|", "F", "J", "|", "F", "-", "J", "L", "-", "7", "L", "-", "-", "7", "|", "|", "F", "-", "-", "J", "J", "|", "|", "|", "|", "|", "|", "|", "F", "J", "J", ".", "|", "L", "7", "|", "F", "7", "-", "J", "F", "-", "L", "J", "F", "F", "7", "L", "-", "7", "L", "-", "7"], |  | ||||||
| ["|", "|", "F", "7", "L", "7", "7", "L", "7", ".", "-", "7", "-", "7", "7", "L", "|", "|", "J", "7", "7", "L", "F", "-", "7", "F", "|", "F", "J", "|", "|", "|", "|", "|", "L", "7", "|", "-", "|", "J", "L", "J", "|", "|", "|", "F", "7", "|", "F", "L", "-", "-", "J", "|", "|", "|", "L", "7", "F", "-", "-", "-", "J", "L", "J", "|", "F", "7", "L", "J", "|", "L", "-", "7", "L", "J", "|", "|", "|", "|", "F", "7", "|", "L", "-", "7", "|", "|", "L", "7", "|", "|", "F", "7", "F", "7", "L", "7", ".", "F", "J", "|", "|", "L", "7", "-", "F", "-", "J", "|", "L", "J", "L", "J", "|", "|", "J", "-", "-", "L", "-", "J", "7", "L", "J", "-", "-", "F", "-", "|", "L", "L", "J", "-", ".", "F", "7", "7", "L", "F"], |  | ||||||
| ["-", "-", "7", ".", "F", "L", "-", "F", "J", ".", "L", ".", "|", "F", "F", "J", "|", "7", ".", "|", "F", "F", "L", "7", "L", "L", "L", "J", ".", "L", "J", "|", "|", "L", "7", "L", "-", "7", "7", "-", "|", "J", "L", "J", "|", "|", "L", "J", "F", "-", "-", "-", "-", "J", "|", "L", "-", "J", "L", "7", "F", "-", "7", "F", "7", "L", "J", "L", "-", "7", "L", "7", "F", "J", "L", "F", "J", "|", "|", "|", "|", "L", "J", "F", "-", "J", "|", "L", "7", "|", "|", "|", "|", "|", "|", "L", "7", "L", "7", "L", "7", "|", "L", "7", "|", "J", "L", "7", "F", "J", ".", "L", "L", "L", "|", "L", "7", "7", "L", "|", "J", ".", "|", "7", "|", "7", ".", "F", "-", "-", "L", "7", "J", "-", "F", "F", "|", "|", ".", "7"], |  | ||||||
| ["L", "|", "L", "7", "J", ".", "L", "J", "-", "7", "F", "|", "7", ".", "F", "7", ".", "|", "F", "J", "-", "|", "F", "L", ".", "L", "J", "J", ".", "L", "F", "J", "|", "F", "J", "F", "7", "L", "7", "J", ".", "-", "F", "-", "J", "L", "7", "F", "J", "F", "7", "F", "-", "7", "L", "-", "7", "F", "-", "J", "L", "7", "|", "|", "|", "F", "-", "-", "7", "L", "7", "L", "J", "F", "-", "J", "F", "J", "L", "J", "|", "F", "-", "J", ".", "L", "L", "7", "|", "L", "J", "|", "|", "L", "J", "F", "J", "F", "J", "-", "L", "J", ".", "L", "J", "|", "F", "|", "|", "J", "7", ".", "|", "L", "|", "F", "J", "7", "F", "|", "-", "J", "|", "-", "|", "-", "-", "J", ".", "|", ".", "F", "7", "-", "|", "L", "|", "L", "J", "J"], |  | ||||||
| [".", "L", "7", "J", "L", "7", "F", "|", "|", "L", "L", "7", "L", "L", "7", "L", "7", "L", "J", "|", "-", "-", "7", ".", "|", "J", "|", "7", "F", "7", "L", "7", "|", "L", "7", "|", "|", "F", "J", "7", "F", "F", "L", "-", "7", "F", "J", "L", "7", "|", "|", "L", "7", "L", "7", "F", "J", "|", "F", "7", "F", "J", "|", "|", "|", "L", "-", "7", "L", "-", "J", "|", ".", "L", "-", "-", "J", "7", "J", "F", "|", "L", "7", ".", "J", "J", "L", "|", "|", "J", "F", "J", "|", "L", "L", "L", "-", "J", "J", "|", "|", "-", "L", "L", "J", "-", "F", "L", "J", ".", "F", "-", "-", ".", "L", "J", "J", "|", "F", "|", "7", "F", "|", "J", "|", "7", "J", "7", "L", "|", "7", "|", "L", "J", "J", "F", "-", "7", "F", "-"], |  | ||||||
| ["7", "J", "F", "J", "L", "F", "F", "J", "|", "J", "L", "J", "|", "F", "L", "7", ".", "L", "-", "L", "-", "L", "L", "L", "-", "F", "-", "L", "L", "-", "F", "J", "|", "J", "|", "|", "L", "J", "7", "L", "|", "J", "L", "L", "|", "|", "J", "-", "L", "J", "L", "-", "J", "J", "|", "|", "F", "J", "|", "|", "|", "F", "J", "|", "L", "-", "7", "L", "-", "7", "J", "L", "7", "|", "J", "J", "-", "J", "-", "7", "L", "-", "J", "7", "J", "7", "F", "L", "J", "L", "L", "7", "|", "L", "|", "L", "L", "7", ".", "L", "F", "-", "7", "J", "|", "L", "7", "7", "L", "|", "L", "|", "L", "7", "L", "|", "-", "J", "-", "7", "J", "7", ".", "F", "-", "J", "F", "|", "F", "L", "L", "7", "L", "F", "-", "J", "|", ".", "J", "|"], |  | ||||||
| ["7", "|", "F", "7", ".", "-", "J", ".", "|", "|", "F", "|", "F", "J", ".", "|", ".", "F", "-", "J", ".", "-", "-", "7", "-", "F", "-", "|", "7", "F", "L", "-", "J", "-", "L", "J", "|", ".", "J", "F", "J", ".", "|", "L", "L", "J", "J", "L", "|", "|", "F", "-", "-", "-", "J", "|", "L", "-", "J", "|", "|", "L", "7", "L", "7", "F", "J", "F", "-", "J", ".", "L", "-", "J", "|", "7", ".", "L", "|", "7", "-", "J", "-", "J", "F", "L", "7", "L", "J", ".", "L", "L", "J", "7", "-", "J", "F", "J", "7", "L", "F", "J", "J", "-", "F", "-", ".", "F", ".", "7", "-", "|", "7", "F", "7", "|", "F", "J", "F", "|", ".", "F", "-", "7", "J", ".", "|", "L", "J", "-", "|", "|", "-", "7", "J", ".", "-", "F", "-", "|"], |  | ||||||
| ["L", "|", "7", "-", "7", "|", "F", "7", "-", "-", "F", "F", "7", "-", "-", "J", "F", "-", "7", "L", "7", ".", "|", "7", "7", "|", "L", "|", "F", "J", "L", "|", ".", "7", "L", "J", "F", "J", ".", "|", "L", "7", "F", "|", "-", "L", ".", "F", "|", "F", "L", "-", "-", "-", "7", "L", "7", "F", "-", "J", "|", "J", "|", "F", "J", "L", "7", "L", "-", "7", "7", "J", "|", "-", "|", "-", "-", ".", "L", "L", "-", "J", ".", "F", "|", "7", "|", "|", ".", "L", "L", "|", "F", "7", "7", ".", "|", "-", "F", "F", "7", "J", "J", "F", "-", "7", "-", "|", "7", "|", "|", "J", "F", "F", "L", "-", "|", ".", "F", "J", "7", ".", "7", "L", "F", "F", "-", "F", "J", "L", "L", "J", "J", ".", "L", "-", "7", ".", "7", "-"], |  | ||||||
| ["L", "L", "F", "-", "-", "F", "F", "|", "F", "7", "-", "J", "J", "F", "|", ".", "|", "F", "J", "J", "F", "L", "7", "L", "F", "7", "-", "|", ".", "J", "-", "-", ".", "L", "-", "F", "7", ".", "F", "J", "F", "|", "-", "7", "7", "|", ".", "F", "L", "L", "J", "7", ".", "F", "|", "F", "J", "L", "-", "7", "|", "F", "J", "L", "-", "7", "|", "F", "7", "|", "J", "F", "J", "|", "J", "|", "J", "L", "-", "-", ".", "L", "7", "J", "L", "J", "7", "|", ".", "L", "|", "L", "-", "J", "F", "7", "|", ".", "F", "J", "|", ".", "L", "7", "7", "7", "F", "J", "-", "7", "7", "|", "-", "7", "J", "-", "J", "-", "J", "L", "7", "7", "|", "-", "F", "|", "7", ".", "F", "-", "7", "J", "L", "7", "-", "|", "7", "|", ".", "L"], |  | ||||||
| ["|", "-", "|", "7", "|", ".", "|", "F", "7", "L", "|", "J", "F", "F", "7", "-", ".", "L", ".", "|", "|", "-", "L", ".", "F", "J", ".", "L", ".", "J", "7", "|", "F", "F", "J", "|", "|", ".", "|", "-", "-", "|", "-", "F", "J", "-", "7", "L", "L", "L", "L", "|", ".", "F", "J", "L", "7", "F", "7", "|", "|", "L", "7", "F", "-", "J", "L", "J", "L", "J", "L", "J", "-", "J", ".", "J", "7", "F", "7", "7", "7", ".", "|", "|", "7", "F", "F", "F", "7", "F", "7", "L", "L", "J", "L", ".", "L", "-", "J", "7", "L", "7", "F", "|", "|", "7", "L", "L", "7", "L", "F", "-", "J", "L", "-", "-", "L", "7", ".", "L", "-", "J", "|", "F", "F", "J", "-", "|", "7", "F", "F", "7", "F", "L", "7", "-", "|", "7", "J", "|"], |  | ||||||
| ["F", "F", "-", "-", "7", "F", "L", "L", "J", "F", "|", "7", "F", "F", "-", ".", "|", ".", "-", "7", "|", "7", "L", "F", "7", "J", "-", "L", "7", "|", "L", "-", "J", "J", "7", "|", "7", "7", "J", "J", ".", ".", "L", "L", "7", "F", "|", "F", "L", "|", ".", "L", "-", "L", "7", "F", "J", "|", "L", "J", "L", "7", "|", "|", ".", "F", "7", "J", "J", "J", ".", ".", "L", "|", "7", "J", "-", "F", "F", "7", "F", "|", "|", "|", "F", "L", "L", "F", "F", "F", "|", ".", "|", "7", "|", "-", "|", ".", "F", "-", "J", "F", "-", "L", "L", "-", "F", "7", "L", "-", "J", "F", "-", "J", "7", "7", "F", "-", "|", "7", "J", "-", "F", ".", "|", "J", "J", "L", "J", "J", "|", "F", "|", "|", "L", "|", ".", "|", "-", "J"], |  | ||||||
| ["F", "7", "7", "|", "L", "F", "|", "7", "F", "7", "L", "7", "7", "L", "|", ".", "J", ".", "|", "J", "L", "|", "-", "7", "|", "|", "L", "L", "F", "F", "J", "J", "J", "7", "F", "J", "|", "|", "-", "-", "7", "F", "7", ".", "F", "L", "-", "|", "F", "J", "7", "7", "|", "-", "L", "J", "F", "J", "F", "7", "F", "J", "|", "L", "-", "J", "|", "7", "F", "F", "J", "7", "F", "-", "7", "-", "-", "L", "|", "7", "F", "-", "-", "|", "J", ".", "F", "-", "-", "-", "J", "-", "F", "7", "J", "-", "-", "7", "|", ".", "F", "|", "J", "-", "7", "F", "7", "J", ".", "J", ".", "F", "L", ".", "F", "F", "F", "J", "|", "7", "L", "F", "-", "7", "L", "7", ".", "J", "|", "F", "|", "L", "|", "|", "-", "L", "-", "7", "7", "|"], |  | ||||||
| ["L", "-", "J", "J", "L", "-", "J", "J", "J", "L", "7", "J", "L", "-", "L", "-", "J", "J", "J", "F", "J", "J", "L", "F", "-", "L", "-", ".", "F", "7", ".", "|", "L", "L", "L", "-", "-", "J", "7", "J", "-", "L", "F", "L", "7", "L", "|", "J", "J", "J", "F", "-", "J", "7", ".", ".", "L", "-", "J", "L", "J", "J", "L", "-", "-", "-", "J", "-", "L", "F", "-", "L", "J", "J", "L", "7", ".", "L", "L", "J", "J", "J", "J", "J", "L", "J", ".", "L", "|", "J", "-", "L", "F", "L", "J", "L", "-", "L", "-", "-", "|", "J", "J", "-", "L", "L", "J", "L", "|", "J", "-", "|", ".", "-", "J", "|", ".", "L", "|", "J", "L", "|", "J", "J", ".", "F", "F", "-", "-", "7", "L", "-", "F", "J", "-", "L", "J", ".", "J", "-"] |  | ||||||
| ]). |  | ||||||
							
								
								
									
										140
									
								
								10/input.txt
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								10/input.txt
									
									
									
									
									
								
							| @@ -1,140 +0,0 @@ | |||||||
| L777FJF77F-77-F-7F7.FF.J7.-J--J7F|7F.FJ.L-|F|-F|FJ7-J7F-JFF-7.L7FL7J-FF|7--7.L--|77.F-J77.-7FJ7F7FF--.FFJ7-7-F|.FL-L-F7.F|-FF7F|-7-|7-.FF-7. |  | ||||||
| L--77-FJL|7L77.FJ-F-7.|.FJJJ.FFF|FF-77|-|FJ-FJ|LFJ|-L-JLLF|L77|F7L7-|JL-J7LLF7|FLL--7J.-F-|-L-7JF7J7FJ-F-77|.FLJFJ7LJL|7.L7LL7FJFJ|LJLFFJJ|7 |  | ||||||
| .|L|LFJ7-J-J||-7JLL-J---JL7F7L-LF7L7L77JF7L7--J7F7|.F7LF.L|-|FLJ|L|F|FFJJLJFFJ-7||LF7J7FJF-7.L7L|LFJ7LL|7JFJF|.|||F7JJ|L-7|J7LJ.F7--7L7J7FJ- |  | ||||||
| F7J|.L-J-L7F7JFJ.7LJ|-J...L|-|L|||FJFJ..L-FJLL77LLJ7L77J|-7J|F--7-JFL7|F7FFJLJJFJ77L-7-L7F.|J.|F|.L-|7..|FL-FJF-7-LJFL|-L|L|-|F7LL7LL.|FF||. |  | ||||||
| J|-L7J.|||L.F.FJ.|7LF.|FF.LL7|LFJ||FJ|.7.L7|FLF7-L.-JL7.F7J-LJJ7L|FJ||J---JF7JLJLL-7.LFJJJL7LF7JJFFF-777FF7|||L-JF|--7JLFL7.FFFF7|L77.|.JL-7 |  | ||||||
| J7F7|.F-|7-FJ7L-7JF..J.|J7|LL-|L7LJL-7--7JJLFJ|L7F7.FJ77|LJL7FLFFF7L7J-7-|LLJ.|||.LJ7LF.LF||-||FFF-JFJ-J7L-.77-J7F|LJF-F-7L-FF7LF||.F7J..7.7 |  | ||||||
| LF.L|-J7LJ-7.F|J.FL7-LF7F7L-J.77L-7F-J7.FF7F|FF7L-|77FJ-JFF.|7FF7||-|7LJ.-FL-.L-FJ77|7..LF7|7||FFJF-JL|FJLLF.F7|FJL7FJLLL-L-||.FJ||7|.FF-J7| |  | ||||||
| L|7L|7F-J.J|FFF-FJ-7JFLJ|.FJ|.F---JL--7J.LJ-J7.F7J|L77J7.FF.LFFJ|||7F77L|7|FF-J..|||----F7F--JL7L7|.|FL-J.FJ-|FL77FJ|J.F-FJJL-JLLF|77F7L-.LF |  | ||||||
| 7---LF7|.FL7JL|F7L-L-7FL|7F7.FL7F7F---J.7-7..LL-JFLJF-77F7F7|FL7LJ|F||J7L-F-7-L.FFF7..FFJ||F-7FJF||.L7.|-F|.F7LJ|FJ7|J.|.-77F-J-L|JLF-J7LF.. |  | ||||||
| LJ7.FLJL--7L7||-|7LF|7J7F-J|F7|LJ|L-7|LFL--7..|JL7LFL7L7|||L7F-JF-JFJ|.F7FJ7LJFL7FJ|F7FJFJLJJ||F-J|77LFFJF-L|L7|LJ7-7-FJLLL7-7F7F-.||7F7FJ7. |  | ||||||
| LLF-LF-7||JFL-LLF777F--FL7FJ|L-7F|F7L7-JJ7.L-F7.FF7-|L7||||FJL-7|F7|FJF7|||FJF77FL7|||L7|L|F7|||F7|F7-JJ7J77|.L-7J|7LFJ..FL-7|7||F-7-7-LJJ-7 |  | ||||||
| |-|.F-7L7|JFJ.|J||LF7F7JFJ|LL-7L-J|L-J.LF77.L||.FJL7F-JLJLJL7F-J||LJL-JL7J7J7F7-FFJ||L-JL7FJLJ|||LJ||7F|FJ|-FJ.F--J7FL-FF-7|LJF-7J.LL|J.|7.7 |  | ||||||
| J7|F7-L.FF-..F7F|L7||-||L7L--7L--7L7F7F7||-F7||-L-7|L--7F---JL7FJ|F-----JF7F-J|F7L7||F---JL--7|||7FJL--7.7|7L.FFL--F7.F-F-J7J-7FJF-7JJL|L|FL |  | ||||||
| .-JLJ.|7||JFF||FJFJ||7|-FJF--JF--JFJ||||||.|LJL77FJL7F-JL--7F-JL-JL----7J||L7FJ|L-JLJL7F7J.F7|LJ|FJF---JFF|7.FFF7F-JJFJ7|LF-7-|JJ7...FFJ7JFL |  | ||||||
| 7FJ.L-J7JL7FL||L7L7|L7F-JFJLF7L--7L7|||||L7L7F-JFJF-JL----7|L-7F--7F---JFJL7|L7L--7F-7|||7FJLJF-J|FJF-7-||F77F-J|7..FJ|F|.JL7-L7L|L--F|J-F-J |  | ||||||
| -7-FJFL.JF7-FJL7L7LJFJL-7L-7|L7F-JFJ|||||FJ|||.FJFJLF7F-7FJL7FJL-7LJ|F7-L-7||FJF-7LJFJLJL7|F-7|F7||FJFJF77||-L7FJ7-F7-F||F|LJ7FJ.--L-LF.LJ7| |  | ||||||
| ||.F7J|FLJ||L-7|LL-7L7F7|F-J|FJL-7|FJ||LJ|JFJ|FJFJF7|LJFJL-7LJF--JF7FJL7F-J||L7L7L7FJF7F7|LJFJLJ||LJFJFJL7||JFJ|F77|L-7.L7J.LF7.LJFJF7|JJ-L7 |  | ||||||
| -77L7FF|JF--F-JL--7L7||LJ|.FJL7F-JLJFJL-7L7L7LJFJJ||L7FJF--JF7L-7L|LJF-JL-7||FJLL7|L-JLJ|L7.L7F7LJF-J-|F-J|||L7||L7L7FJ7-|J7FJ.FL7J-LLJLL|.| |  | ||||||
| |L7JLJJ|.L|FL7F--7L-J|L-7L7L7FJL---7|F7||FJFL7FJF7||FJL7L7F-J|F-JFJF-JF-7FJLJL7F-JL7|F--JFJF7LJ|F-JF-7||F7|L7FJLJFJFJ|-F7|F-7L7-L|-.|JF--|7. |  | ||||||
| L|.FJ7F-|.|7FLJF7L-7FJF7|FJFJL7F7F-J|||FJL-7FJL7|||LJF-JFLJF-JL-7L7L7-|FJ|F---JL--7L7L--7L7|L-7|L-7L7LJ|||L7|L7F-J.L7L-7J7|F-7J|LJ|.|-L7-L-7 |  | ||||||
| |LJ-.LL-F7F7F7FJL7FJL-JLJL-JF-J|||F7LJ|L7F-JL7FJ||L-7|-F7F7L-7F-JFJFJFJ|-||F7F7F7FJFJF-7|FJ|F-J|F-J|L-7LJL7||FJL7F7J|F-JF77J.JF-J-FFJLLJ77|| |  | ||||||
| |-LF--L7|LJ|||L-7|L7F----7F-JF7||LJL-7L7|L7J-||FJL7FJL7|||L--J|F7|FJFJFJFJ||||||||FJ7L7LJL-JL7FJL--7F-JF7FJ|||F-J|L7|L--JL7|7.|7|.7LJ7LJ|LFJ |  | ||||||
| J--J.LLLL-7LJ|F7||FLJ7F-7|L-7|||L7JF7|FJL7L7FJLJF-JL7FJ||L---7||||L-JFJ|L7|||||||||J|7L----7FJ|F---J|F-JLJFJLJ|F7L7||F----JF7F|F7F77F|7.|FLF |  | ||||||
| |FL.FL|LF7L-7LJLJL---7|FJL-7LJ|L7|FJ|||F7L7LJF--JFF7|||||F7F-JLJLJF--JF--JLJ||LJ||L7LF7|F--J|FJ|F-7FJL7.F7L7F-J|L7|LJL---7FJ|F|LJ-F7-|LJ|FFJ |  | ||||||
| ||JF7JF-JL--JF7F7F7F7LJL-7FJF-JFJ||FJ||||-|F-JF7F7||||FJ|||L---7F7L-7FL----7|L7FJL7|FJL7L--7LJFJL7|L7FJFJL7|L-7|FJL7F----JL7L7F7LFJ|F|7-JL|J |  | ||||||
| |L7-F-L-----7|LJ||LJL---7|L7|F7L7||L7|LJ|FJ|F7|LJ|||||L7||L7F7FJ|L-7|F-7F7FJL-J|LF|||F-JJF7L-7|F7|L7||FJF-JL7FJ||F7||F7LF7FJFJ|L7L7|F|L7J|LL |  | ||||||
| -.|L|J|.F---J|F-JL-7|F--JL-J|||-|||FJL7FJL7LJ||F-J||||FJ|L7||LJFJF7LJ|FJ||L---7L7FJLJL7F-J|F7|LJ||FJ||L7L-7-||7|||||LJL-J||FJF|FJFJL7-7.F|-. |  | ||||||
| L-7.|.F7L-7F7|L7F--JFJF7F7F7LJL-J||L7FJ|7LL7FJ||F7||||L7|FJ|L-7|F|L7FJL-J|F7F7|FJ|F---JL-7||||F7||L7||FJF-JFJL7|||||F--7FJ||F7|L-JF-JJL|7JLJ |  | ||||||
| FF.FF-LF--J|||J||F-7L7|||LJL---7FJ|FJL7L7LFJ|-|||||||L7||L7L7F|L7|FJL---7LJ||LJ||||F--7F-JLJ|||LJ|FJ|||FJF7L7FJ|LJLJL-7LJJ|||||F--JJ|||LJ.FJ |  | ||||||
| FL-7J..L-7FJLJ|LJL7L7||||F-----JL7||F7L7L7L7|FJ||||||FJ||.L7|FJFJ||F7FF7L-7|L-7L7|LJF-JL---7LJL7FJL7|||L7||FJL7|F----7L-7FJ|||||F-7|L7JJ|FLJ |  | ||||||
| -7J.|F|FLLJJJLJ|F7L7|LJLJL7F----7LJLJL7L7L7|LJFJ|LJ|||FJL7FJLJFJFJ||L-JL-7||F7|FJL-7L7F77F7L-7FJL-7||||FJ|||F7LJL-7F7L--JL7LJLJLJFJ7J|.JL77. |  | ||||||
| L|--L7|7.L|-FJ.FJ|FJL-77F7LJF---JF----J-|FJ|F7L7L7FJ|||F-JL--7L7|FJL--7F-J|LJ||L7F-JFJ||FJ|F-J|F7FJLJ||L7||||L----J||-F7LFJF7F7F-J7|LFJL-LL7 |  | ||||||
| |JJ|LLF77|L||.FL7|L-7FJFJL--JF7F7L7JF7-FJL7LJL7L-JL7||||F7F-7|FJ||F--7||F7L-7||FJL-7|L|||FJL-7|||L--7||FJ|||L-7F--7|L-JL-JFJ|||L--7J77J7-LFF |  | ||||||
| .F-7-L|JLL7LF---JL--JL7L-----JLJL7L7|L7L-7L7F7L-7F-J|||LJ|L7||L7||L-7||||L7FJLJ|F-7||FJ|||F7FJLJ|F7FJ|||FJLJF-J|F-JL7F--7FJ-LJL7F-JLLJFJ7-F| |  | ||||||
| 7|FL7.|-.LF-L-------7FJF7F-------JFJ|FJF7|FJ||F7||F7|||F-JF||L7|||F7||||L7||F--JL7|||L7|||||L--7|||L7|||L7F7L-7|L-7||L-7|L---7FJL-7-J|FFL.-| |  | ||||||
| LJ.L-FJFL-FFF7F7F7F7|L-J|L-7F----7L-J|FJ|||FJ||LJLJ|||||F7FJL7||||||||||FJ||L-7F7|||L7|||||L7F7||||FJLJL-J||F7LJF7L-JF7|L----J|F7FJ.LJ.|J-L| |  | ||||||
| ||7|7JL-J||FJLJ|||||L--7|F7LJF---JF-7|L7LJ|L7|L--7L||||LJ|L7FJ|||||||LJ||-||F-J|LJ||.|||||L7||LJLJLJF-----JLJL7FJ|F7FJ|L-7F7F7LJLJF777.|L-J| |  | ||||||
| -LJ-7-J|LL-L7F7LJLJ|F7FJLJ|F7L---7|FJL7L7FJFJL7F7|FJ||L-7|FJ|FJLJ||||F-JL7|||F7L-7||FJ|LJL7||L---7F-JF7F----7FJL7|||L7|F-J||||F---JL7-7L7J.F |  | ||||||
| |.FL77FFJ7.LLJL---7LJ|L--7|||F--7LJL7FJFJL7L7J||||L7|L7FJ||FJL--7||||L7F7||||||F-J||L7|LF7|||F---J|F7|LJF-7FJL--JLJL-JLJF7|||LJF-7F-J-7LJ7-| |  | ||||||
| |.|L||||-F7LLF7F7FL-7|JF7||||L-7L---JL7L7.|FJFJ|||7|L7|L7|||F7F-JLJ||FJ||||||||L-7||FJL7|LJ||L--7FJ||L77L7LJF77F7F7F7F7FJ||LJF-J||L7J||77|.| |  | ||||||
| LLJJF|||.LFF-JLJL---JL-JLJ|||F7L-----7L7|FJ|7|FJ||FJFJ|FJ|||||L7F-7||L7|LJ||||L7FJLJL7FJ|F7|L7F7||FJL-JF7L-7|L7|||||LJ||FJ|F-JF-7L-J-F.F|L-| |  | ||||||
| L||..J7J-LFL7F-7F----7F--7LJLJL7FF7F7L7LJL7L7||FJ|L7L7|L7||LJL7LJFJ||FJ|F-J||L7||F---J|FJ||L7LJ||||F---JL--J|FJ|||LJF-J||J|L--JFJF---77-.7LL |  | ||||||
| FFF-7--7F-LFJ|LLJF--7LJF7L--7F7L-JLJL-JF7||FJ||L-J||FJ|FJ|L--7L7FJ.LJL-J|F7|L-JLJL7F7FJL7|L7L-7||||L--------JL-JLJF7L--JL-JF7F-JL|F--JJF-7FJ |  | ||||||
| FLL7F-.L.|FJFJ-LFJF7L--JL---J|L--------JL7|L7|L-7F-JL7|L7|F7FJFJL---7F--J||L--7F77|||L7FJL7L7FJ||LJF-------------7||F--7F--J|L7F7||F7L-J||L| |  | ||||||
| L|L7JLF.F-L7|-F7L7|L7F7F-7F-7|F----------JL-JL--J|F-7||FJ||||7|F7F7FJL--7|L7F-J||FJ|L7|L7FJFJL7LJF7L-----7F-----7||LJF-JL-77L7LJLJLJ|7-F-F.| |  | ||||||
| F|-|.-JFLLLLJ7||FJ|FLJLJFJL7LJL----7F7F-7F7F-7F-7|L7||||FJ|LJFJ|||LJF---JL7|L--J|L-JL||||||L-7|F-JL---7F7LJF-7F7||L-7L---7L-7|F--7F7L7-F-L-| |  | ||||||
| J..L.J.|-LFLF-J|L7|F----JF-JJF-----J|||FJ|||FJ|FJL-JLJ||L7L-7L7||L7FL-7F-7||F7F7|F---JL7|L--7||L-7F7F7LJL--JLLJLJ|F7L7F7L|F-J|L-7LJL-J-|..-J |  | ||||||
| FF.FF.----JJL-7L7LJL----7|F-7L-7F---J||L-JLJL-JL--7F7FJ|7L7FJ.LJL7|F--JL7LJ||LJLJ|F7F7FJ|F7FJLJF7LJLJL-------7FF7LJL7LJL7|L-7|F7L7J||JF7-|.7 |  | ||||||
| -J--L|FJJ.|LL7L7|F7F7F-7LJL7L7FJ|F---JL7F-7F7F7F-7LJ|L-JF-JL-7F--J|L7F7FJF-JL---7||||LJFJ|LJF--J|-F-----7F7F-JFJL7F7L---J|F-JLJ|FJ|L|J-|7LJJ |  | ||||||
| |.||LLJJ.F77LFFJLJLJ|L7|F-7L7LJFJL-----JL7|||||L7|F7|F7FL-7F-JL--7L7LJLJ|L7F-7F-J|||L-7L7L-7L--7L7|F-7F7LJLJLFJF7LJL----7|L--7J|L-7F7J7|-J.| |  | ||||||
| L7LL77J.F-777LL----7L-J|L7|7L--JJF7F7F7F-J||||L-JLJ|LJL-7FJL7FFF-JFJLF7F--JL7|L7FJ||F7|FJF7|F-7L7||L7LJL-----JFJL----7F-JL--7L7|F-JF77F77-L| |  | ||||||
| L7|LL-7.L7L-7.FF-7|L--7|FJL7F7F7FJLJLJ||F7LJ|L----7L----JL-7L7FJF7|.FJLJF-7FJ|FJL7|LJ||L-JLJL7|FJLJFJF7F7F7F7FJF7F--7|L-7F7FL-JLJF-J|-FJF-JL |  | ||||||
| |.FJF||FF|F-JF7L7|F7FFJ||F7LJLJ|L---7FJLJL7FJF7F-7L7F7F7F7FJFJL7||L7L-7FJFJL7||F-JL-7|L7F----J|L7F7|FJ||LJLJ|L-JLJF-JL-7LJL-7F---JF7|JJF7L-J |  | ||||||
| FF||FFF--J|F-JL-JLJL7L7|LJL7F-7L----JL----JL-J|L7L7LJLJLJ|L-JF7||L7|F-JL7L7FJ||L-7F-JL-JL----7||LJLJL7|L--7FJF----JF7F7L----JL-7F-JLJF77L7LJ |  | ||||||
| |-F-7|L--7|L-------7L7||LF-J|JL---------7F---7L7L7L7F7F-7L---J|LJF||L7F-JFJL7LJ7FJ|F---7F--7J||F7F7F7|L---JL7L-7F--JLJL7LF7JF7FJL---7-JL-77J |  | ||||||
| |LL7L---7||F7F7F7F7L7||L7L--JF7F--------J|F--JFL-JFJ||L7L----7|F--J|.||F7|F7L-7FJFJL--7LJF7|FJ|||||||L---7F7L--J|F-7F-7L-JL7|LJF--7FJFJ7LL-7 |  | ||||||
| F--JF--7LJ|||||||||.||L7|F7F7||L---7F----JL7F7F7F7L7|L7|F7-F7LJL7F7L7||||LJL7FJL-JF7F7L-7|LJL7|||||||F7F7LJL-7F-JL7|L7L----J|F-JF7LJ.FJ|--J- |  | ||||||
| |F-7|JLL-7||||||LJL-JL-JLJLJLJL7.F-J|F-----J|||LJ||LJFLJ|L-JL7F7||L7||LJL7F7||-LF7||||F-J|F-7|||LJLJLJLJ|F---J|F--JL-JFF7|F7|L--J|F-77-JL-|. |  | ||||||
| LJFLJJ.LFJLJLJLJF7F-7F7F-7F7F-7L7L--JL---7F7|||F7L------JF7F-J|LJL7||L7F7LJ||L7FJLJ|||L-7|L7|||L7F7F---7LJF7F7|L---7F--JL7|||F---JL7|L|.|LJ- |  | ||||||
| |L|-F7F7L-7F7F-7|||7||||FJ||L7L7L---7F7F7LJLJ|||L------7FJ|L-7L7F7||L7|||F7||FJL--7LJL--JL-JLJL-J|LJF--JF-JLJLJF7F7LJF---J|LJL7F7F-JL-7-|JJ. |  | ||||||
| |JF-JLJL--J|LJFJ|||FJ|||L7||FJFL7F-7LJLJL---7LJL7F7F--7LJLL--JFJ||||FJ||||LJ||J.F-JF7F7F-----7F7FJ7FJF-7|F-7F-7|LJ|F7L-7F7|F--J|LJF---J||-FF |  | ||||||
| ||L7F-7F-7FJF-JFJLJL-J||F||||F--JL7L-7F-7F77L--7LJLJF7L------7|FJ|||L7LJ||JLLJF-JF-J||LJLF---J|||F7L7|.LJ|LLJFJL7LLJL--J|LJL-7J|F-JF---7J7.| |  | ||||||
| .-LLJFJL7LJJL7FJ.F----JL7||||L----JF-J|FJ|L---7|F7F-J|F-7F-7FJLJF||L7|J-||77.FL--J7F|L7F-JF--7||||L7LJF-7L--7L-7L-7F7F7FJF--7L-JL7FJF--JL7-7 |  | ||||||
| |.|-LL7FJF--7LJF-JF7F-7FJLJLJF77F--JF-JL7|F---JLJLJF7LJFLJFJL---7LJFJL7JLJ-7-F----77L-JL--JF-J|LJ|FJF7L7|F--JF7L--J|||||FJF7L-7F7LJFJ|||JLF7 |  | ||||||
| F.J7FLLJFL-7|F-JF7|||FJ|F7F7FJL7L---JF-7LJL7JF7F7F-JL7FF-7L----7||FL-7L7J.L-FL---7L-7|F----JF-JF7||FJL-JLJF-7|L----JLJLJL-JL-7|||F7L---77-FJ |  | ||||||
| LF|-F7.F---J|L7FJ|||||FJ||||L-7L-----JFL7F-JFJLJ||F-7L7L7|F--7J||7JJL|FJL7|.LJ|F-JF7L-JF7F7FJF-JLJLJF--7F7|FJ|F---7F7F7F-----JLJLJ|F---J.LLJ |  | ||||||
| .F||L|.L---7L7|||LJLJLJFJLJL-7L--------7|L--JF-7LJL7L7L-JLJF7||||JL--LJ7FJF.7FFL-7|L7F7||||L7L7F----JF7LJLJL-JL--7|||||L----7F7F-7|L---7F7JJ |  | ||||||
| .L----F-J-FL7|LJF7F----JF7F-7L--7F-----JL----J.L-7FJ.L7F-7FJLJ-LJ||.L|J|J.LLJF-F-J|L|||||||FJ7LJF7F--JL----7F--7FJ||LJL7F7F-J|||FJL-7F7|FL|J |  | ||||||
| .L7L7-J-LF--JL7L||L-----J||7L--7LJF---7F7F7F7F--7|L7F7LJ.LJF7F|FLJ-F.|7J|.77F77L-7L7||||||LJ7F7FJ|L-7F----7|L-7|L7|L-7FJ||L--JLJL-77LJLJ7F|J |  | ||||||
| JLJ7||F||L-7F7L-JL7F7F7F7LJF7F7L-7|F--J|LJLJLJF-JL-J||F7F--JL-77|L7JFLF-L7LL7J||L|FJLJLJLJ-F7||L7L-7LJF---JL-7|L-JL--JL-JL7F-7F--7L-7-J||F7J |  | ||||||
| L|L-7JFFF7-LJ|F7F7LJLJLJL-7|LJL-7LJL---JF7F---JF7JF7|LJ||F--7FJL7JL-7F||L.-FJ-|LFLJF|J|F77FJ||L-JF-JF7L-----7|L-----7|-F-7|L7||F7L7FJ|||-J|7 |  | ||||||
| F||FF7FF|L--7LJLJL-------7|L---7|F7F----JLJF---JL-JLJF7LJL-7LJJ7|.|J|FF|FF7|L-|JF7F7F7FJ|FJFJL-7FJF7||F7-F--JL7F---7L7FJFJL-JLJ|L7LJJ-FF7L|7 |  | ||||||
| LL-FL77JL--7|LF7F--7F----JL---7|||LJF7JF---JF--7F-7F7|L7F7FJF7JFF-LFF-7J-JL.|JL-|LJLJ|L7|L7|F--JL-JLJLJL7L---7|L-77L7|L7|JF7|F-JFJ-LL7|--7|J |  | ||||||
| |7.-7.|7F--JL7|LJF7LJF7F-7F7F7LJ|L--JL-JF--7L-7||FJ|||FJ||L-JL-7--FFL7|.||.F-.LFL--7FJFJL-J|L-7F7F7F-7F7L---7|L7FJF7LJFJL-JL7|F-JF7J|FJ.|--7 |  | ||||||
| F7L-|-LL|F--7|L7FJS7FJLJJ||||L-7L---7F-7|F7L--JLJL-JLJ|FJ|F----JFF--7||7J.7L|-F|-LFJ|7L---7L7.LJLJLJF|||F--7LJFJL7||F7|F---7LJL--J|LJJ..L77J |  | ||||||
| 77LF-JFFLJF-JL-J|F-J|F---J|||F-JF7F7LJF|LJL--7F7F7F--7LJFJL--7F77|F7LJL7L--F7.-F77L7|F7F77L7L-7F7F--7||LJF7L-7L--J|||LJL--7L7F7F-7L7|7-|7L7. |  | ||||||
| FFJ|L.FJ|F|F-7F-JL-7|L----JLJL--JLJL--7L--7F7LJLJLJF-JF7L---7LJL7LJL7F-J-|-JJ7.||-|||||||F7L-7|||L-7|LJF-JL--JF7F-JLJF7F--JFLJ|L7L-J7F7|JFL- |  | ||||||
| LJFJ-LL7FLLJ.||F--7||F-----7F7F7F-7F-7L--7LJL--7F--JF7|L---7L7F-JF--JL7JJ|||LF-|L--JLJLJLJL--JLJL7FJL7-L------JLJF---J||F--7F7L7L7F-7J7J7-LJ |  | ||||||
| ||LJ.|L7.|7F-|||F7LJ|L----7|||||L7|L7L7F7|7F7F7LJF7-|LJF7F-JLLJJ7L--7FJ.F-7J-LFL---7F7F----7F---7|L-7|F7F---7F---JF--7LJ|F-J||FL7LJFJ.|.--LF |  | ||||||
| LL7.F|.|FFLJJLJLJL--JFF---JLJLJL-JL-JL|||L-JLJL-7|L7|F-JLJF-7F7F7F7FJL--JFJJ.|.F---J|||F---J|F--JL--JLJ|L--7LJ-F7||F7L--JL--JL-7|F-JLFF-L-7J |  | ||||||
| FJ7.||-FJ||7.LF---7-F7L7F7F7F-7F7F---7LJL--7F---JL7||L7F7FJFJ|LJ||||F7F7FJL-77-L7F7FJLJL-7F7|L----7F--7L---JJF-JL-J|L7F-7F7F---JLJ||.L|.|.|7 |  | ||||||
| FLFL-77.|FFJ.|L7F7L7||FJ|LJLJJLJ|L7F-JF7|F7||F--7FJ||FJ|||FJ7L-7||LJ|||LJJ|L.|LLLJLJF----J|||F-7F7||F7L----7FJF7F7FJJLJL|||L--7F7LF-7JJ-7F-7 |  | ||||||
| J.JJ.|7F7LJ.LF7LJL7|||L-JJF----7L-JL-7||FJ|LJ|F-JL7LJL7|LJL7F7FJ||F-JLJF7||JF|.FF--7L-7F-7|LJL7LJLJ||L7F---J|FJLJ||F7JF7LJ|F--J|L-7JJJ..|LJ| |  | ||||||
| LF|J|.FL77L||||F7FJLJ|F7F-JF7F7L-----J||L7L7L||F--JF7FJ|F7FJ||L7|||F7JFJL7F7FF7LL-7|F7LJ|LJFF7L---7|L7LJF7F-JL--7LJ|L-JL-7LJF-7|F-J.F77-J7.| |  | ||||||
| .LJ-L-77FF---J|||L--7||||F-JLJL-----7FJ|FJFJFJLJF7FJLJF||LJL||||LJLJ|FJF-J|L7||F-7|LJL7F7F--JL---7LJ|L--JLJF----JF7|F----JJFJFJ||F7F7|F7LLFJ |  | ||||||
| F||F|-F-LL---7LJL--7||||LJF-7F------J|FJL7|JL7F-JLJF---JL--7|L7L-7F-J|FJ-FJFJ||L7|L7F-J||L--7F7F7L---------JF-7F7||||F--7F7L7L7|LJLJL--7.|LJ |  | ||||||
| F|77|-|LJF7F7L----7||||L7JL7|L-7F----JL--JL7FJL7F7FL-7F----JL7|F-JL7-|L-7|FJFJL-J|FJL-7||F7|LJLJL--------7F7L7||LJLJLJF-J|L-JFJ|F--7F7FJ.L7| |  | ||||||
| FJ|L.F-7-|LJ|F---7|LJ|L7|F7|L-7LJF----7F7F7LJF-J||F7F|L--77F7||L7F7L-JF-J|L7|F--7LJF--J|||L-7F7F7F7-F7F--J|L-JLJF-7F--JF7|F-7L-JL-7LJ||J|.L. |  | ||||||
| L-J-F7.J.L-7|L--7|L-7L7||||L-7|F7L---7LJ|||F7L7FJLJL-JF-7L7|LJL7LJ|F7FJF7|FJLJF7L-7|F7-|||F7LJLJLJ|FJ|L---JF7F7FJJ|L---JLJL7L-7F-7L-7LJ-7-|7 |  | ||||||
| L77FFL7LF--JL-77|L7JL7LJLJ|F7||||F--7L-7LJLJL7LJF----7L7L-JL--7L7FJ|||7||||LF-J|7FJ|||FJ|LJL-----7||FJJF7F-JLJ|L-7|F-7F----JF7LJ7|F-J7JFL7|| |  | ||||||
| .|FF7J7LL--7F7L7L7L77L7F-7LJ||LJ|L-7|F7L7F7FF|F7L---7|FJLF7LF7L7|L7|LJFJ||L7L-7L7L7|||L7L7F-7F---JLJL-7||L---7L--JLJ.|L-----JL7FFJL--7-J-L-7 |  | ||||||
| |-FJ||F7.F7LJL7L7|FJF7LJFJF7|L-7|F-J||L7LJL7FJ|L7F7FJ||F7|L7|L7||-|L77L7LJFJF-JFJFJLJ|FJFJL7|L---7F--7LJL----JF---7F-JF7F7F--7L7|F7F-JJ-7L-J |  | ||||||
| LLL7L-J|FJL--7L7LJL-JL--JFJ|L--JLJF7LJFL---JL-JJLJ|L7||||L7LJFJ|L-JFJF7L7FJJL-7|FJF--JL7|FFJ|F---J|F-JF7F--7F-JF--J|F7||||L-7L-JLJ|L-7F-JFJ| |  | ||||||
| J.LL--7|L-7F7L7L7F----7F-J7L--7F7FJL----7JF7F----7L-JLJ|||L-7L7L-7FJFJ|FJL7F--J|L7|F7FFJL7L7|L----JL7FJLJF7LJF-JJF7LJLJLJL-7L---7L|F-JJF7.FJ |  | ||||||
| |7|LF-JL-7||L7L-J|F---J|F-----J|||F-----JFJLJF---JF-7F7||F-7L7|F-JL7L7LJF-JL--7L-J||L7L-7|FJL7F7F7F-J|7F7|L--JF-7|L-------7|F--7|7LJ.|LLF7J7 |  | ||||||
| |-LJL7F--JLJ|L---JL7F7FJ|F-7F-7|LJL7F7-F-JF--JF--7L7||||||FJFJ|L-7FJFJF7|F7F7-L-7FJL7|F7|||F7LJLJ|L-7|FJLJF7F-JFJ|F-------J|L-7LJJFL-7.|JF-- |  | ||||||
| 7|LF-JL--7F7F-----7|||L7LJFLJLLJF-7LJL7|F-J-F7L7FJFJLJ||||L7L7L--JL7|FJLJ||||F7FJL7FJLJLJ|LJL--7FJF7LJL7F7|||F-JFJL7F---7F7L-7L7LJ77L|F|FJJ| |  | ||||||
| L7.L-7F--J||L----7|LJL-JF----7F7L7L--7LJL---J|FJL7L--7|||L7L7|F7F-7||L-7FJ|||||L7FJL7F7F7L7F7LFJL-JL--7LJLJ||L--JF7LJF--J|L-7L-J.|LJ-L-JFJF| |  | ||||||
| FFF--JL--7||F7F7FJL--7F7L---7LJL7L--7L7F7F-7FJ|F-JF7FJLJL7|FJLJ||FJ||F-JL7LJ|||FJ|F7LJLJL7||L7L7F7F---JF---J|F---JL--JF7FJF7L---7.|J|LL7F--7 |  | ||||||
| |JL---7F-J||||||L--7FJ||F7F7L--7L---JJLJ||FLJF||F-J|L7F7FJ|L7F7LJL7LJL7F7|F-J||L7||L--7F7||L7|-LJ|L7F-7L----JL7F7F7F--JLJFJL----JF-.J|JF-FJ. |  | ||||||
| L.|F--JL--JLJLJ|7F-JL-J|||||F-7|F7F7F7F7LJF---J|L7FJ-||LJ.L7LJ|LF7L7F7LJ|||F7|L7|LJF--J|LJL-J|F-7|FJL7|F7F-7F-J|||LJF--7FJF7F77F7-7-JF-L.J-7 |  | ||||||
| F-LL-7F7F-7F7F7L7L7F7F7LJLJLJFJLJLJLJLJL-7L---7L-JL-7||F7F7|F-JFJL-J|L--J|LJ|L7||F-JF-7L-7F--JL7||L-7|LJLJ-LJF7|||F-JF7LJFJLJL-J|.F7LJL|FJF| |  | ||||||
| F7.F-J|||FJ|LJL7|JLJLJL-----7|F7F77F7F---J|F7F|F7F7FJ|||LJ|||F7L---7|F7F-JF-JFJ|||F7L7|F-JL-7JFJ|L7FJ|F------JLJLJL--JL7||F-----J7JL7JFFJF-7 |  | ||||||
| LJ-|F7|LJ|FJF--JL-----------JLJLJL-JLJF---7||FJ|LJ||FJ|L-7|||||F--7|LJ|L-7L7FL7||||L7|||F7F-JFJFJ.|L7LJ.F-----7F-------JFJL----7F77JLFFL-LJ| |  | ||||||
| L|FJ|LJF-JL7|F7F----------7F7F-7F--7F7|F--J||L7|F7LJ|FJF7||||||L-7||F-JF7|FJF7|||||FJ||LJ||F7L7|F7|FJLF7L----7|L--------JF7F---J|L77F7JFFJJ7 |  | ||||||
| FL|FJF7|F--JLJLJF---7F-7F-J|||FJ|F-J|||L-7FJ|FJ||L7FJ|FJ||LJ||L7FJLJL7FJ|||FJ|||||||FJL7FJ|||FJ||||L7FJL7F7F7||F-7F------JLJ|F--JFJF7J.L7F77 |  | ||||||
| LLLJL||LJF7F-7F-JF7FJL7|L--JLJL7|L7FJ|L-7||JLJFJ|FJL7|L7LJF7||||L---7||L|||L7|||||||L-7||FJ||L7LJ|L7|L-7||||||LJFJL----------JF7FJFJL-7LLFJL |  | ||||||
| L7FF7|L--J||FJL7FJ|||FJL----7F7||FJL7L7FJ|L-7|L7|L--J|FJJFJ||L7|F7F-J||FJ||FJ||||LJL7FJLJL-JL7|7FJFJ|F-JLJ||LJF7L-7F----7F-7F-JLJ7|F--J7.|.| |  | ||||||
| F--JLJF--7LJ|F7LJFJL7L-----7LJLJ||F7|FJ|FJF7|F-JL7F-7LJF7L7LJFJLJ|L-7LJ|FJ|L7|||L7F7||F7F7F--JL7|FJFJL-7F-JL--J|F-JL77F7LJ|LJ-F---JL7.|7L77F |  | ||||||
| |F---7|.FJF7LJL7FJF7L------JF7F-J||||L7|L7|||L-7FJL7L-7|L-JF7L--7L7FJF-JL7L7|||L7||LJLJLJ||F7F7||L7L7F7|L7F7F7FJL--7L-JL--7F--JF-7F7L-7-7.F| |  | ||||||
| LJ-F-JL7L-JL--7LJFJ|F7F7F---J|L-7||LJFJL7||||F-JL-7|F-JL--7|L7F-JFJ|.L7F7L7||||FJ|L-7F7F-J||||||L7L7|||L7||LJ|L--7FL7F7F--J|F--J-LJL--J-|-LJ |  | ||||||
| LLFJF--JF--7F-JF7L7LJ||LJF---JF7|||FFJF7|LJLJL7F-7LJL7F7FFJL7|L-7L7L7-||L7|||LJ|FJF-J||L-7||LJ||FJFJ|||FJ||F-JF-7|F-J||L-7|||F--------7--JL| |  | ||||||
| F-L7L7..L-7LJF7|L7L-7LJF-JF7F7||||L7|FJLJFF---JL7L7F7LJL7L7FJ|F-JJL7L7LJLLJ|L7FJL7L-7||F-J|L-7LJL7||LJ||FJ|L-7L7||L7FJ|F7L-JLJF7F-----J7.L|| |  | ||||||
| JJFL7|7LL7L7FJ|L7L7FJF-JF7|||LJ||L7||||F--JF7F--JFJ||F7FJF|L7|L-7F7L7|FF--7|FJL7FJF-J||L7FJF7L--7|L--7||L7L7FJFJ||FJL7||L7F7F7||L-7F-7LF-7-7 |  | ||||||
| |7L7||J-LJ.|L7L7L7||FJF-J|||L7JLJL|||L7|F7FJ||F-7L7||||L-7L7||F-J||FJL7|F-J||F7LJFJF7||FJ|FJL-7FJL-7FJLJLL7|L7L7LJ|F7|||FJ|||LJL--J|FJJL7|L| |  | ||||||
| JJ|FLJ|LJ7LL-J.L7|||L7|-FJ|L7L---7|||FJLJLJFJLJFJFJ||||F7L7||LJ7FJLJF7LJL7L|LJL-7L7|||||FJ|F--JL--7|L--7.FLJ-L7|F-J|||||L7||L---7F-JL7.|F|-J |  | ||||||
| |.-J.F7LJJLLLF--J|||FJ|FJFJFJF7F7|LJ||F7F--JF-7L7L-J||||L7||L7F-JF-7|L7F7L7L7F7FJFJ|||LJ|FJL7F7F7FJ|F-7L7F----J|L7FJLJ||FJ||F7F7LJF-7|7FL7.L |  | ||||||
| -J.|F|7-7.F-JL--7|||L7|L7||L7||||L-7|||LJF-7L7L7L7F-J||L7LJL7|L-7|.|L7|||FJFJ|||||FJ|L-7||F7LJ||LJ.||FJFJL7F--7|F||F7JLJ|FJ||LJ|F-J|LJ|F|L7J |  | ||||||
| ...|LLJLL7.|.|LLLJLJFJ|FJ|F-J|||L-7|LJL--JJ|FJ7L7|L7FJ|FJF--JL7FJ|FJFJ|||L7L7||L7||FJF-J|||L--JL--7LJ|FJF7||F-J|FJLJL7F-JL7|L-7|L7LJ7JFFF.-. |  | ||||||
| |-F7-FLL|-LJ77|.LJJJL7|L7|L7FJ|L-7LJF------J|FF7LJFJ|FJL7|F--7|L7|L7L7||L7|FJ|L7|LJL7L-7LJL7F-7F-7L-7LJJ|||||F7|L--7FJL7F7||F7||FJ-F|7J||FJ7 |  | ||||||
| |F|J.L.F-7|LJ-LJJ.|.L|L7||FJ|FJF7L-7L-7F---7L7|L-7L-J|F7||L7FJL7|L7|FJ|L7LJL7|FJL7F-JF7L-7FJL7|L7|F7L---J|||LJ||JF7LJF-J|||LJ||LJJFLJJLFJLJJ |  | ||||||
| |LJL-J--|L-F7JL7J-F7||FJ||L7|L7||F7L7FJ|F--JFJL-7L---J||||FJ|F7||FJLJ|L7L--7||L-7|L7FJ|F-JL7FJL7||||F7F7FJLJF-JL-JL7L|F-J|L7.|L7J.|J7FFJ-|L| |  | ||||||
| FL7JLF.LF77.L-FJ7.777||LLJJLJ7||||L7||FJL-7FJF--JF---7|LJLJFJ|||||F-7F-JF--JLJF-J|FJL7|L--7||F-J|||LJ|||L-7|L7F7F-7L7LJF-JFJ-L7|77J|FFFJF--- |  | ||||||
| -F.FJLF7L7|7|.FL|7J|-LJ-F-----J|LJ|LJLJF--JL7L7F7||F-JL--7FJFJ|||LJFJL-7L----7L7FJL-7||F-7|||L-7||L-7|||F7|F-J||L7L7|F7L-7L7JL||||7|FLFF7L7. |  | ||||||
| .-|L7|F|-J--77JLJLF|7FJLL--7F-7L------7L--7FJFJ|||FJF7F7FJ|FJFJ|L-7L7F-JF-7F-J|LJF--J|||7LJLJ|FJ||F7|||||LJL7FJ|FJFJLJL-7L-JLFLJ77F77.||LFJJ |  | ||||||
| .FL|.-JL7|.JL77|JF||-L7F---J||L7F-----JF--J|FJFJ||L-J||LJL||-L7L7FJFJL7FJFJL----7L-7FJ|L---7F-JFJLJ||LJ||F7FJ|FJL7|F-7F7L-7J7JFLJ77LL-FL-JJ| |  | ||||||
| F|--7|7-|-7|7JLLJL7JF|-L---7|F-JL-----7L7F7|L7|.LJ-F-JL--7||F-JFJL7|F-JL7L7F7F7FJF-JL7|F-7FJL7FJFF-JL7FJLJ|L7||F7||L7LJ|F-JJ7.||-|F-L--F.|JF |  | ||||||
| -7-L7LJ7|.F|L-J.F.L--77J|.FJ||F7F7F---JL||||FJL7JF-JF7F7FJLJL-7|F7LJ|F7FJF||||||FL7F-J||FJ|F-JL-7L--7||F--JJ|||||||FJJ.|L7|F7-JF-LJFF7L-7L-7 |  | ||||||
| ||F7L77L7.-7-77L||J77LF-7F|FJ|||||L7|-|JLJ|||F7|FL--J|||L7F---JLJ|F7LJ|L-7LJ||||F7|L-7||L7||F7F7L7.FJ||L7-F-J|LJLJ||J--L-J7LJ--F-|LLJ-.F77LF |  | ||||||
| --7.FL-FJ.L.|FFJ|7.|FFL7LLLJ.LJ||L7L-77-|JLJ||LJF----J|L-JL7F-7F7LJL-7L7FJLFJ||||LJF-J|L7||||||L7L7L7|L7|JL7FJ.LLL|L77L|J.|7|7.F--L7J-FF||.7 |  | ||||||
| L|L7J.LJ-7F|7.F7.|FJ-|FL.LJJ.LFJ|FJF7L7J.-F-JL7FJF7F-7L-7F-JL7|||F--7L7LJF-JFJLJ|F-J.LL7|LJ||LJFJFJ-LJ.LJ|F||J7.|L|FJ7F|-J|-|--J.|.F7-|L|LJJ |  | ||||||
| .L7JL7F||LL7LL7L7LJ|--7.|J|7F7L7|L7||FJ7FFL-7FJL7||L7L7FJ|F7FJ|||L-7L-J|.L--J7JF|L7.JJL||JFJ|LLL-JJ||-LLJ-FLJ.F--.LJJ|F|7F|J|7J7L|7|LJJF-7F- |  | ||||||
| 7JFJLFFJ|JLJ|FL7.L-L-LLL-F-LL-FJ|J||LJ7L|JLL||J-LJL-JJ||FJ|||FJ|L-7L-7JL7|JJ-J-7L-J7J7FLJLL7|L|LL7.LF-7J|L77L|L|L7L|-J-7J7.F-JF|FLL7LF-J|.J| |  | ||||||
| 7|F7.-J.||F|FJ.|.F-J.--7-F-|7FL-J-LJ|.JFJ.|LLJJL||F---J|L-J||L7L7FJF-J.L-J|7.L|7-J-JFL7LJ.LLJ7-JFJ7LFJJ-F-.F.7-|7F7|FJF|.F-7J.|LJ-||-7J.-F-| |  | ||||||
| L|7-7|F7--FF7--JF-7L7.|77|L|FJL|.7LJFJ.|L7F|-L.F|FL---7L7F-J|J|FJL7L-77J|-|--.LL-J.F|7||.LL|F77.|-FF7JJF-7-|7||JFFL-|.FJ7.7LFF-FJLLJJ.L-7.7- |  | ||||||
| LLF--FF|F7-JJF|.|FJJFL7LF7-|.J--.L-F7.FJF|-77|.FLLJ7.F|FJL-7|FJL-7|F7|JFJ|J|JL--.L7JLJ7|.L|L-JF7|.FJ|.L777FJ-77|-7J-J-JL77|-F|7.F-7JL7-|7|.L |  | ||||||
| |-|7|.|F7L|JFF7-.L.||-L.FJ.L.J7|FFJ||.|--|-FJ-7LLLL|.FJL7F7||L7F-JLJLJLJ-J.J7F777.||7FFF7F7LLJL.L-J7L7F||7LL7LF-JL--L7.L-J|FFJ-|7FF7FL7-|7J| |  | ||||||
| FF--7FLLJF|7FF-.|.-7|7LF7J-L7|L-JJ7|77JJ..LL7F|FL|.L-L7FJ|LJL7||.F7JJJ..L|7J-FF7F|||FLLFFF|.|7|-|.F-JF-LL-F7L-JF-J77F-|7J-F.|JJLJJ|F||L|.|-J |  | ||||||
| F77|LF|7F7L77L|.J.|JL|-7||LLFFJJJ7FJ||--7F7.FL-|FJ77|-LJFJF7FJ|L-J|7FFJ7F-7--L|7F--|J.F---J-F7J--7|.F|J-7F7J.J.FL.FFFJ|7LF-7L7.J|F|L||-L-77| |  | ||||||
| L-JJL-JJJL7JL-L-JJJFJJLF-L-.F7.|LLL--J7J-LFL7L|JJJF-J7..L-JLJJL---J-LF-LJJL7.LLJJJJJLJ.L|J-LFLJL-L--|JJ-LLJL|J-|.-J|.L|JL|JJ.FF--7L-FJ-LJ.J- |  | ||||||
							
								
								
									
										140
									
								
								10/lines.txt
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								10/lines.txt
									
									
									
									
									
								
							| @@ -1,140 +0,0 @@ | |||||||
| ............................................................................................................................................ |  | ||||||
| ..................................┌─┐....................................................................................................... |  | ||||||
| ................................┌┐└┐└┐...................................................................................................... |  | ||||||
| ................................││┌┘┌┘...................................................................................................... |  | ||||||
| ...............................┌┘││┌┘........................................................┌┐....┌─┐...................................... |  | ||||||
| ...............................└┐└┘└─┐...........................┌┐..........................││..┌─┘┌┘...................................... |  | ||||||
| ................................└─┐┌─┘.........................┌┐││..........................││.┌┘┌─┘....................................... |  | ||||||
| ..............................┌───┘└──┐.......................┌┘│││.┌┐..................┌┐┌──┘└┐└┐│......................................... |  | ||||||
| ..........................┌┐..└┐┌┐┌───┘.............┌─┐.┌┐┌┐..└┐└┘│.││............┌┐...┌┘││┌─┐┌┘.││......................................... |  | ||||||
| ........................┌─┘│┌┐.└┘│└─┐...............└┐└┐│││└┐┌─┘┌─┘┌┘│...........┌┘│┌┐┌┘┌┘└┘.││┌─┘│......................................... |  | ||||||
| ................┌┐......└┐┌┘│└─┐.│┌┐└┐.......┌┐..┌┐..└┐││││┌┘└─┐│┌┐│┌┘┌┐.........└┐│││└┐│..┌┐│││┌┐│┌┐....................................... |  | ||||||
| ................││.┌┐...┌┘│.└─┐└─┘│└─┘..┌┐...││.┌┘└┐┌─┘└┘└┘└┐┌─┘││└┘└─┘└┐....┌┐..┌┘││└─┘└┐┌┘└┘│││└┘││....................................... |  | ||||||
| .............┌┐.│└┐││...└┐└──┐└──┐└┐┌┐┌┐││.┌┐││.└─┐│└──┐┌───┘└┐┌┘│┌─────┘┌┐┌─┘│┌┐└┐││┌───┘└──┐│││.┌┘└──┐.................................... |  | ||||||
| .............││┌┘┌┘││...┌┘┌──┘┌──┘┌┘││││││.│└┘└┐.┌┘└┐┌─┘└──┐┌─┘└─┘└────┐.││└┐┌┘│└─┘└┘└┐┌┐..┌┐│└┘│┌┘┌───┘.......┌┐........................... |  | ||||||
| .............││└┐└┐│└┐┌─┘┌┘.┌┐└──┐└┐│││││└┐└┐┌─┘┌┘┌─┘└────┐│└─┐┌──┐┌───┘┌┘└┐│└┐└──┐┌─┐│││.┌┘└┘┌─┘│┌┘┌─┐...┌┐.┌─┘│........................... |  | ||||||
| ............┌┘└┐└┐└┘┌┘└─┐└─┐│└┐┌─┘┌┘│││││┌┘.││.┌┘┌┘.┌┐┌─┐┌┘└┐┌┘└─┐└┘.┌┐.└─┐││┌┘┌─┐└┘┌┘└┘└┐│┌─┐│┌┐││┌┘┌┘┌┐.││.└┐┌┘..┌┐....................... |  | ||||||
| ............└─┐│.└─┐└┐┌┐│┌─┘│┌┘└─┐│┌┘││└┘│.┌┘│┌┘┌┘┌┐│└┘┌┘└─┐└┘┌──┘┌┐┌┘└┐┌─┘││└┐└┐└┐┌┘┌┐┌┐│└┘┌┘└┘││└┘┌┘┌┘└┐││.┌┘│┌┐.│└─┐..................... |  | ||||||
| ............┌─┘└──┐└┐││└┘│.┌┘└┐┌─┘└┘┌┘└─┐└┐└┐└┘┌┘.││└┐┌┘┌──┘┌┐└─┐.│└┘┌─┘└─┐││┌┘.└┐│└─┘└┘│└┐.└┐┌┐└┘┌─┘.│┌─┘││.└┐││└┐└┐┌┘..................... |  | ||||||
| ............└┐┌──┐└─┘│└─┐└┐└┐┌┘└───┐│┌┐.│┌┘.└┐┌┘┌┐││┌┘└┐└┐┌─┘│┌─┘┌┘┌─┘┌─┐┌┘└┘└┐┌─┘└┐.┌──┘┌┘┌┐└┘│┌─┘┌─┐││┌┐│└┐┌┘└┘┌┘┌┘│...................... |  | ||||||
| .............└┘┌┐└─┐┌┘┌┐│┌┘┌┘└┐┌┐┌─┘│││┌┘└─┐┌┘└┐│││└┘┌─┘.└┘┌─┘└─┐└┐└┐.│┌┘│┌───┘└──┐└┐└──┐└┐│└─┐│└─┐└┐└┘│││└┐│└┐┌─┘.└┐└─┐.................... |  | ||||||
| ........┌┐┌┐┌┐┌┘└┐┌┘└─┘└┘└─┘┌─┘│││┌┐└┘│└┐┌─┘└┐┌┘││└─┐│.┌┐┌┐└─┐┌─┘┌┘┌┘┌┘│.││┌┐┌┐┌┐┌┘┌┘┌─┐│┌┘│┌─┘│┌─┘.└─┐└┘└┐││┌┘└┐┌┐.│┌─┘┌┐.................. |  | ||||||
| ........│└┘│││└─┐│└┐┌────┐┌─┘┌┐││└┘└─┐└┐│└┐..││┌┘└┐┌┘└┐│││└──┘│┌┐│┌┘┌┘┌┘┌┘││││││││┌┘.└┐└┘└─┘└┐┌┘└──┐┌─┘┌┐┌┘│││┌─┘│└┐│└──┘└┐................. |  | ||||||
| ........└─┐└┘│┌┐││.└┘.┌─┐│└─┐│││└┐.┌┐│┌┘└┐└┐┌┘└┘┌─┘└┐┌┘││└───┐││││└─┘┌┘.└┐│││││││││...└────┐┌┘│┌───┘│┌─┘└┘┌┘└┘│┌┐└┐││┌────┘┌┐............... |  | ||||||
| ........┌┐└─┐└┘└┘└───┐│┌┘└─┐└┘│└┐│┌┘│││┌┐└┐└┘┌──┘.┌┐││.││┌┐┌─┘└┘└┘┌──┘┌──┘└┘││└┘││└┐.┌┐.┌──┘│┌┘│┌─┐┌┘└┐.┌┐└┐┌─┘│└┐│└┘└───┐┌┘│.....┌┐........ |  | ||||||
| ......┌─┘└──┘┌┐┌┐┌┐┌┐└┘└─┐┌┘┌─┘┌┘││┌┘││││.│┌─┘┌┐┌┐││││┌┘│││└───┐┌┐└─┐.└────┐│└┐┌┘└┐│┌┘└┐└──┐└┘┌┘└┐│└┐┌┘┌┘└┐│└─┐│┌┘└┐┌────┘└┐└┐┌┐.┌┘│........ |  | ||||||
| ......└─────┐│└┘││└┘└───┐│└┐│┌┐└┐││└┐│└┘│┌┘│┌┐│└┘│││││└┐││└┐┌┐┌┘│└─┐│┌─┐┌┐┌┘└─┘│..│││┌─┘.┌┐└─┐│┌┐│└┐││┌┘┌─┘└┐┌┘││┌┐││┌┐.┌┐┌┘┌┘│└┐└┐│........ |  | ||||||
| ........┌───┘│┌─┘└─┐.┌──┘└─┘│││.│││┌┘└┐┌┘└┐└┘││┌─┘││││┌┘│└┐││└┘┌┘┌┐└┘│┌┘││└───┐└┐┌┘└┘└┐┌─┘│┌┐│└┘││┌┘││└┐└─┐.││.│││││└┘└─┘││┌┘.│┌┘┌┘└┐....... |  | ||||||
| ........└─┐┌┐│└┐┌──┘┌┘┌┐┌┐┌┐└┘└─┘││└┐┌┘│..└┐┌┘││┌┐││││└┐│┌┘│└─┐│.│└┐┌┘└─┘│┌┐┌┐│┌┘│┌───┘└─┐││││┌┐││└┐││┌┘┌─┘┌┘└┐│││││┌──┐┌┘││┌┐│└─┘┌─┘....... |  | ||||||
| .......┌──┘│││.││┌─┐└┐│││└┘└───┐┌┘│┌┘└┐└┐.┌┘│.│││││││└┐││└┐└┐.│└┐│┌┘└───┐└┘││└┘│.││┌──┐┌─┘└┘│││└┘│┌┘│││┌┘┌┐└┐┌┘│└┘└┘└─┐└┘.│││││┌──┘......... |  | ||||||
| .......└─┐┌┘└┘.└┘└┐└┐││││┌─────┘└┐││┌┐└┐└┐└┐│┌┘││││││┌┘││.└┐│┌┘┌┘││┌┐.┌┐└─┐│└─┐└┐│└┘┌─┘└───┐└┘└┐┌┘└┐│││└┐││┌┘└┐│┌────┐└─┐┌┘│││││┌─┐......... |  | ||||||
| .........└┘.....┌┐└┐│└┘└┘└┐┌────┐└┘└┘└┐└┐└┐│└┘┌┘│└┘│││┌┘└┐┌┘└┘┌┘┌┘││└─┘└─┐││┌┐│┌┘└─┐└┐┌┐.┌┐└─┐┌┘└─┐││││┌┘│││┌┐└┘└─┐┌┐└──┘└┐└┘└┘└┘┌┘......... |  | ||||||
| ...............┌┘│┌┘└─┐.┌┐└┘┌───┘┌────┘.│┌┘│┌┐└┐└┐┌┘│││┌─┘└──┐└┐│┌┘└──┐┌─┘│└┘││└┐┌─┘┌┘││┌┘│┌─┘│┌┐┌┘└┘││└┐││││└────┘││.┌┐.┌┘┌┐┌┐┌─┘.......... |  | ||||||
| ...............└┐│└─┐┌┘┌┘└──┘┌┐┌┐└┐.┌┐.┌┘└┐└┘└┐└─┘└┐││││┌┐┌─┐│┌┘││┌──┐││┌┐└─┐││┌┘└─┐│.│││┌┘└─┐│││└──┐││┌┘│││└─┐┌──┐│└─┘└─┘┌┘│││└──┐......... |  | ||||||
| ............┌───┘└──┘└┐└─────┘└┘└┐└┐│└┐└─┐└┐┌┐└─┐┌─┘│││└┘│└┐││└┐││└─┐││││└┐┌┘└┘│┌─┐││┌┘│││┌┐┌┘└┘│┌┐┌┘│││┌┘└┘┌─┘│┌─┘└┐┌──┐┌┘.└┘└┐┌─┘......... |  | ||||||
| ............└───────┐┌┘┌┐┌───────┘┌┘│┌┘┌┐│┌┘││┌┐││┌┐│││┌─┘.││└┐│││┌┐││││└┐││┌──┘└┐│││└┐│││││└──┐│││└┐│││└┐┌┐└─┐│└─┐.│└─┐│└───┐┌┘└─┐......... |  | ||||||
| ............┌┐┌┐┌┐┌┐│└─┘│└─┐┌────┐└─┘│┌┘│││┌┘││└┘└┘│││││┌┐┌┘└┐││││││││││┌┘││└─┐┌┐│││└┐│││││└┐┌┐││││┌┘└┘└─┘││┌┐└┘┌┐└─┘┌┐│└────┘│┌┐┌┘......... |  | ||||||
| ...........┌┘└┘│││││└──┐│┌┐└┘┌───┘┌─┐│└┐└┘│└┐│└──┐.││││└┘│└┐┌┘│││││││└┘││.││┌─┘│└┘││.│││││└┐││└┘└┘└┘┌─────┘└┘└┐┌┘│┌┐┌┘│└─┐┌┐┌┐└┘└┘┌┐........ |  | ||||||
| ...........└┐┌┐└┘└┘│┌┐┌┘└┘│┌┐└───┐│┌┘└┐└┐┌┘┌┘└┐┌┐│┌┘││└─┐│┌┘│┌┘└┘││││┌─┘└┐│││┌┐└─┐││┌┘│└┘└┐││└───┐┌─┘┌┐┌────┐┌┘└┐│││└┐│┌─┘││││┌───┘└┐....... |  | ||||||
| ............└┘└───┐└┘│└──┐│││┌──┐└┘└┐┌┘┌┘└┐└┐.││││└┐│└┐┌┘││┌┘└──┐││││└┐┌┐││││││┌─┘││└┐│.┌┐│││┌───┘│┌┐│└┘┌─┐┌┘└──┘└┘└─┘└┘┌┐│││└┘┌─┐┌─┘....... |  | ||||||
| .............┌┐┌┐.└─┐│.┌┐││││└─┐└───┘└┐└┐.│┌┘┌┘│││.│└┐│└┐│││┌┐┌─┘└┘││┌┘││││││││└─┐││┌┘└┐│└┘││└──┐┌┘││└┐.└┐└┘┌┐.┌┐┌┐┌┐┌┐┌┘││└┘┌─┘.│└┐........ |  | ||||||
| ...........┌─┘└┘└───┘└─┘└┘│││┌┐└─────┐└┐│┌┘│.│┌┘││┌┘┌┘│┌┘│││││└┐┌─┐││└┐│└┘││││└┐┌┘└┘└┐┌┘│┌┐│└┐┌┐││┌┘└─┘┌┐└─┐│└┐│││││└┘││┌┘│┌─┘┌─┐└─┘........ |  | ||||||
| ...........└┐┌─┐┌────┐┌──┐└┘└┘└┐.┌┐┌┐└┐└┘└┐└┐││┌┘│└┐└┐│└┐││└┘└┐└┘┌┘││┌┘│┌─┘││└┐││┌───┘│┌┘││└┐└┘││││┌───┘└──┘│┌┘│││└┘┌─┘││.│└──┘┌┘┌───┐...... |  | ||||||
| ...........┌┘│.└┘┌──┐└┘┌┐└──┐┌┐└─┘└┘└─┘┌┐.│┌┘││└─┘.│┌┘│┌┘│└──┐└┐┌┘.└┘└─┘│┌┐│└─┘└┘└┐┌┐┌┘└┐│└┐└─┐││││└────────┘└─┘└┘┌┐└──┘└─┘┌┐┌─┘.│┌──┘...... |  | ||||||
| ..........┌┘┌┘..┌┘┌┐└──┘└───┘│└────────┘└┐│└┐│└─┐┌─┘└┐│└┐│┌┐┌┘┌┘└───┐┌──┘││└──┐┌┐.│││└┐┌┘└┐└┐┌┘││└┘┌─────────────┐││┌──┐┌──┘│└┐┌┐││┌┐....... |  | ||||||
| ..........└┐│.┌┐└┐│└┐┌┐┌─┐┌─┐│┌──────────┘└─┘└──┘│┌─┐││┌┘││││.│┌┐┌┐┌┘└──┐│└┐┌─┘││┌┘│└┐│└┐┌┘┌┘└┐└┘┌┐└─────┐┌─────┐││└┘┌─┘└─┐.└┐└┘└┘└┘│....... |  | ||||||
| ...........└┘.││┌┘│.└┘└┘┌┘└┐└┘└────┐┌┐┌─┐┌┐┌─┐┌─┐│└┐││││┌┘│└┘┌┘│││└┘┌───┘└┐│└──┘│└─┘.││.││.└─┐│┌─┘└───┐┌┐└┘┌─┐┌┐││└─┐└───┐└─┐│┌──┐┌┐└┐...... |  | ||||||
| ............┌─┘│└┐│┌────┘┌─┘.┌─────┘│││┌┘│││┌┘│┌┘└─┘└┘││└┐└─┐└┐││└┐.└─┐┌─┐││┌┐┌┐│┌───┘└┐│└──┐││└─┐┌┐┌┐└┘└──┘.└┘└┘│┌┐└┐┌┐.│┌─┘│└─┐└┘└─┘...... |  | ||||||
| ............└─┐└┐└┘└────┐│┌─┐└─┐┌───┘││└─┘└┘└─┘└──┐┌┐┌┘│.└┐┌┘.└┘└┐│┌──┘└┐└┘││└┘└┘│┌┐┌┐┌┘│┌┐┌┘└┘┌┐└┘└┘└───────┐.┌┐└┘└┐└┘└┐│└─┐│┌┐└┐.......... |  | ||||||
| ..............└┐│┌┐┌┐┌─┐└┘└┐└┐┌┘│┌───┘└┐┌─┐┌┐┌┐┌─┐└┘│└─┘┌─┘└─┐┌──┘│└┐┌┐┌┘┌─┘└───┐││││└┘┌┘│└┘┌──┘│.┌─────┐┌┐┌─┘┌┘└┐┌┐└───┘│┌─┘└┘│┌┘.......... |  | ||||||
| ..............┌┘└┘└┘│└┐│┌─┐└┐└┘┌┘└─────┘└┐│││││└┐│┌┐│┌┐.└─┐┌─┘└──┐└┐└┘└┘.└┐┌─┐┌─┘│││└─┐└┐└─┐└──┐└┐│┌─┐┌┐└┘└┘.┌┘┌┐└┘└────┐│└──┐.│└─┐......... |  | ||||||
| ........┌─┐...└────┐└─┘│└┐│.└──┘.┌┐┌┐┌┐┌─┘││││└─┘└┘│└┘└─┐┌┘└┐..┌─┘┌┘.┌┐┌──┘└┐│└┐┌┘││┌┐│┌┘┌┐│┌─┐└┐││└┐└┘└─────┘┌┘└────┐┌─┘└──┐└┐│┌─┘┌┐....... |  | ||||||
| ........└┐└─┐..┌─┐.└──┐│┌┘└┐┌┐┌┐┌┘└┘└┘││┌┐└┘│└────┐└────┘└─┐└┐┌┘┌┐│.┌┘└┘┌─┐┌┘│┌┘└┐│└┘││└─┘└┘└┐│┌┘└┘┌┘┌┐┌┐┌┐┌┐┌┘┌┐┌──┐│└─┐┌┐.└─┘└┘┌─┘│....... |  | ||||||
| .........│┌─┘┌┐└┐│┌┐.┌┘││┌┐└┘└┘│└───┐┌┘└┘└┐┌┘┌┐┌─┐└┐┌┐┌┐┌┐┌┘┌┘└┐││└┐└─┐┌┘┌┘└┐││┌─┘└─┐│└┐┌────┘│└┐┌┐│┌┘││└┘└┘│└─┘└┘┌─┘└─┐└┘└─┐┌───┘┌┐│....... |  | ||||||
| ......┌──┘│┌─┘└─┘└┘└┐└┐│└┘└┐┌─┐└────┘└────┘└─┘│└┐└┐└┘└┘└┘│└─┘┌┐││└┐│┌─┘└┐└┐┌┘││└─┐┌─┘└─┘└────┐│.└┘└┘└┐│└──┐┌┘┌────┘┌┐┌┐└────┘└─┐┌─┘└┘....... |  | ||||||
| ..┌─┐.└──┐│└───────┐└┐││.┌─┘│.└─────────┐┌───┐└┐└┐└┐┌┐┌─┐└───┘│└┘.││└┐┌─┘┌┘└┐└┘.┌┘│┌───┐┌──┐.││┌┐┌┐┌┐│└───┘└┐└─┐┌──┘└┘└┐.┌┐.┌┐┌┘└───┐....... |  | ||||||
| ..└┐└───┐││┌┐┌┐┌┐┌┐└┐││└┐└──┘┌┐┌────────┘│┌──┘.└─┘┌┘││└┐└────┐│┌──┘│.││┌┐│┌┐└─┐┌┘┌┘└──┐└┘┌┐│┌┘│││││││└───┐┌┐└──┘│┌─┐┌─┐└─┘└┐│└┘┌──┐┌┘....... |  | ||||||
| ┌──┘┌──┐└┘│││││││││.││└┐│┌┐┌┐││└───┐┌────┘└┐┌┐┌┐┌┐└┐│└┐│┌┐.┌┐└┘└┐┌┐└┐││││└┘└┐┌┘└─┘┌┐┌┐└─┐│└┘└┐│││││││┌┐┌┐└┘└─┐┌─┘└┐│└┐└────┘│┌─┘┌┐└┘........ |  | ||||||
| │┌─┐│..└─┐││││││└┘└─┘└─┘└┘└┘└┘└┐.┌─┘│┌─────┘│││└┘│.└┘.└┘│└─┘└┐┌┐││└┐││└┘└┐┌┐││..┌┐││││┌─┘│┌─┐│││└┘└┘└┘└┘│┌───┘│┌──┘└─┘.┌┐.┌┐│└──┘│┌─┐....... |  | ||||||
| └┘.└┘...┌┘└┘└┘└┘┌┐┌─┐┌┐┌─┐┌┐┌─┐└┐└──┘└───┐┌┐│││┌┐└──────┘┌┐┌─┘│└┘└┐││└┐┌┐└┘││└┐┌┘└┘│││└─┐│└┐│││└┐┌┐┌───┐└┘┌┐┌┐│└───┐┌──┘└┐│││┌───┘└┐│....... |  | ||||||
| ....┌┐┌┐└─┐┌┐┌─┐│││.││││┌┘││└┐└┐└───┐┌┐┌┐└┘└┘│││└──────┐┌┘│└─┐└┐┌┐││└┐│││┌┐││┌┘└──┐└┘└──┘└─┘└┘└─┘│└┘┌──┘┌─┘└┘└┘┌┐┌┐└┘┌───┘│└┘└┐┌┐┌─┘└─┐..... |  | ||||||
| ..┌─┘└┘└──┘│└┘┌┘│││┌┘│││└┐││┌┘.└┐┌─┐└┘└┘└───┐└┘└┐┌┐┌──┐└┘.└──┘┌┘││││┌┘││││└┘││..┌─┘┌┐┌┐┌─────┐┌┐┌┘.┌┘┌─┐│┌─┐┌─┐│└┘│┌┐└─┐┌┐│┌──┘│└┘┌───┘..... |  | ||||||
| ..└┐┌─┐┌─┐┌┘┌─┘┌┘└┘└─┘││.││││┌──┘└┐└─┐┌─┐┌┐.└──┐└┘└┘┌┐└──────┐│┌┘│││└┐└┘││..└┘┌─┘┌─┘││└┘.┌───┘│││┌┐└┐│.└┘│.└┘┌┘└┐.└┘└──┘│└┘└─┐.│┌─┘┌───┐.... |  | ||||||
| ...└┘┌┘└┐└┘.└┐┌┘.┌────┘└┐││││└────┘┌─┘│┌┘│└───┐│┌┐┌─┘│┌─┐┌─┐┌┘└┘.││└┐│..││....└──┘..│└┐┌─┘┌──┐││││└┐└┘┌─┐└──┐└─┐└─┐┌┐┌┐┌┘┌──┐└─┘└┐┌┘┌──┘.... |  | ||||||
| .....└┐┌┘┌──┐└┘┌─┘┌┐┌─┐┌┘└┘└┘┌┐.┌──┘┌─┘└┐│┌───┘└┘└┘┌┐└┘.└┘┌┘└───┐└┘┌┘└┐.└┘...┌────┐.└─┘└──┘┌─┘│└┘│┌┘┌┐└┐│┌──┘┌┐└──┘│││││┌┘┌┐└─┐┌┐└┘┌┘....... |  | ||||||
| ......└┘.└─┐│┌─┘┌┐│││┌┘│┌┐┌┐┌┘└┐└───┘┌─┐└┘└┐.┌┐┌┐┌─┘└┐.┌─┐└────┐│..└─┐└┐.....└───┐└─┐.┌────┘┌─┘┌┐││┌┘└─┘└┘┌─┐│└────┘└┘└┘└─┘└─┐│││┌┐└───┐.... |  | ||||||
| .......┌───┘│└┐┌┘│││││┌┘││││└─┐└─────┘.└┐┌─┘┌┘└┘││┌─┐└┐└┐│┌──┐.││....│┌┘.......┌─┘┌┐└─┘┌┐┌┐┌┘┌─┘└┘└┘┌──┐┌┐│┌┘│┌───┐┌┐┌┐┌─────┘└┘└┘│┌───┘.... |  | ||||||
| .......└───┐└┐││.└┘└┘└┘┌┘└┘└─┐└────────┐│└──┘┌─┐└┘└┐└┐└─┘└┘┌┐│.││....└┘........└─┐│└┐┌┐││││└┐└┐┌────┘┌┐└┘└┘└─┘└──┐│││││└────┐┌┐┌─┐│└───┐.... |  | ||||||
| ...........└┐│└┘┌┐┌────┘┌┐┌─┐└──┐┌─────┘└────┘.└─┐┌┘.└┐┌─┐┌┘└┘.└┘..............┌─┘│.│││││││┌┘.└┘┌┐┌──┘└────┐┌──┐┌┘││└┘└┐┌┐┌─┘│││┌┘└─┐┌┐│.... |  | ||||||
| .........┌──┘└┐.││└─────┘││.└──┐└┘┌───┐┌┐┌┐┌┐┌──┐│└┐┌┐└┘.└┘┌┐..................└─┐└┐││││││└┘.┌┐┌┘│└─┐┌────┐│└─┐│└┐│└─┐┌┘││└──┘└┘└─┐.└┘└┘.... |  | ||||||
| .........└─┐┌┐└─┘└┐┌┐┌┐┌┐└┘┌┐┌┐└─┐│┌──┘│└┘└┘└┘┌─┘└─┘││┌┐┌──┘└─┐..................│┌┘└┘└┘└┘.┌┐││└┐└─┐└┘┌───┘└─┐│└─┘└──┘└─┘└┐┌─┐┌──┐└─┐....... |  | ||||||
| ........┌┐.└┘│┌┐┌┐└┘└┘└┘└─┐│└┘└─┐└┘└───┘┌┐┌───┘┌┐.┌┐│└┘││┌──┐┌┘..................└┘....┌┐.┌┘││└─┘┌─┘┌┐└─────┐│└─────┐..┌─┐│└┐││┌┐└┐┌┘....... |  | ||||||
| ........│└──┐└┘└┘└───────┐│└───┐│┌┐┌────┘└┘┌───┘└─┘└┘┌┐└┘└─┐└┘..................┌┐┌┐┌┐┌┘│┌┘┌┘└─┐┌┘┌┐││┌┐.┌──┘└┐┌───┐└┐┌┘┌┘└─┘└┘│└┐└┘........ |  | ||||||
| ........└──┐│.┌┐┌──┐┌────┘└───┐│││└┘┌┐.┌───┘┌──┐┌─┐┌┐│└┐┌┐┌┘┌┐......┌─┐.........│└┘└┘│└┐│└┐│┌──┘└─┘└┘└┘└┐└───┐│└─┐.└┐│└┐│.┌┐.┌─┘┌┘.......... |  | ||||||
| ........┌──┘└┐│└┘┌┐└┘┌┐┌─┐┌┐┌┐└┘│└──┘└─┘┌──┐└─┐││┌┘│││┌┘││└─┘└─┐....└┐│.........└──┐┌┘┌┘└─┘│└─┐┌┐┌┐┌─┐┌┐└───┐│└┐┌┘┌┐└┘┌┘└─┘└┐│┌─┘┌┐......... |  | ||||||
| ........│┌──┐│└┐┌┘S┐┌┘└┘.││││└─┐└───┐┌─┐│┌┐└──┘└┘└─┘└┘│┌┘│┌────┘.┌──┐││...........┌┘│.└───┐└┐.└┘└┘└┘.│││┌──┐└┘┌┘└┐││┌┐│┌───┐└┘└──┘│......... |  | ||||||
| ........└┘┌─┘└─┘│┌─┘│┌───┘│││┌─┘┌┐┌┐└┘.│└┘└──┐┌┐┌┐┌──┐└┘┌┘└──┐┌┐.│┌┐└┘└┐.......┌┐.└┐│┌┐┌┐.└┐└─┐┌┐┌──┐││└┘┌┐└─┐└──┘│││└┘└──┐└┐┌┐┌─┐└┐........ |  | ||||||
| ..........│┌─┐┌─┘└─┐│└────┘└┘└──┘└┘└──┐└──┐┌┐└┘└┘└┘┌─┘┌┐└───┐└┘└┐└┘└┐┌─┘.......││..││││││┌┐└─┐│││└─┐│└┘┌─┘└──┘┌┐┌─┘└┘┌┐┌──┘.└┘│└┐└─┘........ |  | ||||||
| ..........└┘.││┌──┐││┌─────┐┌┐┌┐┌─┐┌─┐└──┐└┘└──┐┌──┘┌┐│└───┐└┐┌─┘┌──┘└┐........│└──┘└┘└┘└┘└──┘└┘└┐┌┘└┐.└──────┘└┘┌───┘││┌──┐┌┐└┐└┐┌─┐....... |  | ||||||
| .............│││┌┐└┘│└────┐│││││└┐│└┐└┐┌┐│.┌┐┌┐└┘┌┐.│└┘┌┐┌─┘.└┘..└──┐┌┘.┌─┐....└───┐┌┐┌────┐┌───┐│└─┐│┌┐┌───┐┌───┘┌──┐└┘│┌─┘││.└┐└┘┌┘....... |  | ||||||
| .............└┘└┘└──┘.┌───┘└┘└┘└─┘└─┘.│││└─┘└┘└─┐│└┐│┌─┘└┘┌─┐┌┐┌┐┌┐┌┘└──┘┌┘....┌───┘│││┌───┘│┌──┘└──┘└┘│└──┐└┘.┌┐.│┌┐└──┘└──┘└─┐│┌─┘........ |  | ||||||
| ..............┌───┐.┌┐└┐┌┐┌┐┌─┐┌┐┌───┐└┘└──┐┌───┘└┐││└┐┌┐┌┘┌┘│└┘││││┌┐┌┐┌┘.....└┐┌┐┌┘└┘└─┐┌┐│└────┐┌──┐└───┘.┌─┘└─┘│└┐┌─┐┌┐┌───┘└┘.......... |  | ||||||
| ..............└┐┌┐└┐││┌┘│└┘└┘.└┘│└┐┌─┘┌┐.┌┐││┌──┐┌┘││┌┘│││┌┘.└─┐││└┘│││└┘.......└┘└┘┌────┘│││┌─┐┌┐││┌┐└────┐┌┘┌┐┌┐┌┘.└┘.│││└──┐┌┐........... |  | ||||||
| .............┌┐└┘└┐│││└─┘.┌────┐└─┘└─┐││┌┘│└┘│┌─┘└┐└┘└┐│└┘└┐┌┐┌┘││┌─┘└┘┌┐.......┌──┐└─┐┌─┐│└┘└┐└┘└┘││└┐┌───┘│┌┘└┘││┌┐.┌┐└┘│┌──┘│└─┐......... |  | ||||||
| .............││┌┐┌┘└┘│┌┐┌─┘┌┐┌┐└─────┘││└┐└┐.││┌──┘┌┐┌┘│┌┐┌┘││└┐│││┌┐.┌┘└┐┌┐.┌┐.└─┐│┌┐└┘.└┘.┌┐└───┐│└┐└┘┌┐┌─┘└──┐└┘│└─┘└─┐└┘┌─┐│┌─┘......... |  | ||||||
| .........┌───┘│││└──┐││││┌─┘└┘└─────┐┌┘│┌┘┌┘┌┘└┘┌┐┌┘└┘.││└┘.││.│└┘└┘│┌┘┌─┘│└┐││┌─┐│└┘└┐┌┐┌──┘└───┐└┘.└──┘└┘┌────┘┌┐│┌────┘.┌┘┌┘││┌┐┌┐....... |  | ||||||
| .........└───┐└┘└──┐││││└┘┌─┐┌──────┘│┌┘└┐│.└┐┌─┘└┘┌───┘└──┐│└┐└─┐┌─┘│┌┘.┌┘┌┘││└┐│└┐┌─┘││└──┐┌┐┌┐└─────────┘┌─┐┌┐││││┌──┐┌┐└┐└┐│└┘└┘└──┐.... |  | ||||||
| .........┌┐┌┐└────┐││││└┐.└┐│└─┐┌────┘└──┘└┐┌┘└┐┌┐.└─┐┌────┘└┐│┌─┘└┐.│└─┐│┌┘┌┘└─┘│┌┘└─┐││┌┐.└┘└┘└────────┐┌┐└┐││└┘└┘└┘┌─┘│└─┘┌┘│┌──┐┌┐┌┘.... |  | ||||||
| .........│└┘│┌───┐│└┘│└┐│┌┐│└─┐└┘┌────┐┌┐┌┐└┘┌─┘││┌┐.│└──┐.┌┐││└┐┌┐└─┘┌─┘│└┐│┌──┐└┘┌──┘│││└─┐┌┐┌┐┌┐.┌┐┌──┘│└─┘└┘┌─┐┌──┘┌┐│┌─┐└─┘└─┐└┘││..... |  | ||||||
| .........└─┐│└──┐│└─┐└┐││││└─┐│┌┐└───┐└┘│││┌┐└┐┌┘└┘└─┘┌─┐└┐│└┘└┐└┘│┌┐┌┘┌┐│┌┘└┘┌┐└─┐│┌┐.│││┌┐└┘└┘└┘│┌┘│└───┘┌┐┌┐┌┘.│└───┘└┘└┐└─┐┌─┐└─┐└┘..... |  | ||||||
| ........┌──┘└─┐.│└┐.└┐└┘└┘│┌┐││││┌──┐└─┐└┘└┘└┐└┘┌────┐└┐└─┘└──┐└┐┌┘│││.││││.┌─┘│.┌┘│││┌┘│└┘└─────┐││┌┘.┌┐┌─┘└┘│└─┐│┌─┐┌────┘┌┐└┘.│┌─┘....... |  | ||||||
| ...┌┐...└──┐┌┐└┐└┐└┐.└┐┌─┐└┘││└┘│└─┐│┌┐└┐┌┐..│┌┐└───┐│┌┘.┌┐.┌┐└┐│└┐│└┘┌┘││└┐└─┐└┐└┐│││└┐└┐┌─┐┌───┘└┘└─┐││└───┐└──┘└┘.│└─────┘└┐.┌┘└──┐...... |  | ||||||
| ..┌┘│.┌┐.┌┐└┘└┐└┐│┌┘┌┐└┘┌┘┌┐│└─┐│┌─┘││└┐└┘└┐┌┘│└┐┌┐┌┘││┌┐│└┐│└┐││.│└┐.└┐└┘┌┘┌─┘┌┘┌┘└┘│┌┘┌┘└┐│└───┐┌──┐└┘└────┘┌───┐┌─┘┌┐┌┐┌──┐└┐│┌┐┌─┘...... |  | ||||||
| ..└┐└─┘│┌┘└──┐└┐└┘└─┘└──┘┌┘│└──┘└┘┌┐└┘.└───┘└─┘.└┘│└┐││││└┐└┘┌┘│└─┘┌┘┌┐└┐┌┘.└─┐│┌┘┌──┘└┐│.┌┘│┌───┘│┌─┘┌┐┌──┐┌─┘┌──┘│┌┐││││└─┐└─┘└┘│└─┐...... |  | ||||||
| ...└──┐│└─┐┌┐└┐└┐┌────┐┌─┘.└──┐┌┐┌┘└────┐.┌┐┌────┐└─┘└┘││.└─┐└┐└─┐┌┘┌┘│┌┘└┐┌──┘│└┐│┌┐.┌┘└┐└┐│└────┘└┐┌┘└┘┌┐└┘┌─┘.┌┐└┘└┘└┘└─┐└───┐.│┌─┘...... |  | ||||||
| ....┌─┘└─┐││└┐└─┘│┌───┘│┌─────┘│││┌─────┘┌┘└┘┌───┘┌─┐┌┐││┌─┐└┐│┌─┘└┐└┐└┘┌─┘└──┐└─┘││└┐└─┐│┌┘└┐┌┐┌┐┌─┘│.┌┐│└──┘┌─┐│└───────┐│┌──┐│.└┘........ |  | ||||||
| ....└┐┌──┘└┘.└───┘└┐┌┐┌┘│┌─┐┌─┐│└┘└┐┌┐.┌─┘┌──┘┌──┐└┐││││││┌┘┌┘│└─┐┌┘┌┘┌┐│┌┐┌┐.└─┐┌┘└┐│┌┐│││┌┐└┘└┘│└─┐│┌┘└┘┌┐┌─┘┌┘│┌───────┘│└─┐└┘........... |  | ||||||
| ...┌─┘└──┐┌┐┌─────┐│││└┐└┘.└┘.└┘┌─┐└┘└┐│┌─┘.┌┐└┐┌┘┌┘└┘││││└┐└┐└──┘└┐│┌┘└┘││││┌┐┌┘└┐┌┘└┘└┘│└┘└──┐┌┘┌┐└┘└┐┌┐│││┌─┘┌┘└┐┌───┐┌┐└─┐└┐............ |  | ||||||
| ...└─┐┌──┘││└────┐│└┘└─┘┌────┐┌┐└┐└──┐└┘└───┘│┌┘└┐└──┐│││└┐└┐│┌┐┌─┐││└─┐┌┘│││││└┐┌┘└┐┌┐┌┐└┐┌┐.┌┘└─┘└──┐└┘└┘││└──┘┌┐└┘┌──┘│└─┐└─┘............ |  | ||||||
| ..┌──┘└──┐││┌┐┌┐┌┘└──┐┌┐└───┐└┘└┐└──┐└┐┌┐┌─┐┌┘│┌─┘┌┐┌┘└┘└┐│┌┘└┘││┌┘││┌─┘└┐└┘│││┌┘│┌┐└┘└┘└┐││└┐└┐┌┐┌───┘┌───┘│┌───┘└──┘┌┐┌┘┌┐└───┐........... |  | ||||||
| ..└───┐┌─┘││││││└──┐┌┘││┌┐┌┐└──┐└───┘.└┘││.└┘.││┌─┘│└┐┌┐┌┘│└┐┌┐└┘└┐└┘└┐┌┐│┌─┘││└┐││└──┐┌┐││└┐│.└┘│└┐┌─┐└────┘└┐┌┐┌┐┌──┘└┘┌┘└────┘........... |  | ||||||
| ...┌──┘└──┘└┘└┘│.┌─┘└─┘│││││┌─┐│┌┐┌┐┌┐┌┐└┘┌───┘│└┐┌┘.││└┘.└┐└┘│.┌┐└┐┌┐└┘│││┌┐│└┐│└┘┌──┘│└┘└─┘│┌─┐│┌┘└┐│┌┐┌─┐┌─┘│││└┘┌──┐┌┘┌┐┌┐.┌┐........... |  | ||||||
| ...└─┐┌┐┌─┐┌┐┌┐└┐└┐┌┐┌┐└┘└┘└┘┌┘└┘└┘└┘└┘└─┐└───┐└─┘└─┐││┌┐┌┐│┌─┘┌┘└─┘│└──┘│└┘│└┐││┌─┘┌─┐└─┐┌──┘└┐││└─┐│└┘└┘.└┘┌┐│││┌─┘┌┐└┘┌┘└┘└─┘│........... |  | ||||||
| ...┌─┘│││┌┘│└┘└┐│.└┘└┘└─────┐│┌┐┌┐.┌┐┌───┘.┌┐.│┌┐┌┐┌┘│││└┘│││┌┐└───┐│┌┐┌─┘┌─┘┌┘│││┌┐└┐│┌─┘└─┐.┌┘│└┐┌┘│┌──────┘└┘└┘└──┘└┐.│┌─────┘........... |  | ||||||
| ...│┌┐│└┘│┌┘┌──┘└───────────┘└┘└┘└─┘└┘┌───┐││┌┘│└┘││┌┘│└─┐│││││┌──┐│└┘│└─┐└┐.└┐││││└┐│││┌┐┌─┘┌┘┌┘.│└┐└┘.┌─────┐┌───────┘┌┘└────┐┌┐.......... |  | ||||||
| ..┌┘│└┘┌─┘└┐│┌┐┌──────────┐┌┐┌─┐┌──┐┌┐│┌──┘││└┐│┌┐└┘│┌┘┌┐││││││└─┐││┌─┘┌┐│┌┘┌┐│││││┌┘││└┘││┌┐└┐│┌┐│┌┘.┌┐└────┐│└────────┘┌┐┌───┘│└┐......... |  | ||||||
| ..│┌┘┌┐│┌──┘└┘└┘┌───┐┌─┐┌─┘│││┌┘│┌─┘│││└─┐┌┘│┌┘││└┐┌┘│┌┘││└┘││└┐┌┘└┘└┐┌┘│││┌┘│││││││┌┘└┐┌┘│││┌┘││││└┐┌┘└┐┌┐┌┐││┌─┐┌──────┘└┘.┌──┘┌┘┌┐....... |  | ||||||
| ..└┘.││└┘┌┐┌─┐┌─┘┌┐┌┘└┐│└──┘└┘└┐│└┐┌┘│└─┐││.└┘┌┘│┌┘└┐│└┐└┘┌┐││.│└───┐││.│││└┐│││││││└─┐││┌┘││└┐└┘│└┐│└─┐││││││└┘┌┘└──────────┘┌┐┌┘┌┘└─┐..... |  | ||||||
| ...┌┐│└──┘││┌┘└┐┌┘││.┌┘└────┐┌┐││┌┘└┐└┐┌┘│└─┐.└┐│└──┘│┌┘.┌┘││└┐│┌┐┌─┘││┌┘││┌┘││││└┘└┐┌┘└┘└─┘└┐│.┌┘┌┘│┌─┘└┘││└┘┌┐└─┐┌────┐┌─┐┌─┘└┘.│┌──┘..... |  | ||||||
| ┌──┘└┘┌──┐└┘│┌┐└┘┌┘└┐└─────┐└┘└┘││┌┐│┌┘│┌┘┌┐│┌─┘└┐┌─┐└┘┌┐└┐└┘┌┘└┘│└─┐└┘│┌┘│└┐│││└┐┌┐││┌┐┌┐┌──┘└┐│┌┘┌┘└─┐┌─┘└──┘│┌─┘└┐.┌┐└┘.└┘.┌───┘└┐....... |  | ||||||
| │┌───┐│.┌┘┌┐└┘└┐┌┘┌┐└──────┘┌┐┌─┘││││└┐│└┐│││└─┐┌┘└┐└─┐│└─┘┌┐└──┐└┐┌┘┌─┘└┐└┐│││└┐││└┘└┘└┘││┌┐┌┐││└┐└┐┌┐│└┐┌┐┌┐┌┘└──┐└─┘└──┐┌──┘┌─┐┌┐└─┐..... |  | ||||||
| └┘.┌─┘└┐└─┘└──┐└┘┌┘│┌┐┌┐┌───┘│└─┐││└┘┌┘└┐││││┌─┘└─┐│┌─┘└──┐│└┐┌─┘┌┘│.└┐┌┐└┐││││┌┘│└─┐┌┐┌─┘││││││└┐└┐│││└┐││└┘│└──┐.└┐┌┐┌──┘│┌──┘.└┘└──┘..... |  | ||||||
| ..┌┘┌──┘┌──┐┌─┘┌┐└┐└┘││└┘┌───┘┌┐│││.┌┘┌┐│└┘└┘└┐┌─┐└┘└┐┌┐.┌┘└┐│└─┐└┐└┐.││└┐│││└┘│┌┘┌─┘││└─┐││└┘││┌┘┌┘│││┌┘││┌─┘┌─┐│┌─┘││└─┐.││┌────────┐..... |  | ||||||
| ..└┐└┐..└─┐└┘┌┐│└┐└─┐└┘┌─┘┌┐┌┐││││└┐│┌┘└┘.┌───┘└┐└┐┌┐└┘└┐└┐┌┘│┌─┘.└┐└┐└┘.└┘│└┐┌┘└┐└─┐││┌─┘│└─┐└┘└┐│.└┘││┌┘│└─┐└┐││└┐┌┘│┌┐└─┘└┘┌┐┌─────┘..... |  | ||||||
| ...└┐│....└┐┌┘│└┐└┐┌┘┌─┘┌┐│││└┘││└┐│││.┌──┘┌┐┌──┘┌┘││┌┐┌┘.│└┐│└─┐┌┐└┐│.┌──┐│┌┘└┐┌┘┌─┘││└┐┌┘┌┐└──┐│└──┐││└┐└┐┌┘┌┘││┌┘└┐││└┐┌┐┌┐││└─┐┌─┐...... |  | ||||||
| ....││.....│└┐└┐└┐││┌┘┌─┘│││└┐.└┘.│││└┐│┌┐┌┘││┌─┐└┐││││└─┐└┐││┌─┘││┌┘└┐│┌─┘││┌┐└┘┌┘┌┐││┌┘│┌┘└─┐┌┘└─┐┌┘└┘.└┐│└┐└┐└┘│┌┐│││┌┘│││└┘└──┘│┌┘...... |  | ||||||
| ....└┘.....└─┘.└┐│││└┐│.┌┘│└┐└───┐│││┌┘└┘└┘┌┘└┘┌┘┌┘││││┌┐└┐││└┘.┌┘└┘┌┐└┘└┐.│└┘└─┐└┐│││││┌┘│┌──┘└──┐│└──┐..└┘.└┐│┌─┘│││││└┐││└───┐┌─┘└┐...... |  | ||||||
| .............┌──┘│││┌┘│┌┘┌┘┌┘┌┐┌┐│└┘││┌┐┌──┘┌─┐└┐└─┘││││└┐││└┐┌─┘┌─┐│└┐┌┐└┐└┐┌┐┌┘┌┘│││└┘│┌┘└┐┌┐┌┐┌┘│┌─┐└┐┌────┘│└┐┌┘└┘││┌┘││┌┐┌┐└┘┌─┐│...... |  | ||||||
| .............└──┐│││└┐│└┐│.└┐││││└─┐│││└┘┌─┐└┐└┐└┐┌─┘││└┐└┘└┐│└─┐│.│└┐│││┌┘┌┘│││.│┌┘│└─┐││┌┐└┘││└┘.││┌┘┌┘└┐┌──┐│.││┌┐.└┘│┌┘││└┘│┌─┘.└┘...... |  | ||||||
| ................└┘└┘┌┘│┌┘│┌─┘│││└─┐│└┘└──┘.│┌┘.└┐│└┐┌┘│┌┘┌──┘└┐┌┘│┌┘┌┘│││└┐└┐││└┐││┌┘┌─┘│││└──┘└──┐└┘│┌┘┌┐││┌─┘│┌┘└┘└┐┌─┘└┐│└─┐│└┐.......... |  | ||||||
| ....................└┐│└┐│└┐┌┘│└─┐└┘┌──────┘│.┌┐└┘┌┘│┌┘└┐│┌──┐│└┐│└┐└┐││└┐│┌┘│└┐│└┘└┐└─┐└┘└┐┌─┐┌─┐└─┐└┘.│││││┌┐│└──┐┌┘└┐┌┐││┌┐││┌┘.......... |  | ||||||
| .....................│└┐││┌┘│┌┘┌┐└─┐└─┐┌───┐└┐│└─┐└─┘│┌┐││└┐┌┘└┐│└┐│┌┘│└┐└┘└┐│┌┘└┐┌─┘┌┐└─┐┌┘└┐│└┐│┌┐└───┘│││└┘││.┌┐└┘┌─┘│││└┘││└┘........... |  | ||||||
| .....................│┌┘││└┐│└┐││┌┐└┐┌┘│┌──┘┌┘└─┐└───┘││││┌┘│┌┐││┌┘└┘.└┐└──┐││└─┐│└┐┌┘│┌─┘└┐┌┘└┐││││┌┐┌┐┌┘└┘┌─┘└─┘└┐.│┌─┘│└┐.│└┐............ |  | ||||||
| .....................││.└┘.└┘.││││└┐││┌┘└─┐┌┘┌──┘┌───┐│└┘└┘┌┘│││││┌─┐┌─┘┌──┘└┘┌─┘│┌┘└┐│└──┐││┌─┘│││└┘│││└─┐.└┐┌┐┌─┐└┐└┘┌─┘┌┘.└┐│............ |  | ||||||
| .....................└┘.┌─────┘│└┘.└┘└┘┌──┘└┐└┐┌┐│.┌─┘└──┐┌┘┌┘│││└┘┌┘└─┐└────┐└┐┌┘└─┐││┌─┐│││└─┐││└─┐│││┌┐│┌─┘││└┐└┐│┌┐└─┐└┐..││............ |  | ||||||
| ........................└──┐┌─┐└──────┐└──┐┌┘┌┘│││┌┘┌┐┌┐┌┘│┌┘┌┘│└─┐└┐┌─┘┌─┐┌─┘.└┘┌──┘│││.└┘└┘.┌┘││┌┐│││││└┘└┐┌┘│┌┘┌┘└┘└─┐└─┘..└┘............ |  | ||||||
| .......................┌───┘│.└┐┌─────┘┌──┘│┌┘┌┘││└─┘││└┘.││.└┐└┐┌┘┌┘└┐┌┘┌┘└────┐└─┐┌┘│└───┐┌─┘┌┘└┘││└┘││┌┐┌┘│┌┘└┐│┌─┐┌┐└─┐................. |  | ||||||
| .......................└───┐│┌─┘└─────┐└┐┌┐│└┐│.└┘.┌─┘└──┐││┌─┘┌┘└┐│┌─┘└┐└┐┌┐┌┐┌┘┌─┘└┐│┌─┐┌┘└┐┌┘.┌─┘└┐┌┘└┘│└┐││┌┐││└┐└┘│┌─┘................. |  | ||||||
| ..........................┌┘││┌┐┌┐┌───┘.││││┌┘└┐.┌─┘┌┐┌┐┌┘└┘└─┐│┌┐└┘│┌┐┌┘.││││││.└┐┌─┘││┌┘│┌─┘└─┐└──┐││┌──┘.│││││││┌┘..│└┐.................. |  | ||||||
| ..........................│┌┘│││││└┐....└┘│││┌┐│.└──┘│││└┐┌───┘└┘│┌┐└┘│└─┐└┘││││┌┐│└─┐││└┐││┌┐┌┐└┐.┌┘││└┐.┌─┘│└┘└┘││...└─┘.................. |  | ||||||
| ..........................└┘.└┘││└┐└─┐....└┘││└┘┌────┘│└─┘└┐┌─┐┌┐└┘└─┐└┐┌┘.┌┘││││└┘┌─┘│└┐││││││└┐└┐└┐│└┐│.└┐┌┘....│└┐....................... |  | ||||||
| ..............................┌┘│┌┘┌┐└┐...┌─┘└┐┌┘┌┐┌─┐└─┐┌─┘└┐│││┌──┐└┐└┘┌─┘┌┘└┘│┌─┘..└┐│└┘││└┘┌┘┌┘.└┘.└┘..││.....│┌┘....................... |  | ||||||
| ..............................└┐│└┐││┌┘...└─┐┌┘└┐││└┐└┐┌┘│┌┐┌┘│││└─┐└─┘..└──┘...│└┐....││.┌┘│..└─┘.........└┘.....└┘........................ |  | ||||||
| ..............................┌┘│.││└┘......││..└┘└─┘.││┌┘│││┌┘│└─┐└─┐..........└─┘....└┘.└┐│............................................... |  | ||||||
| ..............................└─┘.└┘........└┘....┌───┘│└─┘││└┐└┐┌┘┌─┘.....................└┘............................................... |  | ||||||
| ..................................................└───┐└┐┌─┘│.│┌┘└┐└─┐...................................................................... |  | ||||||
| ......................................................│┌┘└─┐│┌┘└─┐│┌┐│...................................................................... |  | ||||||
| .....................................................┌┘└┐┌┐││└┐┌─┘└┘└┘...................................................................... |  | ||||||
| .....................................................└┐┌┘│└┘└┐││.┌┐......................................................................... |  | ||||||
| ......................................................└┘┌┘┌┐┌┘│└─┘│......................................................................... |  | ||||||
| ........................................................└─┘└┘.└───┘......................................................................... |  | ||||||
							
								
								
									
										80
									
								
								10/part1.bak
									
									
									
									
									
								
							
							
						
						
									
										80
									
								
								10/part1.bak
									
									
									
									
									
								
							| @@ -1,80 +0,0 @@ | |||||||
| % distance_from_ess(X-Y, 0) :- nth0_2(X-Y, ess). |  | ||||||
| distance_from_ess(X-Y, 1) :- ess(X-Y). |  | ||||||
|  |  | ||||||
| path(From, [Via], To, 1) :- |  | ||||||
|     nth0_2(Via, Pipe), |  | ||||||
|     G =.. [Pipe, Via, From, To], G. |  | ||||||
| path(From, [Via1, Via2 | Vias], To, Dist) :- |  | ||||||
|     Dist1 is Dist - 1, |  | ||||||
|     path(From, [Via1], Via2, 1),  |  | ||||||
|     path(Via1, [Via2 | Vias], To, Dist1). |  | ||||||
|  |  | ||||||
| vert(X-Y, X1-Y, X2-Y) :- |  | ||||||
|     (   X1 is X+1, X2 is X-1, points_up(X1-Y), points_down(X2-Y) |  | ||||||
|     ;   X1 is X-1, X2 is X+1, points_down(X1-Y), points_up(X2-Y)), |  | ||||||
|     valid(X1-Y), valid(X2-Y). |  | ||||||
|  |  | ||||||
| horz(X-Y, X-Y1, X-Y2) :- |  | ||||||
|     (   Y1 is Y+1, Y2 is Y-1, points_left(X-Y1), points_right(X-Y2) |  | ||||||
|     ;   Y1 is Y-1, Y2 is Y+1, points_right(X-Y1), points_left(X-Y2)), |  | ||||||
|     valid(X-Y1), valid(X-Y2). |  | ||||||
|  |  | ||||||
| el(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     (   Y1 = Y, X1 is X-1, Y2 is Y+1, X2 = X, points_down(X1-Y1), points_left(X2-Y2) |  | ||||||
|     ;   X1 = X, Y1 is Y+1, X2 is X-1, Y2 = Y, points_left(X1-Y1), points_down(X2-Y2)), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| jay(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     (   Y1 = Y, X1 is X-1, Y2 is Y-1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y-1, X2 is X-1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| seven(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     (   Y1 = Y, X1 is X+1, Y2 is Y-1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y-1, X2 is X+1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| eff(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     (   Y1 = Y, X1 is X+1, Y2 is Y+1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y+1, X2 is X+1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| dot(_, _, _) :- fail. |  | ||||||
|  |  | ||||||
| ess(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     nth0_2(X-Y, ess), |  | ||||||
|     findall(Coord, ess_adjacent(Coord), [X1-Y1, X2-Y2]). |  | ||||||
|  |  | ||||||
| ess_adjacent(X1-Y1) :- |  | ||||||
|     nth0_2(X-Y, ess), |  | ||||||
|     (   X1 is X-1, Y1 = Y, nth0_2(X1-Y1, El), points_down(El) |  | ||||||
|     ;   X1 = X, Y1 is Y+1, nth0_2(X1-Y1, El), points_left(El) |  | ||||||
|     ;   X1 is X+1, Y1 = Y, nth0_2(X1-Y1, El), points_up(El) |  | ||||||
|     ;   X1 = X, Y1 is Y-1, nth0_2(X1-Y1, El), points_right(El)). |  | ||||||
|  |  | ||||||
| points_down(El) :- (El=ess; El=vert; El=seven; El=eff). |  | ||||||
| points_left(El) :- (El=ess; El=horz; El=jay; El=seven). |  | ||||||
| points_up(El) :- (El=ess; El=vert; El=el; El=jay). |  | ||||||
| points_right(El) :- (El=ess; El=horz; El=el; El=eff). |  | ||||||
|  |  | ||||||
| valid(X-Y) :- |  | ||||||
|     input(Map), length(Map, NRows), |  | ||||||
|     Map = [Row0 | _], length(Row0, NCols), |  | ||||||
|     X >= 0, Y >= 0, |  | ||||||
|     X < NRows, Y < NCols. |  | ||||||
|  |  | ||||||
| % Element is at (Row, Column) in the map. |  | ||||||
| nth0_2(Row-Column, Element) :- |  | ||||||
|     input(Map), |  | ||||||
|     nth0(Row, Map, SubList), |  | ||||||
|     nth0(Column, SubList, Symbol), |  | ||||||
|     symbol_predicate(Symbol, Element). |  | ||||||
|  |  | ||||||
| symbol_predicate("|", vert). |  | ||||||
| symbol_predicate("-", horz). |  | ||||||
| symbol_predicate("L", el). |  | ||||||
| symbol_predicate("J", jay). |  | ||||||
| symbol_predicate("7", seven). |  | ||||||
| symbol_predicate("F", eff). |  | ||||||
| symbol_predicate(".", dot). |  | ||||||
| symbol_predicate("S", ess). |  | ||||||
| @@ -1,98 +0,0 @@ | |||||||
| % :- table valid/1. |  | ||||||
| :- table path/3. |  | ||||||
|  |  | ||||||
| answer(Answer) :- |  | ||||||
|     pipe_at(From, ess), |  | ||||||
|     once(path(From, Via, From)), |  | ||||||
|     length(Via, ViaLen), |  | ||||||
|     writef('%t -> %t\n', [From, Via]), |  | ||||||
|     Answer is (ViaLen + 1) div 2 . |  | ||||||
|  |  | ||||||
| % path(From, Next, To, Dist) :- |  | ||||||
| %     pipe_at(From, FromPipe), |  | ||||||
| %     FromG =.. [FromPipe, From, Next |  | ||||||
|  |  | ||||||
| path(From, [Via], To) :- |  | ||||||
|     pipe_at(Via, ViaPipe), |  | ||||||
|     ViaG =.. [ViaPipe, Via, From, To], ViaG. |  | ||||||
|  |  | ||||||
| path(From, [Via1, Via2 | Vias], To) :- |  | ||||||
|     path(From, [Via1], Via2),  |  | ||||||
|     path(Via1, [Via2 | Vias], To). |  | ||||||
|  |  | ||||||
| dot(_, _, _) :- fail. |  | ||||||
|      |  | ||||||
| vert(X-Y, X1-Y, X2-Y) :- |  | ||||||
|     pipe_at(X-Y, vert), |  | ||||||
|     (   X1 is X+1, X2 is X-1 |  | ||||||
|     ;   X1 is X-1, X2 is X+1), |  | ||||||
|     valid(X1-Y), valid(X2-Y). |  | ||||||
|  |  | ||||||
| horz(X-Y, X-Y1, X-Y2) :- |  | ||||||
|     pipe_at(X-Y, horz), |  | ||||||
|     (   Y1 is Y+1, Y2 is Y-1 |  | ||||||
|     ;   Y1 is Y-1, Y2 is Y+1), |  | ||||||
|     valid(X-Y1), valid(X-Y2). |  | ||||||
|  |  | ||||||
| el(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, el), |  | ||||||
|     (   Y1 = Y, X1 is X-1, Y2 is Y+1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y+1, X2 is X-1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| jay(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, jay), |  | ||||||
|     (   Y1 = Y, X1 is X-1, Y2 is Y-1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y-1, X2 is X-1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| seven(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, seven), |  | ||||||
|     (   Y1 = Y, X1 is X+1, Y2 is Y-1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y-1, X2 is X+1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| eff(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, eff), |  | ||||||
|     (   Y1 = Y, X1 is X+1, Y2 is Y+1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y+1, X2 is X+1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| ess(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, ess), |  | ||||||
|     findall(Coord, ess_adjacent(Coord), [X1-Y1, X2-Y2]). |  | ||||||
|  |  | ||||||
| ess_adjacent(X1-Y1) :- |  | ||||||
|     pipe_at(X-Y, ess), |  | ||||||
|     (   X1 is X-1, Y1 = Y, pipe_at(X1-Y1, El), points_down(El) |  | ||||||
|     ;   X1 = X, Y1 is Y+1, pipe_at(X1-Y1, El), points_left(El) |  | ||||||
|     ;   X1 is X+1, Y1 = Y, pipe_at(X1-Y1, El), points_up(El) |  | ||||||
|     ;   X1 = X, Y1 is Y-1, pipe_at(X1-Y1, El), points_right(El)), |  | ||||||
|     valid(X1-Y1). |  | ||||||
|  |  | ||||||
| points_down(El) :- (El=ess; El=vert; El=seven; El=eff). |  | ||||||
| points_left(El) :- (El=ess; El=horz; El=jay; El=seven). |  | ||||||
| points_up(El) :- (El=ess; El=vert; El=el; El=jay). |  | ||||||
| points_right(El) :- (El=ess; El=horz; El=el; El=eff). |  | ||||||
|  |  | ||||||
| valid(X-Y) :- |  | ||||||
|     input(Map), length(Map, NRows), |  | ||||||
|     Map = [Row0 | _], length(Row0, NCols), |  | ||||||
|     X >= 0, Y >= 0, |  | ||||||
|     X < NRows, Y < NCols. |  | ||||||
|  |  | ||||||
| % Element is at (Row, Column) in the map. |  | ||||||
| pipe_at(Row-Column, Element) :- |  | ||||||
|     input(Map), |  | ||||||
|     nth0(Row, Map, SubList), |  | ||||||
|     nth0(Column, SubList, Symbol), |  | ||||||
|     symbol_predicate(Symbol, Element). |  | ||||||
|  |  | ||||||
| symbol_predicate("|", vert). |  | ||||||
| symbol_predicate("-", horz). |  | ||||||
| symbol_predicate("L", el). |  | ||||||
| symbol_predicate("J", jay). |  | ||||||
| symbol_predicate("7", seven). |  | ||||||
| symbol_predicate("F", eff). |  | ||||||
| symbol_predicate(".", dot). |  | ||||||
| symbol_predicate("S", ess). |  | ||||||
							
								
								
									
										109
									
								
								10/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										109
									
								
								10/part1.pl
									
									
									
									
									
								
							| @@ -1,109 +0,0 @@ | |||||||
| :- table valid/1. |  | ||||||
| :- table pipe_at/2. |  | ||||||
| % :- table path/3. |  | ||||||
| % :- table path/5. |  | ||||||
| :- table vert/3. :- table horz/3. :- table el/3. :- table jay/3. |  | ||||||
| :- table seven/3. :- table eff/3. :- table ess/3. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| answer(Answer) :- |  | ||||||
|     pipe_at(From, ess), |  | ||||||
|     once(path(From, Via, From)), length(Via, ViaLen), |  | ||||||
|     % once((ess_adjacent(Curr), path(From, Curr, From, 1, ViaLen))), |  | ||||||
|     % writef('%t -> %t\n', [From, Via]), |  | ||||||
|     Answer is (ViaLen + 1) div 2 . |  | ||||||
|  |  | ||||||
| % path(From, Curr, To, Dist, Final) :- |  | ||||||
| %     pipe_at(Curr, CurrPipe), |  | ||||||
| %     writef('%t -> %t (%t)\n', [From, Curr, CurrPipe]), |  | ||||||
| %     CurrG =.. [CurrPipe, Curr, From, Next], CurrG, |  | ||||||
| %     (   Next = To |  | ||||||
| %     ->  Final = Dist |  | ||||||
| %     ;   NewDist is Dist + 1, |  | ||||||
| %         path(Curr, Next, To, NewDist, Final) |  | ||||||
| %     ). |  | ||||||
|  |  | ||||||
| path(From, [Via], To) :- |  | ||||||
|     pipe_at(Via, ViaPipe), |  | ||||||
|     ViaG =.. [ViaPipe, Via, From, To], ViaG. |  | ||||||
| path(From, [Via1, Via2 | Vias], To) :- |  | ||||||
|     % writef('%t -> %t\n', [From, To]), |  | ||||||
|     path(From, [Via1], Via2),  |  | ||||||
|     path(Via1, [Via2 | Vias], To). |  | ||||||
|  |  | ||||||
| dot(_, _, _) :- fail. |  | ||||||
|      |  | ||||||
| vert(X-Y, X1-Y, X2-Y) :- |  | ||||||
|     pipe_at(X-Y, vert), |  | ||||||
|     (   X1 is X+1, X2 is X-1 |  | ||||||
|     ;   X1 is X-1, X2 is X+1), |  | ||||||
|     valid(X1-Y), valid(X2-Y). |  | ||||||
|  |  | ||||||
| horz(X-Y, X-Y1, X-Y2) :- |  | ||||||
|     pipe_at(X-Y, horz), |  | ||||||
|     (   Y1 is Y+1, Y2 is Y-1 |  | ||||||
|     ;   Y1 is Y-1, Y2 is Y+1), |  | ||||||
|     valid(X-Y1), valid(X-Y2). |  | ||||||
|  |  | ||||||
| el(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, el), |  | ||||||
|     (   Y1 = Y, X1 is X-1, Y2 is Y+1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y+1, X2 is X-1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| jay(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, jay), |  | ||||||
|     (   Y1 = Y, X1 is X-1, Y2 is Y-1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y-1, X2 is X-1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| seven(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, seven), |  | ||||||
|     (   Y1 = Y, X1 is X+1, Y2 is Y-1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y-1, X2 is X+1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| eff(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, eff), |  | ||||||
|     (   Y1 = Y, X1 is X+1, Y2 is Y+1, X2 = X |  | ||||||
|     ;   X1 = X, Y1 is Y+1, X2 is X+1, Y2 = Y), |  | ||||||
|     valid(X1-Y1), valid(X2-Y2). |  | ||||||
|  |  | ||||||
| ess(X-Y, X1-Y1, X2-Y2) :- |  | ||||||
|     pipe_at(X-Y, ess), |  | ||||||
|     findall(Coord, ess_adjacent(Coord), [X1-Y1, X2-Y2]). |  | ||||||
|  |  | ||||||
| ess_adjacent(X1-Y1) :- |  | ||||||
|     pipe_at(X-Y, ess), |  | ||||||
|     (   X1 is X-1, Y1 = Y, pipe_at(X1-Y1, El), points_down(El) |  | ||||||
|     ;   X1 = X, Y1 is Y+1, pipe_at(X1-Y1, El), points_left(El) |  | ||||||
|     ;   X1 is X+1, Y1 = Y, pipe_at(X1-Y1, El), points_up(El) |  | ||||||
|     ;   X1 = X, Y1 is Y-1, pipe_at(X1-Y1, El), points_right(El)), |  | ||||||
|     valid(X1-Y1). |  | ||||||
|  |  | ||||||
| points_down(El) :- (El=ess; El=vert; El=seven; El=eff). |  | ||||||
| points_left(El) :- (El=ess; El=horz; El=jay; El=seven). |  | ||||||
| points_up(El) :- (El=ess; El=vert; El=el; El=jay). |  | ||||||
| points_right(El) :- (El=ess; El=horz; El=el; El=eff). |  | ||||||
|  |  | ||||||
| valid(X-Y) :- |  | ||||||
|     input(Map), length(Map, NRows), |  | ||||||
|     Map = [Row0 | _], length(Row0, NCols), |  | ||||||
|     X >= 0, Y >= 0, |  | ||||||
|     X < NRows, Y < NCols. |  | ||||||
|  |  | ||||||
| % Element is at (Row, Column) in the map. |  | ||||||
| pipe_at(Row-Column, Element) :- |  | ||||||
|     input(Map), |  | ||||||
|     nth0(Row, Map, SubList), |  | ||||||
|     nth0(Column, SubList, Symbol), |  | ||||||
|     symbol_predicate(Symbol, Element). |  | ||||||
|  |  | ||||||
| symbol_predicate("|", vert). |  | ||||||
| symbol_predicate("-", horz). |  | ||||||
| symbol_predicate("L", el). |  | ||||||
| symbol_predicate("J", jay). |  | ||||||
| symbol_predicate("7", seven). |  | ||||||
| symbol_predicate("F", eff). |  | ||||||
| symbol_predicate(".", dot). |  | ||||||
| symbol_predicate("S", ess). |  | ||||||
							
								
								
									
										128
									
								
								10/part2.gimp.pl
									
									
									
									
									
								
							
							
						
						
									
										128
									
								
								10/part2.gimp.pl
									
									
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										14
									
								
								10/test.pl
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								10/test.pl
									
									
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							| @@ -1,5 +0,0 @@ | |||||||
| 7-F7- |  | ||||||
| .FJ|7 |  | ||||||
| SJLL7 |  | ||||||
| |F--J |  | ||||||
| LJ.LJ |  | ||||||
							
								
								
									
										41
									
								
								11/day11.pl
									
									
									
									
									
								
							
							
						
						
									
										41
									
								
								11/day11.pl
									
									
									
									
									
								
							| @@ -1,41 +0,0 @@ | |||||||
| % usase: swipl day11.pl input.txt 1000000 |  | ||||||
| :- use_module(library(pio)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName, ExpandFactorArg | _]) :- |  | ||||||
|     input(FileName, Map), |  | ||||||
|     atom_number(ExpandFactorArg, ExpandFactor), |  | ||||||
|     findall(Dist, distance(_, Map, _, ExpandFactor, Dist), Dists), |  | ||||||
|     sum_list(Dists, Sum), |  | ||||||
|     writef('Answer=%t\n', [Sum]). |  | ||||||
|  |  | ||||||
| % Dist is distance along Axis in Map between two row/col A & B (after expansion) |  | ||||||
| distance(Axis, Map, A-B, ExpandFactor, Dist) :- |  | ||||||
|     true_coords(Axis, Map, ExpandFactor, TrueNs), |  | ||||||
|     member(A-ACount, TrueNs), member(B-BCount, TrueNs), A < B, |  | ||||||
|     Dist is (B - A) * ACount * BCount. |  | ||||||
|  |  | ||||||
| % TrueXs is the list of all coordinates after expanion along Axis in Map |  | ||||||
| true_coords(x, Map, ExpandFactor, TrueXs) :- |  | ||||||
|     NextX = {ExpandFactor}/[Row, LastX-_, X-Count]>>( |  | ||||||
|         sum_list(Row, Count), |  | ||||||
|         (Count = 0 -> X is LastX + ExpandFactor; X is LastX + 1)), |  | ||||||
|     scanl(NextX, Map, -1-0, Xs), Xs = [_ | TrueXs]. |  | ||||||
|  |  | ||||||
| true_coords(y, [FirstRow | Map], ExpandFactor, TrueYs) :- |  | ||||||
|     foldl(add_vectors, Map, FirstRow, CountY), |  | ||||||
|     NextY = {ExpandFactor}/[Count, LastY-_, Y-Count]>>( |  | ||||||
|         Count = 0 -> Y is LastY + ExpandFactor; Y is LastY + 1), |  | ||||||
|     scanl(NextY, CountY, -1-0, Ys), Ys = [_ | TrueYs]. |  | ||||||
|  |  | ||||||
| add_vectors([], [], []). |  | ||||||
| add_vectors([A | V1], [B | V2], [C | V]) :- C is A + B, add_vectors(V1, V2, V). |  | ||||||
|  |  | ||||||
| % Read file into 2D array Map. 1 corresponding to a galaxy and 0 otherwise. |  | ||||||
| input(FileName, Map) :- phrase_from_file(lines(Map), FileName). |  | ||||||
| lines([]) --> eos. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
| line([]) --> "\n" ; eos. |  | ||||||
| line([1|Ls]) --> "#", line(Ls). |  | ||||||
| line([0|Ls]) --> ".", line(Ls). |  | ||||||
| eos([], []). |  | ||||||
							
								
								
									
										140
									
								
								11/input.txt
									
									
									
									
									
								
							
							
						
						
									
										140
									
								
								11/input.txt
									
									
									
									
									
								
							| @@ -1,140 +0,0 @@ | |||||||
| ..........................#.........................#........................................................#.............................. |  | ||||||
| .............#.....................................................#.........#......................#....................................... |  | ||||||
| ..................................#....................................................................................#...........#........ |  | ||||||
| ....................#..........................#..................................................................#......................... |  | ||||||
| .......................................................#...............................................................................#.... |  | ||||||
| .....................................#.........................#......#..............#...................................................... |  | ||||||
| ........#...............#......................................................#..........#................................#...............# |  | ||||||
| .........................................#................#..............................................#............#..................... |  | ||||||
| ....#............................#.......................................................................................................... |  | ||||||
| ............#......................................#..............................................#............#............................ |  | ||||||
| ......................#.....................................................................#............................................... |  | ||||||
| .............................................................................#........#.........................................#........... |  | ||||||
| .................#.....................................................#.................................................#..............#... |  | ||||||
| ................................#....................#.................................................#.................................... |  | ||||||
| .......................................#.............................................................................#...................... |  | ||||||
| ..#.....................#................................................................................................................... |  | ||||||
| ............................................#.....................#...........#.....................#....................................... |  | ||||||
| ..................................................................................................................#..................#...... |  | ||||||
| ....................................#....................#................................................................................#. |  | ||||||
| .........#.....................................#..............#......................#......................................#............... |  | ||||||
| ..............#..........................................................#......................#.....#..................................... |  | ||||||
| .......................................................................................................................................#.... |  | ||||||
| ..................................................................#.........................#...................#........................... |  | ||||||
| ....#............................#.....#.....................................#................................................#............. |  | ||||||
| .......................#..........................#......................................................................................... |  | ||||||
| ..................................................................................#.....#...................#.............#................. |  | ||||||
| ................#.............................................#.................................#........................................... |  | ||||||
| #.....................................................................................................#...................................#. |  | ||||||
| ...........#..............#.....#.............#.....................................................................#....................... |  | ||||||
| ...........................................................................#................#.....................................#......... |  | ||||||
| ...................................................#........................................................................................ |  | ||||||
| ..............#....................................................................................#........................................ |  | ||||||
| .....................................#................................................#.......................#............................. |  | ||||||
| .....................................................................................................................................#.....# |  | ||||||
| ........#................#....................................#.................................#.........#................................. |  | ||||||
| ....................................................#..............#............#....................................#...................... |  | ||||||
| ....#...............#........#..........................................................#.......................................#........... |  | ||||||
| ..........................................#.....#.......................#..........................#.....................................#.. |  | ||||||
| .......................................................#.................................................................................... |  | ||||||
| #......#...................................................................................................................#................ |  | ||||||
| ............#...............................................................................#..........#..........................#......... |  | ||||||
| ............................................................................................................#............................... |  | ||||||
| .....................................#....................#........#............................#........................................... |  | ||||||
| ........................#...........................................................#................................#....................#. |  | ||||||
| ......#...............................................#.....................#........................#...................................... |  | ||||||
| .................................#.....................................#..................................................#................. |  | ||||||
| ...................#......................#..................#..........................#.............................................#..... |  | ||||||
| .............................#.....................#..............#...........................................#............................. |  | ||||||
| .........................................................#.......................................................................#.......... |  | ||||||
| ...............................................................................#.......................#.................................#.. |  | ||||||
| ............................................................................................................................................ |  | ||||||
| ............................................................................................................................................ |  | ||||||
| .................#.............................................................................................#.......#.............#...... |  | ||||||
| ....#.....#....................................................#........#...............#....................................#.............. |  | ||||||
| ..................................#..........#........................................................#..................................... |  | ||||||
| ............................................................................................................................................ |  | ||||||
| ...................#..............................................................................#......................#.................. |  | ||||||
| ............................................................................................................................................ |  | ||||||
| ..#..............................................#......#.....#...........................#..............#....................#............. |  | ||||||
| ................#......#.........#.......................................................................................................... |  | ||||||
| .........................................................................#......................................#.........................#. |  | ||||||
| ....................................................#..............#............................#........................................... |  | ||||||
| .....#....................#..........................................................................#...................................... |  | ||||||
| ............#...........................#......#............................................................................................ |  | ||||||
| ............................................................................................................................................ |  | ||||||
| .....................#.........................................................#.........................#........#.............#........... |  | ||||||
| .........#..............................................................#.....................#..........................................#.. |  | ||||||
| ......................................#...........#.....................................#................................................... |  | ||||||
| .#...............................#.......................................................................................................... |  | ||||||
| ..............#............#....................................#..................................#........................#............... |  | ||||||
| .....................................................................#...........................................#.......................... |  | ||||||
| ............................................................................................................................................ |  | ||||||
| .........#........#........................#.....#........................#.......................................................#.....#... |  | ||||||
| ............................................................................................................................................ |  | ||||||
| ...................................#........................................................................................................ |  | ||||||
| ..............#..........#..............#....................................#..........#.....#............................................. |  | ||||||
| ....#........................................#............#...................................................................#............. |  | ||||||
| ............................................................................................................................................ |  | ||||||
| #........#......................................................#........#.................................................................# |  | ||||||
| ....................#.........#..........................................................................#.......#......#................... |  | ||||||
| ............................................................................................................................................ |  | ||||||
| .......................................#..............#...........................................#......................................... |  | ||||||
| ................................................#.............................................................#.......................#..... |  | ||||||
| .......................#...................#..............................#................................................................. |  | ||||||
| ...............#...................#....................................................#.............................#..................... |  | ||||||
| ....#......................................................................................................#................................ |  | ||||||
| .............................#.........................................#....................#.............................#.....#........... |  | ||||||
| ..............................................#..................................................#...................................#...... |  | ||||||
| ...................#...................#..........................................#.................................#....................... |  | ||||||
| ............#.....................#....................#..................#................................................................. |  | ||||||
| ...........................................#........................................................#....................................... |  | ||||||
| ...........................................................................................................#................................ |  | ||||||
| ...#............................................................#.............................................................#............. |  | ||||||
| .........................#..............................................................#................................................#.. |  | ||||||
| ...............#............................................................................................................................ |  | ||||||
| .......................................#.......#.............#.............................................................................. |  | ||||||
| .....................#...........#.............................................#............#.................#.........#...........#....... |  | ||||||
| ..........................................................................#.......................#......................................... |  | ||||||
| .......#............................................................................#....................................................... |  | ||||||
| ....................................................#....................................................................................#.. |  | ||||||
| .................#........................................#.....#...........................................................#............... |  | ||||||
| .#.........#..................................#.................................#..............#.........#.....#......#..................... |  | ||||||
| .....................#............#.......................................................#.........#....................................... |  | ||||||
| ............................................................................#.......................................................#....... |  | ||||||
| .....................................................................................#....................................#................. |  | ||||||
| ............................#................................................................#..................................#........... |  | ||||||
| .....#.........................................................#............................................................................ |  | ||||||
| ......................#..................#............................................................................#..................... |  | ||||||
| ................................................................................#.....................................................#..... |  | ||||||
| #.................................#.......................................#................................................................. |  | ||||||
| ...................#......#.......................#...............#...........................................#............................. |  | ||||||
| .............................................................#........................................#......................#.............. |  | ||||||
| .................................................................................................#.......................................... |  | ||||||
| ..#..................................#....................................................................#......#..................#....... |  | ||||||
| ..........................................................#..................#........................................#..................... |  | ||||||
| ..................#........#........................................................#..........................................#............ |  | ||||||
| .................................#.............#.......................#...................................................................# |  | ||||||
| ................................................................................................#.........................#................. |  | ||||||
| ....#.....#................................................................................................................................. |  | ||||||
| .......................#....................................................#............................................................... |  | ||||||
| ....................................................#....................................................................................... |  | ||||||
| .............#..............................#..........................................#.................................................... |  | ||||||
| ...............................#............................................................................................#........#...... |  | ||||||
| .#.......................................................#.........#...........#.................................#.......................... |  | ||||||
| ....................................#.............#..............................................................................#.......... |  | ||||||
| .....................#.........................................................................#......#..................................... |  | ||||||
| ..........................#...........................#.........#.................#......................................................... |  | ||||||
| ..........#.................................#................................#.............................................................. |  | ||||||
| ....#...........................................................................................................#..................#........ |  | ||||||
| ........................................................................#..............#.....................................#.............. |  | ||||||
| ..................#.......................................#................................................................................. |  | ||||||
| ........................................................................................................................................#... |  | ||||||
| ....................................................#.......................#..........................#.................................... |  | ||||||
| .....#..............................#.........................#..................................#.......................................... |  | ||||||
| ..........................#............................................#........................................#.......#................... |  | ||||||
| ..........................................#................................................................................................. |  | ||||||
| ......................................................................................................................................#..... |  | ||||||
| .......#...........................................#................................#........................................#.............. |  | ||||||
| #..................#..........................#..........................#.....#............................#............................... |  | ||||||
| ...................................#.....................................................................................#.................. |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| :- op(700, xfx, before). |  | ||||||
| :- table galaxy/2. |  | ||||||
| :- table no_galaxy_row/2. |  | ||||||
| :- table no_galaxy_col/2. |  | ||||||
| :- use_module(library(pio)). |  | ||||||
| :- initialization(start, main). |  | ||||||
|  |  | ||||||
| start :- |  | ||||||
|     input('input.txt', Map), |  | ||||||
|     findall(Dist, (galaxy(Map, A), galaxy(Map, B), A before B, |  | ||||||
|                    distance(Map, A, B, Dist)), |  | ||||||
|             Dists), |  | ||||||
|     sum_list(Dists, Answer), |  | ||||||
|     writef('Answer=%w\n', [Answer]). |  | ||||||
|  |  | ||||||
| distance(Map, X1-Y1, X2-Y2, Dist) :- |  | ||||||
|     findall(X, no_galaxy_row(Map, X), EmptyXs), |  | ||||||
|     findall(Y, no_galaxy_col(Map, Y), EmptyYs), |  | ||||||
|     include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd), |  | ||||||
|     include(between(Y1, Y2), EmptyYs, ExpandedY), length(ExpandedY, ColsToAdd), |  | ||||||
|     Dist is abs(X1 - X2) + abs(Y1 - Y2) + RowsToAdd + ColsToAdd. |  | ||||||
|  |  | ||||||
| between(End1, End2, N) :- End1 < N, N < End2; End1 > N, N > End2. |  | ||||||
| no_galaxy_row(Map, X) :- nth0(X, Map, Row), maplist([46]>>(true), Row). |  | ||||||
| no_galaxy_col(Map, Y) :- maplist({Y}/[Row]>>(nth0(Y, Row, 46)), Map). |  | ||||||
|  |  | ||||||
| galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35). |  | ||||||
| before(X1-Y1, X2-Y2) :- X1 < X2; X1 =:= X2, Y1 < Y2. |  | ||||||
|  |  | ||||||
| input(FileName, Map) :- phrase_from_file(lines(Map), FileName). |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
| eos([], []). |  | ||||||
| line([]) --> ( "\n" ; eos ), !. |  | ||||||
| line([L|Ls]) --> [L], line(Ls). |  | ||||||
| @@ -1,35 +0,0 @@ | |||||||
| :- op(700, xfx, before). |  | ||||||
| :- table galaxy/2. |  | ||||||
| :- table no_galaxy_row/2. |  | ||||||
| :- table no_galaxy_col/2. |  | ||||||
| :- use_module(library(pio)). |  | ||||||
| :- initialization(start, main). |  | ||||||
|  |  | ||||||
| start :- |  | ||||||
|     input('input.txt', Map), |  | ||||||
|     findall(Dist, (galaxy(Map, A), galaxy(Map, B), A before B, |  | ||||||
|                    distance(Map, A, B, Dist)), |  | ||||||
|             Dists), |  | ||||||
|     sum_list(Dists, Answer), |  | ||||||
|     writef('Answer=%w\n', [Answer]). |  | ||||||
|  |  | ||||||
| distance(Map, X1-Y1, X2-Y2, Dist) :- |  | ||||||
|     findall(X, no_galaxy_row(Map, X), EmptyXs), |  | ||||||
|     findall(Y, no_galaxy_col(Map, Y), EmptyYs), |  | ||||||
|     include(between(X1, X2), EmptyXs, ExpandedX), length(ExpandedX, RowsToAdd), |  | ||||||
|     include(between(Y1, Y2), EmptyYs, ExpandedY), length(ExpandedY, ColsToAdd), |  | ||||||
|     Dist is abs(X1 - X2) + abs(Y1 - Y2) + RowsToAdd*999999 + ColsToAdd*999999. |  | ||||||
|  |  | ||||||
| between(End1, End2, N) :- End1 < N, N < End2; End1 > N, N > End2. |  | ||||||
| no_galaxy_row(Map, X) :- nth0(X, Map, Row), maplist([46]>>(true), Row). |  | ||||||
| no_galaxy_col(Map, Y) :- maplist({Y}/[Row]>>(nth0(Y, Row, 46)), Map). |  | ||||||
|  |  | ||||||
| galaxy(Map, X-Y) :- nth0(X, Map, Row), nth0(Y, Row, 35). |  | ||||||
| before(X1-Y1, X2-Y2) :- X1 < X2; X1 =:= X2, Y1 < Y2. |  | ||||||
|  |  | ||||||
| input(FileName, Map) :- phrase_from_file(lines(Map), FileName). |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
| eos([], []). |  | ||||||
| line([]) --> ( "\n" ; eos ), !. |  | ||||||
| line([L|Ls]) --> [L], line(Ls). |  | ||||||
							
								
								
									
										10
									
								
								11/test.txt
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								11/test.txt
									
									
									
									
									
								
							| @@ -1,10 +0,0 @@ | |||||||
| ...#...... |  | ||||||
| .......#.. |  | ||||||
| #......... |  | ||||||
| .......... |  | ||||||
| ......#... |  | ||||||
| .#........ |  | ||||||
| .........# |  | ||||||
| .......... |  | ||||||
| .......#.. |  | ||||||
| #...#..... |  | ||||||
							
								
								
									
										1000
									
								
								12/input.txt
									
									
									
									
									
								
							
							
						
						
									
										1000
									
								
								12/input.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										51
									
								
								12/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								12/part1.pl
									
									
									
									
									
								
							| @@ -1,51 +0,0 @@ | |||||||
| % Usage: swipl part1.pl input.txt |  | ||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName | _]) :- |  | ||||||
|     input(FileName, Lines), |  | ||||||
|     foldl([Line, Prev, Curr]>>(count_resolutions(Line, N), Curr is Prev + N), Lines, 0, Ns), |  | ||||||
|     writef('Res=%w\n', [Ns]). |  | ||||||
|  |  | ||||||
| count_resolutions(Line-Bads, N) :- |  | ||||||
|     writef('Resolving %w\n', [Line-Bads]), |  | ||||||
|     findall(Res, resolve(Line, Bads, Res), Resolutions), |  | ||||||
|     length(Resolutions, N). |  | ||||||
|      |  | ||||||
| % Bads is list of contiguous blocks of bad items in Xs; w/unks resolved in Ys. |  | ||||||
| resolve([], [], []). |  | ||||||
| resolve([good|Xs], Bads, [good|Ys]) :- resolve(Xs, Bads, Ys). |  | ||||||
| resolve([unk|Xs], Bads, Ys) :- |  | ||||||
|     resolve([good|Xs], Bads, Ys); |  | ||||||
|     resolve([bad|Xs], Bads, Ys). |  | ||||||
| resolve([bad|Xs], [N|Bads], Ys) :- |  | ||||||
|     length(BadsUnks, N), |  | ||||||
|     (Next = good; Next = unk), |  | ||||||
|     append(BadsUnks, [Next|RemainingXs], [bad|Xs]), |  | ||||||
|     bads_or_unks(BadsUnks), |  | ||||||
|     resolve([good|RemainingXs], Bads, RemainingYs), |  | ||||||
|     nbads(BadRun, N), append(BadRun, RemainingYs, Ys). |  | ||||||
|  |  | ||||||
| % List contains all bads or unks |  | ||||||
| bads_or_unks([]). |  | ||||||
| bads_or_unks([bad|List]) :- bads_or_unks(List). |  | ||||||
| bads_or_unks([unk|List]) :- bads_or_unks(List). |  | ||||||
|      |  | ||||||
| % List contains exactly N bad items. |  | ||||||
| nbads([], 0). |  | ||||||
| nbads([bad|List], N) :- N > 0, Remain is N - 1, nbads(List, Remain). |  | ||||||
|  |  | ||||||
| % read input file into [(good;bad;unk)]-[list of bad runs] |  | ||||||
| input(FileName, Lines) :- phrase_from_file(lines(Lines), FileName). |  | ||||||
|  |  | ||||||
| lines([]) --> eos. |  | ||||||
| lines([Status-Parity|Lines]) --> status(Status), parity(Parity), lines(Lines). |  | ||||||
|  |  | ||||||
| status([good]) --> " ". |  | ||||||
| status([good|Cdr]) --> ".", status(Cdr). |  | ||||||
| status([bad|Cdr]) --> "#", status(Cdr). |  | ||||||
| status([unk|Cdr]) --> "?", status(Cdr). |  | ||||||
|  |  | ||||||
| parity([N]) --> number(N), ("\n"; eos). |  | ||||||
| parity([N|Cdr]) --> number(N), ",", parity(Cdr). |  | ||||||
							
								
								
									
										65
									
								
								12/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										65
									
								
								12/part2.pl
									
									
									
									
									
								
							| @@ -1,65 +0,0 @@ | |||||||
| % Usage: swipl part2.pl input.txt |  | ||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| test :- main(['test.txt']). |  | ||||||
|  |  | ||||||
| main([FileName | _]) :- |  | ||||||
|     input(FileName, Lines), |  | ||||||
|     concurrent_maplist(resolve_repeated, Lines, Ns), |  | ||||||
|     sum_list(Ns, Count), |  | ||||||
|     writef('Res=%w\n', [Count]). |  | ||||||
|      |  | ||||||
| resolve_repeated(Line-Bads, N) :- |  | ||||||
|     append([Line, [?], Line, [?], Line, [?], Line, [?], Line], L5), |  | ||||||
|     append([Bads, Bads, Bads, Bads, Bads], B5), |  | ||||||
|     abolish_private_tables, table(resolve/2), |  | ||||||
|     resolve(L5-B5, N). |  | ||||||
|  |  | ||||||
| % Bads is list of contiguous blocks of bad items in Xs; w/unks resolved in Y. |  | ||||||
| resolve([]-[], 1). |  | ||||||
| resolve([o|Xs]-Bads, Y) :- resolve(Xs-Bads, Y). |  | ||||||
| resolve([?|Xs]-Bads, Y) :- |  | ||||||
|     findall(N, (resolve([o|Xs]-Bads, N); resolve([#|Xs]-Bads, N)), Ys), |  | ||||||
|     sum_list(Ys, Y). |  | ||||||
| resolve([#|Xs]-[N|Bads], Y) :- |  | ||||||
|     length(BadsUnks, N), |  | ||||||
|     (   append(BadsUnks, [], [#|Xs]), |  | ||||||
|         RemainingXs = [] |  | ||||||
|     ;   append(BadsUnks, [Next|RemainingXs], [#|Xs]), (Next = o; Next = ?) |  | ||||||
|     ), |  | ||||||
|     bads_or_unks(BadsUnks), |  | ||||||
|     resolve(RemainingXs-Bads, Y). |  | ||||||
|  |  | ||||||
| % List contains all bads or unks |  | ||||||
| bads_or_unks([]). |  | ||||||
| bads_or_unks([#|List]) :- bads_or_unks(List). |  | ||||||
| bads_or_unks([?|List]) :- bads_or_unks(List). |  | ||||||
|      |  | ||||||
| % List contains exactly N bad items. |  | ||||||
| nbads([], 0). |  | ||||||
| nbads([#|List], N) :- N > 0, Remain is N - 1, nbads(List, Remain). |  | ||||||
|  |  | ||||||
| processed_line(1, Line-Bads, NewLine-NewBads) :- |  | ||||||
|     append(Line, [o], NewLine), |  | ||||||
|     NewBads = Bads. |  | ||||||
|  |  | ||||||
| % read input file into [(o;#;?)]-[list of bad runs] |  | ||||||
| input(FileName, Lines) :- phrase_from_file(lines(Lines), FileName). |  | ||||||
|  |  | ||||||
| lines([]) --> eos. |  | ||||||
| lines([Status-Parity|Lines]) --> status(Status), parity(Parity), lines(Lines). |  | ||||||
|  |  | ||||||
| status([]) --> " ". |  | ||||||
| status([o]) --> all_dots, " ". |  | ||||||
| status([o, #|Cdr]) --> all_dots, "#", status(Cdr). |  | ||||||
| status([o, ?|Cdr]) --> all_dots, "?", status(Cdr). |  | ||||||
| status([#|Cdr]) --> "#", status(Cdr). |  | ||||||
| status([?|Cdr]) --> "?", status(Cdr). |  | ||||||
|  |  | ||||||
| all_dots --> ".". |  | ||||||
| all_dots --> ".", all_dots. |  | ||||||
|  |  | ||||||
| parity([N]) --> number(N), ("\n"; eos). |  | ||||||
| parity([N|Cdr]) --> number(N), ",", parity(Cdr). |  | ||||||
							
								
								
									
										86
									
								
								12/part2.py
									
									
									
									
									
								
							
							
						
						
									
										86
									
								
								12/part2.py
									
									
									
									
									
								
							| @@ -1,86 +0,0 @@ | |||||||
| # This demonstrates classic dynamic programming and prioritizes explainability. |  | ||||||
| # Of course all of this would have been cleaner and would perform the same if |  | ||||||
| # we were to use recursion with memoization (e.g. @memoize.cache) |  | ||||||
| import sys |  | ||||||
| import dataclasses |  | ||||||
|  |  | ||||||
| @dataclasses.dataclass(frozen=True) |  | ||||||
| class Entry: |  | ||||||
|     working: int |  | ||||||
|     broken: int |  | ||||||
|     def total(self): |  | ||||||
|         return self.working + self.broken |  | ||||||
|  |  | ||||||
| def no_dot_between(l, start, end): |  | ||||||
|     return not any(c for c in l[start+1 : end] if c == ".") |  | ||||||
|  |  | ||||||
| def process(springs, counts): |  | ||||||
|     # entries[(i,j)] = how many ways if we have only first i springs and j nums, |  | ||||||
|     # given if that one was chosen to be working or no. |  | ||||||
|     entries = {} |  | ||||||
|      |  | ||||||
|     # boundary conditions: when there's no spring and no count left, 1 choice |  | ||||||
|     entries[(-1, -1)] = Entry(working=1, broken=0) |  | ||||||
|     # boundary conditions: when there's no count left but still springs left |  | ||||||
|     for i in range(len(springs)): |  | ||||||
|         entries[(i, -1)] = Entry( |  | ||||||
|             working=(entries[(i - 1, -1)].working |  | ||||||
|                      if springs[i] in (".", "?") |  | ||||||
|                      else 0), |  | ||||||
|             broken=0) |  | ||||||
|     # boundary conditions: when there's no springs left but there's still count |  | ||||||
|     for j in range(len(counts)): |  | ||||||
|         entries[(-1, j)] = Entry(working=0, broken=0) |  | ||||||
|      |  | ||||||
|     # building the rest of the table |  | ||||||
|     for i in range(len(springs)): |  | ||||||
|         for j in range(len(counts)): |  | ||||||
|             prev_entry_if_working = entries[(i - 1, j)] |  | ||||||
|             prev_working_entry_if_broken = ( |  | ||||||
|                 entries[(i-counts[j], j-1)].working |  | ||||||
|                 if i-counts[j] >= -1 and no_dot_between(springs, i-counts[j], i) |  | ||||||
|                 else 0) |  | ||||||
|  |  | ||||||
|             if springs[i] == ".":                 |  | ||||||
|                 entries[(i, j)] = Entry( |  | ||||||
|                     working=(prev_entry_if_working.working + |  | ||||||
|                              prev_entry_if_working.broken), |  | ||||||
|                     broken=0) |  | ||||||
|  |  | ||||||
|             elif springs[i] == "#": |  | ||||||
|                 entries[(i, j)] = Entry( |  | ||||||
|                     working=0, |  | ||||||
|                     broken=prev_working_entry_if_broken) |  | ||||||
|                  |  | ||||||
|             elif springs[i] == '?': |  | ||||||
|                 entries[(i, j)] = Entry( |  | ||||||
|                     working=(prev_entry_if_working.working + |  | ||||||
|                              prev_entry_if_working.broken), |  | ||||||
|                     broken=prev_working_entry_if_broken) |  | ||||||
|              |  | ||||||
|             # import code; code.interact( |  | ||||||
|             #     local=locals(), |  | ||||||
|             #     banner=(f"springs[{i}]={springs[i]}, counts[{j}]={counts[j]} " |  | ||||||
|             #             f".={prev_entry_if_working}, " |  | ||||||
|             #             f"#={prev_working_entry_if_broken}\n" |  | ||||||
|             #             f"--> ({i}, {j}) = {entries[(i, j)]}"), |  | ||||||
|             #     exitmsg='') |  | ||||||
|              |  | ||||||
|     return entries[(len(springs) - 1, len(counts) - 1)].total() |  | ||||||
|  |  | ||||||
| if __name__ == "__main__": |  | ||||||
|     with open(sys.argv[1], "rt") as f: |  | ||||||
|         lines = f.readlines() |  | ||||||
|  |  | ||||||
|     total = 0 |  | ||||||
|     for line in lines: |  | ||||||
|         springs, counts = line.strip().split(" ") |  | ||||||
|         counts = [int(c) for c in counts.split(",")] |  | ||||||
|  |  | ||||||
|         # delete these next 2 lines to have part 1 back |  | ||||||
|         springs = "?".join([springs]*5) |  | ||||||
|         counts = counts*5 |  | ||||||
|         n = process(springs, counts) |  | ||||||
|         # print(f"{n} <-- {springs}-{counts}") |  | ||||||
|         total += n |  | ||||||
|     print(f"total = {total}") |  | ||||||
| @@ -1,6 +0,0 @@ | |||||||
| ???.### 1,1,3 |  | ||||||
| .??..??...?##. 1,1,3 |  | ||||||
| ?#?#?#?#?#?#?#? 1,3,1,6 |  | ||||||
| ????.#...#... 4,1,1 |  | ||||||
| ????.######..#####. 1,6,5 |  | ||||||
| ?###???????? 3,2,1 |  | ||||||
							
								
								
									
										1339
									
								
								13/input.txt
									
									
									
									
									
								
							
							
						
						
									
										1339
									
								
								13/input.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										44
									
								
								13/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										44
									
								
								13/part1.pl
									
									
									
									
									
								
							| @@ -1,44 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Blocks), |  | ||||||
|     convlist(vert_reflect, Blocks, Vs), |  | ||||||
|     convlist(horz_reflect, Blocks, Hs), |  | ||||||
|     sum_list(Vs, V), |  | ||||||
|     sum_list(Hs, H), |  | ||||||
|     Answer is 100*V + H, |  | ||||||
|     writef('Answer=%t\n', [Answer]). |  | ||||||
|  |  | ||||||
| vert_reflect(Block, N) :- reflect(Block, N). |  | ||||||
| horz_reflect(Block, N) :- maplist({N}/[Row]>>(reflect(Row, N)), Block). |  | ||||||
|  |  | ||||||
| reflect(Items, N) :- perfect_reflect(Items, N). |  | ||||||
| reflect(Items, N) :- |  | ||||||
|     append(SubItems, [_|_], Items), |  | ||||||
|     perfect_reflect(SubItems, N). |  | ||||||
| reflect(Items, N) :- |  | ||||||
|     append(Prefix, SubItems, Items), |  | ||||||
|     perfect_reflect(SubItems, SubN), |  | ||||||
|     length(Prefix, Len), N is SubN + Len. |  | ||||||
|  |  | ||||||
| % reflect right down the middle. N is half list length. |  | ||||||
| perfect_reflect([A, A], 1). |  | ||||||
| perfect_reflect(Items, N) :- |  | ||||||
|     append([[Item], OtherItems, [Item]], Items), |  | ||||||
|     perfect_reflect(OtherItems, N_sub1), |  | ||||||
|     N is N_sub1 + 1. |  | ||||||
|  |  | ||||||
| input(FileName, Blocks) :- phrase_from_file(blocks(Blocks), FileName). |  | ||||||
|  |  | ||||||
| blocks([]) --> eos, !. |  | ||||||
| blocks([Block|Blocks]) --> block(Block), blocks(Blocks). |  | ||||||
|  |  | ||||||
| block([Line]) --> line(Line), ("\n"; eos), !. |  | ||||||
| block([Line|Lines]) --> line(Line), block(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> ("\n"; eos), !. |  | ||||||
| line([#|Chars]) --> "#", line(Chars). |  | ||||||
| line([o|Chars]) --> ".", line(Chars). |  | ||||||
|  |  | ||||||
| eos([], []). |  | ||||||
							
								
								
									
										55
									
								
								13/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										55
									
								
								13/part2.pl
									
									
									
									
									
								
							| @@ -1,55 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(clpfd)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Blocks), |  | ||||||
|     convlist(almost_reflect, Blocks, Vs), sum_list(Vs, V), |  | ||||||
|     maplist(transpose, Blocks, TBlocks), |  | ||||||
|     convlist(almost_reflect, TBlocks, Hs), sum_list(Hs, H), |  | ||||||
|     Answer is 100*V + H, |  | ||||||
|     writef('Answer=%t\n', [Answer]). |  | ||||||
|  |  | ||||||
| almost_reflect(Items, N) :- almost_perfect_reflect(Items, N). |  | ||||||
| almost_reflect(Items, N) :- |  | ||||||
|     append(SubItems, [_|_], Items), |  | ||||||
|     almost_perfect_reflect(SubItems, N). |  | ||||||
| almost_reflect(Items, N) :- |  | ||||||
|     append(Prefix, SubItems, Items), |  | ||||||
|     almost_perfect_reflect(SubItems, SubN), |  | ||||||
|     length(Prefix, Len), N is SubN + Len. |  | ||||||
|  |  | ||||||
| almost_perfect_reflect([A, B], 1) :- diff(A, B, 1). |  | ||||||
| almost_perfect_reflect(Items, N) :- |  | ||||||
|     append([[A], OtherItems, [A]], Items), |  | ||||||
|     almost_perfect_reflect(OtherItems, N_sub1), |  | ||||||
|     N is N_sub1 + 1. |  | ||||||
| almost_perfect_reflect(Items, N) :- |  | ||||||
|     append([[A], OtherItems, [B]], Items), |  | ||||||
|     diff(A, B, 1), |  | ||||||
|     perfect_reflect(OtherItems, N_sub1), |  | ||||||
|     N is N_sub1 + 1. |  | ||||||
|  |  | ||||||
| % reflect right down the middle. N is half list length. |  | ||||||
| perfect_reflect([A, A], 1). |  | ||||||
| perfect_reflect(Items, N) :- |  | ||||||
|     append([[Item], OtherItems, [Item]], Items), |  | ||||||
|     perfect_reflect(OtherItems, N_sub1), |  | ||||||
|     N is N_sub1 + 1. |  | ||||||
|  |  | ||||||
| diff(L1, L2, N) :- |  | ||||||
|     foldl([A, B, Prev, Curr]>>(Curr is Prev + abs(A - B)), L1, L2, 0, N). |  | ||||||
|  |  | ||||||
| input(FileName, Blocks) :- phrase_from_file(blocks(Blocks), FileName). |  | ||||||
|  |  | ||||||
| blocks([]) --> eos, !. |  | ||||||
| blocks([Block|Blocks]) --> block(Block), blocks(Blocks). |  | ||||||
|  |  | ||||||
| block([Line]) --> line(Line), ("\n"; eos), !. |  | ||||||
| block([Line|Lines]) --> line(Line), block(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> ("\n"; eos), !. |  | ||||||
| line([1|Chars]) --> "#", line(Chars). |  | ||||||
| line([0|Chars]) --> ".", line(Chars). |  | ||||||
|  |  | ||||||
| eos([], []). |  | ||||||
							
								
								
									
										15
									
								
								13/test.txt
									
									
									
									
									
								
							
							
						
						
									
										15
									
								
								13/test.txt
									
									
									
									
									
								
							| @@ -1,15 +0,0 @@ | |||||||
| #.##..##. |  | ||||||
| ..#.##.#. |  | ||||||
| ##......# |  | ||||||
| ##......# |  | ||||||
| ..#.##.#. |  | ||||||
| ..##..##. |  | ||||||
| #.#.##.#. |  | ||||||
|  |  | ||||||
| #...##..# |  | ||||||
| #....#..# |  | ||||||
| ..##..### |  | ||||||
| #####.##. |  | ||||||
| #####.##. |  | ||||||
| ..##..### |  | ||||||
| #....#..# |  | ||||||
							
								
								
									
										100
									
								
								14/input.txt
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								14/input.txt
									
									
									
									
									
								
							| @@ -1,100 +0,0 @@ | |||||||
| #.O.O......##.......O.#O....O....O.O...O..O..##O#..O..#...##...........#..O..OO.O#O...OO.O..#...#..# |  | ||||||
| ......O.#...#..O.O.....#O...#..OO.O.........O..O.#..O.#.O...O.##......O..O.#....#......O....O....O#O |  | ||||||
| ...#...O..O..#.O...O##.O....##.....OOO#....#.O..O#O.OOO.........O....#.O...O.O...O...#.#..O..#.O.#.# |  | ||||||
| #...##...O.OO....OO.#..O#...O..#O.O...O.......#.##.###....O..O.O.#.#O........OO..##................. |  | ||||||
| ...#O....#.O.....O.O..O.#.......#.#.#O....O....OOO.#.....O.#...#...O..##..##O.#O....O.#O.#O..#..O.OO |  | ||||||
| ...O....O..#.....O..O..O#.O...O..#..OO###.O.....#.OO....O#......O#..........#....#.O#.O.O.#.....O.O. |  | ||||||
| ....O...#..O.........O...OO#O......OOO..#..O....#..#...O...O..#...O.O..#O...#O.O...O..###..#.O.#.... |  | ||||||
| ...O.#O.#..##O.O.#...O...#....O..#.####....OO.#.#...........O.O...#..........O..O#.O..O....#.......# |  | ||||||
| ........O.........O....OO...........##...O.#.OO.....#....#.O###.......O#O..#.#.O#..#....O..#......O. |  | ||||||
| O..#....O#O.#..O...............#..#..........OO#.#.#.#...#..#..O.#...#......O..#...O...O..O.......O. |  | ||||||
| OO#.O##OO......O.#..#O....O#......O..O...O...OO...#...........O...#......O....O.OOO#..#.....O.OO..O. |  | ||||||
| O.#.OO...#..#..O...#....#..O.O....O.OOO..O....#...O....O.O....O.O#........#.##.......O..O#.O....#... |  | ||||||
| ......O..O..O..###.#..O..#...#..#.##O.#O.OO...O.O..#OO...O...O.#O..O..#....#O....OO#.#...O...O..#.#O |  | ||||||
| .#.#O..#O....O.##.#O.#O.O.O....#.....OO#O...OO....#O...O##..OO.OOO......#.....#..#O.OO...#..#....O.. |  | ||||||
| ..OO.#.#..#....#..#.......OO..OOO.#...#..O##.O..##O..O....OO#.OO...#O.##.#......#O#.O#..O##...#..... |  | ||||||
| O.#.....#.O.OO.O......##.........O.O#.O...#......O#.....O.....O#..O.#O..O.#......#..O..O.O.......... |  | ||||||
| ...O..O..O.#.##.O..#.........#...#O..#....O#...#..O###.O...#.......O...#.#.#...O.....#O...O....##O.# |  | ||||||
| .#OO..O........O.O...#.#.....O..O..OO.O....O..##....OO....O...O..O#..O.OO.#...O.O.#.O.#O....O....... |  | ||||||
| ....O.O.O.O..O#..##..O.O.O..O.#.OO.O..#.OOO.O.#.OO.O.#O........#O..O.......O..O..#..O..#..#.O.#..... |  | ||||||
| .#.O..#.O#O.O.......O.#.#O.OO..O..OO..O#.O.O#O....##OO.......O..#O.O.O#.....#..#..#..O#O.......#O.O. |  | ||||||
| ....O..O#....O#.#O..#.OOOO..#.......OO.......##...#O....O...#..#..#.O..OO..O.#..#.O....#.#.##OO..... |  | ||||||
| .#O..###..#O#.O#O....O.##..........O.#..O..O.OO.O##...#O.#.O.O...#..#O.........#...#..#.........#O.. |  | ||||||
| #.#.......#O..#..##..O.#...#O#...#.#.O..O.OO##.O....#.....O..OOO.............O..##..#..#..O....#...# |  | ||||||
| #.#..O..........#.O.#O..O.#...#.#O#..O.#....#.#....#O.......#O.#.O.O.##..OO....O.##..O#....O.....O.O |  | ||||||
| .O...##...O..#..O#O...O#.....O.#O....OO.O.#O..#....OO.#.O.........#......#O.........O...#.O...#O.O#. |  | ||||||
| ...O.....#........O.#O...#..#..##.......O.O#....#.O...OO##OOO#.#..O#OO..OO..##O....O.#.O...O....##.. |  | ||||||
| ............#.O.O#O..#..#..O.........#O..O....OO..#..#..O.#.O.#..O..O..O..#OO...O...OO#O.OO....#..O. |  | ||||||
| ...O.O.....O..O.##.....OO..#O...O...O..O.#...#......O..O.......OO..OO....#OO.O..#........##.O.O....O |  | ||||||
| #O#......O.O.O#..O.O..OO..#O#..#OO.#...O...O.O.O....#..O#O..O###O.##OO#.O.O.......O.O#..#O.O.O.#...# |  | ||||||
| ..O........OOO.O....OOOO......#.O...#.....O.O#......O#O.O.#O.....#..O....O#.O....O..#..O..O....O...# |  | ||||||
| ...O......O..#....O...#O..OO..#.#OO.O...OOO......#.........#OOO.#.#........O...#OO.O.OOO....O.O#.... |  | ||||||
| ......#.O...OO#...#O.#..##.O.#..O..O..O.O.#.O.O.##.#O#O...#OOO...#..O....O..O...OOO..O..#.##....O..# |  | ||||||
| ...O....O.#O.OO..#O...#.#....#O.##OO..#..OO..#....OO.O#....O.O..#.#..O...#.O.#.O.#..O..O..#..O#O.OO. |  | ||||||
| ..O..O.O......O#..#..O..O..O#..#.......#.....#O..O...#O..O..OO#.#.##...OO#..##.O.O.O.O........####.# |  | ||||||
| #.O#......OO...#.###...OO......#..#.....#.#.##.O..#.#..OO..#...OO#.O#.#..O##....O.....#..#OOO.....#. |  | ||||||
| .#......O....O.#...O..##.O..#..#O...#.O#....#.O#....O.O#.O#.#.OO.O..O#....O....#...O.O#......O#OO... |  | ||||||
| ....#O#...#.O#.....O.O..OO##O....#.O..O...O..O.OO#...O#.#...O.O.O.....O#..O...#O.....#...O#O...O#.#. |  | ||||||
| #..O..O..OO..#.O#.......O......#...O.#..#O#..#.O.#.O#...#O.....O.OO..#...O...O.##.....O....OO..#.... |  | ||||||
| ..#......O#O...#.........#...O#.#..O.#..O.O.......#O.#...OOO....O#....OO..OOO.......#O....OO........ |  | ||||||
| O.O.#..#..#O........##OO...O.O#....#...#O.......#.O#O...O..O.O##.O..#..OOOO#...O.#O..O#...O.O#O..#O. |  | ||||||
| .....#O#.#O......OO..O.....#....#.#.O.O.##.O##.....O..O......#O#OOO.....#.....#OO..###.#...O.O.#.#.. |  | ||||||
| #...##.OO.....O.....OO......#.O.O..O......#....##O##..OOO..#.....#...O.......O.......O....##........ |  | ||||||
| .###..#...O..O.#.....O#........O...##O....#.O.#.O.O.#O.......O#..#...OO...O#.OO...O.....O.O.O..OO#.O |  | ||||||
| ...O..#...#..##..#.O##.##O.....O.#..#O.......OO#..O#.OO...##O......OOO...O.O..O#...#.##..O...O..#..O |  | ||||||
| ....O.......#..O#..#O..O....O.O....#...O....O.##.#OOOO....O.#...#O...O#.#.......#.......OO#.#...#.#. |  | ||||||
| #.OO.O##...O...##.O#..O#......#.#..OO.OO.#.O.O##.#....O.O.##O.....#O..#........#O#...#...#.....O#.#. |  | ||||||
| O.O.#..##.....##O.......O..OO..#.O......#.......#O....#.......O.#OO...O.O....#.##.....#.....OO...... |  | ||||||
| O#..##..O........#.#..O.#.....#O....O#.....O...#O.......O.O.........O....O.#..O#.O.....#O.#.#.O.#.O. |  | ||||||
| ...O.OO.OO.O..O...#.#.#.O.O.OOO......O.#.#.O.#..O..#.OO.O..##O.......O.........OOO#.O.O...#O.O....O. |  | ||||||
| O.##...#.#..O#.#..#..O...#...#...O..O..#..O...#O....O..#.##O....O..O..O.##O...O....O..##O..OO.#..... |  | ||||||
| ...OOO.O....O.O.#....O#.OO..#.#.O.#.O#.O...O#O#......##..........#...O......O...#...O....O.#...#.... |  | ||||||
| ...#..##.O.#O#.O.#...#..O...O#O....##..OO##..#OO.........#...O#..O#.OOO...OO...#.O.#.OO##..#O#.#...# |  | ||||||
| O##...#......#O.O#...O....O...#O#.O...O.O.OOO....O.....##....O..#O.O....#.#...O........##OO#.O##...# |  | ||||||
| OO..#.....O..O#.O...O..OO....#.....##...#..O...#O..#.#O.#O.#O##...#....O....#.O.......#......O.....O |  | ||||||
| O.O....O##.OO...O.....#......#....O.#O.#...OO#.OO......OO...O#....OO#O...O....##....#...........O.O. |  | ||||||
| .....O..O.OO....O#..#....#.O....#....#O..##..O..#..........O.OO#.OOO...........O#O.O.......#......OO |  | ||||||
| .O.#.#.O..O.#....OOO.O..O....O...O......O.O.O..#O.#.#.....OOO.........#.O....#O.O..#O....O#........O |  | ||||||
| .##.OO#.O.....O..O..#.O..O.O.....O.O.#.O.....OOO.........O.O.O...#..O#..O..O..#O.O.#.#..O.#..#..O#.# |  | ||||||
| O...#..#..O...O...#..O..O.O.O...........#...#..#........#..OO.#O....#...#....O.........O.#.......#.. |  | ||||||
| O..O###.##.#............#...OO#......#.O..O..#...O.O....O##...#.O.......#.#O..O........##...#.O....O |  | ||||||
| ..#O#....##.O.....###..O.#O.O........#.......O.#...#O..#..OO...#.O...O.OO........###....##OO...O.O.. |  | ||||||
| ...O.....O..##....O.O##.OO...O.#.#.#.#.#......O.........O.O#....#.#..O.#.O#OO#.....O.OOO...O....OO.. |  | ||||||
| #..#O...O....................O.#.......O.O...........#O.O....OO.O......O.O##O#.#O.O.O.O...O.O.#.O#O. |  | ||||||
| .O..O..#...OO.##.#...#.O#.O.###...O......O.......#.O##.O.....##.O......#.O...OO....O#.#..#..O.O..... |  | ||||||
| ....O#.O.O...OO#.O.O#.O...#..........OO....#......O.O#.O.#......O...OOOO..O...##.#...O..#..O..##O.OO |  | ||||||
| ...OO..#O.##O..O...#O.#..O..#.#.#..O#.O..#..#.....O...#.O#..........O....##.O...#O......OO.O..O..... |  | ||||||
| .#O##.O..#.OO#..O..##O..#.#...........O##.#O.OO#O.....O#..O.....O......O.....O..O...O.#..#..O...#O## |  | ||||||
| ...........#.O#O.#O..O#.....##O....O.#....OO...#..OO..#.O.O#.#OOO....O...#O..#.O#......O.....#.##O.. |  | ||||||
| ..##.O.O...O.O..#.......#.O.OO..O....#....O.O.OO..#...O#O##.OO.O.#..#.#O.....##....O.O.O.....#..##.O |  | ||||||
| #.O.O...#....#..##..O.O.#O.....OO.#O...O......#.O.....OO..O.O.O.O...O..#....#OO.......#......O.#.O.. |  | ||||||
| ....#....OO..O##.O..O..OO.OOO.O.O.OO.O...##....O#O.....O....#.#.O...OO.O..#...#.OOO#O..#...OO......# |  | ||||||
| .O#.OO.O......##....#.#..O#OO..#....#....##O#.O.#...#O..#...OO......O...O#.#.O.O.O..O....O.#O....... |  | ||||||
| .##OO....##..O...##....O.#.#OOOO.O.#..O..O...#...O.O..O.OO..##..#O.O.......O#O....OO.OO.OO.......... |  | ||||||
| .........O.#..#.....O..OO...#..O.OO...#.O.O.....#....O#..#.OOO.#...#..O.#....#O.......O.O...OO#..O.. |  | ||||||
| #..OO#O......O.O...O#.#..#.O...##O#..O.....OO.O.##.O#O#...O#...#O.O.OO....#O#OO.O.#...O....##....... |  | ||||||
| OO..OO.....#OO.....O........O.......O#.O......O#.#O...#...O.##.#...O.....O.....O....#O...##O.......# |  | ||||||
| .#.OO..OOOO..O#O..O......O.#.OO.#.O.........O#OO..#.O.#..#O...O.........O#.#.O#O.OOO.O..#...#.O....# |  | ||||||
| O#...O#.#..O#.......O....#..#.O#.O.#....#....O..#......O...O...O..##.#O#O......O...#..#..OO..#.OOO.. |  | ||||||
| #.....OO..O..#.OO..#...#.....O#.................##.......O.O..#...#O.O...OO....#OO#....O..O.O..O.O.. |  | ||||||
| ..#.......O#O..O.OOO.#........#..OO..O#.#.#..................O..OOO..#.O.....##O....O#..O.OO.O..#O.O |  | ||||||
| OO...OOO.....O..#O.##.O...#O...O....#......O.O..#OO#O..###O.......O...O..O..............O#....OO.O.. |  | ||||||
| .O..O.#..O........#...##.....O...O##O.O..#.....O.#..#..OO#......O....#..OO.#......O...#O...##......O |  | ||||||
| ...#.##O#.....O..O...O##O...#.O.#.O..O.O....#..O.O#....OO#OO..##.....#...O..##OO.O.O...O#O.....#O... |  | ||||||
| ...#O.OO....O#...O...O....#O..................#.O.O..O.O...O..##O...O#.OO.#..#.#......O.#...O....... |  | ||||||
| ..O...#O.##...O...O...O#O.O..#..O.#O#O....#.#O..#O....O...#.#......#.......#..OO.O.........###O##... |  | ||||||
| ....#O...O.........O............#.OO##.O.O.OO.........O.#.O.#OO.....O..O..##...O#..........#.O..#.O. |  | ||||||
| .##.O#.O...O#O..#.O...#OO......O..OOOO.......O.O..#....#OO....O.O#O.......#O.....#OO.#.............# |  | ||||||
| ..##..#OO#.......O....................O.........OO..#...O...O.###O..O.......#..O.#.....O.O...O.....O |  | ||||||
| ....#......#..O..#.O.O..O..O...#O.O....#.....O..O.#..#O.#.O#.O#..#.....O.##.O..O#............#.#.... |  | ||||||
| ##..#...#..O.O.#O.......O#O..O..O...#O.O............#OO.OO.O...O..#..O..O.O#.O#.....O.O....#.####.#. |  | ||||||
| O...O#..O#..#.O...OO....#.....OO##.........O.O...O..#..OO#..##.O....O.#..O..O......O....O....O#....O |  | ||||||
| ....#OO.O...OO.....O..##O.#.#..##.#.......O....#O..#......O.#....O.#...#O...O.OO..#OO....#....O.O#O. |  | ||||||
| ...####..O.O....#.#O...#O........OO.O.#O.O.#....#.O...........#....#..O##.O.#OO..#..OO.....OO#.#.##. |  | ||||||
| .O.O..#....#..#O...#O.....O.#O..O.O#....#...#......#..O.O..#O.O.......#..#..OO..#...#....###O.#...OO |  | ||||||
| ....O#.##...#...........#O.O.O...O.#.O#...#.#.OO#O.O.#OO#.....#...O.O#O.#....O.O.....O.O...#...#.OO. |  | ||||||
| O..O...OO.#...O.##....#.......##.O..#.##.OOO...#.......O..O.#...#..#....#O.O..O.....O.....O.O.##.... |  | ||||||
| .#OO.##...O.#.............O.#...#....##...O.O.#..O..#O..#.###..OO.#OO#.O.........#...O.......#..#O.O |  | ||||||
| ...O..O...OO.#...O#.#...O..#...O..OO....O.OO.OOO.O...O..O.##O.O.##...O.O.##...#O#....O..OO...#.#.#.. |  | ||||||
| .#...#..O.O.##...#.#..O...OO.##.O....O.O......O.#..O#.#.#..O....#....#O.#..OO...O.OO#.O#...#.O..##.. |  | ||||||
| #..O..#..........O.O#....#OO..#.#...#....#.....#....O....OO...O#....#.#.O##..##O#...#.......#.#O.O#O |  | ||||||
							
								
								
									
										42
									
								
								14/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										42
									
								
								14/part1.pl
									
									
									
									
									
								
							| @@ -1,42 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(clpfd)). |  | ||||||
| :- initialization(main, main). |  | ||||||
| :- table rocks/3. |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Input), |  | ||||||
|     transpose(Input, Rotated), |  | ||||||
|     concurrent_maplist([Row, [#|Row]]>>(true), Rotated, Rocks), |  | ||||||
|     /*concurrent_*/maplist(row_weight, Rocks, Weights), |  | ||||||
|     sum_list(Weights, W), |  | ||||||
|     writef('%t\n', [W]). |  | ||||||
|  |  | ||||||
| row_weight(Row, Weight) :- |  | ||||||
|     phrase(rocks(Rocks), Row), |  | ||||||
|     convlist([N-'#', N]>>(true), Rocks, RockCounts), |  | ||||||
|     sum_list(RockCounts, Weight), |  | ||||||
|     writef('>> %t <-- %t\n', [Weight, Row]). |  | ||||||
|  |  | ||||||
| rocks([0-0]) --> eos. |  | ||||||
| rocks([LastN-I, LastN-LastI|Rocks]) --> |  | ||||||
|     [0], rocks([LastN-LastI|Rocks]), |  | ||||||
|     {I is LastI + 1}. |  | ||||||
| rocks([N-I, LastN-LastI|Rocks]) --> |  | ||||||
|     [1], rocks([LastN-LastI|Rocks]), |  | ||||||
|     {I is LastI + 1, N is LastN + 1}. |  | ||||||
| rocks([0-I, N-'#', LastN-LastI|Rocks]) --> |  | ||||||
|     [#], rocks([LastN-LastI|Rocks]), |  | ||||||
|     {I is LastI + 1, N is LastN*(2*LastI - LastN + 1) / 2}. |  | ||||||
|  |  | ||||||
| % things below are for reading from input file |  | ||||||
| input(FileName, Input) :- phrase_from_file(lines(Input), FileName). |  | ||||||
|  |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> "\n"; eos. |  | ||||||
| line([1|Chars]) --> "O", line(Chars). |  | ||||||
| line([0|Chars]) --> ".", line(Chars). |  | ||||||
| line(['#'|Chars]) --> "#", line(Chars). |  | ||||||
|  |  | ||||||
| eos([], []). |  | ||||||
							
								
								
									
										117
									
								
								14/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										117
									
								
								14/part2.pl
									
									
									
									
									
								
							| @@ -1,117 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(clpfd)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Input), |  | ||||||
|     rolls(Input, 0, [], First-Cycle-Hist), |  | ||||||
|     reverse(Hist, [_|TrueHist]), |  | ||||||
|     BillionOffset is ((999999999 - First) mod Cycle) + First, |  | ||||||
|     nth0(BillionOffset, TrueHist, BillionMap), |  | ||||||
|     % maplist({TrueHist}/[M]>>( |  | ||||||
|     %     nth0(Nth, TrueHist, M), |  | ||||||
|     %     map_weight(M, W), |  | ||||||
|     %     writef('Weight(%t) = %t\n', [Nth, W]), |  | ||||||
|     %     print(M)), TrueHist), |  | ||||||
|     write('======================\n'), |  | ||||||
|     print(BillionMap), |  | ||||||
|     map_weight(BillionMap, FinalWeight), |  | ||||||
|     writef('First = %t, Cycle = %t, FinalOffset = %t, Answer = %t\n', |  | ||||||
|            [First, Cycle, BillionOffset, FinalWeight]). |  | ||||||
|  |  | ||||||
| map_weight(Map, W) :- rotate(Map, Rotated), map_weight(Rotated, _, W). |  | ||||||
|  |  | ||||||
| map_weight([_], 0, 0). |  | ||||||
| map_weight([Row|Map], RowI, W) :- |  | ||||||
|     map_weight(Map, PrevRowI, PrevW), |  | ||||||
|     RowI is PrevRowI + 1, |  | ||||||
|     include(['O']>>(true), Row, Rocks), |  | ||||||
|     length(Rocks, NRocks), |  | ||||||
|     W is PrevW + RowI*NRocks. |  | ||||||
|  |  | ||||||
| rolls(Map, N, Hist, First-Cycle-Hist) :- |  | ||||||
|     match(Map, Hist, Cycle), |  | ||||||
|     First is N - Cycle - 1, |  | ||||||
|     !. |  | ||||||
| rolls(Map, N, Hist, X) :- |  | ||||||
|     roll(Map, NewMap), |  | ||||||
|     NextN is N + 1, |  | ||||||
|     NewHist = [Map|Hist], |  | ||||||
|     rolls(NewMap, NextN, NewHist, X). |  | ||||||
|  |  | ||||||
| match(Map, [Map|_], 1) :- !. |  | ||||||
| match(Map, [_|Entries], N) :- |  | ||||||
|     match(Map, Entries, NextN), |  | ||||||
|     N is NextN + 1. |  | ||||||
|  |  | ||||||
| % North is to the left |  | ||||||
| roll(Map, NewMap) :- |  | ||||||
|     concurrent_maplist(collapse, Map, NorthCollapsed), |  | ||||||
|     rotate(NorthCollapsed, West), |  | ||||||
|     concurrent_maplist(collapse, West, WestCollapsed), |  | ||||||
|     rotate(WestCollapsed, South), |  | ||||||
|     concurrent_maplist(collapse, South, SouthCollapsed), |  | ||||||
|     rotate(SouthCollapsed, East), |  | ||||||
|     concurrent_maplist(collapse, East, EastCollapsed), |  | ||||||
|     rotate(EastCollapsed, NewMap). |  | ||||||
|  |  | ||||||
| rotate(Map, NewMap) :- |  | ||||||
|     transpose(Map, X), |  | ||||||
|     concurrent_maplist(reverse, X, NewMap). |  | ||||||
|  |  | ||||||
| print(Map) :- |  | ||||||
|     rotate(Map, RotMap), |  | ||||||
|     append([[_|RealMap], [_]], RotMap), |  | ||||||
|     maplist([X]>>( |  | ||||||
|         append([_|Y], [_], X), |  | ||||||
|         atomics_to_string(Y, S), |  | ||||||
|         writef('%t\n', [S])), RealMap), |  | ||||||
|     write('\n'). |  | ||||||
|  |  | ||||||
| collapse(Row, NewRow) :- |  | ||||||
|     phrase(rock_counts(Counts), Row), |  | ||||||
|     phrase(condense(Zs), Counts), |  | ||||||
|     phrase(reexpand(Zs), NewRow), |  | ||||||
|     true. |  | ||||||
|  |  | ||||||
| reexpand([]) --> eos. |  | ||||||
| reexpand([N-Next|Rocks]) --> ['#'], stack(N, Next), reexpand(Rocks). |  | ||||||
|  |  | ||||||
| stack(0, 0) --> [], !. |  | ||||||
| stack(0, Z) --> {NextZ is Z - 1}, ['.'], stack(0, NextZ), !. |  | ||||||
| stack(N, Z) --> {NextZ is Z - 1, NextN is N - 1}, ['O'], stack(NextN, NextZ). |  | ||||||
|  |  | ||||||
| condense([]) --> [0-0-0]. |  | ||||||
| condense([N-Next|Rocks]) --> [0-I-I, N-z-Next], condense(Rocks), !. |  | ||||||
| condense(Rocks) --> [_-_-_], condense(Rocks). |  | ||||||
|  |  | ||||||
| rock_counts([0-0-0]) --> []. |  | ||||||
| rock_counts([LastN-I-LastZ, LastN-LastI-LastZ|Rocks]) --> |  | ||||||
|     ['.'], rock_counts([LastN-LastI-LastZ|Rocks]), |  | ||||||
|     {I is LastI + 1}. |  | ||||||
| rock_counts([N-I-LastZ, LastN-LastI-LastZ|Rocks]) --> |  | ||||||
|     ['O'], rock_counts([LastN-LastI-LastZ|Rocks]), |  | ||||||
|     {I is LastI + 1, N is LastN + 1}. |  | ||||||
| rock_counts([0-I-I, LastN-z-Len, LastN-LastI-LastZ|Rocks]) --> |  | ||||||
|     ['#'], rock_counts([LastN-LastI-LastZ|Rocks]), |  | ||||||
|     {I is LastI + 1, Len is I - LastZ - 1}. |  | ||||||
|  |  | ||||||
| % North is to the left |  | ||||||
| input(FileName, Input) :- |  | ||||||
|     phrase_from_file(lines(Raw), FileName), |  | ||||||
|     concurrent_maplist(pad, Raw, PaddedInput), |  | ||||||
|     concurrent_maplist(reverse, PaddedInput, Reversed), |  | ||||||
|     transpose(Reversed, Rotated), |  | ||||||
|     concurrent_maplist(pad, Rotated, Input). |  | ||||||
|  |  | ||||||
| pad(Row, Rowx) :- append(['#'|Row], ['#'], Rowx). |  | ||||||
|  |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> "\n"; eos. |  | ||||||
| line(['O'|Chars]) --> "O", line(Chars). |  | ||||||
| line(['.'|Chars]) --> ".", line(Chars). |  | ||||||
| line(['#'|Chars]) --> "#", line(Chars). |  | ||||||
|  |  | ||||||
| eos([], []). |  | ||||||
							
								
								
									
										10
									
								
								14/test.txt
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								14/test.txt
									
									
									
									
									
								
							| @@ -1,10 +0,0 @@ | |||||||
| O....#.... |  | ||||||
| O.OO#....# |  | ||||||
| .....##... |  | ||||||
| OO.#O....O |  | ||||||
| .O.....O#. |  | ||||||
| O.#..O.#.# |  | ||||||
| ..O..#O..O |  | ||||||
| .......O.. |  | ||||||
| #....###.. |  | ||||||
| #OO..#.... |  | ||||||
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										26
									
								
								15/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										26
									
								
								15/part1.pl
									
									
									
									
									
								
							| @@ -1,26 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Input), |  | ||||||
|     hashes(Input, Hash), |  | ||||||
|     writef('Answer=%t\n', [Hash]). |  | ||||||
|  |  | ||||||
| hashes(Strs, Hash) :- |  | ||||||
|     concurrent_maplist(reverse, Strs, RStrs), |  | ||||||
|     concurrent_maplist(hash, RStrs, Hashes), |  | ||||||
|     sum_list(Hashes, Hash). |  | ||||||
|  |  | ||||||
| hash([], 0). |  | ||||||
| hash([C|Str], Hash) :- hash(Str, Prev), Hash is (Prev + C)*17 mod 256. |  | ||||||
|  |  | ||||||
| % Input stuff |  | ||||||
| input(FileName, Input) :- phrase_from_file(string(Input), FileName). |  | ||||||
|  |  | ||||||
| string([]) --> (eos; "\n"), !. |  | ||||||
| string([Item|Items]) --> item(Item), string(Items). |  | ||||||
|  |  | ||||||
| item([]) --> (","; "\n"; eos), !. |  | ||||||
| item([C|Chars]) --> [C], item(Chars). |  | ||||||
|  |  | ||||||
| eos([], []). |  | ||||||
							
								
								
									
										47
									
								
								15/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								15/part2.pl
									
									
									
									
									
								
							| @@ -1,47 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Actions), |  | ||||||
|     perform_all(Actions, Boxes), |  | ||||||
|     findall(Power, power_of_some_lens(Boxes, Power), Powers), |  | ||||||
|     sum_list(Powers, Answer), |  | ||||||
|     writef('Answer=%t\n', [Answer]). |  | ||||||
|  |  | ||||||
| power_of_some_lens(Boxes, Power) :- |  | ||||||
|     nth1(BoxI, Boxes, _-Box), |  | ||||||
|     nth1(LensI, Box, _-Focal), |  | ||||||
|     Power is BoxI * LensI * Focal. |  | ||||||
|  |  | ||||||
| perform_all(Actions, FinalBoxes) :- |  | ||||||
|     length(EmptyBoxes, 256), |  | ||||||
|     foldl([N-[], N, NextN]>>(NextN is N + 1), EmptyBoxes, 0, _), |  | ||||||
|     foldl(perform, Actions, EmptyBoxes, FinalBoxes). |  | ||||||
|  |  | ||||||
| perform(BoxN-Action-Label, Before, After) :- |  | ||||||
|     nth0(BoxN, Before, BoxN-Box), |  | ||||||
|     call(Action, Label, Box, NewBox), |  | ||||||
|     select(BoxN-Box, Before, BoxN-NewBox, After). |  | ||||||
|  |  | ||||||
| remove(_, [], []). |  | ||||||
| remove(Label, [Label-_|Box], Box) :- !. |  | ||||||
| remove(Label, [Lens|Box], [Lens|NewBox]) :- remove(Label, Box, NewBox). |  | ||||||
|  |  | ||||||
| add(Focal, Label, Box, NewBox) :- select(Label-_, Box, Label-Focal, NewBox), !. |  | ||||||
| add(Focal, Label, Box, NewBox) :- append(Box, [Label-Focal], NewBox). |  | ||||||
|  |  | ||||||
| % Input stuff. [0-add(5)-"rn", 3-remove-"cm", ...] |  | ||||||
| input(Name, Actions) :- phrase_from_file(insts(Actions), Name). |  | ||||||
|  |  | ||||||
| insts([]) --> (eos; "\n"), !. |  | ||||||
| insts([Box-Action-LabelS|Items]) --> |  | ||||||
|     item(Label-Action), insts(Items), |  | ||||||
|     {reverse(Label, Rev), hash(Rev, Box), string_codes(LabelS, Label)}. |  | ||||||
|  |  | ||||||
| item([]-remove) --> "-", (","; "\n"; eos), !. |  | ||||||
| item([]-add(N)) --> "=", number(N), (","; "\n"; eos), !. |  | ||||||
| item([C|Chars]-X) --> [C], item(Chars-X). |  | ||||||
|  |  | ||||||
| hash([], 0). |  | ||||||
| hash([C|Str], Hash) :- hash(Str, Prev), Hash is (Prev + C)*17 mod 256. |  | ||||||
| @@ -1 +0,0 @@ | |||||||
| rn=1,cm-,qp=3,cm=2,qp-,pc=4,ot=9,ab=5,pc-,pc=6,ot=7 |  | ||||||
							
								
								
									
										110
									
								
								16/input.txt
									
									
									
									
									
								
							
							
						
						
									
										110
									
								
								16/input.txt
									
									
									
									
									
								
							| @@ -1,110 +0,0 @@ | |||||||
| \..../...................-......|..........|...-|.-.............|...................\/......-................. |  | ||||||
| ../|....|.......-...............\....\...........-...............|.......|...........-........................ |  | ||||||
| ............................\........../|........./.......................................\.........|....|./|| |  | ||||||
| ..................\.//.............-.......\..-.|.......\.......\.............................-..-....|....... |  | ||||||
| ../....\......|.|......|.....|./.-...|......-................//......|.../..-........\............\........... |  | ||||||
| ...|...-.....\...............-.../.................|...............\-................/|...............\....... |  | ||||||
| |............................./...\.........\.............-....../-..|......|.|.../................\.......... |  | ||||||
| .............-.|.../................|....................../................../..............................- |  | ||||||
| .......\.\....../.....|...........................-............/..-........-........................\......-.. |  | ||||||
| .....-.\................-.....|\....-....|..../....|.....|.\............./.../.....\...............|....|..... |  | ||||||
| ....|............................/............-|..|.........................-....................-....\....... |  | ||||||
| |....../......../../............................../....|......\..\....\\./.|................/......\......-./\ |  | ||||||
| ........-........./|............................./....\....-................../...|........|........-......... |  | ||||||
| ..........\......./..................|..../.........../.........../........../...................|.-.\.......\ |  | ||||||
| ................-..........\....................................../.........\\........-...--..........|..\.... |  | ||||||
| .-./...\......................\...../...\.\../.......|....................-...............\.-....\......./\..\ |  | ||||||
| .......................-.......\..............................\............................\.|...-............ |  | ||||||
| .......|...-..........-........-.......\.........././.-..|..../.....................\......................... |  | ||||||
| .....................\..|...../........\.....\\\..........\........................-............\..\...\...... |  | ||||||
| ....|.................|.........|.................................../.............-........................... |  | ||||||
| ......................|................../....\..|...................-.\.......-\.........................|... |  | ||||||
| ........-.........|.......\.................|................-..|../|\............../......................../ |  | ||||||
| ............|.\.................\..-...\.../...-....\...\...........|../..\........\.-........................ |  | ||||||
| ......./..............-..//................-.............../................/...-.......-......-............|. |  | ||||||
| ........\|...\......-....|...........\....\./..........-......\......../..-...-...|........|/................\ |  | ||||||
| ....\....-../......-..................................|..\/../....-.....|...............\.-.....\............| |  | ||||||
| ...................|..................|...........\............./.......-.......................\..\-../../... |  | ||||||
| ....-..............-..\/.|.......................\.................../......|..-..\......|.........-/......... |  | ||||||
| ........................./..\-..-.|..........-.....-............................\...................../....... |  | ||||||
| ...../../..../....|...|..|...|.......\..\...\........-..../.../......................-....../..\.............. |  | ||||||
| ..........\.......\.....|.../.........../....|./.../......-..../.....|-...||......./..........|...\........... |  | ||||||
| ...............................................-.........\.....|..................\|......................\... |  | ||||||
| .....................................\..................--......-........................-.//-....../-.-.....| |  | ||||||
| ........../..../.....|....\........................|.................................../............./...-/... |  | ||||||
| ........................-............./....-....-...-...........-..............|.............................. |  | ||||||
| ......|.....|........-./...\........|......................|........|.......|...-.....|....................... |  | ||||||
| ..-.......-....../.............-..\...................................|.........|..........|............./.... |  | ||||||
| .............................|.....\...........................././|......|................-....-............. |  | ||||||
| ........../..................-..........\....\..../.....\.................-...........|....................... |  | ||||||
| ................../..-......................|...........-|..............-......|......................-....... |  | ||||||
| -...........-..........|........-.......|\.././.|............................-/.|...........-/...............\ |  | ||||||
| .../..-..........................--.........|...|.|...................................-|...\........|......... |  | ||||||
| ........|.......-............|.........--.........-......./..../........-........\....../..../...........-.... |  | ||||||
| ..............-.............../...........................-................./......--..\..../................. |  | ||||||
| .......................--...........\..............\.......-.......-..|/.....\....-/......../........-........ |  | ||||||
| .............|......|...............-...................\...............\..-.....................|.\.........\ |  | ||||||
| .....\.-....\............\........|........|....\..............\............................................./ |  | ||||||
| ............................../...............././.......\.....\..........\|......-......|....|...........|... |  | ||||||
| ................|............/.....|.........|.......\...../...|....-........|................................ |  | ||||||
| ./...\............\............|..-....\...\........................\..........\......\.-........../.....\.... |  | ||||||
| .......-...|../..|..-.......-............................................-.....\.........-........../../...... |  | ||||||
| ...../.......-......../|..............|...................\......|............/|..........|..|...../..-...|..- |  | ||||||
| ....-.........../../....../\.................................\./.....................-...........-............ |  | ||||||
| .....|....................|.....|.......-..-.........\........|..............|...............-|.|....-/..-.... |  | ||||||
| .\|............-../..\.\.....|....../...|.............\.............................................\......... |  | ||||||
| ........|........../...\....-.......\..\.|-...........|./|./..........\|........--...\........\../............ |  | ||||||
| \..-..-......./.\....../....\..|.........\-...-||/...-...\....\.......-.\.......-................\...\.....\.. |  | ||||||
| ................................\............../..-.......................-............./..................... |  | ||||||
| \............................/...........-......\..-.......-.........../............|...............|......... |  | ||||||
| ......|..|........\.........................../.......-.............-.................../..................... |  | ||||||
| ..........................|......|.../..........................\..................................-......-... |  | ||||||
| ../...................-.........|...\...........-.|/..........|........-.-.................|.......|.........\ |  | ||||||
| ........................../......../..................\...........|......\.......................-............ |  | ||||||
| ...../..../\.../|....\....................................|....|......................|.........\...........-. |  | ||||||
| .|...../.....-.....................................|........||........|...........................//.......... |  | ||||||
| ........................\............|.............-..........................-......../..............|....... |  | ||||||
| ...................\.........-.........\..........|......................../\...-......................\|..... |  | ||||||
| ........././...........|.|..................../.....................-.............................-.|.|...-... |  | ||||||
| .-................................................-................-..\........-................../.\....|...| |  | ||||||
| .................../.|......\..\.\./.\.............|.......................................|.................. |  | ||||||
| ...............|............\\.....-..-.........\.....\-|..../............|\.......|.....\.\...../......\..... |  | ||||||
| ...-.............../..........\.....-..|....../......................-.....\.................../.\...........\ |  | ||||||
| ...................-.....................................\....\....../....|..\...-................\......-.... |  | ||||||
| .|..-............\........|.....|.\....\......-............\.|....|.\..............\|.|/...\.........|....../. |  | ||||||
| ........../...........|.-/...\......./../.............../.\/......-/........................./......\..|...... |  | ||||||
| ........|......................................\..................|............................/........-.-... |  | ||||||
| ...\....../................/...................\../...\\...................\.......|.................-........ |  | ||||||
| .....................................|.........../.\..--.........|\..........|.....-..................|...\... |  | ||||||
| .../...........\-..-....................\.-..-..........................-........|..../....................... |  | ||||||
| .........../-.../.............../.\................-.-..\.......\/............\......../...\\\......../....... |  | ||||||
| .......-..\...\.....\..\...........................|..\.......//..................../../.........|.........-.. |  | ||||||
| ......./............../...../.............../............/...../.............\......-...........\...-|.......- |  | ||||||
| ..|......\....................../..................\..................|.....................-....\............ |  | ||||||
| ../........................\............/.../...............|............-......................./............ |  | ||||||
| .-...../......\............\............|..........................\../.....\.....................-|.../...... |  | ||||||
| ...........|.......\....\.............................\.....................--.....|......................../. |  | ||||||
| ...|......./-.........................../.\......................|................|......|....|../...../...... |  | ||||||
| ...-............./..../................-......-....\\..|\...........|...................../....\|.\.-.....-... |  | ||||||
| ............./..//...........|...\|........-/..../.............|......................../.../................. |  | ||||||
| ......\........|........\...\.\........../..../..-.....-......./..|............-......................-....... |  | ||||||
| ....-./............|......|........................./.........\......................................\........ |  | ||||||
| ...................................-.........-..../....|../...........\..-....-.|..................../...././. |  | ||||||
| -...........|.-.......|.../.................|......./.....\..\......|.................................\....\.. |  | ||||||
| ......\.....................-....................-......................................|..................... |  | ||||||
| ................................\.......-...........|\......................./..........\-..-................| |  | ||||||
| ....../......|..................\.....|....\...........\...........................................\.......|.. |  | ||||||
| ..............-..\..|\.../............\..\.....-.....|.|\......\...................|.........\...........-.... |  | ||||||
| .-.-..\....././.........\.|...-....\....|....|............|..................../.............\................ |  | ||||||
| ...|..................................................-.............\../...................................... |  | ||||||
| \................-....................-./.........../.......\./..\|..|....../..-\.-...\..../.....-....|....... |  | ||||||
| ................|.................\|./................-..././\......../...................|....|....|......... |  | ||||||
| ........-...............................................\........................\.........................../ |  | ||||||
| ....../..............................\....\...|........\.-........\...............|..../.........../...|...... |  | ||||||
| ../....................................|...|...............................\.\..|............................. |  | ||||||
| ...|/|............|............/..........................\.......\.......-.../..--../...........\|........... |  | ||||||
| .......-..........\...........\/.....-./../................|.|........\\.................................-.... |  | ||||||
| ..|..\............\...|........../................................../...................|.\.............-..... |  | ||||||
| ....-.......\/................../....|................-.././..|.........-..........\.|.........../...../..|... |  | ||||||
| /../.|..............||...\..........\....-.../.....\-..........-.......-........................-.../...\..... |  | ||||||
| ../.|....|......../........-...........................\\......................\...................-.......... |  | ||||||
							
								
								
									
										70
									
								
								16/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										70
									
								
								16/part1.pl
									
									
									
									
									
								
							| @@ -1,70 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Map), |  | ||||||
|     propagate(Map, [0-0-3], FinalMap), |  | ||||||
|     count(FinalMap, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| count(Map, X) :- |  | ||||||
|     findall(1, (nth0(_, Map, Row), nth0(_, Row, _-D), \+ D = [0,0,0,0]), Ls), |  | ||||||
|     length(Ls, X). |  | ||||||
|      |  | ||||||
| % propagate(Map, Queue, NewMap). 'Dir' is 0/1/2/3 == light coming from N/E/S/W. |  | ||||||
| propagate(Map, [], Map). |  | ||||||
| propagate(Map, [X-Y-Dir|Queue], FinalMap) :- |  | ||||||
|     (   (nth0(X, Map, Row), nth0(Y, Row, Cell-Done), nth0(Dir, Done, 0)) |  | ||||||
|     ->  replace(Dir, Done, 1, NewDone), |  | ||||||
|         replace(Y, Row, Cell-NewDone, NewRow), |  | ||||||
|         replace(X, Map, NewRow, NewMap), |  | ||||||
|         call(Cell, X, Y, Dir, NewCells), |  | ||||||
|         append(Queue, NewCells, NewQueue) |  | ||||||
|     ;   NewQueue = Queue, |  | ||||||
|         NewMap = Map |  | ||||||
|     ), |  | ||||||
|     propagate(NewMap, NewQueue, FinalMap). |  | ||||||
|  |  | ||||||
| '.'(X, Y, 0, [NewX-Y-0]) :- NewX is X + 1. |  | ||||||
| '.'(X, Y, 1, [X-NewY-1]) :- NewY is Y - 1. |  | ||||||
| '.'(X, Y, 2, [NewX-Y-2]) :- NewX is X - 1. |  | ||||||
| '.'(X, Y, 3, [X-NewY-3]) :- NewY is Y + 1. |  | ||||||
|  |  | ||||||
| '/'(X, Y, 0, [X-NewY-1]) :- NewY is Y - 1. |  | ||||||
| '/'(X, Y, 1, [NewX-Y-0]) :- NewX is X + 1. |  | ||||||
| '/'(X, Y, 2, [X-NewY-3]) :- NewY is Y + 1. |  | ||||||
| '/'(X, Y, 3, [NewX-Y-2]) :- NewX is X - 1. |  | ||||||
|  |  | ||||||
| '\\'(X, Y, 0, [X-NewY-3]) :- NewY is Y + 1. |  | ||||||
| '\\'(X, Y, 1, [NewX-Y-2]) :- NewX is X - 1. |  | ||||||
| '\\'(X, Y, 2, [X-NewY-1]) :- NewY is Y - 1. |  | ||||||
| '\\'(X, Y, 3, [NewX-Y-0]) :- NewX is X + 1. |  | ||||||
|  |  | ||||||
| '|'(X, Y, 0, NewCells) :- '.'(X, Y, 0, NewCells). |  | ||||||
| '|'(X, Y, 2, NewCells) :- '.'(X, Y, 2, NewCells). |  | ||||||
| '|'(X, Y, 3, NewCells) :- '|'(X, Y, 1, NewCells). |  | ||||||
| '|'(X, Y, 1, [X1-Y-0, X2-Y-2]) :- X1 is X + 1, X2 is X - 1. |  | ||||||
|  |  | ||||||
| '-'(X, Y, 1, NewCells) :- '.'(X, Y, 1, NewCells). |  | ||||||
| '-'(X, Y, 3, NewCells) :- '.'(X, Y, 3, NewCells). |  | ||||||
| '-'(X, Y, 2, NewCells) :- '-'(X, Y, 0, NewCells). |  | ||||||
| '-'(X, Y, 0, [X-Y1-1, X-Y2-3]) :- Y1 is Y - 1, Y2 is Y + 1. |  | ||||||
|  |  | ||||||
| replace(I, List, Elem, NewList) :- |  | ||||||
|     nth0(I, List, _, Rest), |  | ||||||
|     nth0(I, NewList, Elem, Rest). |  | ||||||
|  |  | ||||||
| % Input stuff. Cell-(N,E,S,W) indicating which direction was already handled |  | ||||||
| input(Name, Map) :- phrase_from_file(lines(Map), Name). |  | ||||||
|  |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> ("\n"; eos), !. |  | ||||||
| line([Char-[0,0,0,0]|Chars]) --> [C], line(Chars), {char_code(Char, C)}. |  | ||||||
|  |  | ||||||
| eos([], []). |  | ||||||
|  |  | ||||||
| % Debug stuff |  | ||||||
| print(Map) :- maplist([X]>>(write(X), nl), Map), nl. |  | ||||||
|  |  | ||||||
							
								
								
									
										78
									
								
								16/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										78
									
								
								16/part2.pl
									
									
									
									
									
								
							| @@ -1,78 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Map), |  | ||||||
|     length(Map, Height), MaxX is Height - 1, |  | ||||||
|     Map = [Row|_], length(Row, Width), MaxY is Width - 1, |  | ||||||
|     findall([X-0-3], between(0, MaxX, X), S1), |  | ||||||
|     findall([X-MaxY-1], between(0, MaxX, X), S2), |  | ||||||
|     findall([0-Y-0], between(0, MaxY, Y), S3), |  | ||||||
|     findall([MaxX-Y-2], between(0, MaxY, Y), S4), |  | ||||||
|     append([S1, S2, S3, S4], Starts), |  | ||||||
|     concurrent_maplist( |  | ||||||
|         {Map}/[S, N]>>(propagate(Map, S, End), count(End, N)), Starts, Ns), |  | ||||||
|     max_list(Ns, Answer), |  | ||||||
|     nl, write(Answer), nl. |  | ||||||
|  |  | ||||||
| count(Map, X) :- |  | ||||||
|     findall(1, (nth0(_, Map, Row), nth0(_, Row, _-D), \+ D = [0,0,0,0]), Ls), |  | ||||||
|     length(Ls, X). |  | ||||||
|      |  | ||||||
| % propagate(Map, Queue, NewMap). 'Dir' is 0/1/2/3 == light coming from N/E/S/W. |  | ||||||
| propagate(Map, [], Map) :- write("."), flush_output. |  | ||||||
| propagate(Map, [X-Y-Dir|Queue], FinalMap) :- |  | ||||||
|     (   (nth0(X, Map, Row), nth0(Y, Row, Cell-Done), nth0(Dir, Done, 0)) |  | ||||||
|     ->  replace(Dir, Done, 1, NewDone), |  | ||||||
|         replace(Y, Row, Cell-NewDone, NewRow), |  | ||||||
|         replace(X, Map, NewRow, NewMap), |  | ||||||
|         call(Cell, X, Y, Dir, NewCells), |  | ||||||
|         append(Queue, NewCells, NewQueue) |  | ||||||
|     ;   NewQueue = Queue, |  | ||||||
|         NewMap = Map |  | ||||||
|     ), |  | ||||||
|     propagate(NewMap, NewQueue, FinalMap). |  | ||||||
|  |  | ||||||
| '.'(X, Y, 0, [NewX-Y-0]) :- NewX is X + 1. |  | ||||||
| '.'(X, Y, 1, [X-NewY-1]) :- NewY is Y - 1. |  | ||||||
| '.'(X, Y, 2, [NewX-Y-2]) :- NewX is X - 1. |  | ||||||
| '.'(X, Y, 3, [X-NewY-3]) :- NewY is Y + 1. |  | ||||||
|  |  | ||||||
| '/'(X, Y, 0, [X-NewY-1]) :- NewY is Y - 1. |  | ||||||
| '/'(X, Y, 1, [NewX-Y-0]) :- NewX is X + 1. |  | ||||||
| '/'(X, Y, 2, [X-NewY-3]) :- NewY is Y + 1. |  | ||||||
| '/'(X, Y, 3, [NewX-Y-2]) :- NewX is X - 1. |  | ||||||
|  |  | ||||||
| '\\'(X, Y, 0, [X-NewY-3]) :- NewY is Y + 1. |  | ||||||
| '\\'(X, Y, 1, [NewX-Y-2]) :- NewX is X - 1. |  | ||||||
| '\\'(X, Y, 2, [X-NewY-1]) :- NewY is Y - 1. |  | ||||||
| '\\'(X, Y, 3, [NewX-Y-0]) :- NewX is X + 1. |  | ||||||
|  |  | ||||||
| '|'(X, Y, 0, NewCells) :- '.'(X, Y, 0, NewCells). |  | ||||||
| '|'(X, Y, 2, NewCells) :- '.'(X, Y, 2, NewCells). |  | ||||||
| '|'(X, Y, 3, NewCells) :- '|'(X, Y, 1, NewCells). |  | ||||||
| '|'(X, Y, 1, [X1-Y-0, X2-Y-2]) :- X1 is X + 1, X2 is X - 1. |  | ||||||
|  |  | ||||||
| '-'(X, Y, 1, NewCells) :- '.'(X, Y, 1, NewCells). |  | ||||||
| '-'(X, Y, 3, NewCells) :- '.'(X, Y, 3, NewCells). |  | ||||||
| '-'(X, Y, 2, NewCells) :- '-'(X, Y, 0, NewCells). |  | ||||||
| '-'(X, Y, 0, [X-Y1-1, X-Y2-3]) :- Y1 is Y - 1, Y2 is Y + 1. |  | ||||||
|  |  | ||||||
| replace(I, List, Elem, NewList) :- |  | ||||||
|     nth0(I, List, _, Rest), |  | ||||||
|     nth0(I, NewList, Elem, Rest). |  | ||||||
|  |  | ||||||
| % Input stuff. Cell-(N,E,S,W) indicating which direction was already handled |  | ||||||
| input(Name, Map) :- phrase_from_file(lines(Map), Name). |  | ||||||
|  |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> ("\n"; eos), !. |  | ||||||
| line([Char-[0,0,0,0]|Chars]) --> [C], line(Chars), {char_code(Char, C)}. |  | ||||||
|  |  | ||||||
| eos([], []). |  | ||||||
|  |  | ||||||
| % Debug stuff |  | ||||||
| print(Map) :- maplist([X]>>(write(X), nl), Map), nl. |  | ||||||
|  |  | ||||||
							
								
								
									
										10
									
								
								16/test.txt
									
									
									
									
									
								
							
							
						
						
									
										10
									
								
								16/test.txt
									
									
									
									
									
								
							| @@ -1,10 +0,0 @@ | |||||||
| .|...\.... |  | ||||||
| |.-.\..... |  | ||||||
| .....|-... |  | ||||||
| ........|. |  | ||||||
| .......... |  | ||||||
| .........\ |  | ||||||
| ..../.\\.. |  | ||||||
| .-.-/..|.. |  | ||||||
| .|....-|.\ |  | ||||||
| ..//.|.... |  | ||||||
							
								
								
									
										141
									
								
								17/input.txt
									
									
									
									
									
								
							
							
						
						
									
										141
									
								
								17/input.txt
									
									
									
									
									
								
							| @@ -1,141 +0,0 @@ | |||||||
| 332114151454212113454214512653223255653145556624424154456133366132437365465536664121621126441346245234461242215311265554234431413125424232423 |  | ||||||
| 424122453313324434224115136213521634564424342426236222533671444755341166437735256274463642146521245445525564224535224235252421321153331414212 |  | ||||||
| 413135332143231235543411242346121246426526353322253563266165247116731545675123735113725356164644235243456435165362223324541111145554434255422 |  | ||||||
| 342414155321154351141122633651163361322521331431171711732775134466255552673716661246145621631741136461146333345323514452212522243423331243533 |  | ||||||
| 233122133123434345314435544645431134453126541174227715665316662211115137412561563227455475361474445363563152111331443163553513522255241544413 |  | ||||||
| 311155314135534244231531535261532514433556673217725631772737642444271655435143741351644364131521776726224131145423362141264421135213424444312 |  | ||||||
| 125223544215111353343424155256123365154351463763766674147324253115775277444764475616636627512777314123411653155251461135612231241532431443541 |  | ||||||
| 154322542255554251655461341623214513115361722221264336433413737164732151366715314571755667734463471347653566243234254154662144543222435244125 |  | ||||||
| 252325122542331561151545613663525144424744652635577332743277337361111426356754123713326313135767754125231545141233212414322652635242142211243 |  | ||||||
| 454455312142515231552161246536164222446676131324746654761237342662724443133775752352417235142551513416366647642554343645133342433313112223215 |  | ||||||
| 211321313544336425166555444645646314661414271372414365632613313465526437351145461333343753254644114475234636422562331151621222261343242132553 |  | ||||||
| 333323312524514633125345124531441435312467416662235315752745412217643724364731152373347747421417475252352125265161445435134163426142233353211 |  | ||||||
| 143415113132116416143626162231614424513725134766666676741241522865823673657635526716525717332247166312254667317151665462144364126645223552411 |  | ||||||
| 123334222542663461264564446667515346467312356331546413675457588884644474545872866632331424544647524462746756437435461546521636115321425325224 |  | ||||||
| 535345333562155134222145436426256733221166524375121367788836878623525623827363242436426285231274677542316742253627612345624461262345554521442 |  | ||||||
| 513513214555346252356533625326334371762344355253554747668642823328845258872476637478333343444741446277731137761242516643141361443236463232215 |  | ||||||
| 314525145346116555121632636161213754311442177643444555582648638323545372736247584882637437532357337727176314174617322351326335323111115424155 |  | ||||||
| 142332123435235625634363646646665357435316213755777836867244734747572768533477723538834633673282641347553626573276175764552564465454441435441 |  | ||||||
| 115211236413132455511236635577446251412725323837876686385477828546337857552852634472863357843565343753573547723431623543642234642413143151542 |  | ||||||
| 344114335565255663416177255247156565162253555737563755723446262582337484754524764236238872364836885463427235157556711172742232315152424214355 |  | ||||||
| 322351245444122231555251374126727321177145723432388575878262785645433733687626542747657328463363325266561117334673213464515334316451252323323 |  | ||||||
| 114145243212231145266145633211575313262368663374456836668225838276887736247478522334345632464286642377734773245555273715255363521255411436125 |  | ||||||
| 455425264555563656334547167127221744428428767672557672528634562733434744234767632378343637854563773843778372227556167732575433414361653661645 |  | ||||||
| 523515321446441335631614642677743527678465286472244872478426436773365258245445623486253654722483532674422763615327372421556232261315262663663 |  | ||||||
| 243531332212553542512231776744326572857225588676323528368528574588687496986977437666235744834528878678885244665767573623253644364166116254113 |  | ||||||
| 444444112522431332452677416112527782362277632366487625237276747897354943947465889953376837548526737743346528781622556466746677544446126242133 |  | ||||||
| 551224351455343155254473223427545326426283637545435543486459335566488585644794556748393635283844433672572582847247363644233223765612263324266 |  | ||||||
| 624512252531155611465764114412153772872664238382223677844796388487978588349347899373747553577834454374823787527861133444621766341566356141365 |  | ||||||
| 122513321515254337477661465512352573543734686234338559996944463795463356755575964934753954988266763385387234286423462633175673633153162556456 |  | ||||||
| 536631433532656576652771312522342646633782573233279989744885775639388386544597879884345946975725737282827242738352524521432253763215654523115 |  | ||||||
| 322242133611462672545617461568524454733756842479444543488449547487568897468683955886935535694896858528355443457358667243642313225326142635412 |  | ||||||
| 433165134443115323655412565336574774363263823339637755748738478844753443366543756864599667497478638535364437368324232432351147613376615461324 |  | ||||||
| 255546365535224352467626565444446263832366733855339686844454779545954833997374664863737346696795866578234664656443247566163775227133522126211 |  | ||||||
| 332543346224456342457145637872588878872574934465846438696585998768959393446858386444585949749989395845243437522874257474667424163321432143662 |  | ||||||
| 562336531135536464571531445325786432525654973537497993963876555849853689467557948538984566573893374699522258566835263827361447616765121531241 |  | ||||||
| 134431331273426633773265462863548226445269397663747657533667545839948559886569784664389446348545683389848688445244623781735357464754775332441 |  | ||||||
| 455514441477666641215728225436682865472376638684673865686537967585959697777945778763958683986999446946735832744256768434443442331647672323162 |  | ||||||
| 642551661752757431115132444368754488566587583899343636597956846969766697666696549958595334986455854649598564858883536552667547462457766361136 |  | ||||||
| 523135446552147326745727437763658824294779583474959943837486894449889786848545858986984945998848759695488574225628248774221513366313255152244 |  | ||||||
| 662142534574774471476733285584773353469368338384693894458894844555764768998647478459784635737579344766346566445772776385244757261641646262231 |  | ||||||
| 426164675347223367356542678766487676449383835573944385678679999588547686484865465688679958436853663379986545474734678688476311743671535264562 |  | ||||||
| 636221515617411216247337338427225735479885464746489395486445598697885986665448699866884656794474879996386956934725254526364324475256241275663 |  | ||||||
| 631655547723135622724356638578268487796375786548339985946895559755594954857979446575876457888866863986588685442687887862434325557242465434334 |  | ||||||
| 526561675234753571754873872743282697865877868743798687568577798587569899574484554484486596454938697634387879836757377864647232634674626657136 |  | ||||||
| 224367751471353647528352332475353678438596388378986467455448887646465576695666985755458794657464949967358875375525855268833747673643621712113 |  | ||||||
| 555155247624263644685247526382749435467889975896454465589895886678995785898565848957859844445874878643778658535937624565377735216144455146652 |  | ||||||
| 326237275165115664286248564635235597494984939548556988958465866659979766684556496568777489668689659466945846453722248242466764614544772336545 |  | ||||||
| 252431512527441277652682654526537378589387973677795869974677788748496486946677468975449899885555473979374748343648488332525562346344443772553 |  | ||||||
| 334445255752755383853263265588439634448596738474455889458598988975979996868859879877898797766766846958879864596965328638267846232745551326455 |  | ||||||
| 331776676677775667763658323247548647473346994464947655845774859797686965997669898985478769844957676563749678677496544457376882437561732771415 |  | ||||||
| 524166432536425482552537234634638489648635668489984866757588557998759988879759786984579576979588678858478864969749575527756262527122755635643 |  | ||||||
| 621727645151575887576234428334879934367558864978956787976575789687695598659778579995684454959976779569644787946544773527367553271175577267671 |  | ||||||
| 146536267557111863546535476546756933855578657694848587666677867759855877966869976666895795977754986464958576833534434856257276637677672374622 |  | ||||||
| 627162456571435862223277266645437845769458457477859464885659565779885987687868765787589649788985577888968356376393555423832745685215266467517 |  | ||||||
| 356365425561522443354482823779863564644867657899958444967567857769895796968885877556985858769679467875486466963448536675724876383637637347332 |  | ||||||
| 662617714433245736446788383839477478955657876855994484679589576895957757596689789878757698854677478674545986936783367487553578825131414257161 |  | ||||||
| 332752445446138652863525378663559896379746684495687998757655759676957899686977876787997889474577748675663489587853377638443448848132472112131 |  | ||||||
| 453742717451167763344725476499465974694977569678544576559869769779787858777859878659995587547699787885775974835467735257544662734254664167234 |  | ||||||
| 637433522225172664387548695933565599774766649475487879985879567866859778897575697897755575969866878866559366585534438655344868386256513661571 |  | ||||||
| 546147626464562275655733897739395889457894577877799798775969558887665695975589685557965565588684599794655433543949864872227536744356275446534 |  | ||||||
| 466362637642348545833267889637543575568589757869745856956895658665988768997999655989667957999546697465848679934687374434356755244437463163527 |  | ||||||
| 432241752456735627523255338945585453647447657554545955769795789789997877986787567985578897759678944769468657795794576536268322838744716172531 |  | ||||||
| 362335524521283767267868233894954334695664994778485687755666859567896666877777856977986957755786769546887535444947538736628443346847462743523 |  | ||||||
| 242277366552744663233252489644883664499486849778665576798778978997766697987689796855857957659765978885748744987558355833587345887644235437312 |  | ||||||
| 561476674157528347537548599693576474885768577976886585698957697776687879979969876766765577555667674874858777897543556687327834848556466137735 |  | ||||||
| 266443423617535645753445779387753884547464964579665696566776797688777799889668699855885667595966647668866856763675976465687353888681336245316 |  | ||||||
| 572245756261228737774356774434644334465597956478659678566557786678987687767797677855856669659856465546998943449649767856528226362754511645257 |  | ||||||
| 765454637722232528732727987873694678786897686957758658776958776876669697776896797985686878577656659767548457559453559953286436834721254612345 |  | ||||||
| 715574444332523722776764939533778537899944495848987975789655786679777697866668686698596879975965745866774945968874839792274752686441541427615 |  | ||||||
| 345426643746658264878244879834877886854849486559776688568989799999769977869688867896566869679855957757568478643556858683764734437851357452275 |  | ||||||
| 155264155457638423874255465346979399784764447766558558566789767877968796988868867775556888798564684589499477496386865936552684743662561437775 |  | ||||||
| 556553777462428352772346536564948445645848965477587585797665668668998889899669897695759889687557667557584743537744477835564286662643223525755 |  | ||||||
| 641634624577764727436225779978964774555745645897796877559888677666767998968896788888689868597664985685858554356376665498623746875723662152372 |  | ||||||
| 273464717234862288588878479738499968679778769844967858766886688999898688976778797877666987697667878994996657354955977482446733867376656676652 |  | ||||||
| 551452257437387582588858645358387357746754779495965859595599878879877987668898767897997855656868855556757747486357487665847763562466422346611 |  | ||||||
| 563771242132683432222557436749937783648584568946588665665565698788787787998889676985866968796874695585557699853673538872377582853855131713461 |  | ||||||
| 621754271237543666875247946859748999855959977745986585788867866697696868789869768995576776679784564654855987787897358797454368778485716675345 |  | ||||||
| 164557236272472546822232846668399389759849987667659785676559867986867888878979688978688695876854496969468763957695738688223564746777531171265 |  | ||||||
| 242346713471432688725345548968585493977887799777998877589665998798978979687788866756996567759999475865446943768859868732555538748467434116221 |  | ||||||
| 724542325744422353827368477965435394957587656594657956589558869678779879978997989779557567777576965957979596983484379373273827325462765413315 |  | ||||||
| 134467152455573564745453678895499973399455464974855888996756898968898666769686667565559598686586858797879648838954569323385654838463315425344 |  | ||||||
| 677644725227283525233274374448443847867587946496756687655559798668967889678966568857686688687474797656795664978587359585475743444537567171372 |  | ||||||
| 336331514454173343536876798555466989966569868897467756888959675759587897868888779865575958968754759769695636436637498444722662454277255276665 |  | ||||||
| 245372163442533628423276455934688944899667958898697795685589868988659597757695978985568755897588876768955385979973858688872756554467423674135 |  | ||||||
| 251472373172465268687323637558467886966997454586679595656555799786788685987977899567657589878679656758649535738838795357634278627632741221151 |  | ||||||
| 165461424121142643385468264846788537647578965477849879999585588788675566556988859776968656866748767857679947367996538366526226283326214137262 |  | ||||||
| 552347532473355256876326459866563676749894796886745598856867798578859675999778699689958599985994868557485944545796355254658552388764762637577 |  | ||||||
| 411635777264744624762842767953597944883658696686489566856859985666787779576968666779658795444747587477754964887759644474728635835454465116123 |  | ||||||
| 525225774221277357825768273779533699948575746956759694897959969678678956879656896656877599855484649666456453586543836385766273838732235171565 |  | ||||||
| 413446335411722332567467583938598777437966488478684886785797667899976899669555696776775778568978567578544555855646936463366758257267556526367 |  | ||||||
| 232225126611437885288888224674796768654898896446868958777899786966689959778798898557578584894674968778348499974537656632752837285262221612562 |  | ||||||
| 312524227137512563356783624765555493696544874684948745994767775568987755855875779575947858745547754676685368397837548474384853754524257634625 |  | ||||||
| 164576266612155222885335524447458943676659664764845487449595699877699967897599959997454474895848957865889443963557382768878244863267411634354 |  | ||||||
| 343423173533275137862288876573755898763474747556889894445589898998965697755557969845649449784567454999596856689395535336738467324251433443313 |  | ||||||
| 324642722572242663573535885523747435878468838854477747966756946868979567855589567654976484995966698365838477364437873477732253364252715313424 |  | ||||||
| 633536551523473523243244283326385679995773658874569756469784895788454454466967676647864944477548686957835935734344472886742338655365237743545 |  | ||||||
| 126254446714213213436657334784236857866388445465965986588698754599946596568588549887968594867664769467935498667776266236524482164321464331744 |  | ||||||
| 632122261674245423458774627724266986994837445876996574698444995879887876557659858469744965457586679894948948458686783436673327143364537263243 |  | ||||||
| 465244311333114323725266442638884838436463333596776867596749549964879559765764848754756989656759354743483867679752528468865454711412437437215 |  | ||||||
| 261415356334624227658332247423732949399345845987468987484698858676956555788758758658656776848894849855333685652263222425756836554766646272443 |  | ||||||
| 521646365566326414152826643636235965753596433593485485995795654765798865954954774954854696879635646973347786334722533446758821117733417454123 |  | ||||||
| 252365462474552424777626563728632557857897556978697654768788568859684765969498588674456548639599966588966387644635645878744172627175772722511 |  | ||||||
| 322111677544534553154787663277355446646868855664534468569956798568597597797985774677475959647634668749666469868462232582736411761171527151611 |  | ||||||
| 612342244172321553733876453434327274768778644399663358375677775959999689866565698576678735898955879849469468533635274885381342774377452254623 |  | ||||||
| 651234151461371123426165832588863365476947993573539948648464444454868478568755779686456634875633856784657866623534635827356542713775643236154 |  | ||||||
| 426422164365351275264187473582686768433977556986656756547883959898696745877867456753466554348833684967659438745566626826373666115341437512356 |  | ||||||
| 251224616536545656545722482674755228883867595576787346349774537744798879665975566954395436673954998843688762228354424347472522235531376331326 |  | ||||||
| 335541164543114144761463764542372366287647948934896437773435546559497746964557357657989773374388363578827574482885664583611615165136533323225 |  | ||||||
| 261331415374732264655453647768254758542843666899665464693864936867468988485548354636569486458753866966873563534677586636515154572216163145356 |  | ||||||
| 313232345646561617413414322476366687653335889569688478593764445835478384478864579889578586636387865692637456447655326361775525421537351443252 |  | ||||||
| 354422624313221353436553153273228525734583687565383399578579988847365867834335367495554595854533343462877332872884662534165677211161214245532 |  | ||||||
| 542143423513624235434762263462784556783874775748777548864766786566666483439848384735573868946946858786326267558486871376536352777136111223641 |  | ||||||
| 563426221453513247534322123144884253486238658666956647949649676497797648994455393587476533436988875438823554657527344561756544414561541432165 |  | ||||||
| 142324116651521772664345223478653548388638657544743867958975353393743498698444676463749436355523368338437534752654673372352117774565612455142 |  | ||||||
| 521252364664151234171376543732684442243322874775475946689463578554843486635378489996373438934348323722334326883767125435113461472456453544434 |  | ||||||
| 366456342146455776343221412213427758323428237676455365546898955778897855479458369598384867528536647227825337245572327613615476534655616364436 |  | ||||||
| 456262313325465615634626471552134825254874668258282367564793649864648953456359464348433437556572444858443732283547165236722572136426516552255 |  | ||||||
| 215214555215121531363153365156745726838285476672588458468636756485794378474346453448633724336222848523788322461363427143622643764542154516631 |  | ||||||
| 445435243132162412737127746252357518384582434632727743323776457988789744747556744546232245626842323687453554237454472415624653454464312353566 |  | ||||||
| 413512155566552553344114742623626673426573822753222774627337845846626888678573728525426326742682452368847826463175721614615753615514521215131 |  | ||||||
| 121335422224363443354722134157661571538463676346636753673773667735542264247284835668253673727235386467366265255634467667311151641335353324222 |  | ||||||
| 124223214542653663566665314176475124517877488374766545574687862278742556456474375457627645727273436443464373242226321257155151623466354226535 |  | ||||||
| 224342321546661552253517421437534637164144462465386448554748656436426565223525648357863358822784435247243523427371615216772115551454466464444 |  | ||||||
| 152151341446215313532274524113276662527567472536387628785437566568247675623344644462557726773438776443134255637564367716346225361466131111152 |  | ||||||
| 441131264554242642424433222772464422143526743636387232724335464526838833628275276362774824878543373332675711255316334646112165166145436225355 |  | ||||||
| 222223346255612511131365546422132224534414716137367462626727462537235434658525224753354265433542656353255435456465556334646626646616114541252 |  | ||||||
| 122254524154564644355156315711257331373433572663242435353634872647446868386788243424223288834522715673434774222724734714143326426614126132222 |  | ||||||
| 512124425315656654512332445376341167415722616144652756353244273445678654828624424884532254424714514364625764637237362662611534611466615252341 |  | ||||||
| 144321153255241633164514444655277754717616621362745215268637475632553485326364864874882263216537664313267663452313553535362633636242154324325 |  | ||||||
| 215522151121146641113121366265573756214663745551174365226877835824533746627332877664426625513336257243467577673364646532514644421421452544444 |  | ||||||
| 335313335414162252122432222633336424453112573546364534773326574784656537542222587263555442637622533151434567664221616224322511431465543243151 |  | ||||||
| 554515254153443453616316365142667412367456471655714423572426445365634244714461517246763535321157222422452237455335224412113513116341541551245 |  | ||||||
| 242342552224414663454122443156612324424462742634773552556733543127575614737735454524176471342351442215257671354234543465566226442453421214332 |  | ||||||
| 423332221231152525435143325351441332245166165545746441225161776522365226425741716113757265346324464231517554455663426161163531133151125441514 |  | ||||||
| 424112342444153352442235323533255342273475361517511641775633616543162217257766644611574212127347362451473365646541415632262325644422215452323 |  | ||||||
| 535123215132355441452363223224326111142177116662677154564514756736116151566423375123522315721736346462721611643433515643226113553235433255245 |  | ||||||
| 224211552121124334331251616112654554353552524371574216334214517671732613731631733667464726623341735667366531311523356541525225553551524513511 |  | ||||||
| 133135253512342521415314125243161342522122244673535175332435771431335676512526131661651773762677772541211631242452526663421451534253432541324 |  | ||||||
| 332331532553424153415425566412652656345152461311365447431514137764335267535631223555617762772366325564623566653643641356522511155115525413323 |  | ||||||
| 124122513322542451532212635122623231342565341643435327641416177253251451471617514752111736553524423266211413554453514154155451335251224234321 |  | ||||||
| 114322223311332542521324344432242254215112631121532433351616521421133465333644152516113467545556154614445514451441162115222213523543445151233 |  | ||||||
							
								
								
									
										132
									
								
								17/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										132
									
								
								17/part1.pl
									
									
									
									
									
								
							| @@ -1,132 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
| % :- table cost/3. |  | ||||||
| % :- table to_key/2. |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Map), |  | ||||||
|     solve(Map, N, Gs, Width, Height), |  | ||||||
|     dict_pairs(Gs, _, GList), transpose_pairs(GList, Gx), max_member(Max-_, Gx), |  | ||||||
|     visualize(Width, Height, Gs, Max, OutMap), |  | ||||||
|     print(OutMap), |  | ||||||
|     write(N), write(" - "), write(Max), nl. |  | ||||||
|  |  | ||||||
| solve(Map, N, EndGs, Width, Height) :- |  | ||||||
|     length(Map, Height), EndX is Height - 1, |  | ||||||
|     Start1 = 0-0-horz, Start2 = 0-0-vert, |  | ||||||
|     to_key(Start1, K1), to_key(Start2, K2), Gs = cost{}.put(K1, 0).put(K2, 0), |  | ||||||
|     Map = [Row0|_], length(Row0, Width), EndY is Width - 1, |  | ||||||
|     heur(0-0, EndX-EndY, Heur0), |  | ||||||
|     list_to_heap([Heur0-Start1, Heur0-Start2], Queue), |  | ||||||
|     astar(Map, Gs, Queue, EndX-EndY, N, EndGs). |  | ||||||
|  |  | ||||||
| from_key(Key, X-Y-Dir) :- |  | ||||||
|     X is Key div 10000, |  | ||||||
|     Y is (Key mod 10000) div 10, |  | ||||||
|     (Key mod 2 =:= 0 -> Dir = horz; Dir = vert). |  | ||||||
|  |  | ||||||
| replace(I, List, E, NewList) :- nth0(I, List, _, R), nth0(I, NewList, E, R). |  | ||||||
|  |  | ||||||
| display(0, "  ", _). |  | ||||||
| display(G, "▗ ", Max) :- 0 < G, G =< (Max div 4). |  | ||||||
| display(G, "▝▖", Max) :- (Max div 4) < G, G =< 2*(Max div 4). |  | ||||||
| display(G, "▞▖", Max) :- 2*(Max div 4) < G, G =< 3*(Max div 4). |  | ||||||
| display(G, "▞▞", Max) :- 3*(Max div 4) < G, G =< 4*(Max div 4). |  | ||||||
| display(G, "▟▞", Max) :- 4*(Max div 4) < G, G =< 5*(Max div 4). |  | ||||||
| display(G, "▟▛", Max) :- 5*(Max div 4) < G, G =< 6*(Max div 4). |  | ||||||
| display(G, "█▛", Max) :- 6*(Max div 4) < G, G =< 7*(Max div 4). |  | ||||||
| display(G, "██", Max) :- 7*(Max div 4) < G. |  | ||||||
|  |  | ||||||
| put_g(Key-G, OldMap, NewMap) :- |  | ||||||
|     from_key(Key, X-Y-_), |  | ||||||
|     nth0(X, OldMap, OldRow), nth0(Y, OldRow, OldG), NewG is G + OldG, |  | ||||||
|     replace(Y, OldRow, NewG, NewRow), |  | ||||||
|     replace(X, OldMap, NewRow, NewMap). |  | ||||||
|  |  | ||||||
| visualize(Width, Height, Gs, Max, OutMap) :- |  | ||||||
|     length(Row, Width), maplist(=(0), Row), |  | ||||||
|     length(Map, Height), maplist(=(Row), Map), |  | ||||||
|     dict_pairs(Gs, _, GList), |  | ||||||
|     foldl(put_g, GList, Map, GMap), |  | ||||||
|     maplist( |  | ||||||
|         {Max}/[OldRow, NewRow]>>( |  | ||||||
|             maplist( |  | ||||||
|                 {Max}/[G, Unicode]>>( |  | ||||||
|                     display(G, Unicode, Max)), OldRow, NewRow)), |  | ||||||
|         GMap, OutMap). |  | ||||||
|  |  | ||||||
| astar(_Map, Gs, PQueue, DestX-DestY, N, Gs) :- |  | ||||||
|     get_from_heap(PQueue, _, X-Y-From, _), X = DestX, Y = DestY, |  | ||||||
|     to_key(DestX-DestY-From, FromKey), N = Gs.FromKey, !. |  | ||||||
|  |  | ||||||
| astar(Map, Gs, PQueue, DestX-DestY, N, EndGs) :- |  | ||||||
|     get_from_heap(PQueue, _, X-Y-From, PQueueAfterPop), |  | ||||||
|     to_key(X-Y-From, CurrentKey), CurrentG = Gs.CurrentKey, |  | ||||||
|  |  | ||||||
|     findall(To-Cost, next(Map, X-Y-From, To, Cost), Neighbors), |  | ||||||
|     foldl(add_neighbor(CurrentG, DestX-DestY), |  | ||||||
|           Neighbors, PQueueAfterPop-Gs, NewPQueue-NewGs), |  | ||||||
|     astar(Map, NewGs, NewPQueue, DestX-DestY, N, EndGs). |  | ||||||
|  |  | ||||||
| add_neighbor(CurrentG, DestX-DestY, (X-Y-Dir)-Cost, HeapIn-GsIn, HeapOut-GsOut) :- |  | ||||||
|     NewGCandidate is CurrentG + Cost, |  | ||||||
|     to_key(X-Y-Dir, Key), ExistingG = GsIn.get(Key, 9999999), |  | ||||||
|     (   NewGCandidate < ExistingG |  | ||||||
|     ->  NewG = NewGCandidate, GsOut = GsIn.put(Key, NewG), |  | ||||||
|         heur(X-Y, DestX-DestY, Heur), Weight is NewG + Heur, |  | ||||||
|         (   get_from_heap(HeapIn, _, X-Y-Dir, _), HeapOut = HeapIn |  | ||||||
|         ;   add_to_heap(HeapIn, Weight, X-Y-Dir, HeapOut) |  | ||||||
|         ) |  | ||||||
|     ;   GsOut = GsIn, HeapOut = HeapIn |  | ||||||
|     ). |  | ||||||
|  |  | ||||||
| to_key(X-Y-horz, Key) :- Key is 0 + Y*10 + X* 10000. |  | ||||||
| to_key(X-Y-vert, Key) :- Key is 1 + Y*10 + X* 10000. |  | ||||||
|  |  | ||||||
| next(Map, X-Y-horz, NextX-Y-vert, Cost) :- |  | ||||||
|     LowX1 is X - 3, HighX1 is X - 1, |  | ||||||
|     LowX2 is X + 1, HighX2 is X + 3, |  | ||||||
|     (between(LowX1, HighX1, NextX); between(LowX2, HighX2, NextX)), |  | ||||||
|     vert(Map, X-Y, NextX, Cost). |  | ||||||
| next(Map, X-Y-vert, X-NextY-horz, Cost) :- |  | ||||||
|     LowY1 is Y - 3, HighY1 is Y - 1, |  | ||||||
|     LowY2 is Y + 1, HighY2 is Y + 3, |  | ||||||
|     (between(LowY1, HighY1, NextY); between(LowY2, HighY2, NextY)), |  | ||||||
|     horz(Map, X-Y, NextY, Cost). |  | ||||||
|  |  | ||||||
| vert(Map, X-Y, NextX, Cost) :- |  | ||||||
|     cost(Map, NextX-Y, _), |  | ||||||
|     findall( |  | ||||||
|         Ci, |  | ||||||
|         (   (X < NextX -> between(X, NextX, Xi);  between(NextX, X, Xi)), |  | ||||||
|             Xi =\= X, |  | ||||||
|             cost(Map, Xi-Y, Ci)), |  | ||||||
|         Costs), |  | ||||||
|     sum_list(Costs, Cost). |  | ||||||
|     % Cost = Costs. |  | ||||||
|  |  | ||||||
| horz(Map, X-Y, NextY, Cost) :- |  | ||||||
|     cost(Map, X-NextY, _), |  | ||||||
|     findall( |  | ||||||
|         Ci, |  | ||||||
|         (   (Y < NextY -> between(Y, NextY, Yi);  between(NextY, Y, Yi)), |  | ||||||
|             Yi =\= Y, |  | ||||||
|             cost(Map, X-Yi, Ci)), |  | ||||||
|         Costs), |  | ||||||
|     sum_list(Costs, Cost). |  | ||||||
|     % Cost = Costs. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| heur(X1-Y1, X2-Y2, Dist) :- Dist is abs(X1 - X2) + abs(Y1 - Y2). |  | ||||||
|  |  | ||||||
| cost(Map, X-Y, Cost) :- nth0(X, Map, Row), nth0(Y, Row, Cost). |  | ||||||
|  |  | ||||||
| print(Map) :- maplist([X]>>(atomic_list_concat(X, N), write(N), nl), Map). |  | ||||||
|  |  | ||||||
| input(Name, Map) :- phrase_from_file(lines(Map), Name). |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Nums|Lines]) --> |  | ||||||
|     line(Line), lines(Lines), |  | ||||||
|     {maplist([C, N]>>(N is C - 48), Line, Nums)}. |  | ||||||
| line(Nums) --> digits(Nums), "\n". |  | ||||||
							
								
								
									
										132
									
								
								17/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										132
									
								
								17/part2.pl
									
									
									
									
									
								
							| @@ -1,132 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
| % :- table cost/3. |  | ||||||
| % :- table to_key/2. |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Map), |  | ||||||
|     solve(Map, N, Gs, Width, Height), |  | ||||||
|     dict_pairs(Gs, _, GList), transpose_pairs(GList, Gx), max_member(Max-_, Gx), |  | ||||||
|     visualize(Width, Height, Gs, Max, OutMap), |  | ||||||
|     print(OutMap), |  | ||||||
|     write(N), write(" - "), write(Max), nl. |  | ||||||
|  |  | ||||||
| solve(Map, N, EndGs, Width, Height) :- |  | ||||||
|     length(Map, Height), EndX is Height - 1, |  | ||||||
|     Start1 = 0-0-horz, Start2 = 0-0-vert, |  | ||||||
|     to_key(Start1, K1), to_key(Start2, K2), Gs = cost{}.put(K1, 0).put(K2, 0), |  | ||||||
|     Map = [Row0|_], length(Row0, Width), EndY is Width - 1, |  | ||||||
|     heur(0-0, EndX-EndY, Heur0), |  | ||||||
|     list_to_heap([Heur0-Start1, Heur0-Start2], Queue), |  | ||||||
|     astar(Map, Gs, Queue, EndX-EndY, N, EndGs). |  | ||||||
|  |  | ||||||
| from_key(Key, X-Y-Dir) :- |  | ||||||
|     X is Key div 10000, |  | ||||||
|     Y is (Key mod 10000) div 10, |  | ||||||
|     (Key mod 2 =:= 0 -> Dir = horz; Dir = vert). |  | ||||||
|  |  | ||||||
| replace(I, List, E, NewList) :- nth0(I, List, _, R), nth0(I, NewList, E, R). |  | ||||||
|  |  | ||||||
| display(0, "  ", _). |  | ||||||
| display(G, "▗ ", Max) :- 0 < G, G =< (Max div 4). |  | ||||||
| display(G, "▝▖", Max) :- (Max div 4) < G, G =< 2*(Max div 4). |  | ||||||
| display(G, "▞▖", Max) :- 2*(Max div 4) < G, G =< 3*(Max div 4). |  | ||||||
| display(G, "▞▞", Max) :- 3*(Max div 4) < G, G =< 4*(Max div 4). |  | ||||||
| display(G, "▟▞", Max) :- 4*(Max div 4) < G, G =< 5*(Max div 4). |  | ||||||
| display(G, "▟▛", Max) :- 5*(Max div 4) < G, G =< 6*(Max div 4). |  | ||||||
| display(G, "█▛", Max) :- 6*(Max div 4) < G, G =< 7*(Max div 4). |  | ||||||
| display(G, "██", Max) :- 7*(Max div 4) < G. |  | ||||||
|  |  | ||||||
| put_g(Key-G, OldMap, NewMap) :- |  | ||||||
|     from_key(Key, X-Y-_), |  | ||||||
|     nth0(X, OldMap, OldRow), nth0(Y, OldRow, OldG), NewG is G + OldG, |  | ||||||
|     replace(Y, OldRow, NewG, NewRow), |  | ||||||
|     replace(X, OldMap, NewRow, NewMap). |  | ||||||
|  |  | ||||||
| visualize(Width, Height, Gs, Max, OutMap) :- |  | ||||||
|     length(Row, Width), maplist(=(0), Row), |  | ||||||
|     length(Map, Height), maplist(=(Row), Map), |  | ||||||
|     dict_pairs(Gs, _, GList), |  | ||||||
|     foldl(put_g, GList, Map, GMap), |  | ||||||
|     maplist( |  | ||||||
|         {Max}/[OldRow, NewRow]>>( |  | ||||||
|             maplist( |  | ||||||
|                 {Max}/[G, Unicode]>>( |  | ||||||
|                     display(G, Unicode, Max)), OldRow, NewRow)), |  | ||||||
|         GMap, OutMap). |  | ||||||
|  |  | ||||||
| astar(_Map, Gs, PQueue, DestX-DestY, N, Gs) :- |  | ||||||
|     get_from_heap(PQueue, _, X-Y-From, _), X = DestX, Y = DestY, |  | ||||||
|     to_key(DestX-DestY-From, FromKey), N = Gs.FromKey, !. |  | ||||||
|  |  | ||||||
| astar(Map, Gs, PQueue, DestX-DestY, N, EndGs) :- |  | ||||||
|     get_from_heap(PQueue, _, X-Y-From, PQueueAfterPop), |  | ||||||
|     to_key(X-Y-From, CurrentKey), CurrentG = Gs.CurrentKey, |  | ||||||
|  |  | ||||||
|     findall(To-Cost, next(Map, X-Y-From, To, Cost), Neighbors), |  | ||||||
|     foldl(add_neighbor(CurrentG, DestX-DestY), |  | ||||||
|           Neighbors, PQueueAfterPop-Gs, NewPQueue-NewGs), |  | ||||||
|     astar(Map, NewGs, NewPQueue, DestX-DestY, N, EndGs). |  | ||||||
|  |  | ||||||
| add_neighbor(CurrentG, DestX-DestY, (X-Y-Dir)-Cost, HeapIn-GsIn, HeapOut-GsOut) :- |  | ||||||
|     NewGCandidate is CurrentG + Cost, |  | ||||||
|     to_key(X-Y-Dir, Key), ExistingG = GsIn.get(Key, 9999999), |  | ||||||
|     (   NewGCandidate < ExistingG |  | ||||||
|     ->  NewG = NewGCandidate, GsOut = GsIn.put(Key, NewG), |  | ||||||
|         heur(X-Y, DestX-DestY, Heur), Weight is NewG + Heur, |  | ||||||
|         (   get_from_heap(HeapIn, _, X-Y-Dir, _), HeapOut = HeapIn |  | ||||||
|         ;   add_to_heap(HeapIn, Weight, X-Y-Dir, HeapOut) |  | ||||||
|         ) |  | ||||||
|     ;   GsOut = GsIn, HeapOut = HeapIn |  | ||||||
|     ). |  | ||||||
|  |  | ||||||
| to_key(X-Y-horz, Key) :- Key is 0 + Y*10 + X* 10000. |  | ||||||
| to_key(X-Y-vert, Key) :- Key is 1 + Y*10 + X* 10000. |  | ||||||
|  |  | ||||||
| next(Map, X-Y-horz, NextX-Y-vert, Cost) :- |  | ||||||
|     LowX1 is X - 10, HighX1 is X - 4, |  | ||||||
|     LowX2 is X + 4, HighX2 is X + 10, |  | ||||||
|     (between(LowX1, HighX1, NextX); between(LowX2, HighX2, NextX)), |  | ||||||
|     vert(Map, X-Y, NextX, Cost). |  | ||||||
| next(Map, X-Y-vert, X-NextY-horz, Cost) :- |  | ||||||
|     LowY1 is Y - 10, HighY1 is Y - 4, |  | ||||||
|     LowY2 is Y + 4, HighY2 is Y + 10, |  | ||||||
|     (between(LowY1, HighY1, NextY); between(LowY2, HighY2, NextY)), |  | ||||||
|     horz(Map, X-Y, NextY, Cost). |  | ||||||
|  |  | ||||||
| vert(Map, X-Y, NextX, Cost) :- |  | ||||||
|     cost(Map, NextX-Y, _), |  | ||||||
|     findall( |  | ||||||
|         Ci, |  | ||||||
|         (   (X < NextX -> between(X, NextX, Xi);  between(NextX, X, Xi)), |  | ||||||
|             Xi =\= X, |  | ||||||
|             cost(Map, Xi-Y, Ci)), |  | ||||||
|         Costs), |  | ||||||
|     sum_list(Costs, Cost). |  | ||||||
|     % Cost = Costs. |  | ||||||
|  |  | ||||||
| horz(Map, X-Y, NextY, Cost) :- |  | ||||||
|     cost(Map, X-NextY, _), |  | ||||||
|     findall( |  | ||||||
|         Ci, |  | ||||||
|         (   (Y < NextY -> between(Y, NextY, Yi);  between(NextY, Y, Yi)), |  | ||||||
|             Yi =\= Y, |  | ||||||
|             cost(Map, X-Yi, Ci)), |  | ||||||
|         Costs), |  | ||||||
|     sum_list(Costs, Cost). |  | ||||||
|     % Cost = Costs. |  | ||||||
|  |  | ||||||
|  |  | ||||||
| heur(X1-Y1, X2-Y2, Dist) :- Dist is abs(X1 - X2) + abs(Y1 - Y2). |  | ||||||
|  |  | ||||||
| cost(Map, X-Y, Cost) :- nth0(X, Map, Row), nth0(Y, Row, Cost). |  | ||||||
|  |  | ||||||
| print(Map) :- maplist([X]>>(atomic_list_concat(X, N), write(N), nl), Map). |  | ||||||
|  |  | ||||||
| input(Name, Map) :- phrase_from_file(lines(Map), Name). |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Nums|Lines]) --> |  | ||||||
|     line(Line), lines(Lines), |  | ||||||
|     {maplist([C, N]>>(N is C - 48), Line, Nums)}. |  | ||||||
| line(Nums) --> digits(Nums), "\n". |  | ||||||
							
								
								
									
										13
									
								
								17/test.txt
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								17/test.txt
									
									
									
									
									
								
							| @@ -1,13 +0,0 @@ | |||||||
| 2413432311323 |  | ||||||
| 3215453535623 |  | ||||||
| 3255245654254 |  | ||||||
| 3446585845452 |  | ||||||
| 4546657867536 |  | ||||||
| 1438598798454 |  | ||||||
| 4457876987766 |  | ||||||
| 3637877979653 |  | ||||||
| 4654967986887 |  | ||||||
| 4564679986453 |  | ||||||
| 1224686865563 |  | ||||||
| 2546548887735 |  | ||||||
| 4322674655533 |  | ||||||
							
								
								
									
										604
									
								
								18/input.txt
									
									
									
									
									
								
							
							
						
						
									
										604
									
								
								18/input.txt
									
									
									
									
									
								
							| @@ -1,604 +0,0 @@ | |||||||
| R 2 (#3e6b80) |  | ||||||
| U 6 (#2b1de3) |  | ||||||
| R 4 (#1465b0) |  | ||||||
| U 2 (#549d23) |  | ||||||
| R 6 (#aa9992) |  | ||||||
| U 6 (#27e7f3) |  | ||||||
| R 7 (#aa9990) |  | ||||||
| U 6 (#5a3933) |  | ||||||
| R 5 (#1465b2) |  | ||||||
| U 5 (#23ade3) |  | ||||||
| R 4 (#49b5b2) |  | ||||||
| U 6 (#39ad53) |  | ||||||
| R 7 (#54c4f2) |  | ||||||
| U 5 (#491513) |  | ||||||
| R 9 (#4f5960) |  | ||||||
| U 5 (#357be3) |  | ||||||
| R 3 (#4f2140) |  | ||||||
| U 6 (#258b43) |  | ||||||
| R 4 (#4f9570) |  | ||||||
| U 3 (#1ea371) |  | ||||||
| R 8 (#7be6c0) |  | ||||||
| U 5 (#67bd61) |  | ||||||
| R 5 (#a31240) |  | ||||||
| U 6 (#6bf7d1) |  | ||||||
| R 5 (#a31242) |  | ||||||
| U 4 (#3464a1) |  | ||||||
| R 3 (#7be6c2) |  | ||||||
| U 4 (#33f091) |  | ||||||
| R 5 (#5c0530) |  | ||||||
| U 6 (#4c4e11) |  | ||||||
| R 2 (#611e90) |  | ||||||
| U 3 (#128231) |  | ||||||
| R 6 (#5ecef2) |  | ||||||
| D 9 (#6eb251) |  | ||||||
| R 5 (#5e54d2) |  | ||||||
| U 9 (#1e8081) |  | ||||||
| R 3 (#73a8b0) |  | ||||||
| U 10 (#6dc731) |  | ||||||
| R 3 (#84d470) |  | ||||||
| U 2 (#6b91a1) |  | ||||||
| R 7 (#64edf0) |  | ||||||
| U 5 (#4da881) |  | ||||||
| R 10 (#710072) |  | ||||||
| D 5 (#4aa4f1) |  | ||||||
| R 7 (#4dd192) |  | ||||||
| D 6 (#4aa4f3) |  | ||||||
| R 3 (#2af062) |  | ||||||
| D 6 (#6fabe1) |  | ||||||
| R 5 (#177cc0) |  | ||||||
| U 5 (#26ba61) |  | ||||||
| R 5 (#5a3aa0) |  | ||||||
| U 9 (#3b5401) |  | ||||||
| R 5 (#012590) |  | ||||||
| U 2 (#747f11) |  | ||||||
| R 4 (#753b32) |  | ||||||
| U 7 (#965a31) |  | ||||||
| R 4 (#753b30) |  | ||||||
| U 3 (#20c281) |  | ||||||
| R 5 (#225830) |  | ||||||
| U 4 (#7a4da1) |  | ||||||
| R 4 (#716560) |  | ||||||
| U 6 (#036ca1) |  | ||||||
| R 5 (#55fd00) |  | ||||||
| D 4 (#064ad1) |  | ||||||
| R 4 (#93a480) |  | ||||||
| D 6 (#411d21) |  | ||||||
| R 3 (#990d00) |  | ||||||
| D 6 (#4af4a1) |  | ||||||
| R 3 (#0f8880) |  | ||||||
| D 4 (#0f56c3) |  | ||||||
| R 3 (#7f2590) |  | ||||||
| U 7 (#0f56c1) |  | ||||||
| R 7 (#374e40) |  | ||||||
| U 6 (#4af4a3) |  | ||||||
| R 2 (#161a20) |  | ||||||
| U 3 (#5277d1) |  | ||||||
| R 5 (#7c6760) |  | ||||||
| U 4 (#528313) |  | ||||||
| R 4 (#525840) |  | ||||||
| U 4 (#267643) |  | ||||||
| L 10 (#525842) |  | ||||||
| U 5 (#501273) |  | ||||||
| L 4 (#447950) |  | ||||||
| D 10 (#69cdc3) |  | ||||||
| L 3 (#530a00) |  | ||||||
| U 10 (#590643) |  | ||||||
| L 5 (#243450) |  | ||||||
| D 5 (#74a853) |  | ||||||
| L 6 (#7c2a42) |  | ||||||
| U 5 (#1d9673) |  | ||||||
| L 3 (#3f8d62) |  | ||||||
| U 8 (#606b43) |  | ||||||
| L 5 (#576480) |  | ||||||
| D 8 (#63d243) |  | ||||||
| L 5 (#86ad60) |  | ||||||
| U 4 (#63d241) |  | ||||||
| L 7 (#0be9f0) |  | ||||||
| U 8 (#4b0801) |  | ||||||
| L 2 (#64f9c0) |  | ||||||
| U 4 (#478081) |  | ||||||
| R 9 (#20b940) |  | ||||||
| U 4 (#a60cd1) |  | ||||||
| L 9 (#02c6a0) |  | ||||||
| U 5 (#0d8be1) |  | ||||||
| L 4 (#8226e0) |  | ||||||
| D 6 (#013a81) |  | ||||||
| L 3 (#5cf860) |  | ||||||
| D 4 (#985951) |  | ||||||
| L 5 (#162d72) |  | ||||||
| D 2 (#1c2c31) |  | ||||||
| L 2 (#654f82) |  | ||||||
| D 4 (#51b4e1) |  | ||||||
| R 10 (#401a32) |  | ||||||
| D 5 (#32c291) |  | ||||||
| L 7 (#84ff82) |  | ||||||
| D 2 (#25cf41) |  | ||||||
| L 3 (#43b090) |  | ||||||
| D 4 (#6208d1) |  | ||||||
| L 3 (#a428a0) |  | ||||||
| U 9 (#6208d3) |  | ||||||
| L 3 (#07d9c0) |  | ||||||
| U 9 (#6e8a01) |  | ||||||
| L 2 (#3ab640) |  | ||||||
| U 3 (#187711) |  | ||||||
| L 4 (#162d70) |  | ||||||
| U 6 (#8e5a81) |  | ||||||
| L 6 (#049580) |  | ||||||
| D 6 (#a81333) |  | ||||||
| L 2 (#342030) |  | ||||||
| D 3 (#233073) |  | ||||||
| L 7 (#510730) |  | ||||||
| D 4 (#15cbf3) |  | ||||||
| R 3 (#507520) |  | ||||||
| D 5 (#3be881) |  | ||||||
| R 6 (#52f2a0) |  | ||||||
| D 3 (#a52711) |  | ||||||
| L 3 (#0d7680) |  | ||||||
| D 5 (#1db6c3) |  | ||||||
| L 5 (#5f0450) |  | ||||||
| U 5 (#6c6d73) |  | ||||||
| L 2 (#47abc0) |  | ||||||
| D 5 (#707733) |  | ||||||
| L 5 (#771be2) |  | ||||||
| D 2 (#151c53) |  | ||||||
| L 3 (#413da2) |  | ||||||
| D 3 (#768703) |  | ||||||
| R 11 (#640b02) |  | ||||||
| D 2 (#37b343) |  | ||||||
| R 4 (#4ac8d0) |  | ||||||
| D 5 (#016421) |  | ||||||
| L 2 (#907990) |  | ||||||
| D 5 (#016423) |  | ||||||
| L 3 (#412220) |  | ||||||
| U 5 (#0f5603) |  | ||||||
| L 9 (#5e11d0) |  | ||||||
| D 5 (#24abb1) |  | ||||||
| L 7 (#1ab552) |  | ||||||
| U 2 (#06e641) |  | ||||||
| L 2 (#9e07e2) |  | ||||||
| U 4 (#06e643) |  | ||||||
| L 6 (#51f692) |  | ||||||
| U 4 (#763581) |  | ||||||
| L 8 (#3716a0) |  | ||||||
| U 4 (#1360d1) |  | ||||||
| R 5 (#567bc0) |  | ||||||
| U 2 (#222831) |  | ||||||
| R 9 (#7d2160) |  | ||||||
| U 6 (#72b991) |  | ||||||
| L 6 (#4a6840) |  | ||||||
| U 3 (#3ef773) |  | ||||||
| L 4 (#626a10) |  | ||||||
| U 4 (#4c3d93) |  | ||||||
| L 4 (#6fa5e2) |  | ||||||
| D 4 (#6e0b33) |  | ||||||
| L 4 (#6fa5e0) |  | ||||||
| U 3 (#38aaf3) |  | ||||||
| L 5 (#223552) |  | ||||||
| U 5 (#025c33) |  | ||||||
| L 4 (#4205c2) |  | ||||||
| D 4 (#49ddd3) |  | ||||||
| L 3 (#3aa782) |  | ||||||
| D 4 (#028fd3) |  | ||||||
| L 5 (#76e842) |  | ||||||
| D 3 (#028fd1) |  | ||||||
| L 3 (#9bc962) |  | ||||||
| U 4 (#6bde73) |  | ||||||
| L 9 (#9d6be0) |  | ||||||
| U 6 (#2db831) |  | ||||||
| L 5 (#1192c0) |  | ||||||
| U 3 (#6b5c33) |  | ||||||
| L 4 (#152940) |  | ||||||
| U 4 (#746923) |  | ||||||
| L 5 (#8648a0) |  | ||||||
| U 3 (#4cb8d1) |  | ||||||
| L 3 (#877170) |  | ||||||
| U 5 (#24ca21) |  | ||||||
| L 4 (#877172) |  | ||||||
| D 3 (#6e4261) |  | ||||||
| L 2 (#691310) |  | ||||||
| D 6 (#655001) |  | ||||||
| R 6 (#7e7740) |  | ||||||
| D 3 (#1562b1) |  | ||||||
| L 6 (#261a00) |  | ||||||
| D 4 (#700e91) |  | ||||||
| L 4 (#6ade10) |  | ||||||
| U 9 (#4a1251) |  | ||||||
| L 3 (#5a7c00) |  | ||||||
| U 7 (#5a30e1) |  | ||||||
| L 6 (#15a832) |  | ||||||
| U 3 (#152e01) |  | ||||||
| L 3 (#643622) |  | ||||||
| U 5 (#977db1) |  | ||||||
| L 7 (#4b7bc2) |  | ||||||
| U 2 (#546691) |  | ||||||
| L 7 (#8cd5a2) |  | ||||||
| U 7 (#5b7a31) |  | ||||||
| R 3 (#6c85f2) |  | ||||||
| U 6 (#6996a1) |  | ||||||
| R 8 (#458692) |  | ||||||
| U 3 (#370e51) |  | ||||||
| R 6 (#7bc6d2) |  | ||||||
| U 4 (#07aa01) |  | ||||||
| R 4 (#389dc2) |  | ||||||
| U 6 (#3de6d3) |  | ||||||
| R 6 (#54ece2) |  | ||||||
| U 5 (#625703) |  | ||||||
| R 10 (#0e9512) |  | ||||||
| D 5 (#1e8793) |  | ||||||
| R 3 (#873d92) |  | ||||||
| U 4 (#2eb4b3) |  | ||||||
| R 5 (#2d3432) |  | ||||||
| U 5 (#26b2f1) |  | ||||||
| R 2 (#2c8c52) |  | ||||||
| U 3 (#2ff4c1) |  | ||||||
| R 7 (#0e68f2) |  | ||||||
| U 3 (#32b371) |  | ||||||
| R 8 (#0e68f0) |  | ||||||
| U 4 (#5d6fb1) |  | ||||||
| R 3 (#128622) |  | ||||||
| U 5 (#06af41) |  | ||||||
| R 6 (#a95192) |  | ||||||
| U 4 (#274af1) |  | ||||||
| R 3 (#3af302) |  | ||||||
| U 6 (#50fff3) |  | ||||||
| R 6 (#3f9cf2) |  | ||||||
| U 2 (#50fff1) |  | ||||||
| R 3 (#4734a2) |  | ||||||
| U 3 (#1a5051) |  | ||||||
| L 12 (#986ce0) |  | ||||||
| U 3 (#224b61) |  | ||||||
| R 9 (#2d66c0) |  | ||||||
| U 4 (#6f2a31) |  | ||||||
| R 6 (#0aba80) |  | ||||||
| U 7 (#0ecb81) |  | ||||||
| R 4 (#606870) |  | ||||||
| U 3 (#0ecb83) |  | ||||||
| L 3 (#4e78e0) |  | ||||||
| U 3 (#4563f1) |  | ||||||
| L 11 (#8bed00) |  | ||||||
| U 3 (#3298c1) |  | ||||||
| L 5 (#5a39d0) |  | ||||||
| U 2 (#51d641) |  | ||||||
| L 8 (#8e6ee0) |  | ||||||
| U 4 (#233851) |  | ||||||
| R 4 (#31c7a0) |  | ||||||
| U 9 (#728831) |  | ||||||
| R 3 (#670cd0) |  | ||||||
| U 4 (#1f3621) |  | ||||||
| L 7 (#8df230) |  | ||||||
| U 4 (#44a361) |  | ||||||
| R 7 (#2aed30) |  | ||||||
| U 7 (#2a0161) |  | ||||||
| R 4 (#1db2c0) |  | ||||||
| U 3 (#6387c1) |  | ||||||
| R 3 (#1886b0) |  | ||||||
| D 3 (#128c21) |  | ||||||
| R 3 (#acb330) |  | ||||||
| D 3 (#3a9d01) |  | ||||||
| L 4 (#3658a0) |  | ||||||
| D 6 (#00ec51) |  | ||||||
| R 4 (#682712) |  | ||||||
| D 6 (#2440e1) |  | ||||||
| R 5 (#45f812) |  | ||||||
| D 9 (#6298d1) |  | ||||||
| R 3 (#778f22) |  | ||||||
| U 4 (#6298d3) |  | ||||||
| R 2 (#271462) |  | ||||||
| U 10 (#0d5ff1) |  | ||||||
| L 4 (#6a69e2) |  | ||||||
| U 5 (#0d5ff3) |  | ||||||
| R 6 (#24b5e2) |  | ||||||
| U 3 (#2440e3) |  | ||||||
| R 5 (#5f3192) |  | ||||||
| U 4 (#41c313) |  | ||||||
| R 3 (#236852) |  | ||||||
| U 7 (#6e15c1) |  | ||||||
| R 8 (#5187b2) |  | ||||||
| D 5 (#6e15c3) |  | ||||||
| R 2 (#65a3d2) |  | ||||||
| D 4 (#41c311) |  | ||||||
| R 11 (#3dfa02) |  | ||||||
| D 4 (#26ca51) |  | ||||||
| R 5 (#4e3912) |  | ||||||
| D 6 (#797803) |  | ||||||
| R 5 (#2f8ee2) |  | ||||||
| U 5 (#2a9b83) |  | ||||||
| R 8 (#3d6702) |  | ||||||
| D 5 (#4646e3) |  | ||||||
| R 3 (#3d6700) |  | ||||||
| D 2 (#43a1c3) |  | ||||||
| R 4 (#592f22) |  | ||||||
| D 3 (#9d61c1) |  | ||||||
| R 4 (#1f90f2) |  | ||||||
| D 5 (#172261) |  | ||||||
| R 7 (#5a7ba2) |  | ||||||
| D 8 (#797801) |  | ||||||
| R 6 (#4e4ad2) |  | ||||||
| D 8 (#28fda1) |  | ||||||
| R 5 (#55a862) |  | ||||||
| D 4 (#28fda3) |  | ||||||
| R 5 (#1665a2) |  | ||||||
| D 6 (#3fca41) |  | ||||||
| R 9 (#850700) |  | ||||||
| D 3 (#43f8f1) |  | ||||||
| R 3 (#3cbd90) |  | ||||||
| D 6 (#620311) |  | ||||||
| R 8 (#70b2b2) |  | ||||||
| D 6 (#25cb11) |  | ||||||
| R 3 (#336c52) |  | ||||||
| D 4 (#8da331) |  | ||||||
| R 4 (#336c50) |  | ||||||
| D 5 (#0594c1) |  | ||||||
| R 3 (#4a2b92) |  | ||||||
| U 8 (#31cac1) |  | ||||||
| R 5 (#392742) |  | ||||||
| D 8 (#233743) |  | ||||||
| R 6 (#798b32) |  | ||||||
| D 4 (#233741) |  | ||||||
| R 6 (#4fcde2) |  | ||||||
| D 4 (#1ffd91) |  | ||||||
| L 9 (#207ed2) |  | ||||||
| U 5 (#9314d1) |  | ||||||
| L 9 (#056d22) |  | ||||||
| D 5 (#56c131) |  | ||||||
| L 9 (#431340) |  | ||||||
| D 6 (#94bbb1) |  | ||||||
| R 8 (#357120) |  | ||||||
| D 2 (#19ca71) |  | ||||||
| R 8 (#8bebb0) |  | ||||||
| D 6 (#4257c1) |  | ||||||
| R 8 (#0c4fc0) |  | ||||||
| D 3 (#380131) |  | ||||||
| R 3 (#07a260) |  | ||||||
| D 3 (#02a841) |  | ||||||
| L 11 (#100a10) |  | ||||||
| D 2 (#07ad11) |  | ||||||
| L 4 (#4a2b90) |  | ||||||
| D 3 (#10d091) |  | ||||||
| R 6 (#609d22) |  | ||||||
| D 2 (#69a281) |  | ||||||
| R 9 (#320ed2) |  | ||||||
| D 5 (#0782c1) |  | ||||||
| R 2 (#67c382) |  | ||||||
| D 2 (#19a311) |  | ||||||
| R 7 (#14e152) |  | ||||||
| D 3 (#4ee351) |  | ||||||
| R 5 (#14e150) |  | ||||||
| D 8 (#54dae1) |  | ||||||
| R 3 (#428ba2) |  | ||||||
| D 5 (#0a5431) |  | ||||||
| R 3 (#1880e2) |  | ||||||
| D 2 (#2fc091) |  | ||||||
| R 9 (#440bc0) |  | ||||||
| D 6 (#758b11) |  | ||||||
| R 6 (#6a54b0) |  | ||||||
| D 3 (#31f8d1) |  | ||||||
| L 6 (#37e190) |  | ||||||
| D 5 (#0c4af1) |  | ||||||
| L 4 (#6acc62) |  | ||||||
| D 2 (#161df1) |  | ||||||
| L 4 (#72f272) |  | ||||||
| D 4 (#161df3) |  | ||||||
| L 7 (#088332) |  | ||||||
| D 4 (#182831) |  | ||||||
| L 8 (#82d720) |  | ||||||
| D 3 (#371df1) |  | ||||||
| L 7 (#7207b0) |  | ||||||
| D 6 (#206d61) |  | ||||||
| R 4 (#0c1082) |  | ||||||
| D 2 (#796721) |  | ||||||
| R 6 (#220252) |  | ||||||
| D 7 (#2948a1) |  | ||||||
| R 7 (#5f2c02) |  | ||||||
| U 7 (#137d21) |  | ||||||
| R 3 (#0fe252) |  | ||||||
| D 2 (#0164d1) |  | ||||||
| R 6 (#1ce912) |  | ||||||
| D 6 (#4e0983) |  | ||||||
| R 2 (#7d7c72) |  | ||||||
| D 11 (#598c93) |  | ||||||
| R 4 (#581202) |  | ||||||
| D 8 (#0ffba3) |  | ||||||
| L 4 (#500e32) |  | ||||||
| D 2 (#42bcf3) |  | ||||||
| R 4 (#31e852) |  | ||||||
| D 8 (#2d8913) |  | ||||||
| R 4 (#1d67d2) |  | ||||||
| D 5 (#5a03c3) |  | ||||||
| R 9 (#45c0b0) |  | ||||||
| D 4 (#3a1e53) |  | ||||||
| L 9 (#687430) |  | ||||||
| D 4 (#3a1e51) |  | ||||||
| L 4 (#25b1b0) |  | ||||||
| D 8 (#613e03) |  | ||||||
| L 7 (#4ea210) |  | ||||||
| D 8 (#366193) |  | ||||||
| L 3 (#4cb7c2) |  | ||||||
| D 8 (#452333) |  | ||||||
| L 6 (#675322) |  | ||||||
| D 6 (#6ae223) |  | ||||||
| L 3 (#0d88b2) |  | ||||||
| D 2 (#23a4a3) |  | ||||||
| L 8 (#60f512) |  | ||||||
| D 5 (#568a53) |  | ||||||
| L 3 (#0cbd02) |  | ||||||
| D 3 (#4bad03) |  | ||||||
| L 4 (#588672) |  | ||||||
| D 4 (#72dfa3) |  | ||||||
| L 2 (#960472) |  | ||||||
| D 9 (#394403) |  | ||||||
| L 5 (#28bcc2) |  | ||||||
| D 6 (#4eb073) |  | ||||||
| L 6 (#04e992) |  | ||||||
| D 3 (#22c803) |  | ||||||
| L 3 (#a76142) |  | ||||||
| D 5 (#22c801) |  | ||||||
| R 10 (#171512) |  | ||||||
| D 3 (#25f2f3) |  | ||||||
| R 6 (#581600) |  | ||||||
| D 7 (#3d0f33) |  | ||||||
| L 8 (#142a40) |  | ||||||
| D 4 (#6eb893) |  | ||||||
| L 5 (#142a42) |  | ||||||
| U 4 (#02a243) |  | ||||||
| L 9 (#522a40) |  | ||||||
| U 2 (#4d2a01) |  | ||||||
| L 4 (#081760) |  | ||||||
| D 7 (#17c601) |  | ||||||
| R 4 (#081762) |  | ||||||
| D 6 (#497a01) |  | ||||||
| R 5 (#2fbb50) |  | ||||||
| D 3 (#4be663) |  | ||||||
| R 4 (#3b3140) |  | ||||||
| D 2 (#48f803) |  | ||||||
| R 3 (#69ec82) |  | ||||||
| U 3 (#80c993) |  | ||||||
| R 5 (#3f05f2) |  | ||||||
| U 8 (#5d5463) |  | ||||||
| R 4 (#50d1c2) |  | ||||||
| D 3 (#472973) |  | ||||||
| R 3 (#1b68a2) |  | ||||||
| D 5 (#5ebab3) |  | ||||||
| R 7 (#464fd2) |  | ||||||
| D 3 (#64c0a1) |  | ||||||
| L 7 (#4062d2) |  | ||||||
| D 6 (#8e33b3) |  | ||||||
| L 5 (#1c3382) |  | ||||||
| D 6 (#8e33b1) |  | ||||||
| L 4 (#50b882) |  | ||||||
| D 4 (#64c0a3) |  | ||||||
| L 2 (#2bcfb2) |  | ||||||
| D 7 (#84fc61) |  | ||||||
| L 3 (#413452) |  | ||||||
| U 10 (#84fc63) |  | ||||||
| L 3 (#47ad42) |  | ||||||
| U 2 (#03ba03) |  | ||||||
| L 3 (#7197b2) |  | ||||||
| U 5 (#81aa33) |  | ||||||
| L 8 (#5c0552) |  | ||||||
| D 5 (#235433) |  | ||||||
| L 5 (#4236f2) |  | ||||||
| D 5 (#4e9bc3) |  | ||||||
| L 5 (#3740a0) |  | ||||||
| D 2 (#1e7f23) |  | ||||||
| L 10 (#3740a2) |  | ||||||
| U 3 (#5f66a3) |  | ||||||
| R 4 (#4236f0) |  | ||||||
| U 7 (#164f83) |  | ||||||
| R 4 (#5d1a30) |  | ||||||
| U 3 (#1192e1) |  | ||||||
| R 4 (#4c67a0) |  | ||||||
| U 5 (#954a91) |  | ||||||
| L 8 (#3348c0) |  | ||||||
| U 3 (#306c01) |  | ||||||
| L 4 (#694200) |  | ||||||
| U 8 (#52c163) |  | ||||||
| L 3 (#6abee0) |  | ||||||
| U 3 (#26c123) |  | ||||||
| L 4 (#6abee2) |  | ||||||
| U 4 (#4c3413) |  | ||||||
| L 9 (#4e8800) |  | ||||||
| U 5 (#1192e3) |  | ||||||
| L 3 (#2bb700) |  | ||||||
| U 4 (#21ceb1) |  | ||||||
| L 12 (#4ec360) |  | ||||||
| U 3 (#21ceb3) |  | ||||||
| L 4 (#32f940) |  | ||||||
| U 8 (#5d5f73) |  | ||||||
| L 4 (#1dcf10) |  | ||||||
| U 9 (#3cf413) |  | ||||||
| L 3 (#7cc870) |  | ||||||
| U 8 (#5f0953) |  | ||||||
| L 4 (#376c70) |  | ||||||
| U 6 (#01d623) |  | ||||||
| L 5 (#697e50) |  | ||||||
| U 5 (#99e693) |  | ||||||
| L 5 (#6f63b0) |  | ||||||
| U 3 (#576c53) |  | ||||||
| R 10 (#7fa030) |  | ||||||
| U 3 (#1fd933) |  | ||||||
| L 5 (#4eb2d2) |  | ||||||
| U 6 (#39a1f3) |  | ||||||
| L 4 (#3f0452) |  | ||||||
| D 4 (#42ffd3) |  | ||||||
| L 3 (#5b9d52) |  | ||||||
| U 7 (#25c2d3) |  | ||||||
| L 8 (#5ba250) |  | ||||||
| D 7 (#40d763) |  | ||||||
| L 5 (#5ba252) |  | ||||||
| D 3 (#5f2a73) |  | ||||||
| L 7 (#477ce2) |  | ||||||
| D 3 (#2652d1) |  | ||||||
| L 5 (#453770) |  | ||||||
| D 5 (#758781) |  | ||||||
| L 11 (#453772) |  | ||||||
| D 3 (#937381) |  | ||||||
| L 2 (#119e62) |  | ||||||
| D 5 (#131891) |  | ||||||
| R 5 (#3285e2) |  | ||||||
| U 3 (#211fd3) |  | ||||||
| R 11 (#8349d2) |  | ||||||
| U 4 (#211fd1) |  | ||||||
| R 4 (#3246c2) |  | ||||||
| U 3 (#2515f3) |  | ||||||
| R 9 (#5a5bd0) |  | ||||||
| D 7 (#6fbf83) |  | ||||||
| R 4 (#6a5680) |  | ||||||
| D 3 (#6fbf81) |  | ||||||
| R 9 (#329240) |  | ||||||
| D 7 (#750063) |  | ||||||
| R 5 (#5e71f2) |  | ||||||
| D 9 (#3358d3) |  | ||||||
| L 6 (#1d2652) |  | ||||||
| D 4 (#6a8ee3) |  | ||||||
| L 3 (#4e9cd2) |  | ||||||
| U 6 (#3e8623) |  | ||||||
| L 2 (#3607d2) |  | ||||||
| U 5 (#379d43) |  | ||||||
| L 6 (#3cf342) |  | ||||||
| U 3 (#853b63) |  | ||||||
| L 3 (#737102) |  | ||||||
| D 3 (#1de1b3) |  | ||||||
| L 2 (#66ff82) |  | ||||||
| D 10 (#634163) |  | ||||||
| L 3 (#2eff02) |  | ||||||
| U 6 (#2ac343) |  | ||||||
| L 2 (#528a42) |  | ||||||
| U 7 (#4d81d3) |  | ||||||
| L 3 (#2ea1e2) |  | ||||||
| D 5 (#19e063) |  | ||||||
| L 6 (#8b5a82) |  | ||||||
| D 7 (#4b8e33) |  | ||||||
| L 4 (#5e41d0) |  | ||||||
| D 2 (#159903) |  | ||||||
| L 5 (#31f3c0) |  | ||||||
| D 9 (#537013) |  | ||||||
| L 2 (#31f3c2) |  | ||||||
| D 7 (#4b7b43) |  | ||||||
| L 4 (#5bd890) |  | ||||||
| D 10 (#1be163) |  | ||||||
| L 5 (#0c3340) |  | ||||||
| D 3 (#540d83) |  | ||||||
| L 9 (#2449f0) |  | ||||||
| U 6 (#9411c1) |  | ||||||
| L 7 (#766db0) |  | ||||||
| U 7 (#9411c3) |  | ||||||
| L 4 (#37ee30) |  | ||||||
| D 3 (#516ad3) |  | ||||||
| L 3 (#0991b0) |  | ||||||
| D 2 (#98a733) |  | ||||||
| L 5 (#0ea042) |  | ||||||
| D 3 (#513f83) |  | ||||||
| L 2 (#a0c682) |  | ||||||
| D 8 (#616323) |  | ||||||
| L 4 (#a0c680) |  | ||||||
| D 3 (#4555b3) |  | ||||||
| L 3 (#79e032) |  | ||||||
| U 9 (#673de3) |  | ||||||
| L 4 (#5904b0) |  | ||||||
| U 7 (#495bd3) |  | ||||||
| L 3 (#5904b2) |  | ||||||
| U 2 (#49a633) |  | ||||||
| L 5 (#76a9c2) |  | ||||||
| U 10 (#10de23) |  | ||||||
							
								
								
									
										27
									
								
								18/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								18/part1.pl
									
									
									
									
									
								
							| @@ -1,27 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Moves), |  | ||||||
|     area(Moves, Area), |  | ||||||
|     write(Area), nl. |  | ||||||
|  |  | ||||||
| area(Moves, Area) :- |  | ||||||
|     area(Moves, 0, A1), MainArea is abs(A1), |  | ||||||
|     convlist([r-N, N]>>(true), Moves, Horzs), sum_list(Horzs, Horz), |  | ||||||
|     convlist([u-N, N]>>(true), Moves, Verts), sum_list(Verts, Vert), |  | ||||||
|     Area is MainArea + Horz + Vert + 1. |  | ||||||
|  |  | ||||||
| area([], _, 0). |  | ||||||
| area([u-Len|Moves], H, Area) :- NewH is H + Len, area(Moves, NewH, Area). |  | ||||||
| area([d-Len|Moves], H, Area) :- NewH is H - Len, area(Moves, NewH, Area). |  | ||||||
| area([r-Len|Moves], H, Area) :- area(Moves, H, Area2), Area is Area2 + H*Len. |  | ||||||
| area([l-Len|Moves], H, Area) :- area(Moves, H, Area2), Area is Area2 - H*Len. |  | ||||||
|  |  | ||||||
| input(FileName, Moves) :- phrase_from_file(moves(Moves), FileName). |  | ||||||
| moves([]) --> eos, !. |  | ||||||
| moves([Move|Moves]) --> move(Move), moves(Moves). |  | ||||||
| move(DirAtom-Len) --> |  | ||||||
|     alpha_to_lower(Dir), " ", number(Len), " (#", xdigits(_Color), ")", ("\n"; eos), |  | ||||||
|     {char_code(DirAtom, Dir)}. |  | ||||||
							
								
								
									
										31
									
								
								18/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										31
									
								
								18/part2.pl
									
									
									
									
									
								
							| @@ -1,31 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Moves), |  | ||||||
|     area(Moves, Area), |  | ||||||
|     write(Area), nl. |  | ||||||
|  |  | ||||||
| area(Moves, Area) :- |  | ||||||
|     area(Moves, 0, A1), MainArea is abs(A1), |  | ||||||
|     convlist([r-N, N]>>(true), Moves, Horzs), sum_list(Horzs, Horz), |  | ||||||
|     convlist([u-N, N]>>(true), Moves, Verts), sum_list(Verts, Vert), |  | ||||||
|     Area is MainArea + Horz + Vert + 1. |  | ||||||
|  |  | ||||||
| area([], _, 0). |  | ||||||
| area([u-Len|Moves], H, Area) :- NewH is H + Len, area(Moves, NewH, Area). |  | ||||||
| area([d-Len|Moves], H, Area) :- NewH is H - Len, area(Moves, NewH, Area). |  | ||||||
| area([r-Len|Moves], H, Area) :- area(Moves, H, Area2), Area is Area2 + H*Len. |  | ||||||
| area([l-Len|Moves], H, Area) :- area(Moves, H, Area2), Area is Area2 - H*Len. |  | ||||||
|  |  | ||||||
| input(FileName, Moves) :- phrase_from_file(moves(Moves), FileName). |  | ||||||
| moves([]) --> eos, !. |  | ||||||
| moves([Move|Moves]) --> move(Move), moves(Moves). |  | ||||||
| move(DirAtom-Len) --> |  | ||||||
|     alpha_to_lower(_), " ", number(_), " (#", xinteger(Hex), ")", ("\n"; eos), |  | ||||||
|     {DirNum is Hex /\ 15, dir(DirNum, DirAtom), Len is Hex >> 4}. |  | ||||||
| dir(0, r). |  | ||||||
| dir(1, d). |  | ||||||
| dir(2, l). |  | ||||||
| dir(3, u). |  | ||||||
							
								
								
									
										14
									
								
								18/test.txt
									
									
									
									
									
								
							
							
						
						
									
										14
									
								
								18/test.txt
									
									
									
									
									
								
							| @@ -1,14 +0,0 @@ | |||||||
| R 6 (#70c710) |  | ||||||
| D 5 (#0dc571) |  | ||||||
| L 2 (#5713f0) |  | ||||||
| D 2 (#d2c081) |  | ||||||
| R 2 (#59c680) |  | ||||||
| D 2 (#411b91) |  | ||||||
| L 5 (#8ceee2) |  | ||||||
| U 2 (#caa173) |  | ||||||
| L 1 (#1b58a2) |  | ||||||
| U 2 (#caa171) |  | ||||||
| R 2 (#7807d2) |  | ||||||
| U 3 (#a77fa3) |  | ||||||
| L 2 (#015232) |  | ||||||
| U 2 (#7a21e3) |  | ||||||
							
								
								
									
										733
									
								
								19/input.txt
									
									
									
									
									
								
							
							
						
						
									
										733
									
								
								19/input.txt
									
									
									
									
									
								
							| @@ -1,733 +0,0 @@ | |||||||
| vvr{a>520:jq,s<3691:R,a>325:A,R} |  | ||||||
| dmg{s<1730:A,x<3350:R,R} |  | ||||||
| ctv{s<3757:R,R} |  | ||||||
| xhh{a<3542:A,A} |  | ||||||
| cpx{m<1847:A,R} |  | ||||||
| qqg{a<911:nf,lpf} |  | ||||||
| mnr{a>1914:A,x>752:A,A} |  | ||||||
| ktx{m<1153:R,A} |  | ||||||
| mkz{a>2959:A,a<2378:rlr,R} |  | ||||||
| br{x>2184:A,s>3693:A,s>3530:R,A} |  | ||||||
| fpk{a<2465:A,a>2524:A,A} |  | ||||||
| ffs{a>536:A,a>328:A,s>3058:R,R} |  | ||||||
| zcl{m>2554:pz,a>2167:gr,qs} |  | ||||||
| lpf{a>1643:hc,x>3626:xxp,mth} |  | ||||||
| vl{x>2958:R,R} |  | ||||||
| nrs{m>2481:R,x>3117:A,m<1978:R,R} |  | ||||||
| sv{m<1749:R,rl} |  | ||||||
| tv{x<219:R,a<1429:A,m<2884:R,A} |  | ||||||
| nl{m>1827:A,m>1345:A,x>2928:A,R} |  | ||||||
| vj{x>439:A,s<2318:A,a<806:A,R} |  | ||||||
| kd{s>767:jhv,x<1090:bk,A} |  | ||||||
| ts{s<3148:rxp,a>1365:lr,bkt} |  | ||||||
| bl{m<2736:A,s<571:R,dv} |  | ||||||
| brp{a<923:R,a<1279:R,a<1574:A,R} |  | ||||||
| bgt{a<1575:R,s<3923:fbv,s<3953:A,pdj} |  | ||||||
| djn{s>322:A,m<1056:A,a<1988:A,A} |  | ||||||
| rqq{s<3130:A,m<2434:A,A} |  | ||||||
| lz{x>3622:A,x>3296:qt,s>3010:R,A} |  | ||||||
| pts{x>1771:R,R} |  | ||||||
| kpp{s>1217:A,s<1204:R,R} |  | ||||||
| bnq{s>3121:A,x>490:A,a>2141:R,A} |  | ||||||
| hxf{s>2885:R,a>1520:A,s>2880:A,A} |  | ||||||
| khd{s>3265:bc,a<1211:ffs,R} |  | ||||||
| gv{m>3417:A,a>2938:R,m<3354:A,R} |  | ||||||
| lk{m<2377:xk,s<3132:R,A} |  | ||||||
| cs{s<960:A,x>3655:R,R} |  | ||||||
| mh{a>1468:A,s>2418:R,x<508:vj,vgr} |  | ||||||
| cnt{x<766:R,x>1060:R,A} |  | ||||||
| zt{a>3624:R,x<1504:R,s>271:A,A} |  | ||||||
| fpt{m<1199:bnq,x<958:R,x<1153:A,mrg} |  | ||||||
| jkq{a>1783:qnp,a>1626:A,R} |  | ||||||
| fnc{x<3093:fzx,x>3571:cp,m<3233:zpz,xxl} |  | ||||||
| kmg{m<1640:lvj,x>2199:xv,R} |  | ||||||
| lkm{m>722:xbm,R} |  | ||||||
| pgd{s<2128:brp,jj} |  | ||||||
| shm{m>919:R,s<3189:R,R} |  | ||||||
| xfr{m>761:R,s>2748:A,m>323:A,R} |  | ||||||
| rgl{a<1202:R,R} |  | ||||||
| qgd{a<746:hzp,rgl} |  | ||||||
| vkj{m<2086:R,x>850:A,a>3710:R,R} |  | ||||||
| cm{s<1657:R,R} |  | ||||||
| lvj{s>2173:R,a>747:R,A} |  | ||||||
| vz{a<2716:A,R} |  | ||||||
| nsm{m<2126:A,a>1310:A,x>2771:A,A} |  | ||||||
| pk{x>2292:A,A} |  | ||||||
| jm{s<363:A,A} |  | ||||||
| hp{a>2641:trf,mh} |  | ||||||
| nlr{s>2969:A,x>1304:A,A} |  | ||||||
| hx{m<3078:R,R} |  | ||||||
| pjv{x>253:grc,x<97:R,x<193:A,hz} |  | ||||||
| xrb{x>3443:kn,A} |  | ||||||
| tx{a>1279:A,dcf} |  | ||||||
| qjb{m>1551:qfg,qrq} |  | ||||||
| ftr{s>2830:nmq,td} |  | ||||||
| jvn{s>3843:R,A} |  | ||||||
| gsz{s<2923:rfs,ts} |  | ||||||
| xhx{x<2340:lj,A} |  | ||||||
| gbn{m<882:A,A} |  | ||||||
| qvl{a>1697:hr,a<1466:A,a<1601:A,ll} |  | ||||||
| jh{m>173:R,s<564:A,s<797:A,R} |  | ||||||
| vgf{x>497:A,x>320:A,R} |  | ||||||
| lgk{a>3109:R,A} |  | ||||||
| lbx{x>1134:A,R} |  | ||||||
| nxp{s>840:A,R} |  | ||||||
| gkh{m<545:A,m>610:A,m>569:A,R} |  | ||||||
| zpz{x<3332:jk,m>2774:A,R} |  | ||||||
| sqt{x<399:R,m<3088:A,s<477:A,A} |  | ||||||
| mpf{a>3316:A,A} |  | ||||||
| ckv{m<3213:A,a<842:A,s<2396:A,A} |  | ||||||
| lpq{s<2685:A,A} |  | ||||||
| fg{m>3358:R,x>3763:A,R} |  | ||||||
| cf{a>1252:A,x>346:A,x>212:A,R} |  | ||||||
| bcv{s>3187:cxd,x>2785:R,x>2752:nsm,zn} |  | ||||||
| pq{x>2944:A,R} |  | ||||||
| vc{x>2389:cqz,m>1620:bd,bdr} |  | ||||||
| jgb{x<2002:A,R} |  | ||||||
| nfb{s<2319:A,a>3483:hj,m>1700:R,A} |  | ||||||
| zh{m<664:A,s<2311:A,A} |  | ||||||
| hrs{a<340:R,x>1096:A,R} |  | ||||||
| stl{a<1757:cfp,qrl} |  | ||||||
| lg{x<2142:R,m>1798:bx,x>3110:rg,A} |  | ||||||
| nrd{x<2026:qh,m>1735:mrk,pn} |  | ||||||
| cmk{s>292:A,A} |  | ||||||
| szf{a<996:A,x>1757:bqq,s<1243:R,A} |  | ||||||
| tg{a>989:A,s<936:R,s<1091:R,R} |  | ||||||
| ktl{x<2556:R,x<2639:A,R} |  | ||||||
| nb{m<3571:A,s>1051:R,R} |  | ||||||
| vx{a<2247:A,x<2460:A,a<2331:R,A} |  | ||||||
| in{s<2569:qj,csb} |  | ||||||
| rvc{m<1417:A,s>2822:A,m>3074:R,A} |  | ||||||
| hcv{a<3271:A,A} |  | ||||||
| blq{m<1523:mz,rq} |  | ||||||
| dvv{m<1558:rx,rn} |  | ||||||
| pdj{m>1764:R,s>3971:R,R} |  | ||||||
| tzf{s>3567:R,m<631:A,a<3273:R,R} |  | ||||||
| vvp{a<2271:nrc,m>2025:ls,a>3004:znl,ftr} |  | ||||||
| dx{s>3049:qdv,m>1362:hpq,m<759:A,xrl} |  | ||||||
| fgb{a>3186:pq,s>3045:A,rz} |  | ||||||
| zfr{s<3704:pg,a<1503:kkc,a>1606:rj,mcm} |  | ||||||
| hk{s<3670:A,a<2667:R,R} |  | ||||||
| vbs{m>2005:jgb,pts} |  | ||||||
| mmr{m>2322:R,m>1991:A,s>1195:A,R} |  | ||||||
| jsj{a<846:R,A} |  | ||||||
| gr{x>1637:A,m>1437:A,tzf} |  | ||||||
| smr{x>553:xkj,a>3828:pjv,s<2877:rvn,lk} |  | ||||||
| kkh{a<979:A,a<1290:R,m<3262:R,R} |  | ||||||
| rfs{s<2782:zfq,s>2869:rlj,vvp} |  | ||||||
| hld{m<2626:R,R} |  | ||||||
| pdr{s>3716:R,x<1984:A,R} |  | ||||||
| bpl{m>2642:R,m<2208:A,R} |  | ||||||
| rsb{s>2186:A,klj} |  | ||||||
| svh{m>1897:A,a<3228:A,s<2449:trr,A} |  | ||||||
| nvc{a>1611:sfr,A} |  | ||||||
| kx{x>637:A,x>614:A,A} |  | ||||||
| qh{x>1954:pdr,sl} |  | ||||||
| mr{x>2233:R,x>2163:A,R} |  | ||||||
| ndm{a<2304:R,A} |  | ||||||
| fb{m>2610:A,m>1344:A,A} |  | ||||||
| qm{m>2943:R,a>2109:R,R} |  | ||||||
| dv{a<678:A,R} |  | ||||||
| nbv{a<1299:R,m>2259:R,s>2404:A,R} |  | ||||||
| ls{a>2854:mpf,zqx} |  | ||||||
| xc{m>2101:R,s<2882:R,a>1165:A,R} |  | ||||||
| lct{m<2076:bs,s>2785:mkf,m>2855:A,bks} |  | ||||||
| dk{a<3506:A,A} |  | ||||||
| qmn{x>325:qf,a>449:kl,a<295:A,vm} |  | ||||||
| ncg{a<1018:lct,a<1371:rnd,x<2673:jkq,nvc} |  | ||||||
| zmq{m<2525:R,A} |  | ||||||
| thd{a>2757:gj,a<2405:qrn,m>2056:bmz,kr} |  | ||||||
| tts{m<3228:R,s>640:R,a>3171:A,A} |  | ||||||
| trr{a>3548:R,s<2437:R,R} |  | ||||||
| clc{s<2527:R,s>2549:A,A} |  | ||||||
| jtv{m<2950:A,s<210:R,R} |  | ||||||
| ghv{m>1136:xkd,s<1218:ql,m<502:gvn,szf} |  | ||||||
| jq{s<3727:A,m<1398:R,A} |  | ||||||
| ql{x<2601:lbx,dz} |  | ||||||
| rvn{x<189:vvb,hxn} |  | ||||||
| xx{x>2241:A,m>1897:A,R} |  | ||||||
| ccd{s<3621:A,R} |  | ||||||
| lts{s<3872:A,m>835:A,s<3931:R,A} |  | ||||||
| rn{s>925:R,R} |  | ||||||
| ngb{s<2880:A,R} |  | ||||||
| xxv{a<2094:A,s<2881:R,R} |  | ||||||
| kr{x>2351:A,s>258:R,a>2619:bdp,A} |  | ||||||
| mz{x<3454:fgb,zzp} |  | ||||||
| hd{a>2529:A,dmg} |  | ||||||
| hz{x>224:R,m<2084:R,A} |  | ||||||
| gh{m<971:A,m>1211:R,A} |  | ||||||
| jr{a>2700:R,m>1234:A,x<355:A,A} |  | ||||||
| jc{x<739:A,a<917:R,s<2457:ck,mnr} |  | ||||||
| bpj{x>330:rqq,R} |  | ||||||
| xfj{s<1260:ht,m<2092:jd,xhx} |  | ||||||
| bz{s<3823:A,R} |  | ||||||
| cxd{a<874:A,R} |  | ||||||
| bs{s>2688:A,m>1007:A,x<2651:A,R} |  | ||||||
| htn{m>977:R,a<2308:A,x<2327:A,A} |  | ||||||
| jhv{a>996:R,s<967:A,s<1075:R,A} |  | ||||||
| bcr{a<3147:ndm,tp} |  | ||||||
| pkj{m<2510:gbn,a>981:jjx,A} |  | ||||||
| zzp{s>2986:shm,x>3786:rpv,mb} |  | ||||||
| bc{s>3370:A,a<923:R,x>2579:R,A} |  | ||||||
| tj{x<2848:rb,s>1693:A,A} |  | ||||||
| fvl{s>1450:css,s>1274:fr,a>1541:ngh,rmz} |  | ||||||
| frc{m<2984:A,m<3157:sqt,tts} |  | ||||||
| lb{m>1612:A,A} |  | ||||||
| bp{m>2003:A,x>3015:cs,tg} |  | ||||||
| nnl{a<1000:R,s<3854:A,s>3945:A,R} |  | ||||||
| rl{m<3088:A,x<463:A,a>1631:A,R} |  | ||||||
| gvn{s>1250:A,s>1235:fhj,fqn} |  | ||||||
| rnf{m<733:R,x<1676:R,A} |  | ||||||
| cp{a<3134:fg,m>3460:A,kmc} |  | ||||||
| pd{s>637:vb,s<564:pt,R} |  | ||||||
| rz{x<3098:R,m>826:R,m<293:A,A} |  | ||||||
| zc{a>689:vmd,a<339:A,llk} |  | ||||||
| zl{s<3450:R,A} |  | ||||||
| rj{s<3855:A,m<1825:lcq,x>558:qn,R} |  | ||||||
| tp{a<3484:R,x>2024:R,a>3761:A,R} |  | ||||||
| jbz{m<3184:cnt,R} |  | ||||||
| fs{s<1772:A,m>908:nl,a>2631:A,A} |  | ||||||
| sfr{a>1871:A,a<1714:A,R} |  | ||||||
| lv{a>3338:A,s<314:R,x>2326:R,R} |  | ||||||
| hjj{m<1335:R,m>2001:R,a<2651:R,A} |  | ||||||
| sm{x>2614:R,m<621:A,A} |  | ||||||
| qdv{x<2058:R,R} |  | ||||||
| xsg{m>2409:qb,x<1022:bg,mgj} |  | ||||||
| vvb{x<121:A,m<1386:R,R} |  | ||||||
| szz{x>1786:xs,s<2260:stl,x<596:qg,zk} |  | ||||||
| sr{m>1474:A,gbk} |  | ||||||
| xxp{s<2328:A,x<3808:A,A} |  | ||||||
| fxk{s>3196:A,btj} |  | ||||||
| mgg{m>2309:R,a<2169:R,x<1003:jr,R} |  | ||||||
| rc{x>853:R,x>554:R,x<304:tk,A} |  | ||||||
| vzk{a>830:A,m<1128:kh,x>558:R,npn} |  | ||||||
| dd{x<2364:R,hk} |  | ||||||
| jvf{s<1220:kkh,m<3274:qgd,a>869:tx,dxb} |  | ||||||
| xn{a<1700:rjg,A} |  | ||||||
| vf{a>1341:A,s>3229:R,A} |  | ||||||
| dxb{m>3699:R,s<1248:R,m<3525:sml,A} |  | ||||||
| zd{s>1372:cbd,zc} |  | ||||||
| qb{x>1140:R,a>3588:R,a<3369:A,R} |  | ||||||
| ck{s>2389:R,x>753:A,m>2076:A,R} |  | ||||||
| bk{m<1112:A,x>422:A,x<254:R,A} |  | ||||||
| bdp{s>119:R,m<885:A,R} |  | ||||||
| xfq{m>1857:km,a<2650:rvk,m<1229:svp,fnm} |  | ||||||
| jjx{a<1105:R,A} |  | ||||||
| hh{x>2723:A,x>2324:R,R} |  | ||||||
| vxv{s<3855:A,a<1221:R,A} |  | ||||||
| hj{m<1924:A,A} |  | ||||||
| zj{a>2161:A,a<1948:mmr,a>2043:A,R} |  | ||||||
| lcq{m<760:A,R} |  | ||||||
| zmm{a>1990:vx,m>3237:nq,m<2768:R,zrk} |  | ||||||
| qrn{m>1714:qm,a>2144:htn,djn} |  | ||||||
| zk{a<2467:lkf,txv} |  | ||||||
| gsm{a>2592:sm,m<700:A,a>2099:R,R} |  | ||||||
| vhm{m>3185:R,m>2612:A,x<2721:R,R} |  | ||||||
| lss{a>1698:dd,ldr} |  | ||||||
| gf{a<589:ggp,a>940:xc,A} |  | ||||||
| qrl{a<2989:mgg,s>2068:rsb,x>881:xjq,cnz} |  | ||||||
| nz{x>640:zl,m<654:A,gh} |  | ||||||
| ljc{m<2348:xqn,m<3307:hvc,zpt} |  | ||||||
| ptz{a<1956:kmk,x>332:ks,dxr} |  | ||||||
| lj{s>1269:A,A} |  | ||||||
| rjr{a>1905:A,s<3610:A,R} |  | ||||||
| bkt{s<3288:xm,gkz} |  | ||||||
| jjq{s<2376:R,a<3384:R,m>3288:A,A} |  | ||||||
| fzx{x<2811:A,s<786:R,sjr} |  | ||||||
| hcz{a<1441:A,A} |  | ||||||
| ng{x>2025:A,a<1962:R,m>2393:A,A} |  | ||||||
| kg{x<1581:R,x<1788:R,R} |  | ||||||
| hc{a<1965:A,m<2176:R,R} |  | ||||||
| zrk{x>2229:A,R} |  | ||||||
| cgp{x>715:A,m>3614:A,R} |  | ||||||
| vmd{s>1327:R,A} |  | ||||||
| jsk{x>2685:bcv,m>1553:qgx,m>700:khd,mx} |  | ||||||
| kkc{m<1471:hcz,a>1447:A,x>594:A,tv} |  | ||||||
| ph{s<2709:R,a>615:A,R} |  | ||||||
| bqq{m>918:A,s<1255:A,x>2567:R,R} |  | ||||||
| dn{a>3209:zt,fc} |  | ||||||
| vm{x<119:R,a<356:R,A} |  | ||||||
| bvz{s<3732:zcl,fvj} |  | ||||||
| vgr{x>557:A,s>2325:R,A} |  | ||||||
| kl{m>1917:R,a>623:R,s<3697:R,A} |  | ||||||
| css{x<2079:flp,a>2235:vp,ttl} |  | ||||||
| qsf{s>458:rfh,s<225:A,x<1109:jm,A} |  | ||||||
| jjl{a<1765:qv,x>2506:tf,x>1208:zv,ljc} |  | ||||||
| xr{s>1663:A,R} |  | ||||||
| zqx{m<3112:A,R} |  | ||||||
| mm{x<2642:A,A} |  | ||||||
| bmm{a>1287:vf,m>2723:cf,tpd} |  | ||||||
| bx{s>1379:R,m<3154:A,a>2029:A,R} |  | ||||||
| hb{s>3578:A,a>1601:A,R} |  | ||||||
| npn{a>418:R,R} |  | ||||||
| gn{a<1162:dxm,a<1473:lz,xrb} |  | ||||||
| pj{x>3259:bgb,m<2105:rqc,hn} |  | ||||||
| cfp{m<1402:pgd,nn} |  | ||||||
| rx{a>2279:R,m<809:R,s<927:A,A} |  | ||||||
| dj{s<2516:R,R} |  | ||||||
| bj{s<3719:fls,pj} |  | ||||||
| ttl{a<753:djc,s>1593:tj,qr} |  | ||||||
| zp{m<862:A,R} |  | ||||||
| hzp{a<266:R,A} |  | ||||||
| hnb{m<729:A,m>1432:A,m>1081:A,R} |  | ||||||
| dfv{s<899:R,m>1776:bss,A} |  | ||||||
| gx{x<420:R,s<739:A,x>875:A,R} |  | ||||||
| lp{m>1603:A,x<2185:A,R} |  | ||||||
| khp{m<1240:R,s<3695:R,x>2040:R,A} |  | ||||||
| dxr{s<2453:A,x>300:A,dj} |  | ||||||
| rqc{m>859:mrq,a>1818:jvn,m<375:A,A} |  | ||||||
| cbf{a>1801:A,x<2146:R,A} |  | ||||||
| dxm{a<741:A,x<3647:lvx,s>3125:zm,cpx} |  | ||||||
| zdf{x>918:hrs,s<3499:bpj,x<510:qmn,vvr} |  | ||||||
| rk{a<1622:kjn,x>2035:lx,R} |  | ||||||
| mkf{s<2843:R,m>3082:R,R} |  | ||||||
| tpd{s>3176:R,a>1225:R,x>394:R,A} |  | ||||||
| tzq{m>2428:ngb,vl} |  | ||||||
| qj{s<1179:jjl,s>1877:szz,fvl} |  | ||||||
| xm{s<3237:R,a<738:A,A} |  | ||||||
| mf{a>1552:A,s<2401:R,R} |  | ||||||
| rlr{x>3280:A,x>2759:R,R} |  | ||||||
| hxn{a>3691:R,s<2707:R,s<2802:R,A} |  | ||||||
| lt{a>3090:R,s<71:A,A} |  | ||||||
| xk{a>3660:R,A} |  | ||||||
| zqm{a>928:A,A} |  | ||||||
| qs{m>1136:R,rnf} |  | ||||||
| jl{m<3203:A,m>3526:R,s>3891:A,A} |  | ||||||
| lx{a<1729:A,x>2216:A,m>1412:A,R} |  | ||||||
| gc{m<3522:R,a<2626:A,R} |  | ||||||
| pzc{a<3024:vtg,m>1682:R,m<1377:A,rrf} |  | ||||||
| gbk{m<654:R,s<1217:A,s<1223:R,A} |  | ||||||
| lvx{a<927:R,m>2149:R,x>3327:A,A} |  | ||||||
| fhj{s<1242:R,A} |  | ||||||
| xqn{m<896:pv,x<621:hq,pzc} |  | ||||||
| hq{s<661:cr,a>3031:R,s<1000:R,A} |  | ||||||
| xtz{s>2914:A,s>2909:R,R} |  | ||||||
| mpv{s>3459:bj,a>2014:blq,tgr} |  | ||||||
| rmz{m<2196:ghv,jvf} |  | ||||||
| fc{a<2548:kg,s>166:R,a<2930:A,lt} |  | ||||||
| rpv{x>3861:R,a<3150:R,s<2725:R,R} |  | ||||||
| nq{a>1505:R,m<3509:R,R} |  | ||||||
| qz{a<1558:R,m<3088:A,m>3640:R,R} |  | ||||||
| pg{a<1524:cdc,s>3406:A,m<1803:R,R} |  | ||||||
| nn{m<2341:fm,s>2091:nnd,x>667:R,A} |  | ||||||
| qnp{a<1882:A,s<2689:R,A} |  | ||||||
| kb{x<1708:A,A} |  | ||||||
| km{m>3254:R,x>2185:R,s>3646:cbf,R} |  | ||||||
| qhp{x<1902:bvz,ksc} |  | ||||||
| tf{m>2474:fnc,lh} |  | ||||||
| mrk{m>2540:gth,nh} |  | ||||||
| btj{a<3349:R,x>877:A,R} |  | ||||||
| cv{s>1227:ss,sr} |  | ||||||
| dlr{m<1789:gsm,m>2852:rtx,a>2963:bxj,zj} |  | ||||||
| xbm{s<3216:R,A} |  | ||||||
| cx{a>1657:R,x>1871:R,A} |  | ||||||
| cb{a<2526:R,A} |  | ||||||
| llk{m>2126:A,A} |  | ||||||
| hjb{m>3625:R,m>3514:R,A} |  | ||||||
| bq{a<1187:pkj,m<1393:lkm,x<695:bmm,svf} |  | ||||||
| fn{x>151:R,m<2679:A,A} |  | ||||||
| vp{a>2870:ff,m>2322:hd,s<1637:vjv,fs} |  | ||||||
| rlj{s>2896:qd,a>2284:zdx,a<1323:gf,jg} |  | ||||||
| ggp{m<1794:R,s<2883:A,x<1856:R,A} |  | ||||||
| znl{m>856:A,a<3666:hcv,sf} |  | ||||||
| svp{x>2155:xhh,a<3541:ctv,s<3726:ccd,bz} |  | ||||||
| mgj{x<1387:A,x<1600:R,R} |  | ||||||
| lkf{x>1081:qk,x>777:jf,x<686:mrc,jc} |  | ||||||
| rjg{a<1443:R,x>1229:R,s<1556:R,A} |  | ||||||
| mbg{a<622:A,x<834:A,x<867:R,R} |  | ||||||
| bss{a<3054:A,x>2187:A,a<3492:R,A} |  | ||||||
| xkd{a<562:kpp,R} |  | ||||||
| qr{s<1530:jdd,x<3305:R,R} |  | ||||||
| qfg{a<2318:R,fn} |  | ||||||
| jf{x>919:A,a>935:A,mbg} |  | ||||||
| bg{s>2516:R,A} |  | ||||||
| cbd{m>2449:A,a>1041:cn,a<450:R,xp} |  | ||||||
| xl{s<2925:hx,a>3207:R,R} |  | ||||||
| vrg{a>1289:hb,cj} |  | ||||||
| mtb{s>2981:hrh,A} |  | ||||||
| gfm{s<3070:R,m>3645:R,m>3357:R,R} |  | ||||||
| zfq{a<1584:js,lpq} |  | ||||||
| fbv{a<2481:A,x>1644:A,R} |  | ||||||
| rxp{a<1460:dx,bcr} |  | ||||||
| dlj{a>3193:A,x>2205:A,A} |  | ||||||
| nrc{a<941:rvc,s>2824:R,cx} |  | ||||||
| vjv{a<2589:R,s<1539:A,s<1591:A,R} |  | ||||||
| prg{x>943:R,x>469:R,a>1828:A,R} |  | ||||||
| cn{s>1408:A,m>1058:R,A} |  | ||||||
| hvc{x<696:frc,x<972:tt,qsf} |  | ||||||
| flp{a>2225:fq,a<1241:fj,s<1733:xn,prg} |  | ||||||
| bkf{m<1041:A,A} |  | ||||||
| dl{a>1330:R,s<2427:R,x<1467:A,A} |  | ||||||
| sn{m>3136:gfm,grr} |  | ||||||
| rfh{x>1129:R,A} |  | ||||||
| td{m>1204:R,m>773:A,a<2619:R,A} |  | ||||||
| jg{x<1834:A,a<1719:hxf,x<2218:ng,xxv} |  | ||||||
| jrj{a<386:A,R} |  | ||||||
| nv{m>210:R,R} |  | ||||||
| pjx{s<2086:mm,a<3090:fb,x>2720:R,sfp} |  | ||||||
| ll{s<2174:A,s<2409:R,R} |  | ||||||
| pn{x>2063:rjr,m>970:khp,a>1997:A,fhq} |  | ||||||
| gj{a>3526:R,a<3207:mr,lv} |  | ||||||
| nj{m<2883:A,s<3049:R,s>3494:R,cgp} |  | ||||||
| xq{a<3632:R,s>2980:R,R} |  | ||||||
| mrq{m<1543:R,m>1844:A,R} |  | ||||||
| rm{a>3252:hv,R} |  | ||||||
| fxx{a<1183:kmg,m<2218:qvl,zmm} |  | ||||||
| grr{a<2906:R,s<2997:R,m>2839:R,R} |  | ||||||
| kjn{x>2064:R,m>2516:R,x>1756:R,A} |  | ||||||
| bvd{s>3355:A,a>1525:R,R} |  | ||||||
| nf{x>3448:jrj,R} |  | ||||||
| hs{a<3135:R,s>399:R,A} |  | ||||||
| dln{s<561:mv,x>2863:nxp,s<800:A,A} |  | ||||||
| kmc{s>639:A,m>2835:R,R} |  | ||||||
| sfp{a>3626:A,x<2148:A,R} |  | ||||||
| ff{a<3401:R,a>3684:A,m>1555:hh,zp} |  | ||||||
| jz{a<3162:xt,a<3530:vq,s<3365:smr,svn} |  | ||||||
| tgr{x>3121:gn,x>2865:tzq,s>2899:jsk,ncg} |  | ||||||
| gl{s<739:pd,x>1894:dfv,a>2666:zmq,dvv} |  | ||||||
| grc{x<435:A,A} |  | ||||||
| sml{s<1264:R,m>3363:A,x<2284:A,A} |  | ||||||
| mkc{x<760:A,a<631:A,a>1386:R,kq} |  | ||||||
| xp{s>1423:A,x<2579:R,R} |  | ||||||
| vq{m>1343:fxk,nz} |  | ||||||
| mrg{m<1518:R,m<1658:R,A} |  | ||||||
| js{a>944:xg,x>2026:ph,s<2666:R,R} |  | ||||||
| kh{a<318:R,x<621:R,a<659:A,R} |  | ||||||
| rg{x>3435:R,R} |  | ||||||
| fhq{x<2040:A,a>704:R,m>551:A,R} |  | ||||||
| kq{m<2577:R,s<894:A,x<1039:A,A} |  | ||||||
| qd{m>2322:R,s<2906:A,x>1957:A,xtz} |  | ||||||
| ksc{x<2099:nrd,x>2265:lss,xfq} |  | ||||||
| kzv{a>2414:xj,lg} |  | ||||||
| kk{a<617:R,R} |  | ||||||
| jk{s>538:A,m<2863:A,R} |  | ||||||
| xg{a>1210:R,x>1982:R,x>1800:R,A} |  | ||||||
| cl{a>2733:R,clc} |  | ||||||
| bd{m<2716:A,a<3313:R,m<3413:A,fbm} |  | ||||||
| xjq{s<1984:A,m<1511:A,bpl} |  | ||||||
| rvk{a>1155:bkf,m<813:br,m<1432:A,zkh} |  | ||||||
| nd{s>452:kd,x>1163:kk,vzk} |  | ||||||
| fvj{s>3841:bgt,m<2521:bb,tz} |  | ||||||
| ks{m>2382:R,ntz} |  | ||||||
| tt{a<2850:R,A} |  | ||||||
| qgx{s>3258:zqm,s<3027:R,ktl} |  | ||||||
| ss{m>2041:A,ft} |  | ||||||
| rq{x<3120:xl,m>2642:sn,rtf} |  | ||||||
| jdd{s>1486:R,m>2101:A,m>762:A,A} |  | ||||||
| qx{a>3696:qrp,s>3657:A,R} |  | ||||||
| bks{a<607:A,R} |  | ||||||
| xs{a>2441:fh,x>2963:qqg,fxx} |  | ||||||
| mrc{m>2461:ckv,m>1428:kx,m>724:tq,A} |  | ||||||
| rb{m<2468:R,x>2419:R,x<2271:R,A} |  | ||||||
| ht{s<1252:R,A} |  | ||||||
| qk{x<1328:mf,x<1549:dl,nbv} |  | ||||||
| djc{m<1600:cm,a>283:nrs,R} |  | ||||||
| fh{s<2220:pjx,lgk} |  | ||||||
| bdr{a>3328:jfn,m>707:R,R} |  | ||||||
| rtx{x<1386:R,m>3269:gc,gb} |  | ||||||
| xkj{a>3749:A,a<3675:dtp,s<3004:pht,vkj} |  | ||||||
| pv{m>323:R,x>502:jh,s>514:nv,vz} |  | ||||||
| vv{a>3320:R,s<636:R,s>948:A,R} |  | ||||||
| sg{s>601:bp,cmk} |  | ||||||
| cr{a<2514:R,R} |  | ||||||
| gb{a<2813:A,R} |  | ||||||
| bmz{s<196:A,a<2556:fpk,s>307:pk,R} |  | ||||||
| bb{m>1091:A,R} |  | ||||||
| zdx{s>2879:R,a<3102:vk,A} |  | ||||||
| jfn{a<3606:A,A} |  | ||||||
| nbp{m>818:A,A} |  | ||||||
| kn{s>2923:R,A} |  | ||||||
| fr{a<1594:zd,a>2929:vc,kzv} |  | ||||||
| xj{m<2544:hjj,R} |  | ||||||
| hv{m>1991:R,A} |  | ||||||
| qrp{x>874:A,x>389:R,A} |  | ||||||
| cnc{m<985:A,R} |  | ||||||
| cnz{m<2037:hnb,A} |  | ||||||
| vmb{a>1700:jz,nm} |  | ||||||
| mv{m<1362:R,A} |  | ||||||
| gkz{s>3342:jsj,x>1892:xx,m<1670:R,kb} |  | ||||||
| xt{m>1817:nj,a<2551:fpt,ktx} |  | ||||||
| fj{a>463:A,A} |  | ||||||
| mx{m>253:gkh,s<3140:R,m>137:R,R} |  | ||||||
| jd{m>842:lb,m>451:kkv,s<1266:A,A} |  | ||||||
| cqz{s<1368:A,m<1575:A,R} |  | ||||||
| svf{s<3263:R,R} |  | ||||||
| sl{m<2246:A,R} |  | ||||||
| zrq{x>2077:lsm,x<1840:A,a>1618:R,bvd} |  | ||||||
| pz{m>3317:hjb,s>3590:A,x<1658:R,jvc} |  | ||||||
| csb{x<1439:vmb,x>2420:mpv,s<3414:gsz,qhp} |  | ||||||
| kmk{x>328:kpg,R} |  | ||||||
| qrq{a>1614:A,s<2403:zh,x>114:R,nbp} |  | ||||||
| fq{x>909:xr,a>2931:A,A} |  | ||||||
| lr{a>2309:rm,a>1791:vbs,s>3276:zrq,rk} |  | ||||||
| lsm{x>2277:R,a>1618:R,R} |  | ||||||
| klj{x>1054:R,m>2202:A,x>399:A,R} |  | ||||||
| mb{a<3099:R,s<2735:R,R} |  | ||||||
| fqn{m<210:R,A} |  | ||||||
| jj{s<2200:A,A} |  | ||||||
| pht{a>3714:R,A} |  | ||||||
| tz{x<1673:R,a<1378:A,A} |  | ||||||
| rrf{a>3595:A,a>3246:A,R} |  | ||||||
| nmq{a>2748:R,a<2542:R,x<2016:R,A} |  | ||||||
| fls{a<2084:vrg,mkz} |  | ||||||
| fbm{a>3544:R,A} |  | ||||||
| fnm{s>3733:dlj,lp} |  | ||||||
| zpt{s>665:xb,m>3543:hs,gv} |  | ||||||
| bxj{m>2343:R,A} |  | ||||||
| zkh{a<571:A,s>3679:A,a>921:R,A} |  | ||||||
| cdc{m>1919:A,R} |  | ||||||
| ngh{s>1238:xfj,s<1208:dlr,cv} |  | ||||||
| cj{a>700:A,R} |  | ||||||
| bgb{a>2604:dk,m>1677:jl,x>3687:lts,R} |  | ||||||
| dz{m<718:R,x<3415:R,R} |  | ||||||
| nnd{x>1061:R,m>2920:A,a>798:R,R} |  | ||||||
| hn{m<2984:A,a>2031:A,vxv} |  | ||||||
| dtp{x<945:A,a<3591:A,R} |  | ||||||
| qv{x>2355:sg,m<1752:nd,nxg} |  | ||||||
| vtg{a>2512:R,m<1657:A,x>981:R,A} |  | ||||||
| hr{x>2303:A,m<1178:A,A} |  | ||||||
| txv{s<2416:nfb,s<2487:svh,a>3134:xsg,cl} |  | ||||||
| mth{a>1241:R,A} |  | ||||||
| sf{s<2826:A,a<3808:A,a<3934:R,A} |  | ||||||
| hrh{m>2319:A,x>461:A,m>839:R,A} |  | ||||||
| tk{s>3674:A,s>3485:A,A} |  | ||||||
| ldr{m<1530:R,s<3738:hld,x<2358:rrr,nnl} |  | ||||||
| kpg{a>779:R,m>2426:R,R} |  | ||||||
| mcm{m>1928:qz,a>1571:R,a>1536:A,vgf} |  | ||||||
| kkv{s<1268:R,R} |  | ||||||
| ntz{x>354:R,R} |  | ||||||
| qg{x>390:hp,x<245:qjb,ptz} |  | ||||||
| rrr{s<3885:A,m<2398:R,R} |  | ||||||
| rtf{a>3255:xq,x>3511:A,s<3159:A,R} |  | ||||||
| ft{x>2278:R,m<1043:R,a<2670:R,R} |  | ||||||
| dcf{x>2425:A,x<1158:A,A} |  | ||||||
| vb{s<704:R,x<1816:R,R} |  | ||||||
| zv{s>491:gl,x<2068:dn,thd} |  | ||||||
| xb{s>882:nb,gx} |  | ||||||
| gth{s>3795:R,m<3296:A,A} |  | ||||||
| nxg{x>1262:bl,s>410:mkc,a>704:jtv,jbz} |  | ||||||
| rnd{x<2587:R,m<2247:xfr,vhm} |  | ||||||
| sjr{a>2727:R,A} |  | ||||||
| pt{s>532:R,R} |  | ||||||
| fm{x>631:A,x>335:A,s<2100:R,A} |  | ||||||
| gq{s>681:R,a<2732:R,m>1215:A,R} |  | ||||||
| svn{m<1967:qx,rc} |  | ||||||
| xv{s<2249:A,A} |  | ||||||
| zn{s<3051:A,x>2727:A,A} |  | ||||||
| hpq{s<2983:R,m<3115:R,A} |  | ||||||
| nh{a<1716:A,R} |  | ||||||
| qn{m>2908:R,s<3927:A,R} |  | ||||||
| lh{x<3047:dln,gq} |  | ||||||
| zch{x>1081:nlr,A} |  | ||||||
| np{x>876:zch,a<1580:mtb,sv} |  | ||||||
| tq{a>1139:A,a<709:R,R} |  | ||||||
| vk{m>1771:R,a>2624:A,R} |  | ||||||
| qt{a<1334:R,x>3407:R,R} |  | ||||||
| qf{s<3748:R,A} |  | ||||||
| zm{s<3247:R,x<3878:A,R} |  | ||||||
| xrl{a<807:A,a<1157:A,s>2999:A,R} |  | ||||||
| jvc{s<3505:R,s>3546:A,R} |  | ||||||
| trf{m>2082:jjq,a<3517:cnc,R} |  | ||||||
| nm{a<835:zdf,a<1402:bq,s>3203:zfr,np} |  | ||||||
| xxl{a<3140:cb,a<3432:vv,A} |  | ||||||
|  |  | ||||||
| {x=3161,m=1141,a=51,s=441} |  | ||||||
| {x=240,m=174,a=555,s=1269} |  | ||||||
| {x=639,m=25,a=2025,s=345} |  | ||||||
| {x=97,m=1410,a=1572,s=1133} |  | ||||||
| {x=763,m=1918,a=625,s=2037} |  | ||||||
| {x=83,m=1395,a=433,s=2841} |  | ||||||
| {x=359,m=652,a=831,s=129} |  | ||||||
| {x=979,m=204,a=1976,s=1629} |  | ||||||
| {x=3112,m=122,a=816,s=305} |  | ||||||
| {x=523,m=2334,a=108,s=1286} |  | ||||||
| {x=267,m=152,a=480,s=389} |  | ||||||
| {x=278,m=917,a=1419,s=2422} |  | ||||||
| {x=207,m=1337,a=600,s=282} |  | ||||||
| {x=128,m=913,a=3232,s=189} |  | ||||||
| {x=1359,m=15,a=1792,s=2028} |  | ||||||
| {x=87,m=2807,a=3202,s=104} |  | ||||||
| {x=4,m=240,a=686,s=1790} |  | ||||||
| {x=2332,m=537,a=1657,s=289} |  | ||||||
| {x=1739,m=75,a=2757,s=1320} |  | ||||||
| {x=2127,m=44,a=1389,s=224} |  | ||||||
| {x=564,m=3263,a=177,s=447} |  | ||||||
| {x=424,m=915,a=1856,s=18} |  | ||||||
| {x=632,m=1638,a=665,s=315} |  | ||||||
| {x=950,m=993,a=136,s=11} |  | ||||||
| {x=154,m=611,a=405,s=1090} |  | ||||||
| {x=1784,m=1239,a=506,s=878} |  | ||||||
| {x=379,m=332,a=89,s=1091} |  | ||||||
| {x=2234,m=315,a=1158,s=2140} |  | ||||||
| {x=971,m=283,a=56,s=1089} |  | ||||||
| {x=39,m=101,a=256,s=995} |  | ||||||
| {x=259,m=25,a=829,s=2383} |  | ||||||
| {x=2681,m=876,a=676,s=109} |  | ||||||
| {x=1783,m=2119,a=299,s=25} |  | ||||||
| {x=2735,m=1444,a=94,s=572} |  | ||||||
| {x=710,m=2673,a=372,s=1524} |  | ||||||
| {x=171,m=221,a=1344,s=234} |  | ||||||
| {x=250,m=547,a=40,s=2485} |  | ||||||
| {x=1282,m=1141,a=823,s=1862} |  | ||||||
| {x=3,m=557,a=1924,s=1310} |  | ||||||
| {x=23,m=1217,a=133,s=2587} |  | ||||||
| {x=2073,m=75,a=246,s=250} |  | ||||||
| {x=591,m=646,a=510,s=610} |  | ||||||
| {x=1057,m=1782,a=1460,s=360} |  | ||||||
| {x=715,m=2817,a=1441,s=1769} |  | ||||||
| {x=132,m=478,a=1510,s=1669} |  | ||||||
| {x=3098,m=1549,a=915,s=2968} |  | ||||||
| {x=1913,m=570,a=542,s=381} |  | ||||||
| {x=311,m=935,a=277,s=290} |  | ||||||
| {x=486,m=148,a=240,s=61} |  | ||||||
| {x=428,m=1469,a=26,s=1175} |  | ||||||
| {x=520,m=979,a=84,s=413} |  | ||||||
| {x=244,m=1671,a=2482,s=6} |  | ||||||
| {x=53,m=1426,a=3,s=202} |  | ||||||
| {x=787,m=1504,a=1281,s=1676} |  | ||||||
| {x=27,m=2265,a=1142,s=202} |  | ||||||
| {x=1876,m=170,a=2306,s=2130} |  | ||||||
| {x=699,m=48,a=228,s=634} |  | ||||||
| {x=684,m=1694,a=287,s=1244} |  | ||||||
| {x=1140,m=919,a=845,s=1543} |  | ||||||
| {x=2313,m=183,a=948,s=1856} |  | ||||||
| {x=345,m=325,a=399,s=673} |  | ||||||
| {x=758,m=79,a=523,s=1105} |  | ||||||
| {x=271,m=1196,a=611,s=1465} |  | ||||||
| {x=495,m=2296,a=543,s=873} |  | ||||||
| {x=1054,m=273,a=1040,s=975} |  | ||||||
| {x=2372,m=642,a=415,s=303} |  | ||||||
| {x=2865,m=216,a=208,s=1772} |  | ||||||
| {x=219,m=29,a=689,s=561} |  | ||||||
| {x=885,m=150,a=816,s=1035} |  | ||||||
| {x=2293,m=1052,a=546,s=527} |  | ||||||
| {x=1384,m=461,a=264,s=911} |  | ||||||
| {x=1125,m=652,a=3475,s=1492} |  | ||||||
| {x=193,m=823,a=511,s=719} |  | ||||||
| {x=3393,m=26,a=15,s=111} |  | ||||||
| {x=611,m=1012,a=114,s=839} |  | ||||||
| {x=527,m=159,a=3961,s=465} |  | ||||||
| {x=214,m=416,a=1332,s=348} |  | ||||||
| {x=21,m=1247,a=1356,s=112} |  | ||||||
| {x=3308,m=387,a=587,s=16} |  | ||||||
| {x=171,m=1571,a=2145,s=1685} |  | ||||||
| {x=1334,m=970,a=133,s=102} |  | ||||||
| {x=567,m=348,a=318,s=624} |  | ||||||
| {x=344,m=911,a=593,s=326} |  | ||||||
| {x=976,m=584,a=270,s=339} |  | ||||||
| {x=879,m=796,a=565,s=1348} |  | ||||||
| {x=1427,m=1060,a=751,s=1071} |  | ||||||
| {x=2412,m=582,a=407,s=1668} |  | ||||||
| {x=21,m=147,a=1452,s=681} |  | ||||||
| {x=457,m=404,a=1617,s=338} |  | ||||||
| {x=1810,m=1236,a=19,s=174} |  | ||||||
| {x=55,m=674,a=530,s=327} |  | ||||||
| {x=423,m=348,a=1067,s=424} |  | ||||||
| {x=2836,m=2279,a=3116,s=73} |  | ||||||
| {x=792,m=2863,a=1457,s=1643} |  | ||||||
| {x=537,m=910,a=2132,s=2005} |  | ||||||
| {x=895,m=1383,a=86,s=632} |  | ||||||
| {x=302,m=891,a=61,s=303} |  | ||||||
| {x=24,m=28,a=438,s=458} |  | ||||||
| {x=1134,m=104,a=219,s=623} |  | ||||||
| {x=208,m=1184,a=280,s=2224} |  | ||||||
| {x=1884,m=762,a=2518,s=588} |  | ||||||
| {x=1712,m=2692,a=580,s=1996} |  | ||||||
| {x=597,m=1108,a=1198,s=889} |  | ||||||
| {x=29,m=1692,a=456,s=2358} |  | ||||||
| {x=604,m=1656,a=149,s=374} |  | ||||||
| {x=995,m=1575,a=1300,s=1043} |  | ||||||
| {x=513,m=64,a=348,s=670} |  | ||||||
| {x=2016,m=148,a=288,s=240} |  | ||||||
| {x=2208,m=388,a=726,s=69} |  | ||||||
| {x=521,m=1808,a=2767,s=856} |  | ||||||
| {x=512,m=103,a=439,s=1943} |  | ||||||
| {x=148,m=935,a=787,s=477} |  | ||||||
| {x=1153,m=2337,a=238,s=3068} |  | ||||||
| {x=692,m=2215,a=1089,s=134} |  | ||||||
| {x=2260,m=1675,a=2775,s=1847} |  | ||||||
| {x=625,m=3316,a=1996,s=2999} |  | ||||||
| {x=2263,m=2373,a=2421,s=349} |  | ||||||
| {x=13,m=2202,a=316,s=132} |  | ||||||
| {x=1414,m=2836,a=2224,s=206} |  | ||||||
| {x=2597,m=203,a=741,s=1575} |  | ||||||
| {x=3420,m=1012,a=637,s=768} |  | ||||||
| {x=278,m=1222,a=1586,s=463} |  | ||||||
| {x=511,m=816,a=71,s=381} |  | ||||||
| {x=538,m=320,a=395,s=2388} |  | ||||||
| {x=522,m=741,a=2172,s=1418} |  | ||||||
| {x=112,m=619,a=1875,s=1458} |  | ||||||
| {x=462,m=2079,a=252,s=54} |  | ||||||
| {x=2828,m=121,a=297,s=19} |  | ||||||
| {x=444,m=1444,a=85,s=88} |  | ||||||
| {x=1328,m=43,a=1168,s=241} |  | ||||||
| {x=1963,m=162,a=135,s=915} |  | ||||||
| {x=350,m=994,a=223,s=3064} |  | ||||||
| {x=130,m=790,a=895,s=52} |  | ||||||
| {x=317,m=83,a=265,s=478} |  | ||||||
| {x=215,m=2935,a=703,s=2731} |  | ||||||
| {x=1274,m=1313,a=455,s=2270} |  | ||||||
| {x=18,m=1971,a=1987,s=1992} |  | ||||||
| {x=2444,m=646,a=1462,s=232} |  | ||||||
| {x=1054,m=44,a=241,s=1037} |  | ||||||
| {x=212,m=1389,a=1490,s=574} |  | ||||||
| {x=301,m=3887,a=1190,s=300} |  | ||||||
| {x=3405,m=2067,a=2279,s=976} |  | ||||||
| {x=503,m=1631,a=933,s=303} |  | ||||||
| {x=1877,m=2443,a=2986,s=2055} |  | ||||||
| {x=559,m=1073,a=2167,s=1286} |  | ||||||
| {x=2473,m=1614,a=1850,s=503} |  | ||||||
| {x=357,m=430,a=1105,s=15} |  | ||||||
| {x=601,m=271,a=891,s=290} |  | ||||||
| {x=1958,m=6,a=250,s=796} |  | ||||||
| {x=635,m=507,a=262,s=853} |  | ||||||
| {x=337,m=949,a=2590,s=53} |  | ||||||
| {x=3419,m=3441,a=1089,s=592} |  | ||||||
| {x=132,m=992,a=482,s=306} |  | ||||||
| {x=979,m=958,a=2428,s=572} |  | ||||||
| {x=20,m=60,a=1124,s=3558} |  | ||||||
| {x=189,m=406,a=1382,s=546} |  | ||||||
| {x=1264,m=12,a=716,s=239} |  | ||||||
| {x=916,m=2214,a=69,s=146} |  | ||||||
| {x=631,m=2307,a=1969,s=421} |  | ||||||
| {x=1277,m=864,a=1780,s=490} |  | ||||||
| {x=306,m=2550,a=53,s=2171} |  | ||||||
| {x=120,m=1296,a=474,s=301} |  | ||||||
| {x=1566,m=869,a=894,s=2050} |  | ||||||
| {x=698,m=2308,a=687,s=492} |  | ||||||
| {x=2410,m=2671,a=806,s=1228} |  | ||||||
| {x=988,m=3291,a=459,s=229} |  | ||||||
| {x=1481,m=204,a=646,s=2167} |  | ||||||
| {x=238,m=593,a=497,s=186} |  | ||||||
| {x=317,m=187,a=772,s=129} |  | ||||||
| {x=53,m=3624,a=751,s=554} |  | ||||||
| {x=503,m=59,a=699,s=2483} |  | ||||||
| {x=59,m=1139,a=442,s=334} |  | ||||||
| {x=297,m=473,a=2519,s=554} |  | ||||||
| {x=254,m=1241,a=1477,s=280} |  | ||||||
| {x=117,m=1332,a=251,s=571} |  | ||||||
| {x=543,m=2228,a=606,s=473} |  | ||||||
| {x=1241,m=822,a=1544,s=2650} |  | ||||||
| {x=656,m=665,a=2678,s=2842} |  | ||||||
| {x=111,m=1574,a=537,s=807} |  | ||||||
| {x=152,m=641,a=16,s=325} |  | ||||||
| {x=2814,m=230,a=2633,s=224} |  | ||||||
| {x=4,m=856,a=2263,s=32} |  | ||||||
| {x=1837,m=124,a=221,s=3059} |  | ||||||
| {x=320,m=311,a=1653,s=15} |  | ||||||
| {x=265,m=307,a=930,s=2960} |  | ||||||
| {x=796,m=87,a=2572,s=741} |  | ||||||
| {x=602,m=585,a=2755,s=381} |  | ||||||
| {x=455,m=441,a=610,s=1380} |  | ||||||
| {x=552,m=1554,a=1800,s=39} |  | ||||||
| {x=1707,m=170,a=92,s=789} |  | ||||||
| {x=772,m=490,a=1173,s=763} |  | ||||||
| {x=2930,m=2475,a=1873,s=1826} |  | ||||||
| {x=1571,m=572,a=1883,s=1534} |  | ||||||
| {x=2008,m=2416,a=155,s=799} |  | ||||||
| {x=2060,m=1868,a=372,s=41} |  | ||||||
| {x=1899,m=104,a=7,s=456} |  | ||||||
| {x=37,m=718,a=642,s=1394} |  | ||||||
| {x=2078,m=1001,a=2864,s=791} |  | ||||||
| {x=124,m=890,a=2174,s=2418} |  | ||||||
| {x=996,m=2173,a=318,s=2194} |  | ||||||
							
								
								
									
										54
									
								
								19/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										54
									
								
								19/part1.pl
									
									
									
									
									
								
							| @@ -1,54 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Workflows, Parts), |  | ||||||
|     concurrent_maplist(wf(Workflows, in), Parts, Scores), |  | ||||||
|     sum_list(Scores, Score), |  | ||||||
|     write(Score), nl. |  | ||||||
|  |  | ||||||
| wf(_, accept, [x-X, m-M, a-A, s-S], Score) :- Score is X + M + A + S, !. |  | ||||||
| wf(_, reject, _Part, 0) :- !. |  | ||||||
| wf(Workflows, WorkflowName, Part, Score) :- |  | ||||||
|     member(WorkflowName-Rules, Workflows), |  | ||||||
|     rule(Workflows, Rules, Part, Score). |  | ||||||
|  |  | ||||||
| rule(Workflows, [EndRule], Part, Score) :- wf(Workflows, EndRule, Part, Score). |  | ||||||
| rule(Workflows, [Attr-Cond-N-Dest|Rules], Part, Score) :- |  | ||||||
|     (   satisfy(Attr-Cond-N, Part) |  | ||||||
|     ->  wf(Workflows, Dest, Part, Score) |  | ||||||
|     ;   rule(Workflows, Rules, Part, Score) |  | ||||||
|     ). |  | ||||||
|  |  | ||||||
| satisfy(Attr-Cond-N, Part) :- member(Attr-M, Part), call(Cond, M, N). |  | ||||||
|  |  | ||||||
| % input parsing stuff below |  | ||||||
| input(FileName, Workflows, Parts) :- |  | ||||||
|     phrase_from_file((workflows(Workflows), parts(Parts)), FileName). |  | ||||||
|  |  | ||||||
| workflows([]) --> "\n", !. |  | ||||||
| workflows([Name-Rules|Ws]) --> |  | ||||||
|     string_without("{", NameStr), "{", rules(Rules), "}\n", workflows(Ws), |  | ||||||
|     {atom_codes(Name, NameStr)}. |  | ||||||
|  |  | ||||||
| rules([End]) --> dest(End). |  | ||||||
| rules([Rule|Rules]) --> rule(Rule), ",", rules(Rules). |  | ||||||
|  |  | ||||||
| rule(Attr-Cond-N-Dest) --> attr(Attr), cond(Cond), number(N), ":", dest(Dest). |  | ||||||
|  |  | ||||||
| attr(x) --> "x". |  | ||||||
| attr(m) --> "m". |  | ||||||
| attr(a) --> "a". |  | ||||||
| attr(s) --> "s". |  | ||||||
| cond('>') --> ">". |  | ||||||
| cond('<') --> "<". |  | ||||||
| dest(reject) --> "R", !. |  | ||||||
| dest(accept) --> "A", !. |  | ||||||
| dest(Dest) --> endrule(Dest). |  | ||||||
| endrule(Rule) --> string_without(",}", RuleStr), {atom_codes(Rule, RuleStr)}. |  | ||||||
|  |  | ||||||
| parts([]) --> eos, !. |  | ||||||
| parts([[x-X, m-M, a-A, s-S]|Parts]) --> |  | ||||||
|     "{x=", number(X), ",m=", number(M), ",a=", number(A), ",s=", number(S), |  | ||||||
|     "}\n", parts(Parts). |  | ||||||
							
								
								
									
										83
									
								
								19/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										83
									
								
								19/part2.pl
									
									
									
									
									
								
							| @@ -1,83 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Workflows), |  | ||||||
|     findall( |  | ||||||
|         Count-Limit, |  | ||||||
|         ( |  | ||||||
|             wf(Workflows, in, Route, Limit), |  | ||||||
|             Limit = [x-Xmin-Xmax, m-Mmin-Mmax, a-Amin-Amax, s-Smin-Smax], |  | ||||||
|             Count is (Xmax - Xmin)*(Mmax - Mmin)*(Amax - Amin)*(Smax - Smin), |  | ||||||
|             write(Route), write(" - "), write(Limit), write(" - "), write(Count), nl |  | ||||||
|         ), |  | ||||||
|         Limits), |  | ||||||
|     length(Limits, LenLimits), write("lenlimits = "), write(LenLimits), nl, |  | ||||||
|     maplist([Count-Limit, Count]>>(true), Limits, CountsOnly), |  | ||||||
|     sum_list(CountsOnly, Answer), write("answer = "), write(Answer), nl, |  | ||||||
|     true. |  | ||||||
|  |  | ||||||
| choices(Limit, N) :- |  | ||||||
|     foldl([_-Min-Max, V0, V]>>(V is V0*(Max - Min + 1)), Limit, 1, N). |  | ||||||
|  |  | ||||||
| or_limits([Limit], Limit). |  | ||||||
| or_limits([Limit1, Limit2 | Limits], Limit) :- |  | ||||||
|     findall( |  | ||||||
|         Attr-Min-Max, |  | ||||||
|         (   member(Attr-Min1-Max1, Limit1), member(Attr-Min2-Max2, Limit2), |  | ||||||
|             Min is min(Min1, Min2), Max is max(Max1, Max2)), |  | ||||||
|         NewLimit), |  | ||||||
|     or_limits([NewLimit|Limits], Limit). |  | ||||||
|      |  | ||||||
| % x -> [Min, Max) |  | ||||||
| wf(_, accept, [accept], [x-1-4001, m-1-4001, a-1-4001, s-1-4001]). |  | ||||||
| wf(Workflows, WorkflowName, [WorkflowName|Route], Limits) :- |  | ||||||
|     \+ WorkflowName = accept, \+ WorkflowName = reject, |  | ||||||
|     member(WorkflowName-Rules, Workflows), |  | ||||||
|     with_rule(Workflows, Rules, Route, Limits). |  | ||||||
|  |  | ||||||
| with_rule(Workflows, [EndRule], Route, Limits) :- |  | ||||||
|     wf(Workflows, EndRule, Route, Limits). |  | ||||||
| with_rule(Workflows, [Attr-Cond-N-Dest|Rules], Route, NewLimits) :- |  | ||||||
|     % Either take the first route with its limit |  | ||||||
|     (   wf(Workflows, Dest, Route, Limits), |  | ||||||
|         member(Attr-Min-Max, Limits), |  | ||||||
|         combine(Min-Max, Cond-N, NewMin-NewMax) |  | ||||||
|     % ...or skip the first route, given we satisfy its reverse limits |  | ||||||
|     ;   with_rule(Workflows, Rules, Route, Limits), |  | ||||||
|         member(Attr-Min-Max, Limits), |  | ||||||
|         negate(Cond-N, NotCond-NotN), |  | ||||||
|         combine(Min-Max, NotCond-NotN, NewMin-NewMax) |  | ||||||
|     ), |  | ||||||
|     select(Attr-Min-Max, Limits, Attr-NewMin-NewMax, NewLimits). |  | ||||||
|  |  | ||||||
| negate('<'-N, '>'-NewN) :- NewN is N - 1. |  | ||||||
| negate('>'-N, '<'-NewN) :- NewN is N + 1. |  | ||||||
| combine(Min-Max, '<'-N, Min-NewMax) :- NewMax is min(N, Max), Min < NewMax. |  | ||||||
| combine(Min-Max, '>'-N, NewMin-Max) :- NewMin is max(N+1, Min), NewMin < Max. |  | ||||||
|  |  | ||||||
| % input parsing stuff below |  | ||||||
| input(FileName, Workflows) :- |  | ||||||
|     phrase_from_file((workflows(Workflows), remainder(_)), FileName). |  | ||||||
|  |  | ||||||
| workflows([]) --> "\n", !. |  | ||||||
| workflows([Name-Rules|Ws]) --> |  | ||||||
|     string_without("{", NameStr), "{", rules(Rules), "}\n", workflows(Ws), |  | ||||||
|     {atom_codes(Name, NameStr)}. |  | ||||||
|  |  | ||||||
| rules([End]) --> dest(End). |  | ||||||
| rules([Rule|Rules]) --> rule(Rule), ",", rules(Rules). |  | ||||||
|  |  | ||||||
| rule(Attr-Cond-N-Dest) --> attr(Attr), cond(Cond), number(N), ":", dest(Dest). |  | ||||||
|  |  | ||||||
| attr(x) --> "x". |  | ||||||
| attr(m) --> "m". |  | ||||||
| attr(a) --> "a". |  | ||||||
| attr(s) --> "s". |  | ||||||
| cond('>') --> ">". |  | ||||||
| cond('<') --> "<". |  | ||||||
| dest(reject) --> "R", !. |  | ||||||
| dest(accept) --> "A", !. |  | ||||||
| dest(Dest) --> endrule(Dest). |  | ||||||
| endrule(Rule) --> string_without(",}", RuleStr), {atom_codes(Rule, RuleStr)}. |  | ||||||
							
								
								
									
										17
									
								
								19/test.txt
									
									
									
									
									
								
							
							
						
						
									
										17
									
								
								19/test.txt
									
									
									
									
									
								
							| @@ -1,17 +0,0 @@ | |||||||
| px{a<2006:qkq,m>2090:A,rfg} |  | ||||||
| pv{a>1716:R,A} |  | ||||||
| lnx{m>1548:A,A} |  | ||||||
| rfg{s<537:gd,x>2440:R,A} |  | ||||||
| qs{s>3448:A,lnx} |  | ||||||
| qkq{x<1416:A,crn} |  | ||||||
| crn{x>2662:A,R} |  | ||||||
| in{s<1351:px,qqz} |  | ||||||
| qqz{s>2770:qs,m<1801:hdj,R} |  | ||||||
| gd{a>3333:R,R} |  | ||||||
| hdj{m>838:A,pv} |  | ||||||
|  |  | ||||||
| {x=787,m=2655,a=1222,s=2876} |  | ||||||
| {x=1679,m=44,a=2067,s=496} |  | ||||||
| {x=2036,m=264,a=79,s=2244} |  | ||||||
| {x=2461,m=1339,a=466,s=291} |  | ||||||
| {x=2127,m=1623,a=2188,s=1013} |  | ||||||
| @@ -1,58 +0,0 @@ | |||||||
| hb -> mj |  | ||||||
| mx -> mt, NANDxz |  | ||||||
| xh -> qc |  | ||||||
| tg -> cq |  | ||||||
| kp -> NANDxz, nj |  | ||||||
| mj -> NANDjj, lv |  | ||||||
| cq -> jm |  | ||||||
| mt -> sj, NANDxz |  | ||||||
| NANDjj -> hb, lz, NANDrk, xv, vj, vh, lv |  | ||||||
| rm -> NANDbz, xq |  | ||||||
| hx -> NANDbz |  | ||||||
| xv -> lz |  | ||||||
| xx -> kp, NANDxz |  | ||||||
| pt -> vx |  | ||||||
| NANDxz -> bq, gr, sj, rv, NANDzf |  | ||||||
| vx -> NANDgf, cv |  | ||||||
| xb -> NANDxz, bq |  | ||||||
| xk -> NANDgf, rd |  | ||||||
| lv -> zk |  | ||||||
| NANDrk -> NANDgh |  | ||||||
| kn -> NANDgf, tz |  | ||||||
| NANDgh -> rx |  | ||||||
| sj -> vp |  | ||||||
| jm -> vm, NANDbz |  | ||||||
| rr -> rv, NANDxz |  | ||||||
| tz -> rz |  | ||||||
| gg -> kn |  | ||||||
| NANDcd -> NANDgh |  | ||||||
| qc -> kh, NANDbz |  | ||||||
| kb -> NANDgf |  | ||||||
| vp -> NANDxz, xx |  | ||||||
| fb -> NANDbz, tg |  | ||||||
| rd -> cp |  | ||||||
| qn -> vh, NANDjj |  | ||||||
| xr -> NANDjj |  | ||||||
| tp -> rm, NANDbz |  | ||||||
| cp -> gg |  | ||||||
| NANDbz -> NANDqx, cq, xh, fb, tg |  | ||||||
| qq -> pt, NANDgf |  | ||||||
| xq -> NANDbz, hx |  | ||||||
| gx -> NANDjj, qv |  | ||||||
| bq -> rr |  | ||||||
| cv -> NANDgf, kb |  | ||||||
| zk -> NANDjj, xv |  | ||||||
| NANDzf -> NANDgh |  | ||||||
| NANDqx -> NANDgh |  | ||||||
| vh -> gx |  | ||||||
| qv -> xr, NANDjj |  | ||||||
| lz -> qn |  | ||||||
| broadcaster -> fb, xk, gr, vj |  | ||||||
| nj -> NANDxz |  | ||||||
| gr -> NANDxz, xb |  | ||||||
| kh -> tp, NANDbz |  | ||||||
| vm -> NANDbz, xh |  | ||||||
| rz -> qq, NANDgf |  | ||||||
| NANDgf -> tz, NANDcd, rd, xk, pt, cp, gg |  | ||||||
| rv -> mx |  | ||||||
| vj -> hb, NANDjj |  | ||||||
							
								
								
									
										58
									
								
								20/input.txt
									
									
									
									
									
								
							
							
						
						
									
										58
									
								
								20/input.txt
									
									
									
									
									
								
							| @@ -1,58 +0,0 @@ | |||||||
| %hb -> mj |  | ||||||
| %mx -> mt, xz |  | ||||||
| %xh -> qc |  | ||||||
| %tg -> cq |  | ||||||
| %kp -> xz, nj |  | ||||||
| %mj -> jj, lv |  | ||||||
| %cq -> jm |  | ||||||
| %mt -> sj, xz |  | ||||||
| &jj -> hb, lz, rk, xv, vj, vh, lv |  | ||||||
| %rm -> bz, xq |  | ||||||
| %hx -> bz |  | ||||||
| %xv -> lz |  | ||||||
| %xx -> kp, xz |  | ||||||
| %pt -> vx |  | ||||||
| &xz -> bq, gr, sj, rv, zf |  | ||||||
| %vx -> gf, cv |  | ||||||
| %xb -> xz, bq |  | ||||||
| %xk -> gf, rd |  | ||||||
| %lv -> zk |  | ||||||
| &rk -> gh |  | ||||||
| %kn -> gf, tz |  | ||||||
| &gh -> rx |  | ||||||
| %sj -> vp |  | ||||||
| %jm -> vm, bz |  | ||||||
| %rr -> rv, xz |  | ||||||
| %tz -> rz |  | ||||||
| %gg -> kn |  | ||||||
| &cd -> gh |  | ||||||
| %qc -> kh, bz |  | ||||||
| %kb -> gf |  | ||||||
| %vp -> xz, xx |  | ||||||
| %fb -> bz, tg |  | ||||||
| %rd -> cp |  | ||||||
| %qn -> vh, jj |  | ||||||
| %xr -> jj |  | ||||||
| %tp -> rm, bz |  | ||||||
| %cp -> gg |  | ||||||
| &bz -> qx, cq, xh, fb, tg |  | ||||||
| %qq -> pt, gf |  | ||||||
| %xq -> bz, hx |  | ||||||
| %gx -> jj, qv |  | ||||||
| %bq -> rr |  | ||||||
| %cv -> gf, kb |  | ||||||
| %zk -> jj, xv |  | ||||||
| &zf -> gh |  | ||||||
| &qx -> gh |  | ||||||
| %vh -> gx |  | ||||||
| %qv -> xr, jj |  | ||||||
| %lz -> qn |  | ||||||
| broadcaster -> fb, xk, gr, vj |  | ||||||
| %nj -> xz |  | ||||||
| %gr -> xz, xb |  | ||||||
| %kh -> tp, bz |  | ||||||
| %vm -> bz, xh |  | ||||||
| %rz -> qq, gf |  | ||||||
| &gf -> tz, cd, rd, xk, pt, cp, gg |  | ||||||
| %rv -> mx |  | ||||||
| %vj -> hb, jj |  | ||||||
							
								
								
									
										82
									
								
								20/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								20/part1.pl
									
									
									
									
									
								
							| @@ -1,82 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Circuit), |  | ||||||
|     run1000(Circuit, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| % part1 |  | ||||||
| run1000(Circuit, Answer) :- |  | ||||||
|     length(Range, 1000), |  | ||||||
|     foldl( |  | ||||||
|         {Circuit}/[_, In-Lin-Hin, Out-Lout-Hout]>>( |  | ||||||
|             run([button-l-broadcaster], In, Out, L-H), |  | ||||||
|             Lout is L+Lin, Hout is H+Hin), |  | ||||||
|         Range, Circuit-0-0, _-Lx-Hx), |  | ||||||
|     Answer is Lx*Hx. |  | ||||||
|      |  | ||||||
| % code to run one circuit |  | ||||||
| run([], Circuit, Circuit, 0-0). |  | ||||||
| run([Src-Level-Target|Pulses], CircuitIn, CircuitOut, Ls-Hs) :- |  | ||||||
|     (   member(Type-Target-State-Dests, CircuitIn) |  | ||||||
|     ->  /*write([Src, Level, Target]), write(" -> "), |  | ||||||
|         write([Type, Target, State, Dests]), write(" = "),*/ |  | ||||||
|         call(Type, Src, Level, State, NewState, Out), |  | ||||||
|         send(Target, Out, Dests, AdditionalPulses), |  | ||||||
|         % write(NewState-AdditionalPulses), nl, |  | ||||||
|         select(Type-Target-State-Dests, CircuitIn, |  | ||||||
|             Type-Target-NewState-Dests, Circuit1), |  | ||||||
|         append(Pulses, AdditionalPulses, NewPulses), |  | ||||||
|         run(NewPulses, Circuit1, CircuitOut, NextLs-NextHs) |  | ||||||
|     ;   run(Pulses, CircuitIn, CircuitOut, NextLs-NextHs) |  | ||||||
|     ), |  | ||||||
|     call(Level, NextLs-NextHs, Ls-Hs). |  | ||||||
|  |  | ||||||
| l(L1s-H1s, L2s-H1s) :- L2s is L1s + 1. |  | ||||||
| h(L1s-H1s, L1s-H2s) :- H2s is H1s + 1. |  | ||||||
|  |  | ||||||
| broadcaster(_, l, x, x, l). |  | ||||||
|  |  | ||||||
| ff(_, h, State, State, none). |  | ||||||
| ff(_, l, 0, 1, h). |  | ||||||
| ff(_, l, 1, 0, l). |  | ||||||
|  |  | ||||||
| nand(Src, Level, State, NewState, OutLevel) :- |  | ||||||
|     select(Src-_, State, Src-Level, NewState), |  | ||||||
|     (maplist([_-h]>>(true), NewState) ->  OutLevel = l; OutLevel = h). |  | ||||||
|  |  | ||||||
| send(_, none, _, []). |  | ||||||
| send(From, Level, Dests, Pulses) :- |  | ||||||
|     \+ Level = none, |  | ||||||
|     maplist({Level}/[Dest, From-Level-Dest]>>(true), Dests, Pulses). |  | ||||||
|  |  | ||||||
| % input initialization |  | ||||||
| prefill_nands([], Circuit, Circuit). |  | ||||||
| prefill_nands([_-Src-_-Dests|Nodes], CircuitIn, CircuitOut) :- |  | ||||||
|     convlist( |  | ||||||
|         {CircuitIn}/[Dest, Dest]>>(member(nand-Dest-_-_, CircuitIn)), |  | ||||||
|         Dests, NandDests), |  | ||||||
|     foldl(fill_one_nand(Src), NandDests, CircuitIn, Circuit1), |  | ||||||
|     prefill_nands(Nodes, Circuit1, CircuitOut). |  | ||||||
|  |  | ||||||
| fill_one_nand(Src, Nand, CIn, COut) :- |  | ||||||
|     select(nand-Nand-State-Dests, CIn, nand-Nand-[Src-l|State]-Dests, COut). |  | ||||||
|  |  | ||||||
| % input parsing stuff below |  | ||||||
| input(FileName, Circuit) :- |  | ||||||
|     phrase_from_file(modules(EmptyCircuit), FileName), |  | ||||||
|     prefill_nands(EmptyCircuit, EmptyCircuit, Circuit). |  | ||||||
|  |  | ||||||
| modules([]) --> eos, !. |  | ||||||
| modules([Module|Modules]) --> module(Module), "\n", modules(Modules). |  | ||||||
|  |  | ||||||
| module(broadcaster-broadcaster-x-Dests) --> "broadcaster -> ", dests(Dests). |  | ||||||
| module(ff-Name-0-Dests) --> "%", node(Name), " -> ", dests(Dests). |  | ||||||
| module(nand-Name-[]-Dests) --> "&", node(Name), " -> ", dests(Dests). |  | ||||||
|  |  | ||||||
| dests([Dest]) --> node(Dest). |  | ||||||
| dests([Dest|Dests]) --> node(Dest), ", ", dests(Dests). |  | ||||||
|  |  | ||||||
| node(Name) --> string_without(", \n", NameStr), {atom_codes(Name, NameStr)}. |  | ||||||
							
								
								
									
										82
									
								
								20/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										82
									
								
								20/part2.pl
									
									
									
									
									
								
							| @@ -1,82 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| % This code was only used to confirm the theory. Don't run it. Look at part2.txt. |  | ||||||
| run_until(Circuit, _, Node, State, N) :- member(_-Node-State-_, Circuit), write(N), nl, !. |  | ||||||
| run_until(Circuit, Init, Node, State, N) :- |  | ||||||
|     maplist(extract(Circuit), [xr, qv, gx, vh, qn, lz, xv, zk, lv, mj, hb, vj], S1), |  | ||||||
|     maplist(extract(Circuit), [nj, kp, xx, vp, sj, mt, mx, rv, rr, bq, xb, gr], S2), |  | ||||||
|     maplist(extract(Circuit), [hx, xq, rm, tp, kh, qc, xh, vm, jm, cq, tg, fb], S3), |  | ||||||
|     maplist(extract(Circuit), [kb, cv, vx, pt, qq, rz, tz, kn, gg, cp, rd, xk], S4), |  | ||||||
|      |  | ||||||
|     write(N), write(": "), |  | ||||||
|     string_codes(Str1, S1), string_codes(Str2, S2), string_codes(Str3, S3), string_codes(Str4, S4), |  | ||||||
|     write(Str1), write(" "), write(Str2), write(" "), write(Str3), write(" "), write(Str4), nl, |  | ||||||
|     run([Init], Circuit, CircuitNext), |  | ||||||
|     NextN is N + 1, |  | ||||||
|     run_until(CircuitNext, Init, Node, State, NextN). |  | ||||||
|  |  | ||||||
| extract(Circuit, Cell, AsciiState) :- |  | ||||||
|     member(_-Cell-StateX-_, Circuit), |  | ||||||
|     AsciiState is StateX + 48. |  | ||||||
|  |  | ||||||
| % code to run one circuit |  | ||||||
| run([], Circuit, Circuit) :- !. |  | ||||||
| run([Src-Level-Target|Pulses], CircuitIn, CircuitOut) :- |  | ||||||
|     (   member(Type-Target-State-Dests, CircuitIn) |  | ||||||
|     ->  /*write([Src, Level, Target]), write(" -> "), |  | ||||||
|         write([Type, Target, State, Dests]), write(" = "),*/ |  | ||||||
|         call(Type, Src, Level, State, NewState, Out), |  | ||||||
|         send(Target, Out, Dests, AdditionalPulses), |  | ||||||
|         % write(NewState-AdditionalPulses), nl, |  | ||||||
|         select(Type-Target-State-Dests, CircuitIn, |  | ||||||
|             Type-Target-NewState-Dests, Circuit1), |  | ||||||
|         append(Pulses, AdditionalPulses, NewPulses), |  | ||||||
|         run(NewPulses, Circuit1, CircuitOut) |  | ||||||
|     ;   run(Pulses, CircuitIn, CircuitOut) |  | ||||||
|     ). |  | ||||||
|  |  | ||||||
| broadcaster(_, l, x, x, l). |  | ||||||
|  |  | ||||||
| ff(_, h, State, State, none). |  | ||||||
| ff(_, l, 0, 1, h). |  | ||||||
| ff(_, l, 1, 0, l). |  | ||||||
|  |  | ||||||
| nand(Src, Level, State, NewState, OutLevel) :- |  | ||||||
|     select(Src-_, State, Src-Level, NewState), |  | ||||||
|     (maplist([_-h]>>(true), NewState) ->  OutLevel = l; OutLevel = h). |  | ||||||
|  |  | ||||||
| send(_, none, _, []). |  | ||||||
| send(From, Level, Dests, Pulses) :- |  | ||||||
|     \+ Level = none, |  | ||||||
|     maplist({Level}/[Dest, From-Level-Dest]>>(true), Dests, Pulses). |  | ||||||
|  |  | ||||||
| % input initialization |  | ||||||
| prefill_nands([], Circuit, Circuit). |  | ||||||
| prefill_nands([_-Src-_-Dests|Nodes], CircuitIn, CircuitOut) :- |  | ||||||
|     convlist( |  | ||||||
|         {CircuitIn}/[Dest, Dest]>>(member(nand-Dest-_-_, CircuitIn)), |  | ||||||
|         Dests, NandDests), |  | ||||||
|     foldl(fill_one_nand(Src), NandDests, CircuitIn, Circuit1), |  | ||||||
|     prefill_nands(Nodes, Circuit1, CircuitOut). |  | ||||||
|  |  | ||||||
| fill_one_nand(Src, Nand, CIn, COut) :- |  | ||||||
|     select(nand-Nand-State-Dests, CIn, nand-Nand-[Src-l|State]-Dests, COut). |  | ||||||
|  |  | ||||||
| % input parsing stuff below |  | ||||||
| input(FileName, Circuit) :- |  | ||||||
|     phrase_from_file(modules(EmptyCircuit), FileName), |  | ||||||
|     prefill_nands(EmptyCircuit, EmptyCircuit, Circuit). |  | ||||||
|  |  | ||||||
| modules([]) --> eos, !. |  | ||||||
| modules([Module|Modules]) --> module(Module), "\n", modules(Modules). |  | ||||||
|  |  | ||||||
| module(broadcaster-broadcaster-x-Dests) --> "broadcaster -> ", dests(Dests). |  | ||||||
| module(ff-Name-0-Dests) --> "%", node(Name), " -> ", dests(Dests). |  | ||||||
| module(nand-Name-[]-Dests) --> "&", node(Name), " -> ", dests(Dests). |  | ||||||
|  |  | ||||||
| dests([Dest]) --> node(Dest). |  | ||||||
| dests([Dest|Dests]) --> node(Dest), ", ", dests(Dests). |  | ||||||
|  |  | ||||||
| node(Name) --> string_without(", \n", NameStr), {atom_codes(Name, NameStr)}. |  | ||||||
							
								
								
									
										1015
									
								
								20/part2.svg
									
									
									
									
									
								
							
							
						
						
									
										1015
									
								
								20/part2.svg
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							| Before Width: | Height: | Size: 52 KiB | 
							
								
								
									
										16
									
								
								20/part2.txt
									
									
									
									
									
								
							
							
						
						
									
										16
									
								
								20/part2.txt
									
									
									
									
									
								
							| @@ -1,16 +0,0 @@ | |||||||
| gh <- [qx, zf, cd, rk] |  | ||||||
|  |  | ||||||
| Each of the 4 wings is a 12-bit counter, with custom resets at... |  | ||||||
|  |  | ||||||
| xr, qv, gx, vh, qn, lz, xv, zk, lv, mj, hb, vj (jj) <- (111010010101) vj, qv, zk, gx, xr, qn, mj  |  | ||||||
| nj, kp, xx, vp, sj, mt, mx, rv, rr, bq, xb, gr (xz) <- (111101101011) gr, nj, vp, rr, xb, xx, mt, kp, mx |  | ||||||
| hx, xq, rm, tp, kh, qc, xh, vm, jm, cq, tg, fb (bz) <- (111111011001) vm, kh, xq, tp, fb, qc, jm, hx, rm |  | ||||||
| kb, cv, vx, pt, qq, rz, tz, kn, gg, cp, rd, xk (gf) <- (111011010001) rz, cv, qq, kb, kn, xk, vx |  | ||||||
|  |  | ||||||
| 111010010101 = 3733  |  | ||||||
| 111101101011 = 3947  |  | ||||||
| 111111011001 = 4057  |  | ||||||
| 111011010001 = 3793 |  | ||||||
|  |  | ||||||
| All 4 are primes. |  | ||||||
| LCD = 226732077152351 |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| broadcaster -> a, b, c |  | ||||||
| %a -> b |  | ||||||
| %b -> c |  | ||||||
| %c -> inv |  | ||||||
| &inv -> a |  | ||||||
| @@ -1,5 +0,0 @@ | |||||||
| broadcaster -> a |  | ||||||
| %a -> inv, con |  | ||||||
| &inv -> b |  | ||||||
| %b -> con |  | ||||||
| &con -> output |  | ||||||
										
											Binary file not shown.
										
									
								
							| Before Width: | Height: | Size: 47 KiB | 
							
								
								
									
										131
									
								
								21/input.txt
									
									
									
									
									
								
							
							
						
						
									
										131
									
								
								21/input.txt
									
									
									
									
									
								
							| @@ -1,131 +0,0 @@ | |||||||
| ................................................................................................................................... |  | ||||||
| .#....................#..#......##.#..#.#..#.#..#.#.........#....................##......##...#....#.....#..#.....#........#....... |  | ||||||
| .........#......#.#.........#...#.#...##..#.......#..#...................#........#..........#.#..##...#...#....................... |  | ||||||
| ..#...#...#..#..#.#..#......#.....#...#....##..............................#......#.....#........#.......#.#.......#..#......#..... |  | ||||||
| ............#................#...#.............#.........................#..................#....#..............#......##..#....... |  | ||||||
| .##....#...#....#............#.#..................#.#...#.................#......#.....#..........#.....#.#.#...........#.......... |  | ||||||
| ..###....#.#.#....#....##............##.#...#...............................#.#..#.#.........#....................#.#....###.#..... |  | ||||||
| ..#....##.......#...##..#......#.....................#..........#...#............#.........#.........##......#......#..#......#.... |  | ||||||
| ....................#......##.............#.#.................................#.....#..#.#..#....#...##........#....#.............. |  | ||||||
| ................#...........#.#.....#.#....#.................#.....#...................#..............#....#..#......#......#...... |  | ||||||
| .....#.....#...........#.............#.##......#.#..............#................#........#..#..#....#....#....#.#..........#.#.... |  | ||||||
| ..#......#..........#.............#..........#...#.................#.##..................#.##.....#......##.......#...#.........##. |  | ||||||
| .......#..#..#.......#.......#...##.#....#.....#...........#...#....#..#..............#.............#......#..#.................... |  | ||||||
| ..#..#.........#.......#...#..............#.............#......#....#...................#..........##.....##.##.....#.....#.#...... |  | ||||||
| .....#....###....#......#..#..#..#........#..#............#.....#.....#.#.#..................#.......#...........##................ |  | ||||||
| .........#....#.....#...........#..##..##.......................#..#.......#.............#....##...##...#...#...##........#...#.... |  | ||||||
| .#...#..#.....#.......#.#......#.......#.#.............#..#.#.....#.#.#......#.........#.........#...........#..#.....##....#...... |  | ||||||
| .....#.#.#...............#...........###.#..............#.#..#......#...................#...#....##.........#..#..#.#...#.#........ |  | ||||||
| ......#..........#....##.....#.......#.....#..........#......###....#.......#...........#......#..............#.........#..#.#..... |  | ||||||
| ...#......#............#............#.#..#........#.....#.......#..............#.............#.........#...........#............... |  | ||||||
| ..............##........#.##..#....................#.......#...............#...#.............#...#..##.........#.......#.........#. |  | ||||||
| ..........##....#..#.........#...#..............#.....##..#.....................#...........##.......................#...........#. |  | ||||||
| ......#..........##..............#...................#...#..#.....#.....#.......#...............#.........#..#......#........#..... |  | ||||||
| ....#.#.............#.....#...#.....#.#........#.#...#...###..#........#..#...#.............#.........#.....................##..... |  | ||||||
| ....#...#.........#..............#..............#.......####.........#..............##...........###.......#.....#........##..#..#. |  | ||||||
| ..#...#...........#.#...#...#...............................#............#....................#...#....#..#...#.#...........#..#... |  | ||||||
| ..#.....##..#.#.........................................#.........#....#......#....#..#....................#.#........#..........#. |  | ||||||
| ..#...#..#...#......#.#.......#...............#.#......##..#..#.........#.............#......................#....##...##.#........ |  | ||||||
| ...#.#.#..............#...##..............#...#............#...............#...........#.#.........#..#.......#.#.#...........#.... |  | ||||||
| ............#.....#....#.....##...............#......#..........#.....#........#........#..............#...#.#.....#.#............. |  | ||||||
| ............#........##.................#......#...............................#.#.#................#...#.................#..#..... |  | ||||||
| ......#...#....#............#.........#.......#....#...................#........#..........#...............#...........#........... |  | ||||||
| ........#............#......##.......#...........#.......#.............#.....................................#...........#......... |  | ||||||
| ..........#.....#.........#.#.......................#..........##.........#....#........#.....#..........##..................##.... |  | ||||||
| ..........#........................#.............#.......##..#......#..........#...........#.............#....#..#..#....#......#.. |  | ||||||
| ......#........#........#.........#.......#....#..................#.........##.....#......#....................#...#.........#..... |  | ||||||
| ...#..#....#....#.................#...#.....#.....##....................#.......##.....#...#...##.......................##.....#... |  | ||||||
| ...##........#.....................#.........#..##....#.................###........#.......#..............#...#...#.......#....##.. |  | ||||||
| .......#...........##.............#......##.............##.##........##...#..#..#.#.......#..#.#...........#...#................... |  | ||||||
| .........#.......##.............#............##.....#........#...............#.#.....#.....#.#..............#.......##...#......... |  | ||||||
| .......##...#....#...........#...........#..............#..#..#.........####..........#....##.................#..............#..... |  | ||||||
| ....#..........................#..........#.............#..........#...#...........#.......#............................##......... |  | ||||||
| ...#...#.....###.................................##...............................#....#...#..##.................................#. |  | ||||||
| ..#....#.#......#............#...#......##.....#.....#..##...#.........#.....#.............#......#...#............#............... |  | ||||||
| ......#.....#.##................#.......##.##........#.........................#..............................................#.... |  | ||||||
| .#....#..................#.#...............#..#......##.......##...............#....####..........#...#........................#... |  | ||||||
| ...#........#..........#.................#....#.........#....#.....#.........#.....#.#.......##.......#................#..##....... |  | ||||||
| .#.......#.#..#............##...........#......#.#.......................#.........#.....#.....#.....###...............#.#..##..... |  | ||||||
| .......................#...#...........#.........#....###.......................#.........###.#.#....#......#........##............ |  | ||||||
| ..#....................#.................#.#.##.#........#..#......#....#......##......#............#..#..............#....#....#.. |  | ||||||
| .......................##.##.#..#.....###....#..#.#...#............#........#.....#....#.#.....#..#....#......................##... |  | ||||||
| ....#.....#.........##..#....#..#.........#...#...#..##........#......###.....#..................#......................#.......... |  | ||||||
| .#.#................#..#.#...#........................#....##..#.............#...#.#.......#........#.#.....##................#.... |  | ||||||
| .##..#..........#..#.#........##............#.......#..........#....#.#...#....##.#...#..##...........#.......................#.... |  | ||||||
| .#.#.##..................#............#.#......#.........#............#.#....#..#.........##..#..................##...........##.#. |  | ||||||
| ..............#..........#...#...##..........#.....................#..#..............#.....#.#...........#.....#....#.......#...... |  | ||||||
| ..###.........#........###...#...........#..##.##..###....#...#................#.....#......#...##...................#...........#. |  | ||||||
| ..#...........#.................##........#.........#...#.....##......##...#.........#......#.............#...#..#................. |  | ||||||
| ..#.............#..........#.#.............#.....#............#....#.#......#....................#.#.......#.#.....#............##. |  | ||||||
| ..........#...........#...#...#...#................#......#................#..........................##.##.....#..#..#.#.......... |  | ||||||
| ..............#....#......#............#.....#.......#..#..........................#..#...............................#............ |  | ||||||
| ............#.............#...........##...#.##..#.........#....#.....#..#.....#...............##....#.................#........... |  | ||||||
| ...........#.....#.##..............#....#..........#......#.......#..##....##.......#.........#.......#....#...#..........#........ |  | ||||||
| ......#...#...#..............#.#...##.#..#........#.....#.......#...#.........#.....#.....##.........#.#........................... |  | ||||||
| ..............#..#........#......##.......#......#...#.#........#.............#...##.............#.#.#...............##....#....... |  | ||||||
| .................................................................S................................................................. |  | ||||||
| .........#.....#.#.#..........#.#.............#..#.....................##......##.#.............#.#.......#.........#...#.......... |  | ||||||
| .........#......#......#......#..........#...........................#...#......#..........#..#.#..........#......#..#..#...#...... |  | ||||||
| ........#.#...............##...............................#.#..............#.#....##..#...#...#....#..#.................#......... |  | ||||||
| .............#..#....#............#........#.#......#........#.......#....#......#...#.#..........#....##......#.#................. |  | ||||||
| ............#..........#.............#.#..............#.....#.....#...#...#........#.#........#.#........#.#....................... |  | ||||||
| .................#........#......#....#.#................#..............#.....#.#.....#.............#.#........#.#...#............. |  | ||||||
| ...........#....#.##...........#..#...................................#.#...#........#.......#.........#...#..##..##............... |  | ||||||
| .....................#.#..#...#.#..........#....##...#.................#...............#.......................#................... |  | ||||||
| ..............#..#.............#.#...........#....#.......#.........#.......#.........#...#.#.........##............#.............. |  | ||||||
| ....#.............##....#......#..........................##.........#.#.........#.....#...#..............#........................ |  | ||||||
| ....#............#...........#.####....#...#.......#..#.........#...#.............#...........#...#...........#.##...........#.#... |  | ||||||
| ..##..............#...............#...#.#..#....##.....................#..#.....#.............#....#.......#..###.............##.#. |  | ||||||
| .....#.##........#....#...##.#..###...#......#..##.#.....#..#.#.#........##......#............#.......#.....#....#...........##.... |  | ||||||
| .#......................#.#.......#........#.#.#.........##.....#.....#..#........#..#..#...#..##.......#...............#.......... |  | ||||||
| .....#...#.............................#.....#.....#......##......#...##........#.#.........................###.........#.......... |  | ||||||
| ...#........#...................#....#...........#..#....#...#.........#...........##.#..#..#..#...........##............#......... |  | ||||||
| ......##..#..........##..#..#...........#......#...#........#.....#........#...........#........#............#........#.......#.... |  | ||||||
| .......#.......................#....#......###..#..#..#.........#.##..#................#.....#...............................#..... |  | ||||||
| ...#.........#............................................#...#....#...........#.#..................#.....##.......#...#........#.. |  | ||||||
| ..##..###.......#........#................#.....#..................##.........#..#..#...........#..##...###.........###...#...#.... |  | ||||||
| ..........#.....#.............#.#..#.#...........##.........#..............................#..#.......#.#................#.#.#..... |  | ||||||
| .......#..................#............##.............#..............#.#........#.#..............#...#..........................#.. |  | ||||||
| ...#.......#.....#..........................#...#...#...........#..#.............#.........#..........#.............#........#..... |  | ||||||
| ..............#................##......#.#......#........................####...#.....#....#....#..................#.#.#........#.. |  | ||||||
| ........#.....#.#....#....................##......................................#...#..#.......#..........................##..... |  | ||||||
| ...#.#.........#.#..#.............#...#....##.......#......................##...#.#.........#.....#..........#..................... |  | ||||||
| ..#.#......#...#......##............#......#....#.#..#.#..........#....#......##..#................................#............... |  | ||||||
| ........###..##....##...........................#.#.#.##..###........#....#............#........##.........#...#................... |  | ||||||
| ....#............................#.#.........#.........#...#.......#.................#..#......#.........#..#.....#...#.#....#...#. |  | ||||||
| ..#.#..........#..........#.........#..#...#..........#.....#....................#.#..#.......#...........#............#........... |  | ||||||
| .......#.....#...........##.........#.....#..........#....#..#......#...........#...##....#......................#....#.......#.... |  | ||||||
| ..##......#...##.............................##..........#....#..............#..........#..............##..#....##.#........##..... |  | ||||||
| ....#......#....#.#..................#..........#....#.#..##.#.##........#.............................#...............#.......#.#. |  | ||||||
| .............#..#......#.................#.#..#....####........#......#......#....#.#.....................#.#.#.#..#............... |  | ||||||
| .##......#........##........#.............#.#.###.....#.............#.......#..##....#...#....................##..###.......#...... |  | ||||||
| ....#.#......##.#.......#......#......................#.......#.........#..#...........#................#.........#..#...#....#.... |  | ||||||
| ..........#....#..#...........#.................#...#..#.....................#.#........##.......#.#....#..#................##...#. |  | ||||||
| ......#....#.......#.......#..#...........#......#............#......#................#..........#...#.......##...#....#.#......... |  | ||||||
| ...#..##...##....#..#.......#....#.................#.#.....#....#........#..#.....####.#...........#..#............#...#..##.....#. |  | ||||||
| ..#......#...................#...............................#............#.....##.............#..#...#..##.#......#............... |  | ||||||
| ....#.........#.........#..............................#...#....#..#.#..............#...............#..##.........#.......#....#... |  | ||||||
| .....#.........#....#.............#............................#.................##............#...#......#..........#.....#.....#. |  | ||||||
| ...#.#....#.......##...#....#............................##.#...#.......#...##...................#..........#.#.................... |  | ||||||
| ...........#..#.###.....##...#.........#...........#..#.#.........#.#.#.......#.................#....#............###.........#..#. |  | ||||||
| .##..........#..#......#.....##.##.#...##.........#.................#....#.#.....#.................#.....#...#....#.....###..#.#... |  | ||||||
| ......#.#..##.#.......#...#..#........................#..#..........#.#....#..##........#...#.#.............#.#.................... |  | ||||||
| .......#.#.............#..#.........................#.##..........##......................#...##.........#....#..........#..###.... |  | ||||||
| ...............#..#...#.........#.........#.................#.#......#....................#.........#.......................#.#.... |  | ||||||
| .....#.................#.#...............##............................####...................##....#......#.#....##..#..#.......#. |  | ||||||
| ....#..#.......#.#...#.......................##.........#..#.......#.#.#............#...........#.###............#......#...##..... |  | ||||||
| ..#.#..........#..#.......#...#.........#....#.........#....#...#.......#.#..........##..##........................#..........##... |  | ||||||
| ....#...##......##......#.......#....###..............................#.##........................#......##.......#............#... |  | ||||||
| ...........#......#.#......#.............................#..........#...............#......##...............#.#........###.......#. |  | ||||||
| ..............#......#.....#.........#.....##....#..................#..##.......#.........##.#..##..................#....#......... |  | ||||||
| ....#...#...##.......###.......#....#...........#.#.............#...#.............#.#...#.#..................#..#.........#........ |  | ||||||
| ................#.........#....#....#.##.....#...###..........#.......#...........#..#....#.............#....................##.... |  | ||||||
| .......................##..............#...#.#....##.#............#.#........#......##....#.......#........#.#.......#....#..#..#.. |  | ||||||
| ..#....#..#............#.#...................#.....................................#.......##.#............##..#........#.......... |  | ||||||
| .....#............#.......##.........##...#........#........................................#................#.......#..........#.. |  | ||||||
| ......#.#.....#.......#............##......#.#..#....#.........................#...............#..#.......##....###......###....... |  | ||||||
| ..#...................#.#...#.....#.......#..................................#..#....#......#.#...#..#..#......#.#.#....#....#..... |  | ||||||
| ...#....#....#.....#.....#.............................#.##..............#.....#..#.........#...#.....#........#.......#......##... |  | ||||||
| .....#.......#.....#...#..#....#................#.......................#..#...#........#..........#....#..#....................#.. |  | ||||||
| ......#.............#.#...#.##.......#...#.....#.....#.#.#...............#.....##.#....#...............................#.#.....#... |  | ||||||
| ................................................................................................................................... |  | ||||||
							
								
								
									
										47
									
								
								21/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										47
									
								
								21/part1.pl
									
									
									
									
									
								
							| @@ -1,47 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Map, Starting), |  | ||||||
|     nsteps(Map, 64, [Starting], Ends), length(Ends, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| nsteps(Map, N, Starts, Reachables) :- |  | ||||||
|     length(Range, N), |  | ||||||
|     foldl({Map}/[_, SIn, SOut]>>(step(Map, SIn, SOut)), Range, Starts, Reachables). |  | ||||||
|      |  | ||||||
| step(Map, CurrentCells, NextCells) :- |  | ||||||
|     maplist(neighbors(Map), CurrentCells, NeighborsOfCells), |  | ||||||
|     foldl( |  | ||||||
|         [Neighbors, SetIn, SetOut]>>( |  | ||||||
|             list_to_ord_set(Neighbors, NeighborsSet), |  | ||||||
|             ord_union(SetIn, NeighborsSet, SetOut)), |  | ||||||
|         NeighborsOfCells, [], NextCells). |  | ||||||
|      |  | ||||||
| neighbors(Map, X-Y, Neighbors) :- |  | ||||||
|     findall(X1-Y1, neighbor(Map, X-Y, X1-Y1), Neighbors). |  | ||||||
|  |  | ||||||
| neighbor(Map, X-Y, X1-Y1) :- |  | ||||||
|     (   X1 is X, Y1 is Y+1; X1 is X, Y1 is Y-1; |  | ||||||
|         X1 is X+1, Y1 is Y; X1 is X-1, Y1 is Y  ), |  | ||||||
|     nth0(X1, Map, Row), nth0(Y1, Row, '.'). |  | ||||||
|  |  | ||||||
| replace(I, List, E, NewList) :- nth0(I, List, _, R), nth0(I, NewList, E, R). |  | ||||||
|          |  | ||||||
| % input parsing stuff below |  | ||||||
| input(FileName, Map, StartX-StartY) :- |  | ||||||
|     phrase_from_file(lines(MapS), FileName), |  | ||||||
|     nth0(StartX, MapS, Row), nth0(StartY, Row, s), |  | ||||||
|     select(s, Row, '.', NewRow), replace(StartX, MapS, NewRow, Map). |  | ||||||
|  |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> "\n"; eos. |  | ||||||
| line([s|Chars]) --> "S", line(Chars). |  | ||||||
| line(['.'|Chars]) --> ".", line(Chars). |  | ||||||
| line(['#'|Chars]) --> "#", line(Chars). |  | ||||||
|  |  | ||||||
| % Debug stuff |  | ||||||
| print(Map) :- maplist([X]>>(atomics_to_string(X, XStr), write(XStr), nl), Map). |  | ||||||
							
								
								
									
										11
									
								
								21/test.txt
									
									
									
									
									
								
							
							
						
						
									
										11
									
								
								21/test.txt
									
									
									
									
									
								
							| @@ -1,11 +0,0 @@ | |||||||
| ........... |  | ||||||
| .....###.#. |  | ||||||
| .###.##..#. |  | ||||||
| ..#.#...#.. |  | ||||||
| ....#.#.... |  | ||||||
| .##..S####. |  | ||||||
| .##..#...#. |  | ||||||
| .......##.. |  | ||||||
| .##.#.####. |  | ||||||
| .##..##.##. |  | ||||||
| ........... |  | ||||||
							
								
								
									
										1479
									
								
								22/input.txt
									
									
									
									
									
								
							
							
						
						
									
										1479
									
								
								22/input.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										100
									
								
								22/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										100
									
								
								22/part1.pl
									
									
									
									
									
								
							| @@ -1,100 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- op(700, xfx, [supports, is_way_above]). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Bricks), |  | ||||||
|     stack(Bricks, Stacked), |  | ||||||
|     support_listing(Stacked, LookDown, LookUp), |  | ||||||
|     max_member(MaxN-_-_-_, Bricks), |  | ||||||
|     findall(N, (between(0, MaxN, N), can_remove(N, LookDown, LookUp)), Ns), |  | ||||||
|     length(Ns, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| can_remove(N, LookDown, LookUp) :- |  | ||||||
|     BeingSupporteds = LookUp.N, |  | ||||||
|     write(N), write("("), write(LookDown.N), write(") supporting "), |  | ||||||
|     write(BeingSupporteds), nl, |  | ||||||
|     maplist(supported_by_more_than_one(LookDown), BeingSupporteds). |  | ||||||
|      |  | ||||||
| supported_by_more_than_one(LookDown, N) :- LookDown.N > 1. |  | ||||||
|      |  | ||||||
| % StackedBricks is sorted by decreasing top edge |  | ||||||
| support_listing(StackedBricks, SupportedCount, SupportingMap) :- |  | ||||||
|     findall( |  | ||||||
|         N=SupportedListLen, |  | ||||||
|         (   append(_, [Brick1|Belows], StackedBricks), |  | ||||||
|             supported_by(Brick1, Belows, SupportedList), |  | ||||||
|             length(SupportedList, SupportedListLen), |  | ||||||
|             Brick1 = N-_-_-_), |  | ||||||
|         SupportedLists), |  | ||||||
|     SupportedCount = brick{}.put(SupportedLists), |  | ||||||
|     sort(2, @=<, StackedBricks, StackSortedByBottoms), |  | ||||||
|     findall( |  | ||||||
|         M=SupportingList, |  | ||||||
|         (   append(_, [Brick2|Aboves], StackSortedByBottoms), |  | ||||||
|             supporting(Brick2, Aboves, SupportingList), |  | ||||||
|             Brick2 = M-_-_-_), |  | ||||||
|         SupportingLists), |  | ||||||
|     SupportingMap = brick{}.put(SupportingLists). |  | ||||||
|  |  | ||||||
| % Aboves need to be sorted by increasing bot edge |  | ||||||
| supporting(_Brick, [], []). |  | ||||||
| supporting(Brick, [Above|_], []) :- Above is_way_above Brick, !. |  | ||||||
| supporting(Brick, [Above|Aboves], Supportings) :- |  | ||||||
|     supporting(Brick, Aboves, NextSupportings), |  | ||||||
|     (   Brick supports Above |  | ||||||
|     ->  Above = N-_-_-_, Supportings = [N|NextSupportings] |  | ||||||
|     ;   Supportings = NextSupportings). |  | ||||||
|  |  | ||||||
| % Belows need to be sorted decreasing by top edge |  | ||||||
| supported_by(_Brick, [], []). |  | ||||||
| supported_by(Brick, [Below|_], []) :- Brick is_way_above Below, !. |  | ||||||
| supported_by(Brick, [Below|Belows], SupportedBy) :- |  | ||||||
|     supported_by(Brick, Belows, NextSupportedBy), |  | ||||||
|     (   Below supports Brick |  | ||||||
|     ->  Below = N-_-_-_, SupportedBy = [N|NextSupportedBy] |  | ||||||
|     ;   SupportedBy = NextSupportedBy). |  | ||||||
|  |  | ||||||
| is_way_above(_-_-_-(Z2bot-_), _-_-_-(_-Z1top)) :- Z2bot > Z1top + 1. |  | ||||||
| supports(Brick1, Brick2) :- |  | ||||||
|     overlap(Brick1, Brick2), |  | ||||||
|     Brick1 = _-_-_-(_-Z1top), Brick2 = _-_-_-(Z2bot-_), Z2bot =:= Z1top + 1.     |  | ||||||
|  |  | ||||||
| stack(Bricks, StackedBricks) :- |  | ||||||
|     empty_heap(H0), foldl(stack1, Bricks, H0, Heap), |  | ||||||
|     heap_to_list(Heap, HeapList), |  | ||||||
|     maplist([_-Brick, Brick]>>(true), HeapList, StackedBricks). |  | ||||||
|  |  | ||||||
| stack1(Brick, Heap, NewHeap) :- |  | ||||||
|     (   max_of_heap(Heap, OldZtop, OldTop), overlap(Brick, OldTop) |  | ||||||
|     ;   empty_heap(Heap), OldZtop is 0), |  | ||||||
|     Brick = N-X-Y-(Zbot-Ztop), |  | ||||||
|     NewZbot is OldZtop + 1, NewZtop is NewZbot + (Ztop - Zbot), |  | ||||||
|     add_to_maxheap(Heap, NewZtop, N-X-Y-(NewZbot-NewZtop), NewHeap), |  | ||||||
|     !. |  | ||||||
| stack1(Brick, Heap, NewHeap) :- |  | ||||||
|     get_from_maxheap(Heap, LastZtop, LastTopBrick, HeapWithoutTop), |  | ||||||
|     stack1(Brick, HeapWithoutTop, NewHeapWithoutTop), |  | ||||||
|     add_to_maxheap(NewHeapWithoutTop, LastZtop, LastTopBrick, NewHeap). |  | ||||||
|  |  | ||||||
| overlap(_-(Xa1-Xa2)-(Ya1-Ya2)-_, _-(Xb1-Xb2)-(Yb1-Yb2)-_) :- |  | ||||||
|     Xa1 =< Xb2, Xa2 >= Xb1, Ya1 =< Yb2, Ya2 >= Yb1. |  | ||||||
|  |  | ||||||
| % input parsing stuff below. Brick indexing is for debugging. |  | ||||||
| input(FileName, SortedBricks) :- |  | ||||||
|     phrase_from_file(bricks(0, Bricks), FileName), |  | ||||||
|     sort(2, @=<, Bricks, SortedBricks). |  | ||||||
| bricks(_, []) --> eos, !. |  | ||||||
| bricks(N, [Line|Lines]) --> {Next is N+1}, brick(N, Line), bricks(Next, Lines). |  | ||||||
| brick(N, N-(X1-X2)-(Y1-Y2)-(Z1-Z2)) --> |  | ||||||
|     number(X1), ",", number(Y1), ",", number(Z1), "~", |  | ||||||
|     number(X2), ",", number(Y2), ",", number(Z2), "\n". |  | ||||||
|  |  | ||||||
| % maxheap wrapper. PriX = -Pri, which is the Ztop |  | ||||||
| max_of_heap(H, Pri, Key) :- min_of_heap(H, PriX, Key), Pri is -PriX. |  | ||||||
| add_to_maxheap(H0, Pri, Key, H) :- PriX is -Pri, add_to_heap(H0, PriX, Key, H). |  | ||||||
| get_from_maxheap(H0, Pri, Key, H) :- get_from_heap(H0, PriX, Key, H), Pri is -PriX. |  | ||||||
|  |  | ||||||
| % Can probably do 2 maps, one by top edges and one by bottom edges and lookup |  | ||||||
							
								
								
									
										112
									
								
								22/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										112
									
								
								22/part2.pl
									
									
									
									
									
								
							| @@ -1,112 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- op(700, xfx, [supports, is_way_above]). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Bricks), |  | ||||||
|     stack(Bricks, StackedBricks), |  | ||||||
|     support_listing(StackedBricks, Supporters, SupportMap), |  | ||||||
|     length(Bricks, Len), TopBrick is Len - 1, |  | ||||||
|     findall( |  | ||||||
|         Goners, |  | ||||||
|         (   between(0, TopBrick, Brick), |  | ||||||
|             remove(SupportMap, [Brick], Supporters, Goners)), |  | ||||||
|         GonerCounts), |  | ||||||
|     sum_list(GonerCounts, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| remove(_, [], _, -1). |  | ||||||
| remove(SupportMap, [N|ToKills], Supporters, Goners) :- |  | ||||||
|     SupportedByN = SupportMap.N, |  | ||||||
|     foldl(decrement_supporter_count, SupportedByN, Supporters, NewSupporters), |  | ||||||
|     convlist({NewSupporters}/[X, X]>>(is_goner(NewSupporters, X)), |  | ||||||
|              SupportedByN, ToKillMore), |  | ||||||
|     append(ToKills, ToKillMore, ToKillNext), |  | ||||||
|     remove(SupportMap, ToKillNext, NewSupporters, NextGoners), |  | ||||||
|     Goners is NextGoners + 1. |  | ||||||
|  |  | ||||||
| is_goner(Supporters, M) :- Supporters.M =< 0. |  | ||||||
|      |  | ||||||
| decrement_supporter_count(M, Supporters, NewSupporters) :- |  | ||||||
|     NewCount is Supporters.M - 1, |  | ||||||
|     NewSupporters = Supporters.put(M, NewCount). |  | ||||||
|      |  | ||||||
| % StackedBricks is sorted by decreasing top edge |  | ||||||
| support_listing(StackedBricks, SupportedCount, SupportingMap) :- |  | ||||||
|     findall( |  | ||||||
|         N=SupportedListLen, |  | ||||||
|         (   append(_, [Brick1|Belows], StackedBricks), |  | ||||||
|             supported_by(Brick1, Belows, SupportedList), |  | ||||||
|             length(SupportedList, SupportedListLen), |  | ||||||
|             Brick1 = N-_-_-_), |  | ||||||
|         SupportedLists), |  | ||||||
|     SupportedCount = brick{}.put(SupportedLists), |  | ||||||
|     sort(2, @=<, StackedBricks, StackSortedByBottoms), |  | ||||||
|     findall( |  | ||||||
|         M=SupportingList, |  | ||||||
|         (   append(_, [Brick2|Aboves], StackSortedByBottoms), |  | ||||||
|             supporting(Brick2, Aboves, SupportingList), |  | ||||||
|             Brick2 = M-_-_-_), |  | ||||||
|         SupportingLists), |  | ||||||
|     SupportingMap = brick{}.put(SupportingLists). |  | ||||||
|  |  | ||||||
| % Aboves need to be sorted by increasing bot edge |  | ||||||
| supporting(_Brick, [], []). |  | ||||||
| supporting(Brick, [Above|_], []) :- Above is_way_above Brick, !. |  | ||||||
| supporting(Brick, [Above|Aboves], Supportings) :- |  | ||||||
|     supporting(Brick, Aboves, NextSupportings), |  | ||||||
|     (   Brick supports Above |  | ||||||
|     ->  Above = N-_-_-_, Supportings = [N|NextSupportings] |  | ||||||
|     ;   Supportings = NextSupportings). |  | ||||||
|  |  | ||||||
| % Belows need to be sorted decreasing by top edge |  | ||||||
| supported_by(_Brick, [], []). |  | ||||||
| supported_by(Brick, [Below|_], []) :- Brick is_way_above Below, !. |  | ||||||
| supported_by(Brick, [Below|Belows], SupportedBy) :- |  | ||||||
|     supported_by(Brick, Belows, NextSupportedBy), |  | ||||||
|     (   Below supports Brick |  | ||||||
|     ->  Below = N-_-_-_, SupportedBy = [N|NextSupportedBy] |  | ||||||
|     ;   SupportedBy = NextSupportedBy). |  | ||||||
|  |  | ||||||
| is_way_above(_-_-_-(Z2bot-_), _-_-_-(_-Z1top)) :- Z2bot > Z1top + 1. |  | ||||||
| supports(Brick1, Brick2) :- |  | ||||||
|     overlap(Brick1, Brick2), |  | ||||||
|     Brick1 = _-_-_-(_-Z1top), Brick2 = _-_-_-(Z2bot-_), Z2bot =:= Z1top + 1.     |  | ||||||
|  |  | ||||||
| stack(Bricks, StackedBricks) :- |  | ||||||
|     empty_heap(H0), foldl(stack1, Bricks, H0, Heap), |  | ||||||
|     heap_to_list(Heap, HeapList), |  | ||||||
|     maplist([_-Brick, Brick]>>(true), HeapList, StackedBricks). |  | ||||||
|  |  | ||||||
| stack1(Brick, Heap, NewHeap) :- |  | ||||||
|     (   max_of_heap(Heap, OldZtop, OldTop), overlap(Brick, OldTop) |  | ||||||
|     ;   empty_heap(Heap), OldZtop is 0), |  | ||||||
|     Brick = N-X-Y-(Zbot-Ztop), |  | ||||||
|     NewZbot is OldZtop + 1, NewZtop is NewZbot + (Ztop - Zbot), |  | ||||||
|     add_to_maxheap(Heap, NewZtop, N-X-Y-(NewZbot-NewZtop), NewHeap), |  | ||||||
|     !. |  | ||||||
| stack1(Brick, Heap, NewHeap) :- |  | ||||||
|     get_from_maxheap(Heap, LastZtop, LastTopBrick, HeapWithoutTop), |  | ||||||
|     stack1(Brick, HeapWithoutTop, NewHeapWithoutTop), |  | ||||||
|     add_to_maxheap(NewHeapWithoutTop, LastZtop, LastTopBrick, NewHeap). |  | ||||||
|  |  | ||||||
| overlap(_-(Xa1-Xa2)-(Ya1-Ya2)-_, _-(Xb1-Xb2)-(Yb1-Yb2)-_) :- |  | ||||||
|     Xa1 =< Xb2, Xa2 >= Xb1, Ya1 =< Yb2, Ya2 >= Yb1. |  | ||||||
|  |  | ||||||
| % input parsing stuff below. Brick indexing is for debugging. |  | ||||||
| input(FileName, SortedBricks) :- |  | ||||||
|     phrase_from_file(bricks(0, Bricks), FileName), |  | ||||||
|     sort(2, @=<, Bricks, SortedBricks). |  | ||||||
| bricks(_, []) --> eos, !. |  | ||||||
| bricks(N, [Line|Lines]) --> {Next is N+1}, brick(N, Line), bricks(Next, Lines). |  | ||||||
| brick(N, N-(X1-X2)-(Y1-Y2)-(Z1-Z2)) --> |  | ||||||
|     number(X1), ",", number(Y1), ",", number(Z1), "~", |  | ||||||
|     number(X2), ",", number(Y2), ",", number(Z2), "\n". |  | ||||||
|  |  | ||||||
| % maxheap wrapper. PriX = -Pri, which is the Ztop |  | ||||||
| max_of_heap(H, Pri, Key) :- min_of_heap(H, PriX, Key), Pri is -PriX. |  | ||||||
| add_to_maxheap(H0, Pri, Key, H) :- PriX is -Pri, add_to_heap(H0, PriX, Key, H). |  | ||||||
| get_from_maxheap(H0, Pri, Key, H) :- get_from_heap(H0, PriX, Key, H), Pri is -PriX. |  | ||||||
|  |  | ||||||
| % Can probably do 2 maps, one by top edges and one by bottom edges and lookup |  | ||||||
| @@ -1,7 +0,0 @@ | |||||||
| 1,0,1~1,2,1 |  | ||||||
| 0,0,2~2,0,2 |  | ||||||
| 0,2,3~2,2,3 |  | ||||||
| 0,0,4~0,2,4 |  | ||||||
| 2,0,5~2,2,5 |  | ||||||
| 0,1,6~2,1,6 |  | ||||||
| 1,1,8~1,1,9 |  | ||||||
							
								
								
									
										141
									
								
								23/input.txt
									
									
									
									
									
								
							
							
						
						
									
										141
									
								
								23/input.txt
									
									
									
									
									
								
							| @@ -1,141 +0,0 @@ | |||||||
| #.########################################################################################################################################### |  | ||||||
| #...###...#...#...#...###.....#...#...#.................#...#.......#.......###.....#.......#...#.....#####...#...#.....#.....###.....#.....# |  | ||||||
| ###.###.#.#.#.#.#.#.#.###.###.#.#.#.#.#.###############.#.#.#.#####.#.#####.###.###.#.#####.#.#.#.###.#####.#.#.#.#.###.#.###.###.###.#.###.# |  | ||||||
| #...#...#.#.#.#.#.#.#.#...#...#.#.#.#.#...........#.....#.#.#.#.....#...#...#...#...#...#...#.#.#.#...#.....#...#.#.#...#...#.#...#...#...#.# |  | ||||||
| #.###.###.#.#.#.#.#.#.#.###.###.#.#.#.###########.#.#####.#.#.#.#######.#.###.###.#####.#.###.#.#.#.###.#########.#.#.#####.#.#.###.#####.#.# |  | ||||||
| #...#.#...#.#.#.#.#.#.#...#.#...#...#.#...###...#.#.....#.#...#.....#...#.#...#...###...#...#.#.#.#.###.......#...#.#.....#.#.#...#.#.....#.# |  | ||||||
| ###.#.#.###.#v#.#.#.#.###.#.#.#######.#.#.###.#.#.#####.#.#########.#.###.#.###.#####.#####.#.#.#.#.#########.#.###.#####.#.#.###.#.#.#####.# |  | ||||||
| ###...#.#...#.>.#.#.#.#...#...#.......#.#.#...#.#...#...#.....#.....#...#.#...#...#...#.....#.#.#.#.#.....#...#.#...#.....#.#.#...#...#.....# |  | ||||||
| #######.#.###v###.#.#.#.#######.#######.#.#.###.###.#.#######.#.#######.#.###.###.#.###.#####.#.#.#.#.###.#.###.#.###.#####.#.#.#######.##### |  | ||||||
| ###...#...#...###.#.#.#.#.......#...###.#.#...#.###.#...#.....#...###...#.#...#...#...#.#...#.#.#.#.#...#.#...#.#...#.#...#.#.#.....#...#...# |  | ||||||
| ###.#.#####.#####.#.#.#.#.#######.#.###.#.###.#.###.###.#.#######.###.###.#.###.#####.#.#.#.#.#.#.#.###.#.###.#.###.#.#.#.#.#.#####.#.###.#.# |  | ||||||
| #...#.......#...#.#.#...#...>.>.#.#.#...#.#...#...#.#...#.#.....#...#.#...#...#.....#.#.#.#.#.#.#.#.>.>.#.....#.#...#.#.#.#.#...#...#.###.#.# |  | ||||||
| #.###########.#.#.#.#########v#.#.#.#.###.#.#####.#.#.###.#.###.###.#.#.#####.#####.#.#.#.#.#.#.#.###v#########.#.###.#.#.#.###.#.###.###.#.# |  | ||||||
| #.............#.#.#...#.......#...#.#.#...#...#...#.#.###...#...#...#.#...#...#...#...#.#.#...#.#.###.#...#...#...#...#.#.#.#...#.###...#.#.# |  | ||||||
| ###############.#.###.#.###########.#.#.#####.#.###.#.#######.###.###.###.#.###.#.#####.#.#####.#.###.#.#.#.#.#####.###.#.#.#.###.#####.#.#.# |  | ||||||
| #...............#.....#.......#.....#.#...#...#...#.#.#.>.>.#...#.###.#...#...#.#.....#.#.#.....#.#...#.#.#.#...#...#...#.#.#.....#...#...#.# |  | ||||||
| #.###########################.#.#####.###.#.#####.#.#.#.#v#.###.#.###.#.#####.#.#####.#.#.#.#####.#.###.#.#.###.#.###.###.#.#######.#.#####.# |  | ||||||
| #.....................#...#...#...#...#...#...###.#.#...#.#.#...#...#.#.#.>.>.#.#.....#.#.#.#...#.#...#.#.#.#...#.#...###.#.#.......#.......# |  | ||||||
| #####################.#.#.#.#####.#.###.#####.###.#.#####.#.#.#####.#.#.#.#v###.#.#####.#.#.#.#.#.###.#.#.#.#.###.#.#####.#.#.############### |  | ||||||
| #.....................#.#.#.....#.#...#.#...#.#...#.#.....#...###...#.#.#.#.#...#.....#...#...#...###...#...#...#...#...#...#...............# |  | ||||||
| #.#####################.#.#####.#.###.#.#.#.#.#.###.#.###########.###.#.#.#.#.#######.#########################.#####.#.###################.# |  | ||||||
| #...................#...#.......#.#...#...#...#.....#.........#...#...#.#.#.#.#.....#.......#...#...###.........#...#.#.###.......#.........# |  | ||||||
| ###################.#.###########.#.#########################.#.###.###.#.#.#.#.###.#######.#.#.#.#.###.#########.#.#.#.###.#####.#.######### |  | ||||||
| #...#...............#...........#...#...#...###...#...........#.....###...#.#.#...#.........#.#.#.#...#...........#...#...#...#...#.........# |  | ||||||
| #.#.#.#########################.#####.#.#.#.###.#.#.#######################.#.###.###########.#.#.###.###################.###.#.###########.# |  | ||||||
| #.#.#...#.........#.....#.......###...#.#.#.#...#.#.....#.....#...#...#...#...###...#...#...#.#.#...#.#...................#...#...#...#.....# |  | ||||||
| #.#.###.#.#######.#.###.#.#########.###.#.#.#.###.#####.#.###.#.#.#.#.#.#.#########.#.#.#.#.#.#.###.#.#.###################.#####.#.#.#.##### |  | ||||||
| #.#...#...#...#...#...#.#.........#...#.#.#.#.#...#...#.#.#...#.#.#.#.#.#.#...#...#...#.#.#.#.#.....#.#.........#...###...#...#...#.#.#.....# |  | ||||||
| #.###.#####.#.#.#####.#.#########.###.#.#.#.#.#.###.#.#v#.#.###.#.#.#.#.#.#.#.#.#.#####v#.#.#.#######.#########.#.#.###.#.###.#.###.#.#####.# |  | ||||||
| #...#...#...#...###...#...........#...#.#.#.#.#...#.#.>.>.#...#.#...#.#.#.#.#...#.....>.>.#...#.......#...#.....#.#...#.#.#...#...#.#.#.....# |  | ||||||
| ###.###.#.#########.###############.###.#.#.#.###.#.###v#####.#.#####.#.#.#.###########v#######.#######.#.#.#####.###.#.#.#.#####.#.#.#.##### |  | ||||||
| ###...#.#.........#.#.............#...#...#...###...###.....#...#.....#.#...#.....#...#.#.......#.....#.#.#.....#...#.#.#.#...#...#.#.#...### |  | ||||||
| #####.#.#########.#.#.###########.###.#####################.#####.#####.#####.###.#.#.#.#.#######.###.#.#.#####.###.#.#.#.###.#.###.#.###v### |  | ||||||
| #.....#...........#...#...........###.......#.............#.....#.#...#.#.....###...#.#.#...#...#...#.#.#.###...#...#...#.#...#...#.#...>.### |  | ||||||
| #.#####################.###################.#.###########.#####.#.#.#.#.#.###########.#.###.#.#.###.#.#.#.###v###.#######.#.#####.#.#####v### |  | ||||||
| #.................#...#...#.......#...#.....#.#.....#...#...#...#...#...#.........#...#.#...#.#.#...#.#.#.#.>.>...###.....#...###.#.#.....### |  | ||||||
| #################.#.#.###.#.#####.#.#.#.#####.#.###.#.#.###.#.###################.#.###.#.###.#.#.###.#.#.#.#v#######.#######.###.#.#.####### |  | ||||||
| #.................#.#.#...#.#.....#.#...#...#.#.#...#.#...#...#.....#.............#.....#.#...#.#.#...#.#...#.....#...#.....#...#...#.......# |  | ||||||
| #.#################.#.#.###.#.#####.#####.#.#.#.#.###.###.#####.###.#.###################.#.###.#.#.###.#########.#.###.###.###.###########.# |  | ||||||
| #.....#.....###...#.#.#.....#.....#.......#.#.#.#.#...###...###.#...#...#...............#.#.#...#.#...#.###.....#.#...#...#...#.#...........# |  | ||||||
| #####.#.###v###.#.#.#.###########.#########.#.#.#.#.#######.###.#.#####.#.#############.#.#.#.###.###.#.###.###.#.###.###.###.#.#.########### |  | ||||||
| #####...###.>.#.#.#.#.#...###.....#.........#...#...#...###...#.#.....#.#.#.............#...#.....###...#...###.#.#...#...###...#...........# |  | ||||||
| ###########v#.#.#.#.#.#.#.###v#####.#################.#.#####.#.#####.#.#.#.#############################.#####.#.#.###.###################.# |  | ||||||
| ###...#...#.#.#.#.#.#.#.#.#.>.>.....#.....#...#...###.#.#...#...#.....#...#.........#.......###...........#####.#.#...#.#...........#.......# |  | ||||||
| ###.#.#.#.#.#.#.#.#.#.#.#.#.#v#######.###.#.#.#.#.###.#.#.#.#####.#################.#.#####.###.###############.#.###.#.#.#########.#.####### |  | ||||||
| #...#...#...#...#...#...#...#.###...#...#...#.#.#.....#...#.......#...###.........#...#.....#...#.............#...###...#.........#.#...##### |  | ||||||
| #.###########################.###.#.###.#####.#.###################.#.###.#######.#####.#####.###.###########.###################.#.###.##### |  | ||||||
| #...#.........#...#...#.....#...#.#.#...#...#.#.........#...........#...#.....###.#...#...###.....#.........#.....#...............#...#.....# |  | ||||||
| ###.#.#######.#.#.#.#.#.###.###.#.#.#.###.#.#.#########.#.#############.#####.###.#.#.###.#########.#######.#####.#.#################.#####.# |  | ||||||
| #...#.#.......#.#.#.#.#...#...#...#...#...#...###...###...#...#.........#...#...#...#.....#.....###.......#.#...#.#...#.....#.......#.......# |  | ||||||
| #.###.#.#######.#.#.#.###.###.#########.#########.#.#######.#.#.#########.#.###.###########.###.#########.#.#.#.#.###.#.###.#.#####.######### |  | ||||||
| #.....#.....###.#.#.#.###.#...#...#...#...###...#.#.###...#.#.#...###...#.#.#...#...###...#...#.#.........#...#...###...#...#.#.....#.......# |  | ||||||
| ###########v###.#.#.#.###.#.###.#.#.#.###v###.#.#.#.###.#.#.#.###v###.#.#.#.#.###.#.###.#.###.#.#.#######################.###.#.#####.#####.# |  | ||||||
| #.........#.>.#.#.#.#...#.#.#...#.#.#...>.>.#.#.#.#.#...#.#.#...>.>.#.#.#.#...#...#...#.#.#...#.#.............#.........#.....#.....#.#.....# |  | ||||||
| #.#######.#v#.#.#.#.###.#.#.#.###.#.#####v#.#.#.#.#.#.###.#.#####v#.#.#.#.#####.#####.#.#.#.###.#############.#.#######.###########.#.#.##### |  | ||||||
| #...#...#...#...#.#.###.#.#.#.###...#...#.#.#.#...#.#.###.#.#.....#.#.#.#.....#.#.....#.#.#...#.###...........#.#.......#.......###...#...### |  | ||||||
| ###.#.#.#########.#.###.#.#.#.#######.#.#.#.#.#####.#.###.#.#.#####.#.#.#####.#.#.#####.#.###.#.###v###########.#.#######.#####.#########.### |  | ||||||
| ###.#.#...###.....#...#...#...###...#.#.#.#.#.....#.#.###...#.....#...#.#...#.#.#.#.....#.#...#...>.>.....#.....#.###...#.....#.........#...# |  | ||||||
| ###.#.###.###.#######.###########.#.#.#.#.#.#####.#.#.###########.#####.#.#.#v#.#.#.#####.#.#######v#####.#.#####.###.#.#####.#########.###.# |  | ||||||
| ###...###...#.....#...#.......#...#.#.#.#.#.#...#.#...#...#...###.#...#...#.>.>.#.#...#...#.....###.#.....#...#...#...#...###.........#.....# |  | ||||||
| ###########.#####.#.###.#####.#.###.#.#.#.#.#.#.#.#####.#.#.#.###.#.#.#######v###.###.#.#######.###.#.#######.#.###.#####.###########.####### |  | ||||||
| #...#.......#...#...###.....#.#...#.#.#...#...#...#.....#...#.....#.#.......#...#.....#...#...#.#...#...#...#.#...#...#...#...#.......#...### |  | ||||||
| #.#.#.#######.#.###########.#.###.#.#.#############.###############.#######.###.#########.#.#.#.#.#####.#.#.#.###.###.#.###.#.#.#######.#.### |  | ||||||
| #.#.#.........#.....#...#...#.....#...#...........#.#...#...........#.......###.........#.#.#...#...#...#.#.#...#...#.#.###.#.#.........#...# |  | ||||||
| #.#.###############.#.#.#.#############.#########.#.#.#.#.###########.#################.#.#.#######.#.###.#.###.###.#.#.###.#.#############.# |  | ||||||
| #.#.........#.......#.#.#.............#...#.......#.#.#...###.........#...............#.#...#...#...#.###.#.###.#...#.#.###.#.#####.........# |  | ||||||
| #.#########.#.#######.#.#############.###.#.#######.#.#######.#########.#############.#.#####.#.#.###.###.#.###.#.###.#.###.#.#####v######### |  | ||||||
| #.#.......#.#...#...#.#.....#.......#.#...#.....###...###...#.........#.............#...#.....#.#...#.....#...#.#...#.#.#...#...#.>.#.......# |  | ||||||
| #.#.#####.#.###.#.#.#.#####.#.#####.#.#.#######.#########.#.#########.#############.#####.#####.###.#########.#.###.#.#.#.#####.#.#v#.#####.# |  | ||||||
| #...#.....#.....#.#...#.....#.....#...#...#.....#...#.....#...#.......#.......#...#...###...#...###.#...#...#...###...#.#.#...#.#.#.#.#.....# |  | ||||||
| #####.###########.#####.#########.#######.#.#####.#.#.#######.#.#######.#####.#.#.###.#####.#.#####.#.#.#.#.###########.#.#.#.#.#.#.#.#.##### |  | ||||||
| #.....#.........#.....#.#.........#...###.#.#...#.#.#.....#...#.......#.....#.#.#.....#...#.#.#.....#.#.#.#...#...#...#...#.#.#...#...#.....# |  | ||||||
| #.#####.#######.#####.#.#.#########.#.###.#.#.#.#.#.#####.#.#########.#####.#.#.#######.#.#.#.#.#####.#.#.###.#.#.#.#.#####.#.#############.# |  | ||||||
| #.....#.#.......#...#.#.#.......###.#.#...#...#.#.#.#...#.#.#.........#...#.#...###.....#.#.#.#.....#.#.#.#...#.#.#.#.#...#.#.....#.......#.# |  | ||||||
| #####.#.#.#######.#.#.#.#######v###.#.#.#######.#.#.#.#.#.#.#.#########.#.#.#######.#####.#.#.#####.#.#.#.#.###.#.#.#.#.#.#v#####.#.#####.#.# |  | ||||||
| #.....#.#...###...#.#.#...#...>.>.#.#.#.....#...#.#.#.#.#.#.#.......###.#...#.....#.....#.#.#.#...#.#.#.#.#...#.#.#.#...#.>.#...#.#.....#.#.# |  | ||||||
| #.#####.###.###.###.#.###.#.###v#.#.#.#####.#.###.#.#.#.#.#.#######v###.#####.###.#####.#.#.#.#.#.#v#.#.#.###.#.#.#.#######v#.#.#.#####.#.#.# |  | ||||||
| #.......#...#...###.#.###...#...#...#.....#.#.#...#.#.#.#.#.......>.>.#.......###.#...#.#...#.#.#.>.>.#...#...#.#.#.......#...#.#.......#...# |  | ||||||
| #########v###.#####.#.#######.###########.#.#.#.###.#.#.#.#########v#.###########.#.#.#.#####.#.###v#######.###.#.#######.#####.############# |  | ||||||
| ###...###.>.#.....#.#...#.....#...###.....#.#...###...#.#.#.........#.....###...#.#.#.#.#.....#.#...###...#...#.#.#.....#.#.....###.....#...# |  | ||||||
| ###.#.###v#.#####.#.###.#.#####.#.###.#####.###########.#.#.#############.###.#.#v#.#.#.#.#####.#.#####.#.###.#.#.#.###.#.#.#######.###.#.#.# |  | ||||||
| #...#.....#.......#.#...#...#...#...#.....#.........###...#.............#...#.#.>.>.#...#...#...#.......#...#.#.#.#...#.#.#.......#.#...#.#.# |  | ||||||
| #.#################.#.#####.#.#####.#####.#########.###################.###.#.###v#########.#.#############.#.#.#.###.#.#.#######.#.#.###.#.# |  | ||||||
| #...#...#.........#.#.#...#...#####.....#...#.....#.#.........#...#.....###.#...#...###...#...###...........#...#.#...#.#.#.......#.#...#.#.# |  | ||||||
| ###.#.#.#.#######.#.#.#.#.#############.###.#.###.#.#.#######.#.#.#.#######.###.###.###.#.#######.###############.#.###.#.#.#######.###.#.#.# |  | ||||||
| ###...#.#.#.......#...#.#...............###...#...#.#.......#...#...#.....#.....###.....#.....#...#.............#...###...#.......#.#...#.#.# |  | ||||||
| #######.#.#.###########.#######################.###.#######.#########.###.###################.#.###.###########.#################.#.#.###.#.# |  | ||||||
| #.....#...#...........#.......................#.....#.......#.....#...#...#...............#...#.....#...........###.....###...###...#.....#.# |  | ||||||
| #.###.###############.#######################.#######.#######.###.#.###.###.#############.#.#########.#############.###.###.#.#############.# |  | ||||||
| #...#.............#...###...............#...#.###...#.#.....#.#...#.#...###.............#.#.#.........#...#...#.....#...#...#...............# |  | ||||||
| ###.#############.#.#####.#############.#.#.#.###.#.#.#.###.#.#.###.#.#################.#.#.#.#########.#.#.#.#.#####.###.################### |  | ||||||
| #...#...........#.#.#...#.............#.#.#.#.#...#.#...###...#.....#...#...#...........#...#...#.....#.#.#.#...#...#.#...#...#.............# |  | ||||||
| #.###.#########.#.#.#.#.#############.#.#.#.#.#.###.###################.#.#.#.#################.#.###.#.#.#.#####.#.#.#.###.#.#.###########.# |  | ||||||
| #.....#.........#...#.#.###...........#...#...#...#.....###...#...#...#...#.#.................#...###...#...#...#.#...#.....#...#...........# |  | ||||||
| #######.#############.#.###.#####################.#####.###.#.#.#.#.#.#####.#################.###############.#.#.###############.########### |  | ||||||
| ###...#...........#...#...#...#.......###...#...#.....#...#.#.#.#...#.#...#.#.................###.............#.#.#...#...#...###...........# |  | ||||||
| ###.#.###########.#.#####.###.#.#####.###.#.#.#.#####.###.#.#.#.#####.#.#.#.#.###################.#############.#.#.#.#.#.#.#.#############.# |  | ||||||
| #...#...#...#.....#...#...###.#.#.....#...#...#.#...#...#.#.#.#.#...#...#...#...............#...#.......#.....#...#.#.#.#.#.#.###...#.......# |  | ||||||
| #.#####.#.#.#v#######.#.#####.#.#.#####.#######.#.#.###.#.#.#.#v#.#.#######################.#.#.#######.#.###.#####.#.#.#.#.#.###.#.#.####### |  | ||||||
| #...#...#.#.#.>.#...#.#.....#...#.....#.#.......#.#.###.#.#.#.>.>.#.#.......#...#.........#.#.#.#.....#...###.....#.#.#.#.#.#.#...#...#.....# |  | ||||||
| ###.#.###.#.#v#.#.#.#.#####.#########.#.#.#######.#.###.#.#.###v###.#.#####.#.#.#.#######.#.#.#.#.###.###########.#.#.#.#.#.#.#.#######.###.# |  | ||||||
| #...#...#.#.#.#.#.#...#.....#.........#.#.......#.#.#...#...#...###...#...#.#.#.#.......#...#.#.#...#...#.........#.#.#.#.#.#.#.......#.#...# |  | ||||||
| #.#####.#.#.#.#.#.#####.#####.#########.#######.#.#.#.#######.#########.#.#.#.#.#######.#####.#.###.###.#.#########.#.#.#.#.#.#######.#.#.### |  | ||||||
| #.....#...#.#.#.#.#.....#...#...#.....#.#.......#.#.#.......#.....#.....#...#.#.........#...#.#.###.#...#.....#...#.#.#.#...#.......#...#...# |  | ||||||
| #####.#####.#.#.#.#.#####.#.###.#.###.#.#.#######.#.#######.#####.#.#########.###########.#.#.#.###.#.#######v#.#.#.#.#.###########.#######.# |  | ||||||
| #.....#...#...#.#.#.#...#.#...#.#...#...#...#...#.#.#.......###...#.#.......#.......#...#.#.#.#.#...#...#...>.>.#.#.#.#.......#.....#...#...# |  | ||||||
| #.#####.#.#####.#.#.#.#.#.###.#.###.#######.#.#.#.#.#.#########.###.#.#####.#######.#.#.#.#.#.#.#.#####.#.###v###.#.#.#######.#.#####.#.#v### |  | ||||||
| #.......#.....#...#...#.#.#...#.....#.......#.#...#.#...#.......#...#.#.....#.......#.#...#.#.#.#.#...#...#...#...#.#.#...#...#...#...#.>.### |  | ||||||
| #############.#########.#.#.#########.#######.#####.###.#.#######.###.#.#####.#######.#####.#.#.#.#.#.#####.###.###.#.#.#.#.#####.#.#####v### |  | ||||||
| #...#.....#...###.......#.#.....#...#.......#.....#.#...#.......#...#.#.#...#.......#.....#...#.#.#.#.....#.#...#...#.#.#.#...#...#.#.....### |  | ||||||
| #.#.#.###.#.#####.#######.#####.#.#.#######.#####.#.#.#########.###.#.#.#.#.#######v#####.#####.#.#.#####.#.#.###.###.#.#.###.#.###.#.####### |  | ||||||
| #.#.#...#...#.....#.....#.#.....#.#.#...#...#...#.#.#.#.........###.#.#.#.#.#...#.>.>.....#.....#.#.....#.#.#...#.###.#.#.#...#.....#.....### |  | ||||||
| #.#.###.#####.#####.###.#.#.#####.#.#.#.#v###.#.#.#.#.#.###########.#.#.#.#.#.#.#.#v#######.#####.#####.#.#.###.#.###.#.#.#.#############.### |  | ||||||
| #.#.....#...#...#...#...#.#...#...#...#.>.>...#...#...#...........#.#.#.#.#.#.#...#.......#.#...#.#.....#.#.###.#...#...#...###...###...#...# |  | ||||||
| #.#######.#.###.#.###.###.###.#.#########v#######################.#.#.#.#.#.#.###########.#.#.#.#.#.#####.#.###.###.###########.#.###.#.###.# |  | ||||||
| #.........#...#.#...#...#.#...#.###.....#.........#.......#.......#...#...#...#...........#...#.#.#.....#.#...#.....#.....#...#.#.#...#...#.# |  | ||||||
| #############.#.###.###.#.#.###.###.###.#########.#.#####.#.###################.###############.#.#####.#.###.#######.###.#.#.#.#.#.#####.#.# |  | ||||||
| #.............#...#.###...#.....#...###.#.........#.....#.#...#...#.....#.....#...............#.#.#.....#...#...#...#.#...#.#.#.#...#####.#.# |  | ||||||
| #.###############.#.#############.#####.#.#############.#.###.#.#.#.###.#.###.###############.#.#.#.#######.###.#.#.#.#.###.#.#.#########.#.# |  | ||||||
| #...............#.#.#...#...#.....#...#.#.....#.........#.....#.#.#...#...#...#...........#...#...#.......#.....#.#...#.#...#.#.........#...# |  | ||||||
| ###############.#.#.#.#.#.#.#.#####.#.#.#####.#.###############.#.###.#####.###.#########.#.#############.#######.#####.#.###.#########.##### |  | ||||||
| #.........#.....#...#.#.#.#.#.....#.#.#.......#.........#.....#.#.#...#.....###.........#...###...........###...#...#...#.#...#...#.....#...# |  | ||||||
| #.#######.#.#########.#.#.#.#####.#.#.#################.#.###.#.#.#.###.###############.#######.#############.#.###.#.###.#.###.#.#v#####.#.# |  | ||||||
| #.#...###...#...###...#.#.#...#...#.#.#.....#...#...#...#...#.#.#.#...#.#...#...#####...#.....#...........#...#...#.#.#...#...#.#.>.#...#.#.# |  | ||||||
| #.#.#.#######.#.###.###.#.###.#.###.#.#.###.#.#.#.#.#.#####.#.#.#.###.#.#.#.#.#.#####v###.###.###########.#.#####.#.#.#.#####.#.###v#.#.#.#.# |  | ||||||
| #...#.....#...#.....#...#.#...#.###.#.#...#.#.#.#.#.#...###.#.#.#.#...#.#.#.#.#...#.>.>.#.#...#...#.......#.....#...#.#...###.#.#...#.#.#.#.# |  | ||||||
| #########.#.#########.###.#.###v###.#.###.#.#.#.#.#.###v###.#.#.#.#.###.#.#.#.###.#.###.#.#.###.#.#.###########.#####.###.###.#.#.###.#.#.#.# |  | ||||||
| #...#.....#.........#...#.#.#.>.>.#.#...#.#.#.#.#.#.#.>.>.#.#.#.#.#.#...#.#.#...#.#...#...#...#.#.#.....#.....#.....#...#.#...#.#.#...#...#.# |  | ||||||
| #.#.#.#############.###.#.#.#.###.#.###.#.#.#.#.#.#.#.###.#.#.#.#.#.#.###.#.###.#.###.#######.#.#.#####v#.###.#####.###.#.#.###.#.#.#######.# |  | ||||||
| #.#.#.......#...###...#...#.#.#...#...#.#.#.#.#.#.#.#.###.#.#.#.#.#.#...#.#.#...#.#...#.......#.#...#.>.>.###...#...###.#.#...#.#.#.#.......# |  | ||||||
| #.#.#######.#.#.#####.#####.#.#.#####.#.#.#.#.#.#.#.#.###.#.#.#.#.#.###.#.#.#.###.#.###.#######.###.#.#########.#.#####.#.###.#.#.#.#.####### |  | ||||||
| #.#.........#.#.#...#.....#...#...#...#...#.#.#...#.#.#...#.#.#.#.#.#...#.#.#...#.#.###.#...#...#...#...#.......#.....#.#.#...#.#.#.#.#...### |  | ||||||
| #.###########.#.#.#.#####.#######.#.#######.#.#####.#.#.###.#.#.#.#.#.###.#.###.#.#.###.#.#.#.###.#####.#.###########.#.#.#.###.#.#.#.#.#.### |  | ||||||
| #.#...#...#...#.#.#.#...#.......#.#.....#...#.....#.#.#...#.#.#.#.#.#...#.#.#...#.#...#.#.#.#.###...#...#.......#.....#...#...#.#...#...#...# |  | ||||||
| #.#.#.#.#.#.###.#.#.#.#.#######.#.#####.#.#######.#.#.###.#.#.#.#.#.###.#.#.#.###.###.#.#.#.#.#####.#.#########.#.###########.#.###########.# |  | ||||||
| #.#.#.#.#.#...#.#.#.#.#.#.......#.#.....#.#...#...#.#...#.#.#.#.#.#.###.#.#.#...#...#.#.#.#.#...#...#.......###.#.......#...#...###...#...#.# |  | ||||||
| #.#.#.#.#.###.#.#.#.#.#.#.#######.#.#####.#.#.#.###.###.#.#.#.#.#.#.###.#.#.###.###.#.#.#.#.###.#.#########.###.#######.#.#.#######.#.#.#.#.# |  | ||||||
| #.#.#.#.#.#...#.#.#.#.#.#.......#.#.....#.#.#.#.#...#...#.#.#.#.#.#.#...#.#...#...#.#.#.#.#...#.#...#.....#...#...#.....#.#.........#...#...# |  | ||||||
| #.#.#.#.#.#.###.#.#.#.#.#######.#.#####.#.#.#.#.#.###.###.#.#.#.#.#.#.###.###.###.#.#.#.#.###.#.###.#.###.###.###.#.#####.################### |  | ||||||
| #...#...#...###...#...#.........#.......#...#...#.....###...#...#...#.....###.....#...#...###...###...###.....###...#####...................# |  | ||||||
| ###########################################################################################################################################.# |  | ||||||
							
								
								
									
										51
									
								
								23/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										51
									
								
								23/part1.pl
									
									
									
									
									
								
							| @@ -1,51 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Map), |  | ||||||
|     nth1(1, Map, Row1), nth1(StartY, Row1, '.'), |  | ||||||
|     findall(N, route(Map, visited{}, 1-StartY, N), Ns), |  | ||||||
|     max_list(Ns, Answer), |  | ||||||
|     format('~w <- ~w', [Answer, Ns]), nl. |  | ||||||
|  |  | ||||||
| route(Map, _, X-_, 0) :- length(Map, Height), X =:= Height. |  | ||||||
| route(Map, Visiteds, X-Y, N) :- |  | ||||||
|     Key is X*1000 + Y, NextVisiteds = Visiteds.put(Key, true), |  | ||||||
|     neighbor(Map, X-Y, X1-Y1, Dist), |  | ||||||
|     NeighborKey is X1*1000 + Y1, \+ _= Visiteds.get(NeighborKey), |  | ||||||
|     route(Map, NextVisiteds, X1-Y1, N1), |  | ||||||
|     N is N1 + Dist. |  | ||||||
|  |  | ||||||
| neighbor(Map, X-Y, NextX-NextY, Dist) :- |  | ||||||
|     (   X1 is X + 1, Y1 = Y; |  | ||||||
|         X1 is X - 1, Y1 = Y; |  | ||||||
|         X1 = X, Y1 is Y + 1; |  | ||||||
|         X1 = X, Y1 is Y - 1 |  | ||||||
|     ), |  | ||||||
|     nth1(X1, Map, Row1), nth1(Y1, Row1, Cell1), |  | ||||||
|     (   Cell1 = '.' -> NextX = X1, NextY = Y1, Dist = 1 |  | ||||||
|     ;   Cell1 = '>' -> NextX = X1, NextY is Y1 + 1, Dist = 2 |  | ||||||
|     ;   Cell1 = 'v' -> NextX is X1 + 1, NextY = Y1, Dist = 2 |  | ||||||
|     ),  |  | ||||||
|     ( NextX =\= X; NextY =\= Y ). |  | ||||||
|  |  | ||||||
| % input parsing stuff below. Brick indexing is for debugging. |  | ||||||
| input(FileName, Map) :- phrase_from_file(lines(Map), FileName). |  | ||||||
|  |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> ("\n"; eos), !. |  | ||||||
| line([C|Chars]) --> [Ascii], line(Chars), {atom_codes(C, [Ascii])}. |  | ||||||
|  |  | ||||||
| % debug |  | ||||||
| print(Map) :- |  | ||||||
|     findall( |  | ||||||
|         X, |  | ||||||
|         (   nth1(X, Map, Line), |  | ||||||
|             format('~3d', [X]), write(" "), |  | ||||||
|             atomic_list_concat(Line, Str), write(Str), nl |  | ||||||
|         ), |  | ||||||
|         _), |  | ||||||
|     nl. |  | ||||||
							
								
								
									
										90
									
								
								23/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										90
									
								
								23/part2.pl
									
									
									
									
									
								
							| @@ -1,90 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
| :- op(700, xfx, is_key_of). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Map, Start, End), |  | ||||||
|     graph(Map, Start, End, Graph), |  | ||||||
|     StartKey is_key_of Start, EndKey is_key_of End, |  | ||||||
|     findall(Dist, walk(Graph, visited{}, StartKey, EndKey, Dist), Dists), |  | ||||||
|     max_list(Dists, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| walk(_, _, Node, Node, 0). |  | ||||||
| walk(Graph, Visited, Start, End, Dist) :- |  | ||||||
|     member(Next-NextDist, Graph.get(Start)), \+ _ = Visited.get(Next), |  | ||||||
|     NextVisited = Visited.put(Next, true), |  | ||||||
|     walk(Graph, NextVisited, Next, End, RemainingDist), |  | ||||||
|     Dist is NextDist + RemainingDist. |  | ||||||
|      |  | ||||||
| graph(Map, Start, End, Graph) :- |  | ||||||
|     branch_points(Map, Branches), Nodes = [Start, End|Branches], |  | ||||||
|     findall( |  | ||||||
|         Key-Dists, |  | ||||||
|         (   member(Node, Nodes), |  | ||||||
|             dists_from(Map, Nodes, Node, Dists), |  | ||||||
|             Key is_key_of Node), |  | ||||||
|         GraphList), |  | ||||||
|     dict_pairs(Graph, edge, GraphList). |  | ||||||
|          |  | ||||||
| branch_points(Map, Points) :- findall(Point, branch_point(Map, Point), Points). |  | ||||||
| branch_point(Map, X-Y) :- |  | ||||||
|     nth1(X, Map, Row), nth1(Y, Row, Cell), Cell = '.', |  | ||||||
|     findall(X1-Y1, cell_neighbor(Map, 0-0, X-Y, X1-Y1), Neighbors), |  | ||||||
|     length(Neighbors, N), N > 2. |  | ||||||
|  |  | ||||||
| dists_from(Map, Nodes, N1, Dists) :- |  | ||||||
|     findall( |  | ||||||
|         Key-Dist, ( |  | ||||||
|             member(N2, Nodes), \+ N1 = N2, |  | ||||||
|             nobranch_dist(Map, 0-0, N1, N2, Dist), |  | ||||||
|             Key is_key_of N2), |  | ||||||
|         Dists). |  | ||||||
|  |  | ||||||
| is_key_of(Key, X-Y) :- Key is X*1000 + Y. |  | ||||||
|      |  | ||||||
| % nobranch_dist(X1-Y1, X2-Y2, Dist) :- true. |  | ||||||
| nobranch_dist(_, _, X-Y, X-Y, 0). |  | ||||||
| nobranch_dist(Map, FromX-FromY, X1-Y1, X2-Y2, Dist) :- |  | ||||||
|     findall(Xn-Yn, cell_neighbor(Map, FromX-FromY, X1-Y1, Xn-Yn), Neighbors), |  | ||||||
|     length(Neighbors, NeighborCount), |  | ||||||
|     \+ (NeighborCount =\= 1, FromX =\= 0),  % on a route or at beginning |  | ||||||
|     member(Neighbor, Neighbors), |  | ||||||
|     nobranch_dist(Map, X1-Y1, Neighbor, X2-Y2, NextDist), |  | ||||||
|     Dist is NextDist + 1. |  | ||||||
|      |  | ||||||
| % cell_neighbor finds an adjacent neighbor |  | ||||||
| cell_neighbor(Map, FromX-FromY, X-Y, X1-Y1) :- |  | ||||||
|     (   X1 is X + 1, Y1 = Y; |  | ||||||
|         X1 is X - 1, Y1 = Y; |  | ||||||
|         X1 = X, Y1 is Y + 1; |  | ||||||
|         X1 = X, Y1 is Y - 1 |  | ||||||
|     ), |  | ||||||
|     nth1(X1, Map, Row1), nth1(Y1, Row1, '.'), |  | ||||||
|     \+ (X1 = FromX, Y1 = FromY). |  | ||||||
|  |  | ||||||
| % input parsing stuff below. Brick indexing is for debugging. |  | ||||||
| input(FileName, Map, 1-StartY, EndX-EndY) :- |  | ||||||
|     phrase_from_file(lines(Map), FileName), |  | ||||||
|     length(Map, EndX), |  | ||||||
|     nth1(1, Map, StartRow), nth1(StartY, StartRow, '.'), |  | ||||||
|     nth1(EndX, Map, EndRow), nth1(EndY, EndRow, '.'). |  | ||||||
|  |  | ||||||
| lines([]) --> eos, !. |  | ||||||
| lines([Line|Lines]) --> line(Line), lines(Lines). |  | ||||||
|  |  | ||||||
| line([]) --> ("\n"; eos), !. |  | ||||||
| line(['#'|Chars]) --> "#", line(Chars). |  | ||||||
| line(['.'|Chars]) --> ("."; ">"; "v"), line(Chars). |  | ||||||
|  |  | ||||||
| % debug |  | ||||||
| print(Map) :- |  | ||||||
|     findall( |  | ||||||
|         X, |  | ||||||
|         (   nth1(X, Map, Line), |  | ||||||
|             format('~3d', [X]), write(" "), |  | ||||||
|             atomic_list_concat(Line, Str), write(Str), nl |  | ||||||
|         ), |  | ||||||
|         _), |  | ||||||
|     nl. |  | ||||||
							
								
								
									
										23
									
								
								23/test.txt
									
									
									
									
									
								
							
							
						
						
									
										23
									
								
								23/test.txt
									
									
									
									
									
								
							| @@ -1,23 +0,0 @@ | |||||||
| #.##################### |  | ||||||
| #.......#########...### |  | ||||||
| #######.#########.#.### |  | ||||||
| ###.....#.>.>.###.#.### |  | ||||||
| ###v#####.#v#.###.#.### |  | ||||||
| ###.>...#.#.#.....#...# |  | ||||||
| ###v###.#.#.#########.# |  | ||||||
| ###...#.#.#.......#...# |  | ||||||
| #####.#.#.#######.#.### |  | ||||||
| #.....#.#.#.......#...# |  | ||||||
| #.#####.#.#.#########v# |  | ||||||
| #.#...#...#...###...>.# |  | ||||||
| #.#.#v#######v###.###v# |  | ||||||
| #...#.>.#...>.>.#.###.# |  | ||||||
| #####v#.#.###v#.#.###.# |  | ||||||
| #.....#...#...#.#.#...# |  | ||||||
| #.#########.###.#.#.### |  | ||||||
| #...###...#...#...#.### |  | ||||||
| ###.###.#.###v#####v### |  | ||||||
| #...#...#.#.>.>.#.>.### |  | ||||||
| #.###.###.#.###.#.#v### |  | ||||||
| #.....###...###...#...# |  | ||||||
| #####################.# |  | ||||||
							
								
								
									
										300
									
								
								24/input.txt
									
									
									
									
									
								
							
							
						
						
									
										300
									
								
								24/input.txt
									
									
									
									
									
								
							| @@ -1,300 +0,0 @@ | |||||||
| 320870677764563, 335750934489987, 282502845957937 @ -40, -24, 10 |  | ||||||
| 219235623600942, 408022798608755, 245679379684914 @ 127, -45, 66 |  | ||||||
| 171834827764229, 225154401936948, 232302441670972 @ -122, -521, 95 |  | ||||||
| 399408000414510, 365475460204869, 325051385807860 @ -110, -35, -35 |  | ||||||
| 382531108862210, 229601570088564, 368913364777462 @ -119, 127, -107 |  | ||||||
| 149909452680584, 220522474055239, 215024246295982 @ 198, -73, 190 |  | ||||||
| 234205136344037, 217641496634781, 245767047966874 @ 50, 126, 57 |  | ||||||
| 154245972353770, 254717416188789, 165260557711000 @ 191, 37, 220 |  | ||||||
| 369540770291762, 356366422983125, 93794725449906 @ -15, 24, 216 |  | ||||||
| 226276010405492, 209995120939680, 310956910929616 @ -25, 99, -149 |  | ||||||
| 268638972773930, 269486309393569, 248987782583720 @ -21, 26, 50 |  | ||||||
| 361178860307414, 374454477296229, 399143377389604 @ -6, 7, -83 |  | ||||||
| 202257892924214, 270170054947827, 246834210935308 @ -51, -252, 15 |  | ||||||
| 277024186353899, 205267962954879, 342506025642424 @ -178, 112, -245 |  | ||||||
| 285916480116416, 388917502500415, 279882602663788 @ 60, -19, 31 |  | ||||||
| 145282209670550, 224173312800453, 249344095056520 @ 236, -215, -56 |  | ||||||
| 208447142984970, 231890691603339, 298351303820520 @ 61, 67, -75 |  | ||||||
| 161755191939510, 174118992755389, 243050626677760 @ 55, 212, -35 |  | ||||||
| 318313224606524, 381722223896712, 347955048413278 @ 27, -11, -39 |  | ||||||
| 305673336971274, 370290487695419, 422379794963756 @ 29, -13, -129 |  | ||||||
| 328180566576385, 213760869384648, 251670316230916 @ -34, 151, 55 |  | ||||||
| 230518001853761, 324986205789729, 203877601589479 @ 28, -118, 142 |  | ||||||
| 144072041563378, 90185316765691, 182011664702202 @ 217, 456, 233 |  | ||||||
| 185151810500310, 221100644135477, 245109663655204 @ 91, 60, 43 |  | ||||||
| 373850664858040, 293374889307828, 175368782897875 @ -89, 49, 154 |  | ||||||
| 328502469179556, 412212496772722, 260184335059001 @ 7, -55, 50 |  | ||||||
| 223132851962520, 223914729021163, 327185491912702 @ 76, 119, -80 |  | ||||||
| 198895082054102, 271680428770347, 234537752577403 @ 69, -56, 76 |  | ||||||
| 252972518344820, 389690617977839, 374418656922750 @ -153, -532, -403 |  | ||||||
| 192164383825878, 82139993028623, 120091254828574 @ 55, 519, 466 |  | ||||||
| 156955794165198, 191592767579977, 233413147425100 @ 64, -100, 79 |  | ||||||
| 165008537629302, 183661085826489, 248545405693408 @ -68, 52, -182 |  | ||||||
| 373129120338738, 368249004318254, 320596847750514 @ -71, -33, -27 |  | ||||||
| 275929675024853, 194671117708439, 343770846827540 @ -120, 152, -201 |  | ||||||
| 173580271204630, 203823601071863, 239810510444710 @ -139, -204, -11 |  | ||||||
| 189671912659874, 259317534315745, 248510443915264 @ 33, -150, 16 |  | ||||||
| 172552678412603, 76290981681303, 250440858733279 @ 148, 428, 40 |  | ||||||
| 127051067028085, 224685590300118, 27951449994759 @ 286, 13, 860 |  | ||||||
| 231732307446206, 111700054896778, 381283992852198 @ 93, 285, -115 |  | ||||||
| 196775286792290, 250152880582527, 165723767492786 @ -39, -179, 422 |  | ||||||
| 198162199765890, 326088593352961, 293740956136336 @ 121, -46, -20 |  | ||||||
| 181567111184732, 234940800451055, 284267674024586 @ 60, -61, -144 |  | ||||||
| 343894774969218, 251446196757409, 324645022076636 @ -155, 62, -88 |  | ||||||
| 154322997480050, 321666831724779, 170189917536370 @ 193, -37, 182 |  | ||||||
| 269135111242526, 422914585575117, 44342942222152 @ 18, -177, 368 |  | ||||||
| 174234267626414, 206600028766149, 247203043132680 @ 48, 7, -6 |  | ||||||
| 301438105099034, 196682335636041, 242355832704292 @ -37, 168, 65 |  | ||||||
| 52382227177535, 137282743662489, 90222907787860 @ 304, 242, 231 |  | ||||||
| 287281969399048, 189476966098213, 378020645240557 @ -65, 174, -200 |  | ||||||
| 329003376176988, 435916939135103, 202654481427582 @ 20, -61, 110 |  | ||||||
| 183674690012150, 191781746274329, 227891029018460 @ -72, 68, 123 |  | ||||||
| 366646274315090, 480902014044223, 227077161038699 @ -39, -136, 86 |  | ||||||
| 209229044274730, 190608724313417, 187400386715900 @ 136, 185, 129 |  | ||||||
| 261618567625850, 400563976485889, 144954360500820 @ 12, -178, 228 |  | ||||||
| 264216158312450, 334972046672343, 305882984918398 @ 41, -21, -22 |  | ||||||
| 466350980510496, 230380017371646, 332577962045002 @ -125, 145, -23 |  | ||||||
| 266431863912996, 290874605525783, 509046541048002 @ -10, -7, -418 |  | ||||||
| 132224880034084, 176627699412807, 220106637500956 @ 263, 196, 127 |  | ||||||
| 300469550083263, 426413462614973, 209018833990362 @ 40, -66, 105 |  | ||||||
| 311030442665825, 223508982594159, 255317416767895 @ -72, 120, 42 |  | ||||||
| 517047998068110, 239075216009569, 372653857063880 @ -166, 138, -60 |  | ||||||
| 170904351760141, 270353076576237, 209565974699113 @ 128, -122, 160 |  | ||||||
| 290157904191917, 379443622665012, 427270086392227 @ 42, -29, -140 |  | ||||||
| 173867272759940, 201864684820176, 243051222520867 @ 31, 15, 12 |  | ||||||
| 241502019378006, 260671504666073, 310914265664160 @ 100, 108, -6 |  | ||||||
| 271283475933083, 246303519670521, 255211216146782 @ 78, 130, 57 |  | ||||||
| 388021238794645, 216488511621914, 298488270181975 @ -184, 135, -26 |  | ||||||
| 335856195264706, 301351728593361, 283609538939852 @ -7, 61, 23 |  | ||||||
| 247561156076045, 271177759902429, 244748631170605 @ -154, -146, 38 |  | ||||||
| 276696780291055, 333024920521025, 305604257091590 @ -134, -214, -111 |  | ||||||
| 190855793421101, 153164710734612, 127049898278632 @ 28, 293, 523 |  | ||||||
| 443492983001086, 525011795745025, 422682967987684 @ -88, -142, -107 |  | ||||||
| 501694282984570, 467198174503214, 473605302628600 @ -239, -163, -221 |  | ||||||
| 335390812504546, 362603263870063, 309797115541008 @ -23, -24, -13 |  | ||||||
| 202304759605965, 213333718249183, 246143159635191 @ -94, -12, 8 |  | ||||||
| 177782812262045, 206513164309989, 236356130506975 @ -40, -66, 54 |  | ||||||
| 388319746430552, 513573144680169, 445043621805025 @ -53, -158, -146 |  | ||||||
| 194320135718360, 233248821891459, 202359964193575 @ 107, 80, 144 |  | ||||||
| 216771660023300, 171002079515199, 475642130495202 @ -54, 217, -838 |  | ||||||
| 234091788605150, 329933100121089, 222620683383130 @ -105, -358, 118 |  | ||||||
| 270608669158866, 301404666421918, 259633482142765 @ -7, -15, 34 |  | ||||||
| 257130045685842, 324015469970377, 192079653460084 @ 29, -36, 145 |  | ||||||
| 177501821940794, 206397724473173, 236757119637960 @ 117, 108, 69 |  | ||||||
| 258491080589540, 328713305053641, 347685992911240 @ 96, 54, -31 |  | ||||||
| 300241327661250, 317780474139381, 395082844930752 @ -119, -101, -264 |  | ||||||
| 166701742849052, 170048803933150, 279009405626079 @ 99, 231, -190 |  | ||||||
| 232167716240370, 309180901229489, 364847973540700 @ 82, 9, -110 |  | ||||||
| 272472196902758, 211620478899945, 169919557370053 @ 13, 146, 176 |  | ||||||
| 155257558622970, 215412500302073, 224645492519800 @ 151, -144, 154 |  | ||||||
| 165140630756911, 183872378821537, 189847493429559 @ 88, 138, 392 |  | ||||||
| 222481991685145, 381866546445014, 402626810510600 @ 106, -67, -141 |  | ||||||
| 195176269606298, 148450429795245, 252663005801584 @ 75, 275, 26 |  | ||||||
| 208907792419362, 350794355038735, 294502109591690 @ 89, -129, -36 |  | ||||||
| 163731694743470, 222695183641289, 249450695542684 @ 126, -48, -5 |  | ||||||
| 209099853718520, 241562956480389, 283990363935025 @ 11, -10, -82 |  | ||||||
| 161530626632686, 237419576114933, 319638596916810 @ 175, 68, -106 |  | ||||||
| 159481040133596, 158629339034865, 210459590512168 @ 58, 434, 405 |  | ||||||
| 123469770101234, 257476537375091, 234494092643914 @ 273, -27, 76 |  | ||||||
| 292278978987570, 239866606409241, 199533371820276 @ -149, 43, 162 |  | ||||||
| 380447223996379, 374529302108629, 538133423675973 @ -100, -58, -318 |  | ||||||
| 192314223519770, 237171949514439, 327368019710830 @ 101, 57, -140 |  | ||||||
| 164228470258070, 152786375782989, 233781247174300 @ 40, 443, 75 |  | ||||||
| 172857923598290, 361486110825537, 216740814450508 @ 111, -514, 143 |  | ||||||
| 215968779962610, 275822816042585, 255939903446892 @ 71, 5, 35 |  | ||||||
| 224072378959655, 219760339836420, 250116723554098 @ -94, 25, 13 |  | ||||||
| 341826278658070, 323384093598739, 317050311826650 @ -197, -105, -94 |  | ||||||
| 358061026812176, 333431655135129, 501927131792690 @ -36, 22, -226 |  | ||||||
| 362057930007880, 364175461079693, 291565175187926 @ -44, -16, 12 |  | ||||||
| 254480531220540, 261585394784649, 315221878253440 @ -61, -14, -125 |  | ||||||
| 239345238738065, 232921068298368, 52215243122876 @ 66, 115, 351 |  | ||||||
| 174121671759746, 253098934851105, 265802255418028 @ 127, -32, -18 |  | ||||||
| 336492062606489, 22227894726016, 480141325107541 @ -6, 371, -194 |  | ||||||
| 159311142016790, 144443435124894, 222453887189935 @ 117, 461, 172 |  | ||||||
| 264027680313710, 285411784271013, 175063578354076 @ 91, 96, 135 |  | ||||||
| 162835672903750, 194990375099697, 241394520022980 @ 16, -74, -31 |  | ||||||
| 306159412517226, 349026413686307, 514099559091684 @ 29, 11, -229 |  | ||||||
| 361674598186586, 541486806728355, 358055452228678 @ -143, -392, -123 |  | ||||||
| 387616545088370, 458824259273879, 187757363559110 @ -39, -84, 125 |  | ||||||
| 169441075829130, 63304826516582, 231410285377464 @ 161, 425, 83 |  | ||||||
| 25747427352685, 141237559854084, 110612909830610 @ 344, 241, 221 |  | ||||||
| 224941003813670, 293572180292369, 343069410375740 @ 66, -10, -117 |  | ||||||
| 230260619234115, 246354839816571, 227616486618513 @ -64, -32, 98 |  | ||||||
| 122374062836488, 129460749486351, 248910762647847 @ 283, 340, 32 |  | ||||||
| 257926150662427, 296587117999220, 269098859305457 @ 52, 35, 30 |  | ||||||
| 356168259600515, 496710404337273, 355767267199108 @ -164, -366, -137 |  | ||||||
| 499138453043411, 241721200046286, 383865072357541 @ -150, 135, -72 |  | ||||||
| 354351640576530, 333708262751349, 240972379666960 @ -43, 13, 70 |  | ||||||
| 414646107949045, 490351310759496, 391588852973424 @ -74, -125, -85 |  | ||||||
| 182510517018696, 196037200020145, 254600487937890 @ -88, 18, -106 |  | ||||||
| 203067123583136, 283551214233744, 250446375434740 @ 75, -53, 39 |  | ||||||
| 252810044109290, 237002938926201, 75981980028076 @ 46, 109, 315 |  | ||||||
| 336333829055570, 388442894436689, 291634558906300 @ 18, -7, 22 |  | ||||||
| 395076042194198, 359212075803360, 298728466148813 @ -51, 13, 12 |  | ||||||
| 158785266271843, 234903117684176, 269092839411151 @ 82, -559, -374 |  | ||||||
| 309601884465086, 412842250362681, 306976533326464 @ -32, -144, -28 |  | ||||||
| 294030373468330, 396089847565113, 280064088752700 @ 46, -35, 29 |  | ||||||
| 331545729822620, 256988945451264, 265060418520925 @ -81, 75, 30 |  | ||||||
| 190647571880991, 101485268249820, 252635532573594 @ 68, 439, 17 |  | ||||||
| 286448585468055, 517134354733154, 186333249962180 @ 38, -205, 135 |  | ||||||
| 153617721701820, 178833230713415, 252336845995825 @ 151, 156, -146 |  | ||||||
| 337398961767230, 377411392580169, 378982185725528 @ 6, -8, -72 |  | ||||||
| 195250366116408, 193178125048569, 472013133254368 @ 50, 142, -707 |  | ||||||
| 185967157561902, 242667813003287, 287987773258452 @ 59, -61, -133 |  | ||||||
| 178872203125295, 113519768889594, 13727599749985 @ 166, 275, 340 |  | ||||||
| 319415310905105, 435440863922004, 41521512187915 @ -32, -155, 342 |  | ||||||
| 251586814655345, 344865748855428, 269612063292298 @ 26, -89, 17 |  | ||||||
| 269246730728402, 271578178622193, 279439460804668 @ -88, -31, -32 |  | ||||||
| 135533496860438, 278285521115205, 214907869435324 @ 219, 68, 103 |  | ||||||
| 276812075909858, 466037129861747, 395316831883066 @ 57, -127, -104 |  | ||||||
| 236930960411706, 243177338144695, 356325165559341 @ 65, 96, -112 |  | ||||||
| 380460503419598, 324370013927517, 371388836906704 @ -82, 19, -90 |  | ||||||
| 427398362574065, 546630525363764, 426883192743950 @ -72, -163, -111 |  | ||||||
| 177868966679682, 217731875079305, 213146155346340 @ -143, -315, 324 |  | ||||||
| 290284806845247, 119840422044798, 184970876358517 @ -52, 301, 166 |  | ||||||
| 340880756829785, 288068023675589, 315817226541790 @ -36, 62, -23 |  | ||||||
| 185573708687938, 225251128591507, 128884524503130 @ 137, 113, 264 |  | ||||||
| 186685995213874, 219001269459803, 214926674026246 @ -47, -91, 202 |  | ||||||
| 199184710396145, 215180367747336, 203151616358728 @ -174, -101, 307 |  | ||||||
| 171076784522930, 146981293827499, 60098514063820 @ 177, 233, 271 |  | ||||||
| 270206225348270, 249412790853189, 300466015667500 @ -44, 51, -57 |  | ||||||
| 234689751989636, 218746599271293, 241908203795056 @ -60, 68, 53 |  | ||||||
| 336725151372856, 147342236950433, 199748653670338 @ -16, 234, 118 |  | ||||||
| 171003890899833, 195424392282388, 258493155527802 @ -28, -15, -187 |  | ||||||
| 149412455352770, 330619018965931, 331721336873716 @ 201, -121, -125 |  | ||||||
| 290849090590752, 279180853742381, 288711681503108 @ -65, 6, -25 |  | ||||||
| 163782604097570, 201369533990859, 276104464321110 @ -39, -239, -634 |  | ||||||
| 383466451055234, 487708948895409, 243501681722620 @ -31, -108, 69 |  | ||||||
| 278873443047818, 270949972855161, 295581748376284 @ -178, -79, -103 |  | ||||||
| 275483328204728, 359753199304611, 281769098655988 @ 55, -12, 23 |  | ||||||
| 155550526665711, 194627020895100, 222697531404203 @ 142, 13, 182 |  | ||||||
| 272548165774242, 183113072391357, 219832002893320 @ -71, 184, 109 |  | ||||||
| 365051505965124, 358358344604291, 369447127951585 @ -13, 20, -56 |  | ||||||
| 226749420175018, 136295903261165, 369261631685233 @ 49, 278, -188 |  | ||||||
| 347337565099555, 206264170469455, 435941166700880 @ -14, 168, -141 |  | ||||||
| 195173574972300, 288059724160556, 314475702179696 @ 131, 29, -45 |  | ||||||
| 290901181489325, 322228161855234, 270950972726635 @ -44, -53, 14 |  | ||||||
| 160976286106050, 217995178956129, 225852181163340 @ 97, -185, 147 |  | ||||||
| 194862657814148, 311950660223715, 37627659899164 @ 58, -229, 695 |  | ||||||
| 187756065196068, 189433672405609, 237753933445096 @ 95, 162, 67 |  | ||||||
| 314662593059606, 457342368237267, 280627472484196 @ 19, -109, 27 |  | ||||||
| 267078738018370, 395588665670289, 329017002090900 @ 41, -98, -51 |  | ||||||
| 198453105662012, 204180092239497, 125941083981442 @ 60, 118, 388 |  | ||||||
| 325515244603174, 193963026836233, 83616169017080 @ -40, 176, 284 |  | ||||||
| 306120915804898, 216669056599065, 224566702076996 @ -47, 136, 93 |  | ||||||
| 262952419990622, 189332097246832, 339944472270492 @ -123, 161, -225 |  | ||||||
| 430090980639770, 542562712338489, 554533524742700 @ -264, -407, -453 |  | ||||||
| 153428204187620, 258973851297351, 146351712685552 @ 176, -321, 621 |  | ||||||
| 267157324234725, 253300767826406, 247830886471870 @ -44, 39, 49 |  | ||||||
| 172772522836510, 205083962044941, 244745265268276 @ -34, -101, -35 |  | ||||||
| 196853173091800, 235959594193899, 277157185859790 @ 124, 103, 8 |  | ||||||
| 252233329257530, 150771238871169, 214260239540880 @ 99, 226, 98 |  | ||||||
| 260490329235010, 420724181636745, 466676682577804 @ 41, -152, -257 |  | ||||||
| 184101537716370, 206927897278749, 158088282864140 @ 61, 73, 383 |  | ||||||
| 371707477810145, 476446047030789, 395602648788850 @ -32, -114, -91 |  | ||||||
| 274680779584238, 328310092921155, 187337441960652 @ 27, -11, 143 |  | ||||||
| 199636505804290, 225659286596792, 281910746142349 @ -119, -121, -230 |  | ||||||
| 401663498069128, 324128314956575, 308385593557516 @ -122, 11, -17 |  | ||||||
| 306117741289910, 332540256531302, 198589750550180 @ 21, 21, 119 |  | ||||||
| 303752166745505, 329304097065024, 339365273624437 @ 16, 17, -48 |  | ||||||
| 154413399453767, 281779422496148, 262521206679621 @ 162, -631, -148 |  | ||||||
| 236991415564934, 260590948682271, 232297491880996 @ -113, -105, 83 |  | ||||||
| 169296005492162, 193449873692505, 238539375195412 @ -55, -36, 13 |  | ||||||
| 283385836439282, 243921272996229, 338818675191694 @ -207, -8, -242 |  | ||||||
| 360218974366508, 393941699996637, 490793199709315 @ -57, -66, -236 |  | ||||||
| 164882077279529, 201483737546733, 335070662943802 @ 124, 70, -427 |  | ||||||
| 428414485445962, 492485352755959, 272973136766672 @ -67, -103, 41 |  | ||||||
| 264897981595185, 404913442349664, 276336971338210 @ 88, -23, 37 |  | ||||||
| 124722508278926, 2134756155381, 110913025404874 @ 227, 384, 208 |  | ||||||
| 536832023822247, 453183106296689, 554060222944721 @ -356, -198, -382 |  | ||||||
| 319673051050466, 266571988792245, 210279914314000 @ 17, 103, 104 |  | ||||||
| 150821661312904, 219455030985091, 231399996053480 @ 194, -19, 89 |  | ||||||
| 158037715359790, 284936450761794, 164842330369291 @ 181, -53, 238 |  | ||||||
| 255633864100187, 315497864599284, 295466891366890 @ -90, -183, -91 |  | ||||||
| 392762975015658, 291483914154943, 229288562346068 @ -35, 89, 83 |  | ||||||
| 309403838076114, 336694805164365, 277758585027766 @ 17, 16, 28 |  | ||||||
| 287207150932613, 479713650170448, 553028229703657 @ -40, -331, -480 |  | ||||||
| 269836626986969, 417558006790458, 212469813227848 @ -6, -215, 115 |  | ||||||
| 196645388374976, 244570813283961, 249157458432502 @ 87, 34, 41 |  | ||||||
| 339693128219614, 399751916312913, 284680478974716 @ 8, -26, 27 |  | ||||||
| 187559549440250, 195622840636569, 254727426356500 @ -148, 13, -116 |  | ||||||
| 304935421756516, 348400992185367, 261097863957704 @ 10, -11, 45 |  | ||||||
| 394511030167381, 223826480972951, 305918192064792 @ -110, 140, -13 |  | ||||||
| 223011594988398, 194915959669899, 221220518871005 @ -131, 112, 134 |  | ||||||
| 235558411474303, 407906141462802, 340419559289067 @ -22, -401, -198 |  | ||||||
| 168807003005795, 353652818048826, 276081152261755 @ 126, -489, -86 |  | ||||||
| 146617870930743, 156137711671265, 286804418224879 @ 220, 330, -284 |  | ||||||
| 286018415412552, 353012603278297, 251064479342937 @ 23, -30, 56 |  | ||||||
| 447713232441308, 372146255273187, 341273315411916 @ -153, -32, -49 |  | ||||||
| 209718676758750, 247605970547674, 218062472885396 @ -19, -63, 135 |  | ||||||
| 343626695642120, 155974548843997, 172127764933794 @ -24, 224, 150 |  | ||||||
| 345109049048735, 227227570932339, 273481589457805 @ -136, 112, 10 |  | ||||||
| 188575330043159, 118850415966657, 305893691628208 @ 134, 298, -45 |  | ||||||
| 326608598650070, 151338233232649, 416515828832310 @ -99, 242, -231 |  | ||||||
| 360202364064386, 436602737274865, 326789378915772 @ -27, -81, -22 |  | ||||||
| 213268194460580, 241549002519749, 394962709612380 @ 84, 80, -217 |  | ||||||
| 197614206616568, 139979243625984, 357286465189054 @ 15, 337, -399 |  | ||||||
| 227981330842760, 156692554162989, 177379530796580 @ -57, 262, 263 |  | ||||||
| 157229517762970, 231523131346089, 46953217581800 @ 167, -44, 890 |  | ||||||
| 305219322429448, 177060442180047, 49658860244982 @ -22, 199, 342 |  | ||||||
| 152688286391810, 215257107452481, 216706409125996 @ 171, -167, 232 |  | ||||||
| 177207555863420, 203871290203365, 289811933188528 @ -74, -84, -479 |  | ||||||
| 190420105339073, 167303615894628, 216289073804446 @ 110, 219, 117 |  | ||||||
| 266399617296604, 299362499051479, 325520686693096 @ -20, -33, -95 |  | ||||||
| 481245676627650, 436807969705569, 314107082127180 @ -202, -116, -19 |  | ||||||
| 401026926420116, 374922905725809, 350888777956543 @ -101, -38, -62 |  | ||||||
| 256839644239620, 270114181543499, 257354063805598 @ 26, 47, 40 |  | ||||||
| 412259775717406, 242736865487561, 424824610687152 @ -86, 128, -130 |  | ||||||
| 66312913166752, 101998933996761, 60120199695721 @ 283, 274, 250 |  | ||||||
| 506958247823068, 361333863900433, 280005516982136 @ -152, 18, 33 |  | ||||||
| 298773017825360, 317212540408089, 312439900056100 @ 12, 22, -21 |  | ||||||
| 220796554287875, 214622218414014, 268263970137525 @ -96, 37, -66 |  | ||||||
| 189208611146850, 404126141855649, 112689238573260 @ 52, -656, 531 |  | ||||||
| 234488363250114, 231264618839649, 204011914548812 @ 65, 112, 126 |  | ||||||
| 283632869172150, 177048553588739, 391393075492010 @ -121, 197, -300 |  | ||||||
| 502765928206235, 353125800556389, 304677713378740 @ -156, 22, 7 |  | ||||||
| 137557454494001, 97473160546677, 94622893468780 @ 242, 470, 559 |  | ||||||
| 254064108665930, 262174096766589, 289808760599414 @ 21, 52, -18 |  | ||||||
| 182103896038108, 247435234271202, 351160194849282 @ -25, -299, -735 |  | ||||||
| 249420082303430, 42226989901413, 97645217504204 @ 36, 421, 303 |  | ||||||
| 284785302989480, 255729203245377, 252686569800496 @ -94, 26, 37 |  | ||||||
| 233601301711332, 322776864011749, 366444377930614 @ 70, -28, -128 |  | ||||||
| 155098520524958, 244934576541158, 226621458469431 @ 165, -241, 122 |  | ||||||
| 146746875809578, 160303698184733, 228748383224514 @ 205, 224, 86 |  | ||||||
| 326652196225864, 355170482041167, 311279979189430 @ -38, -41, -26 |  | ||||||
| 277275275212730, 369459942642369, 282937479061000 @ 59, -14, 24 |  | ||||||
| 295687269134249, 340949989963329, 238600197559195 @ 60, 42, 74 |  | ||||||
| 279992481783853, 333185439596083, 324914479814764 @ 64, 36, -17 |  | ||||||
| 241428276856914, 266598398788449, 362846190951676 @ -40, -38, -260 |  | ||||||
| 259307794913743, 295678437418021, 269285719406143 @ 8, -10, 16 |  | ||||||
| 240223936950226, 473763454154241, 220230835580308 @ 77, -206, 97 |  | ||||||
| 318558193417106, 334499570437515, 230529981435367 @ 25, 36, 82 |  | ||||||
| 275715901048290, 73132232580276, 217625216713160 @ 41, 331, 99 |  | ||||||
| 193044713426762, 394683970973463, 372101396303146 @ 145, -80, -99 |  | ||||||
| 145897314675055, 223949571890769, 176036980234010 @ 232, -230, 585 |  | ||||||
| 161440895273330, 237913221256553, 291149659043788 @ 171, 45, -65 |  | ||||||
| 264388423069872, 379242075888111, 338900807126713 @ -5, -164, -110 |  | ||||||
| 335398015038338, 259239092404812, 434897503751132 @ 9, 115, -129 |  | ||||||
| 236716202526674, 332397372379329, 276349416527020 @ 79, -18, 19 |  | ||||||
| 322665826998882, 358742494848305, 303038334161388 @ -13, -25, -7 |  | ||||||
| 428381456361421, 547609324289011, 198413346560546 @ -70, -160, 113 |  | ||||||
| 157290994488974, 206478542217105, 303245653405090 @ 157, 26, -311 |  | ||||||
| 395914211954640, 425947992394193, 312165656677126 @ -184, -190, -44 |  | ||||||
| 244618900201418, 557301378477177, 207722519450068 @ -51, -810, 147 |  | ||||||
| 279386951121298, 308300290814141, 289436636980500 @ -31, -36, -21 |  | ||||||
| 306161107858370, 145704637204577, 363514529004748 @ -99, 258, -170 |  | ||||||
| 157069989582566, 150135411048405, 169136269193176 @ 168, 309, 356 |  | ||||||
| 149210988438152, 134368802376762, 209337851128249 @ 203, 605, 318 |  | ||||||
| 332584662588854, 503022806009046, 148583395713307 @ -43, -235, 192 |  | ||||||
| 470742777193259, 423305548535160, 228962588950855 @ -160, -77, 84 |  | ||||||
| 250671602810546, 250908746265621, 243056875754412 @ -135, -50, 47 |  | ||||||
| 531229816428916, 231708023716351, 470967021948546 @ -196, 143, -168 |  | ||||||
| 237893080628802, 139019131653901, 131107424449688 @ 73, 254, 227 |  | ||||||
| 218711687951546, 159752359004265, 320741448667460 @ 78, 229, -76 |  | ||||||
| 165313081944257, 184601129061069, 299424839638243 @ 168, 182, -58 |  | ||||||
| 307210181456654, 421282787395425, 479731549148236 @ 37, -54, -177 |  | ||||||
| 305412361284452, 343104362104491, 360276884155534 @ -56, -75, -130 |  | ||||||
| 368644982396221, 368636169652378, 540142064185444 @ -22, 5, -233 |  | ||||||
| 296336361357714, 453921261262757, 388278886187068 @ 53, -79, -77 |  | ||||||
| 431597308261298, 363087620944641, 307225389042377 @ -231, -86, -34 |  | ||||||
| 302152593338480, 335110106105791, 293583504813410 @ 36, 29, 14 |  | ||||||
							
								
								
									
										20
									
								
								24/lol.txt
									
									
									
									
									
								
							
							
						
						
									
										20
									
								
								24/lol.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										35
									
								
								24/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								24/part1.pl
									
									
									
									
									
								
							| @@ -1,35 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Hails), |  | ||||||
|     maplist(xyline, Hails, Lines), |  | ||||||
|     findall( |  | ||||||
|         [N1, N2, X, Y], ( |  | ||||||
|             member(N1-L1-X1assert, Lines), member(N2-L2-X2assert, Lines), N1 < N2, |  | ||||||
|             intersect(L1, L2, X-Y), call(X1assert, X), call(X2assert, X), |  | ||||||
|             X >= 200000000000000, X =< 400000000000000, |  | ||||||
|             Y >= 200000000000000, Y =< 400000000000000), |  | ||||||
|         Intersects), |  | ||||||
|     length(Intersects, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| intersect(A1-B1-C1, A2-B2-C2, X-Y) :- |  | ||||||
|     Det is A1*B2 - A2*B1, Det =\= 0, |  | ||||||
|     X is (B2*C1 - B1*C2) / Det, |  | ||||||
|     Y is (-A2*C1 + A1*C2) / Det. |  | ||||||
|      |  | ||||||
| xyline(N-(X-Y-_-Dx-Dy-_), N-(A-B-C)-Xassert) :- |  | ||||||
|     A = Dy, B is -Dx, C is X*Dy - Y*Dx, |  | ||||||
|     ( Dx >= 0 -> Xassert = =<(X); Xassert = >=(X) ). |  | ||||||
|  |  | ||||||
| % input parsing stuff below. Brick indexing is for debugging. |  | ||||||
| % assumption: no same hail. There are parallels, but no same |  | ||||||
| input(FileName, Hails) :- phrase_from_file(hails(0, Hails), FileName). |  | ||||||
|  |  | ||||||
| hails(_, []) --> eos, !. |  | ||||||
| hails(N, [N-(X-Y-Z-Dx-Dy-Dz)|Hails]) --> |  | ||||||
|     blanks, number(X), ",", blanks, number(Y), ",", blanks, number(Z), " @", |  | ||||||
|     blanks, number(Dx), ",", blanks, number(Dy), ",", blanks, number(Dz), "\n", |  | ||||||
|     {NextN is N + 1}, hails(NextN, Hails). |  | ||||||
							
								
								
									
										35
									
								
								24/part2.pl
									
									
									
									
									
								
							
							
						
						
									
										35
									
								
								24/part2.pl
									
									
									
									
									
								
							| @@ -1,35 +0,0 @@ | |||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Hails), |  | ||||||
|     maplist(xyline, Hails, Lines), |  | ||||||
|     findall( |  | ||||||
|         [N1, N2, X, Y], ( |  | ||||||
|             member(N1-L1-X1assert, Lines), member(N2-L2-X2assert, Lines), N1 < N2, |  | ||||||
|             intersect(L1, L2, X-Y), call(X1assert, X), call(X2assert, X), |  | ||||||
|             X >= 200000000000000, X =< 400000000000000, |  | ||||||
|             Y >= 200000000000000, Y =< 400000000000000), |  | ||||||
|         Intersects), |  | ||||||
|     length(Intersects, Answer), |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| intersect(A1-B1-C1, A2-B2-C2, X-Y) :- |  | ||||||
|     Det is A1*B2 - A2*B1, Det =\= 0, |  | ||||||
|     X is (B2*C1 - B1*C2) / Det, |  | ||||||
|     Y is (-A2*C1 + A1*C2) / Det. |  | ||||||
|      |  | ||||||
| xyline(N-(X-Y-_-Dx-Dy-_), N-(A-B-C)-Xassert) :- |  | ||||||
|     A = Dy, B is -Dx, C is X*Dy - Y*Dx, |  | ||||||
|     ( Dx >= 0 -> Xassert = =<(X); Xassert = >=(X) ). |  | ||||||
|  |  | ||||||
| % input parsing stuff below. Brick indexing is for debugging. |  | ||||||
| % assumption: no same hail. There are parallels, but no same |  | ||||||
| input(FileName, Hails) :- phrase_from_file(hails(0, Hails), FileName). |  | ||||||
|  |  | ||||||
| hails(_, []) --> eos, !. |  | ||||||
| hails(N, [N-(X-Y-Z-Dx-Dy-Dz)|Hails]) --> |  | ||||||
|     blanks, number(X), ",", blanks, number(Y), ",", blanks, number(Z), " @", |  | ||||||
|     blanks, number(Dx), ",", blanks, number(Dy), ",", blanks, number(Dz), "\n", |  | ||||||
|     {NextN is N + 1}, hails(NextN, Hails). |  | ||||||
							
								
								
									
										27
									
								
								24/test.txt
									
									
									
									
									
								
							
							
						
						
									
										27
									
								
								24/test.txt
									
									
									
									
									
								
							| @@ -1,27 +0,0 @@ | |||||||
| 19, 13, 30 @ -2,  1, -2 |  | ||||||
| 18, 19, 22 @ -1, -1, -2 |  | ||||||
| 20, 25, 34 @ -2, -2, -4 |  | ||||||
| 12, 31, 28 @ -1, -2, -1 |  | ||||||
| 20, 19, 15 @  1, -5, -3 |  | ||||||
|  |  | ||||||
| Using first 3 rays |  | ||||||
|  |  | ||||||
| x + a*t1 = 19 - 2t1, y + b*t1 = 13 + t1, z + c*t1 = 30 - 2t1, |  | ||||||
| x + a*t2 = 18 - t2, y + b*t2 = 19 - t2, z + c*t2 = 22 - 2t2, |  | ||||||
| x + a*t3 = 20 - 2t3, y + b*t3 = 25 - 2t3, z + c*t3 = 34 - 4t3 |  | ||||||
| 9 eqs, 9 unks, thus solution in 3 points. |  | ||||||
| --> a = -3, b = 1, c = 2, t1 = 5, t2 = 3, t3 = 4, x = 24, y = 13, z = 10 |  | ||||||
|  |  | ||||||
| x+a*t1 == 320870677764563-40*t1, y+b*t1 == 335750934489987-24*t1, z+c*t1 == 282502845957937+10*t1, |  | ||||||
| x+a*t2 == 219235623600942+127*t2, y+b*t2 == 408022798608755-45*t2, z+c*t2 == 245679379684914+66*t2, |  | ||||||
| x+a*t3 == 171834827764229-122*t3, y+b*t3 == 225154401936948-521*t3, z+c*t3 == 232302441670972+95*t3 |  | ||||||
|  |  | ||||||
| sage: x, y, z, a, b, c, t1, t2, t3 = var('x, y, z, a, b, c, t1, t2, t3') |  | ||||||
| sage: solve([ |  | ||||||
| ....:     x+a*t1 == 320870677764563-40*t1, y+b*t1 == 335750934489987-24*t1, z+c*t1 == 282502845957937+10*t1, |  | ||||||
| ....:     x+a*t2 == 219235623600942+127*t2, y+b*t2 == 408022798608755-45*t2, z+c*t2 == 245679379684914+66*t2, |  | ||||||
| ....:     x+a*t3 == 171834827764229-122*t3, y+b*t3 == 225154401936948-521*t3, z+c*t3 == 232302441670972+95*t3], |  | ||||||
| ....:   x,y,z,a,b,c,t1,t2,t3) |  | ||||||
| [[x == 149412455352770, y == 174964385672289, z == 233413147425100, a == 201, b == 202, c == 79, t1 == 711444906273, t2 == 943556327678, t3 == 69419109633]] |  | ||||||
| sage: 149412455352770+174964385672289+233413147425100 |  | ||||||
| 557789988450159 |  | ||||||
							
								
								
									
										1205
									
								
								25/input.txt
									
									
									
									
									
								
							
							
						
						
									
										1205
									
								
								25/input.txt
									
									
									
									
									
								
							
										
											
												File diff suppressed because it is too large
												Load Diff
											
										
									
								
							
							
								
								
									
										91
									
								
								25/part1.pl
									
									
									
									
									
								
							
							
						
						
									
										91
									
								
								25/part1.pl
									
									
									
									
									
								
							| @@ -1,91 +0,0 @@ | |||||||
| % This needs more stack. Try --stack_limit=4G |  | ||||||
| :- use_module(library(pio)). |  | ||||||
| :- use_module(library(dcg/basics)). |  | ||||||
| :- initialization(main, main). |  | ||||||
|  |  | ||||||
| main([FileName|_]) :- |  | ||||||
|     input(FileName, Conns), |  | ||||||
|     dict_pairs(Conns, _, ConnsList), |  | ||||||
|     length(ConnsList, NNodes), |  | ||||||
|     findnsols( |  | ||||||
|         1, PartitionSize, ( |  | ||||||
|             _ = Conns.StartNode, |  | ||||||
|             iterate(StartNode, EndNode, Conns, _), |  | ||||||
|             atom_length(EndNode, NodeSize3), |  | ||||||
|             PartitionSize is NodeSize3 / 3), |  | ||||||
|         [Side1]), |  | ||||||
|     Side2 is NNodes - Side1, |  | ||||||
|     Answer is Side1*Side2, |  | ||||||
|     write(Answer), nl. |  | ||||||
|  |  | ||||||
| iterate(Node, Node, Graph, Graph) :- length(Graph.Node, 3), !. |  | ||||||
| iterate(Node0, Node, Graph0, Graph) :- |  | ||||||
|     countall(Graph0.Node0, NeighborCounts), |  | ||||||
|     NeighborCounts = [_-Max|_], |  | ||||||
|     member(Neighbor-Max, NeighborCounts), |  | ||||||
|     combine(Node0, Neighbor, Node1, Graph0, Graph1), |  | ||||||
|     iterate(Node1, Node, Graph1, Graph). |  | ||||||
|      |  | ||||||
| % combine 2 nodes into one, keep all outbound connections |  | ||||||
| combine(Node1, Node2, Node12, Graph0, Graph) :- |  | ||||||
|     % delete N1 -> N2's and N2 -> N1's |  | ||||||
|     del_dict(Node1, Graph0, OldN1Outs, Graph1), |  | ||||||
|     del_dict(Node2, Graph1, OldN2Outs, Graph2), |  | ||||||
|     remove_all(Node2, OldN1Outs, N1Outs), |  | ||||||
|     remove_all(Node1, OldN2Outs, N2Outs), |  | ||||||
|     % replace N1 -> X and N2 -> Y with N12 -> [X|Y] |  | ||||||
|     atom_concat(Node1, Node2, Node12), |  | ||||||
|     append(N1Outs, N2Outs, N12Outs), |  | ||||||
|     Graph3 = Graph2.put(Node12, N12Outs), |  | ||||||
|     % replace X -> N1 or X -> N2 with X -> N12 (twice if needed) |  | ||||||
|     foldl(replace_outbound_node(Node1, Node12), N1Outs, Graph3, Graph4), |  | ||||||
|     foldl(replace_outbound_node(Node2, Node12), N2Outs, Graph4, Graph). |  | ||||||
|  |  | ||||||
| replace_outbound_node(Node1, Node2, Node, Graph0, Graph) :- |  | ||||||
|     replace_all(Node1, Graph0.Node, Node2, NewList), |  | ||||||
|     Graph = Graph0.put(Node, NewList). |  | ||||||
|  |  | ||||||
| % List has all items in List but with all ItemOut instances replaced with ItemIn |  | ||||||
| replace_all(_, [], _, []). |  | ||||||
| replace_all(ItemOut, [ItemOut|List0], ItemIn, [ItemIn|List]) :- |  | ||||||
|     replace_all(ItemOut, List0, ItemIn, List). |  | ||||||
| replace_all(ItemOut, [X|List0], ItemIn, [X|List]) :- |  | ||||||
|     \+ X = ItemOut, |  | ||||||
|     replace_all(ItemOut, List0, ItemIn, List). |  | ||||||
|  |  | ||||||
| remove_all(_, [], []). |  | ||||||
| remove_all(X, [X|List], ListOut) :- remove_all(X, List, ListOut). |  | ||||||
| remove_all(X, [Y|List], [Y|ListOut]) :- \+ X = Y, remove_all(X, List, ListOut). |  | ||||||
|      |  | ||||||
| % countall means Counts is pairs of Item-Count where Item in List, sorted > |  | ||||||
| countall(List, Counts) :- |  | ||||||
|     foldl(increment, List, count{}, CountsMap), |  | ||||||
|     dict_pairs(CountsMap, _, CountsList), |  | ||||||
|     sort(2, @>=, CountsList, Counts). |  | ||||||
|  |  | ||||||
| increment(X, Ns0, Ns) :- Next is Ns0.get(X, 0) + 1, Ns = Ns0.put(X, Next). |  | ||||||
|      |  | ||||||
| % input parsing stuff below. |  | ||||||
| input(FileName, Conns) :- |  | ||||||
|     phrase_from_file(conns(ConnsList), FileName), |  | ||||||
|     to_bidi_graph(ConnsList, Conns). |  | ||||||
|  |  | ||||||
| conns([]) --> eos, !. |  | ||||||
| conns([From-Tos|Conns]) --> node(From), ": ", tos(Tos), conns(Conns). |  | ||||||
| tos([To]) --> node(To), "\n". |  | ||||||
| tos([To|Tos]) --> node(To), " ", tos(Tos). |  | ||||||
| node(Node) --> string_without(": \n", NodeStr), {atom_codes(Node, NodeStr)}. |  | ||||||
|  |  | ||||||
| to_bidi_graph(ConnsList, BidiConnsGraph) :- |  | ||||||
|     dict_pairs(Graph0, conn, ConnsList), |  | ||||||
|     foldl(add_reverse_conns_for, ConnsList, Graph0, BidiConnsGraph). |  | ||||||
|  |  | ||||||
| add_reverse_conns_for(Node-Outbounds, Conns0, Conns1) :- |  | ||||||
|     foldl(add_conn(Node), Outbounds, Conns0, Conns1). |  | ||||||
|  |  | ||||||
| add_conn(ToNode, FromNode, Conns0, Conns1) :- |  | ||||||
|     Current = Conns0.get(FromNode, []), |  | ||||||
|     Conns1 = Conns0.put(FromNode, [ToNode|Current]). |  | ||||||
|  |  | ||||||
| % debug |  | ||||||
| print(Graph) :- dict_pairs(Graph, _, Lines), maplist(format('~w~n'), Lines). |  | ||||||
							
								
								
									
										13
									
								
								25/test.txt
									
									
									
									
									
								
							
							
						
						
									
										13
									
								
								25/test.txt
									
									
									
									
									
								
							| @@ -1,13 +0,0 @@ | |||||||
| jqt: rhn xhk nvd |  | ||||||
| rsh: frs pzl lsr |  | ||||||
| xhk: hfx |  | ||||||
| cmg: qnr nvd lhk bvb |  | ||||||
| rhn: xhk bvb hfx |  | ||||||
| bvb: xhk hfx |  | ||||||
| pzl: lsr hfx nvd |  | ||||||
| qnr: nvd |  | ||||||
| ntq: jqt hfx bvb xhk |  | ||||||
| nvd: lhk |  | ||||||
| lsr: lhk |  | ||||||
| rzs: qnr cmg lsr rsh |  | ||||||
| frs: qnr lhk lsr |  | ||||||
		Reference in New Issue
	
	Block a user