From 59ee3eca0cf99ec0a49cc4a617ea3fc81e6c170b Mon Sep 17 00:00:00 2001 From: Brian Fertig Date: Sun, 14 Jun 2026 05:18:03 -0600 Subject: [PATCH] feat: add Dot Link puzzle game Introduce Dot Link, a Flow-Free-style single-player puzzle game where players connect matching colored dots to fill the grid. Includes: - Pure JS puzzle engine with deterministic board generation, DFS solver, and win validation (`DotLinkLogic.js`) - Phaser 3 UI scene featuring a cyberpunk/synthwave theme, level select, daily runs, hint system, and smooth path-drawing mechanics - Deterministic bank of 100 hand-tuned puzzles (`dotlink.json`) - Node scripts for puzzle generation and verification - Full integration into the app's preload, routing, and game registry --- public/assets/images/game-icons.png | Bin 248591 -> 250223 bytes public/assets/images/game-icons.psd | Bin 656981 -> 663321 bytes public/data/dotlink.json | 39833 +++++++++++++++++++++ public/src/games/dotlink/DotLinkGame.js | 928 + public/src/games/dotlink/DotLinkLogic.js | 348 + public/src/main.js | 2 + public/src/scenes/GameRoomScene.js | 2 +- public/src/scenes/PreloadScene.js | 1 + server/games/registry.js | 1 + server/scripts/genDotLink.js | 111 + server/scripts/verifyDotLink.js | 104 + 11 files changed, 41329 insertions(+), 1 deletion(-) create mode 100644 public/data/dotlink.json create mode 100644 public/src/games/dotlink/DotLinkGame.js create mode 100644 public/src/games/dotlink/DotLinkLogic.js create mode 100644 server/scripts/genDotLink.js create mode 100644 server/scripts/verifyDotLink.js diff --git a/public/assets/images/game-icons.png b/public/assets/images/game-icons.png index acd580fd98a96b60e1fe9fcdd0b67b29392ffbd8..57013ab0d25e751154e5a82c5989c15a801fb7ac 100644 GIT binary patch delta 35183 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

(Hs@C=2g1ego z96*j)592qK2bGCP+E1Z0hGjL>)Q|_gWF!q$z)@KiBP{I7$UfMu04^j?w?;5iSvX9t zYp!N26`ws01ajym#C3O~v&CaH2Ht zyP^iZuS>>yq0b_nx*uUk2Dj9sM=)9Ay`~IEacF(1hdqm)@fL$goU7qF^DL*CtBXsDVjI8k$HM}6A?LjrlHQXKhIJl*_zK6P5L#XD@$>3b?taGJ-187 z*o@2n^AXwOs4BYR!3I3U zin2P6kA6!63;xN$A`J{1zO`OhowZv(gh>)=*eUXgC{IAq(%oNaF~N~$dNeYlii5_H z^RJafPF7F-+sJZ;AG;B|-QCf@{2p}vRZ74H4n)x=AmT8?nmh87L*SsU*aYi}WX=!F z;%FSAp+87(lJ;UJK${_rH%Kxj0`5=oLhTMyf0rfzjbEG~&8fKdp0H~+pvXuL>r;ik z`rKaa%|T|G(OEXFyZsA>^{)bB{Vr0NO^yB%@r2Agn7)>=lyFjvL1eBMg#7&6*+hvW z2KxpSlc`#4BjOjVrqdZP$5X#AuFj-v*P9d(nIITggpXm8v!^7AMd`0nMi9o2^wFfl z*21L#Zq7gRwxb@{n*|JPxS0MFDFMGbu@00aF`@?jKJF_r$tgY?$0R;9A!(`g#q(Z3Da{py7CNf~b!ijhJInem6Kg z%EaO};MZJ83)m~hD@T`AJ{W8?>(N>e+P2~YvoAQ;lgz?@@3LBy(Cp^-B-56&5QCIx zS7(c1$ut+z+z~EyJG^V}>@iM$w4TgcN9NDz;<$R9(k2bXP0Vz_f53c!udI5V)bt?Q zU&a``-+Zhx)9og6fzd`_##-;y)lnd9+k}=@MUHaExR8fQZE!$ByLGY-?{6+~p;k!) z4BL$G@*JTRWTJ<|$Uh|Einhuayv`)VEuiO`Dc?z`eSTKSjMsO5c9~AfLXz=% zE+;&eQZP|PP)`;eh+~tZrjqA`f>Q>;c_zCpF~v_8qePDVC}s#$3A{H3$1Ch?{LC^B z9jPvK;@o&Ry#4a?70y*mwy`wL;Nr{&)Wt$ALmH9RO^PsMMNbEri;{#=+|D!nw!o>= ze!4QnkC_oB8ZV<{u)@O!N|)qaVflA-%Z+V1Y7f3&;Cv9AO3wdhW3(DlS67Wv2VaV) z!S-V0s<>RW-mhvq+q!3lHTD5JmSXBHAiU(Oc=< zfxMNPSh0g~s3FiJBT_BeF@yv$L8Sy`>B=57Od@&ytkE4cV!-S6iVY8Jsn=Y%f)Asj z?iNk@udEl}UQ78H&SmFI_AVN&{3G zItia6Zd{W!N^K^UNpKqj`}bLng^;>B++-h!`&-IG%BaX@NC``{y>1STEY9j5ZKpau zEwsF%{Kyx&_>tEOiI_9cW!2WbusvV}gd|D-h=oYzc)4MQ*@c*gGl0Fo_7OST%?%Fu za3|6d>s855CYR)4N>~+(0rq=rvaTXSmvjPYB1p~nE@uX~QAGIZal9NwMd<6uFa2ho zoB7BjdBD=9$eg{#oD8r0%7}^M-3{%N%=0~~FgfL0M?XB=0msIVPX%ADVR+a*M+aP-qIT+1L?wo#s$KE2ws$haFg2nBjnu=|Z#Ejd zrI;l*1_3X}j~-_|1Z;0R+Gp7+x9)YKtO}EuIH@1XImQ7qN+MRgmcmR_)|C^ILa8>% z8I$~X=U<-MNcMJ* znlu&wznFFx?tVGUZr=*K@f1ziV-Je<@wS(tKNy@9LZvEV<%24dg67f+MlmDT&m^_J zO+*2UF_o1Y257ElGN;Mfd)mKP#3k)X3&$U}D`KW*qk4LgwGxjZjGfO1n_Y} z2IYRALhAczq8J}p8}F7n!!%^X^%mH7^w-F`f@%~xMV<_m>{o(@BrSuUd@N%IDH%G6 zFOBGrQYMJde2cHZ5Y&rD2@z6FvR}vLqEYu=En)1Z4?qzIs<>Wh!qnU$wy~)s-5;3} zc-PN@#SzzBmjB_C%SKkzw4lcM+A%k&`(&5Om^fS5e~^lN+TXQUQ9@~aO?!UfKGXN zogo20@lZ3jdua-pk-A>S1anh6AtW|bRv04cG~nlpD9m^^OzPUoBFo&y*Yk$-r|h_? zpX2G$%!g+0^LD8g^VhAzmF>Ar7)APA4nDF{d^T<5Tj(qgz5fCFp}}1QM>;F<7OQ`{ zd~dz87GbrM!QY=~k@(j*-?)*s3kds<;`5z>)JNuKBj6ZSj&C|{hL+59^0~HcC!pC0 z&G~N($E=>n@iL239kB*okj`}YY_*?Cm5slRV<7qUoG*IyiCgOvp0M4(|q*Sd0@oGQ@o{)3|exMZ;ZD)^`9W!$wbk zeOSA=%stf|SfxDDFRrJ~8x}^9X!tTp^A|cHhyJW(QCZ18wj#Wc6w{-xfw4hy| zf7TvaSKSnFD@E~+(FV&P>tw) z9#XH`!j6}7gznP|;KdLQvE@^DV3@j~7v9>a=r%ygMqvby3sHqb?9Jv+>t6lT?>oLS zhASdbqb#l_#zUGHie%!Hcbf;GNON#GGeFX&1dSpZ|B|9w%(tN)#E-R^P=Q&LQY6^s z_b65=LF8ZquMRJ!3^S z7;aJvI*oc8T|uRv{T?#BA) zfOJ?x=AE?Sd>nEE4q#T6^9%LE@ZOj#%GvX`l?C*5a<}_!JxPMn4nfaT@QdDLPgYms zl<6N0FCG!y&Q<5gP8dcq#lEJ0==o%l@0W&c%oxtyGNq$Ikw`*%>*0!O5M|OzA|51l zu<<&--+!)FFUadMY;yOF)JgmV?es?G{trfh!av64%%!NCy zksvc<=-U9Ge5cl$nW#mm+pqAa!jCzhmqcTH$mBVXuZOj9*l zmK&VW@gG+Or}SJHi$b{3dQ^B570blt_bQ+5`Ye6G=e&9VdEMC5!osCz;pj&>i>}}q zO@2~?NR{Y&_e4OF1&!K_^L}dv;@41Oi@ml5~SE)z{%Qk6rQCA%odc`zkNnRq`lmKIVWj0E0 zF-NcmHxu8=yFKUfhI~{vej!zK9T%Hq<2_yT92G@k7hgqtJ7bZLT)H*J9W6(3$pL71oS>O2l~y z(J6-oUSxB(m6(eQ*#dery=67BPX{DWVvs3On216sBDhbxzpPAw(T6arskY7i=?35T zu?Lg0-`GQC5cv^sgB^Hoyi3ES8^w{7)8iz$)i?kRFThZT)+1dKgrq%04 z*6;fCx<6kFM1jR&?5M&iY^WYiZ~sAFY0FitNRHLN0C=F6%b*VleWOdm3BW2P!b2cl zeIS=2(U-N2x*3C+7IXJ5Asj=V!ohs{M}*+j$)qw+72{ms?*Ao(KZW@*Sq+2|X^7a( zDOL6JnFyn$FRmc>u>~4K_C-S~+QIrir8OJ4^hubclRxCZi}oUBG+;~8+Nq zLJK|C-YV47N|TWt+R9--x<4I+P6;z)*rYG1g=YNpd*+=!^(>QAx+=^ex`(q38xS(- zYj1iIzj{M;-`4rJ6~~^OZZ*?}i4WemM$5|>uz!yxIQ{)? z?QrR-b`RSVAo1k({6JSb4Pwa;rSu7ZsH;Xi9dNp_6(M5gb#>8h#yxniX+VX=d163= zKF8GkO-C&3f`}V)JFL>~oyW)T%jGiUUx$B9*F-jRaVjW(sbHnVL05o)c1MHfQ|V#y zkL_A_02+@f;R?THp{P@+3EJUgze#hS(NnyfCThVNC=nM_ZXM#>5>YwxAMc!Dex9D2 z6cQ<=n*4vb0TA3wSVW>w&C9Jd9T@P_!V>o`vFnogmDCkX)r5Knl--zNa>1jfyos$$ z1>!QAs2}!&=mXdk0Smk8kO*ugpC#w02nph!kt*%8>}d0vZGPKlU(2yAZo{aWW-%-i zQHi4rEXoYwN`3apsGeWxTEAF>;_fTwn05nEUI>TEb~2pzss1*t=mqh5KNhniN^tJ< z8b%j>c58d~H&L10=}9$SkPraU*)r{oE~} z_=x`ZZ0l3zIzSFe9BchY~aywZQ;WfBk`#s}L(u)_WC0=_@X@=W>lV;~$(1i@q%%XBe zWq)E$%Y!yR0NeFUqauFfq51=}4yd+G4+aq;@3*O0bBjDUf7(q~w^l;St5Jth&I}zr zdQqsNOf?o+Sqwe$I$We81VSV;K9g{hzS*^a=>cfyv^E0)9~Yyg${{**x|Da?Gv)kW z`|7z~w|ld5EZMk7_EP%{_1gWL3vLEA;=LAqG1;w1z@3a&SvBc2tax3aMvTEQG6IsiKRr~kG|c2^7OD?=7lJ$TZlOaj-z-|Nh%F6?FHij7?)_p zjHBgzilRa{`_i%&y&YL>S!A;$csM_b>?7#xDZgt+ynRi9cq(GS(0z?5U)!I<#eu34U{iU(D1=1H@34*vE)fP`p7@!p>k8CMzQ-#qK zRh$)8L5nQld2}-mCP+li7NN3kFo;mRHCC$s}xe( z)8Jz$)8|SCHa*RX3OkW;DFkUK6xDU=)466DD=ycmq}zn#mNxEOI)Pw42PKH5CIHap zT2;ig{cT#j4!r;^2G7oWBl9#Pnwe(WMhR62YVE$rLNCaOBZ%@#CHBxi`O}=8Ws3K!po|t6{=Pzximimz;7RlXcbcc-+DM8(C z%k|*N^?Y?)WN9bDCNr6$_K1Rmh8pz6X(qwJ8d5Odo*&K#p(y)QQ}9J?<@LY5uh zZG7Q{-!(}vTdx|71k+%diUGiW7&Ub^h+=~EqDizGQvn|pxeb{=oF6D!zIyMAmq{VP zn24C=@d{aKNZzzlR>7a zu^1T5|4He#395%|Q0KV%RVa*@+JroZI!6FTt>ZR7r_kpD3&Q{Ge*Lr+gj?=>)}2%2 z8!C|F{@Pn<&HgnsWdD=D=Xj|Or`xeju?A>&USNxorn|_MohGon>VVHR(P`f`jmJ|91H01Dx5O_4Dh@+H}{k*xIdxBiSzbA6E6}2E&^<`P}%x z+YyJTW#NNqLa2p>Ytu6yOzA2#U?gOF;u6_7LEA37{Q^;_RLyg22L4qx2vte=D( zf0ZEGsS9LeLf9Oh0M!S#C>15bGlRV#jgbf)N7uJV;=cYOMuLGK;W!CRTGy}uxl$FF z=Ivd-BfLv2sJw~QRF&2uOJiAGGH95n>Lrb-UIDOgMN2zQ*TSq7Zy+`R~@TY`KI}(NK zX?eaOTk5T4{@-0iIW^e3F<5!4wmd$7k}b8S`XIx`|J)cqZ^rsSDwE zR3yQd(?>21T?XE$nO($Fj1FeR&B#NlG3KaTvoduB9lHaC|!5dbsG z*=A*58%6z@&c{LLJNGV5hw_O+9jCFQsHKS-C^@{Fzg;$raxs3c3V>Re1A*GgbTUo~PU84}UTvqss@W?$%y3yQtXYYq zIUW}PCwZ78`7Dc|xXR{{<^!+hjwYw20JlBdi77eMvvTvg^_{PZr{mS@=oYJ? z1@_T}r7|%vq7G^hc@m7ShX3k%c{+r2Qc_fSuy)iuf*SN6F}1N)myM7;2f!z&_qH?} z=rYQT6AQ`|M?~WZWQHpR`p7f8rDH*IA#X;tVVl;P|4JMayhKygqz-N~pryg7zzNn- zOJ8(M=B&Z)zmeH16OVfhqu>%5X6b*X@!fdB6=5M4Ft0~`neLYg?kb)J?^uD$u_ec~ zp3cnu)owr*z4C(@HO|B9H%;n3CBc8DMJPkKFzn`H70qf?wWTy?Jk9Vu1ub3xA@&j$jbh6 zz!!c^DN(!pJH9b8;z`Scc-$fiTG_Lt2+}j55qQ5!S5WkyfnQvuK)O8dpd*)a#>ltz z<4_G}_W20KL!%3hwKlN6fQwNH-q{65OeM+tD_;oHnTI?MJ~=L0)JU9&E7nQ>k63NO zVr45j`u8c-)jQy6WbZ25_3zO`Obq*LLr8;F$}~zF+13UkV z1$?HA)&KO0$~SyKKJBnjf@M?uh zHRWKKcXJx(WCv)&SvUP`wBB&%zmDIRKQDl;Q}Sk)D7F+}O0M*K`%9{J92cdo_hZ%O zjQ(YJO7n|WO*#(WrE3^U0vEFwGUt7$M{*NHFHxj$hmk}tWJ3*f5W128)%SH1!hT7T z9b^AVEd?MOAsY(zPxV6J&?I>vfjy%Bd@1}xYUMnU>I5)NqN|C!ZRBi z>)T=2vaVV?*n}zf6Wuh@SY=#fywX^th}n@fX^c`g$XB#57h?+DI6%dqnNSKUvSfd3 z(!LvV0m;G%Q!o_4fn>U56DyD;bRIZBP2)Ghw}`;m|!Py7T1JS;41@HEfW zEx$FO&fk8wGUH0%;T$q##iuu7uFg$a$TL!p9Q)SE5mcU)Z3Nj0&=I1_Inxb6`1g^OOT3z1zZu3T*pV7{Dp!N0s z&)AI5i#3MAueZ-?=p+SRXL!*m`nUp`@_}y2e?NY#7N4#V*9?Kc&xssG&0}}Au&&Gd zEfwYD0w2JHJg*vs!|S#zmOcd~pHR_kLqB zBl@XrE2Uvy5{ZsD(bbi0RR&h<4dvtthaA*Wn5nQpArk=#QaGu|2%#c99SDzq!rE)Z zG9;hZFt9~LgBa_SSXVaU!jqLl?!}2N#tZ&ji6;D%XK?tSX?eTK!+H58v74Vezw$H!knExvMFOH8Jc?+)ZvX*Ik92U>@yt3|S=0~GP z&~ZxG{fyV< zJU=U;5JQH1h12Bmd_%#{p?_wa(fM^^e;GN&eaEbSNy)-jTZIpN3Yqzj56fKN^{SeW zVPg2KvJwtRn3M!6@6}gUYzR(_8S#y+MH+v@7_P*8&5KZfQe;`MR&q{?2zVTA`nsAg zgf0q9r(IeKyZFwlD}JLwsarGI>UNcyBTsrz_*oSnQb9>AdzPD)e9j(ldLeb62%1&! zM>lT@*Ss29!K(pKFTreX{8U3VI^g0=L~+vWh-HO!iss{R*PDp%Q%#jDA#!RqQ~G*~ zt&mGo(_Wd%9iyE-dW#Rop2eyUtZQXpLhL`+{Edl^7rZ1&y{Z8zy01_yZ+I$6(SKGI zoRJof0WKos=wYLFZbXTQ6e=?pZ;GTwoEa0-^m1F@+d}}T?tPB6{?X>AY|5BNZc)mt zSkd!)?7LcAR#U~1O&#LO&>v2Xd5a#*bYS^UKNejas|GWf+>$qn2N z$yf8A0>czn8owUCDmAV(h%3S>>W&d(*JpVv1g6X5;gZ)E%R;NfT=fGApZ*BCa^2s< zN5x{b6^)U+%cps+e8OchuVKX~CwM^A4ZOe(Oe*AegFqA~9L)21VyXT#F==9eB&!^c zP_T662|10ySURoIT)&1K(d39VLxm2!{)2ON2vqg}v8E0p+2Q6&;=VF{)ram!Xw!L;D>J;_22>mekL((=6xa7hjri6c2*U?m>?BLi73_$oYeBlbH(g9 zgrLj6!@*Na2N|N?dfEE?iT)F1-*b=}L!fE;iQ@R`nU-4J(cMCTaJBtdF?Cwog4m`r z1)M$q3&%OKj5U+48dVh%9mCsf7}4XpZ{6vd|4&5Z2ro@3y?GNgqUXpp!?SjH1I|AU z>WeEA(huEn)$JYfHwv^y{6l@l26oI_Jo%GD_M-Ah{PB%9)mLt$(e`KHHRb4OZT z-#nGawddnmyOY=bqUU=c85zA~h!61Dm2_?6CZ11-t<3bVwI9@<(ivVBt*&bveVUVr z>N@X}NYGODJIGAxyE%*Il0H;XT=ta!m1fv3VNjuB2$4pl`uL3LjnhU(2_z`iGmr3k z*loLS98l6}ch1`nW*Bky#d4%zlb5vXhOso}SOJq=9&ULSZFKA&~v z1`0WQnNn;^OGBK-s!pEP7yMJippj-Ozc!Nb;mG4G!C!E8zK(nkPrFkl(*Dx*>|00K z@-0}pQI1gDp1!~`mncsu1E}e!)Y>r)3tN_Iv|{Pf2G-fnJp+Bp7qoMC?n;3g=1>K}ienWf#* z;k#ZA0pK!bS|%}Eq+!5kg2cVHb~D_PtjzX9-1pY{KHyY~@)ueTQm_rCnt-LC&$?Y|3vCQJF{$nmch#zaZ@KOB$_Kbm z8S3%oPMTY*dV|@XQ`pw@<)GkPBmz2$OD# zZ-PZnvyG?k{*oC9z!tLaH%`2QN;gImM-8VYFUW54DA`^lTU%RM%loXk?W*T~<0-Q)OoF><$u(qy1(%B(?6%CgWRlMWL5cU>$^{81 z?I@<$a=rd&Klz(?!E@)U!9a3A!-h>Mc5LTjknOv|-`(dz_M3Uw2Uievz&P6NMc**t zXf!J`OHdh>C;g}oZ=SI8+M}Ve@z5}@uP~O3X*4-P%y~9Aip6AWOr%bQgd*3ie&B4N zrbbY2E z%M7VEUa%|_*qTOAIe1{-TCF>GYmzleke{9GDNLdjZY66a#qhU~8>B>}UX7U%44~Ut zp2R0W4@f`W6h%lU=W^J))8PTW_KSjiu?qC!bm)wwV)-YigxtSUPJFKOe;&7Ep$ON{ zwtLhVOh}`5(4Y=ngFH3|5UZdVP-ShsFy4Fv_ew$_QiO@5Q5LX6{t~I%ul}QD#k{0I z^GEf8`KL$FVGVj`FbOS%56h(czAE+F5sEEe4Q8T@Yv>f&0fFP9ImUc4+$ zpfV%>{XXSXCJ$JdzXNTqUUzqVK}r6#jri{*7Wy)Y@ii$dFzjl@(p?#ahon{#kg`l@ zX!Gi~9dE8*xrkzT$)mupaf$GjA9PIdCuMtVbfLS{?@<(oOnTl(P<*T1P7j^E1qWqY z=Ckl$cB?yqcCJl1Skam0Md}PPmjsxV4Y=fR%(uKhPl7PfqrBUE@=dsNr-hNYkG3`oF5`Pe)Kkn+#%on z6a6XCYzEMg7HF~(Gmm`oo2%Ls7t@P3HAuxJh|bSd&GrE|)d{wsK`AuZjdbo@uiNG4 z8N>SBsoW>!LehJguYMqn>wbTm5mrmE|@ z_kK?GuJ3VBner`bURiBQM{|$e9L+5g-VGKqiIO;Ns=v0FIkl5klVsf*PPE;a8|L2yZCsSCF+aB?sWj>5CT$R!pOr*Q5h znPb0jg?MV3s-BR{Dp#hui0NF~6Vn70n|;3LK8AR)sn=J`S`~?-}cs-wVCLn?#+OuI|C&UV!W4s3NS_cSl0&y((rU4|+SN zhL1zTkUIPrr*OPEo@@PFGMcZZ(c?v*6Bm(mi%8^RM-$o-rWUyZPKbmuCugopG*lo| zCvvhXvh!U!`RL3lH-_WdF4hQ`)=1Vd2LNQHQcgp^aSS3p=YfO~wm5-;q=TBb)V>#o z9Y=qC4fLjjd0D!6*p*Kq)64vw5Ko55ftn&!1Q8X$XhD0Piu3 zm@ie9x=nR)3ANr4bNW*?nCt}0jUt?V&Ij`>>EXQWt6_DJn-~-qX?BH$1jX}{Jrif7E24Ym{A{Pjy5d<8&RdW+p zmz$;4q8_E8Z)bg!0&sP!$nB-bXKBV*{{|kej1ukwP%r3z zOSQQ@vq_Z2reLTgC8@`uDdm$G)nh}%K}GgpIvR}hVkZaA#nn7y39bWOxp9;UtP7wG z{9iGm{M~gzNs8P5RGw#_#8>Tpx=SYiRHID(?5vw-&1_nz4<8YfM^th6HtSI<>B$-G z-Gata;sbx?8!`opBHb(r9G4>-Za3l3?BzoPlpAsOe;tP(0Lz9v7O(F|tTrcGfw{YN!LUcHKDP2I=Pgd<+ZYuWD>qH1x(5(+)U; zDWRY2v_^f3r2NaB7h1HhL#UYrnL|MG(#=T?vLqYYxU{@is_QtHniY5+OuGI7))VZ# z{)43)lO(a_<7-zU1 zCpWx=|B?3b*=zJ+)O+t__~8CFj4S7#@|%6qNY$mYt-!Q%@|@WtRg5et41_EhTQ%%E z+4hTbzWuS)*LmZ;f|+NE=>2GURj@@PTV4{33{R@&{Hg-j3;)NVp;45z)F+(!tZ6Av$Mq<3^uu4|5W)b!Io~rOabQ#%j!YNU@b`=mPq&JWML>VweIcvhq zt*+MY$ZXT5_dUO`J^B=0eb%hgeJT*Q|E)KR@R-IOVBWS4AsLqx5j3< z^u{jD0IL(F`+POfb?qc>VZpQWWlY!W9{`gP=VrRQw&y{PRk|RH_V11$ul4U2imM{; zYCa|i``?HZ;rrv4VlKZ)(CkUpsPjI{QHlmzRizyeI)5;Vr4CJOr))JN67c(N*S0FK z*5fp$=(VWeK?st^U)6r2SwiS~UqZ@w?|5u4^I#@mFHnQ&B53)Qdzu-u=)(m>S!3Kx zt491;nUI?Bz7t-~sYwZIqL1#+EO271=vdT*DG%+VOti2jX5+={eSpuSHP_AGtd2-V z=f?}YMJapkVsYi&P9qVZ8Twou@$*Cz2aDzp1Y+&D$_i{Z@#<}sL6b3N{H6#-3yH$Z zcA@mHMmrXC znXwrVu{yhaod?H93%vEPDO2_H)Rzu*78}OLWQ(PxA!#mC_pwvW_iU9SuNs=4d#sqAAM!uz>Y%CzX zPS#t9;^COfD4;FiwOOHg+wC}HTdI#o-ic4)_spj+*7?+TF+t*ww3<}D zNzK_f;(KI=qbW$FuL)~3L1<1h$!EYY+G7c&5LZmjmv3ihHL6&Q4t_NgeVUlU07U%Q zx`HD>n!BYG)mqvkt0DF=I}yrjcOrK-Np~ETJzX-88nqWZy%~QRNv3oxGz~r0bP7oX zYIx3sU7Yh6lOdtvcXDqhgvMWMsHwaE^XJ-n=xenPmrhE`{_#{!i5lVX?i^r^TXplM zzA)XERMZoZ%FhzvrW9LtWp<_{Aw27gU%orZX14n~Xl3YSdn6K?2y94sp9UMZRt|+} z;lAqeD*QOePA)}H6+H?3J1EGPiwq~~WxRJ76h@YicpB+4sqv@da>8M=)#!Dwfcg#y z)7EV-Yh&PB*Uha`EHX$V7X*?oJ-acG7O$mMU5>h(dN==VRmpvhNBZAYoS-TZZjm`( zHY5>d3R!K;nJo9Rbz{DAhglOAwO{U##4K-x&$k$(qu_|Dro8{!TBhiEusMH4=I!dd zv#@Xws;j0Y%9|#aG*7H3PysD;`Tn3zo79n}v54nvf&X{uxzkr{8h4hzIUUQcb!m&XvdHCTB8$7JB)*oN(VRCWh% zZ^4iTOsOZ%Qk^}!a0LJXmvW6{AV?;EhN-av7ZtXPz- zlr(j=Dm$$`YUGK&-=2LyaDtBI?*VWo!LRxj=fl%m&88#t*n`qY%zOA1F7>$)1Tn`^ zM$>-sc+9EEKRyQ)PenSlOkf^NdTs5uFE)+qmi{5l?hyrW89)+iao$}BI&1Lc79o%^u&pq?I zA!W}QeX&%V@d0o;C!eYM1Y8}!r*g_>QG$kjo1QAn%l2fEk^!bP%+DZPM6Z#+hXTpc z3$=4vb1Vto3ZP-fV>wO^*~<;q)B;T@3I0+xfx^20Z50i%Pl41uaY_HwneIJgnUSn+ zb9iojHgsFUo0SLKl$U!JY+XyzitS+C%`8?UW}wE;oKe@+_MbWrp~Si!;K6|sZ-piF z;s~z%!Hp#dZ^a2IhG>;Xv*vfY!DSW*(RuPzBW`U_fZg4#be^!_B6(2a7%A>lL1%Sj zw-IAKEzPfn=dA-_S{xDbB`a*d(*I~84q{`amhE-%tF%ft?_ni`Qf6;1cn0K*7TUR2 zk9Y2+h!>=aS^;r(fqynDi`oH=l)2aOlu`aP>Gj8#h;C1~)vllT zm%sfC;I3D$XOIau*;kLSXW6uj?qHt9e$UCOc&<&j9f2Vb5`G0sf)+_Cl@k9v4oizS zZ5QzXx6!$FA=MNh2-B&%iB7%YK2&|M6npa8rxj2c=2Sivl;UMi=1_~LQ%Nsr3XZ8R zRG?ks0$T3Ss_|HzeFfvwO(JTv*sThxgDAKJ{=(DOG+PpuvfCz%>ChXPlg`qG+^mb6 zrerFs(4ODAX(Cn83k}GllwU;#h}cQTPAX%KCes`ed#~PwzrbNz`!^O>OSXnrIkk+mN4QTiTYieQ4vIa>~* zMbPh}Mg@agA%@QPm7&!7f6V4=I2<{O6gD958lhbMEu8`cKFem3~ zGnGNF*J?Oi#mb7c0)x-P{%el>AuK-O4!9zMX0T|%&n9e3=y0@7S{ z4^`P%$KvF{frsxwlvIGxSlB>jW=k<6hh|faNIw}9&lv}$&Z1l8y$P6QjaHU8y<4b> zIT%DFCyh4hKVc_u5hz(s!cGWIM`u5cwL&h$D>?TYq%Uxw1`xx{2BHM(Qh zv!$2E`w=2S9Fq?jgN^iq#~cy(n}v^0+#JN790*pxUf2dF!n3i9`YclM9z%>nk%2CS>YN0d*8g!7LKFUVMv$zSXMpVQ;MkCop!bd&@ni9!FQgPtttt`o%btCSGjdK#S<@ckIlV*Kcs=X{#f`8FIp zlT|1bQKEOLidl7;!`;XzoO40OC41&z4u@Z9?rlB2?@3!+XtB1?W;MSB_7A1Y*lBcf zIyP0)vP|&`Z>xuXs9=Q0M?_KT}XsHVuwdJ_4`Zp!zL`Tt$u$oX!=>mBd({yW)dn-hI#)a;=dRC zezB-zZf9#7plr0w>;PQkj%T<9$v=U02c+#VH>;|dvrf1w3S>p7MRa=))|))K!W8%+ z0!q|hhDTO>&cWq$P;B#b=Edm>m?++>hz9KEGqZd%z~6TM+xRc(n3IF6 z>G}Qq2|OZq!015w@6)FzRbIGKC1+_xjUL)C)iC+>m^W_I`l88Y6fvtOz% zqJIsqA`)slKNE!z$~{u&eNCCs)y`3&6qBTE>K%;NMbuN9cOlJ32gVIlW zpWAE`uE3QXVJH}KnMr1|Z|n72`)-z8x(=}d0n|kWCl?{dNsm!3+`JG#dp-|jDwzFw zMb>>`ys0K?z1v&E+Cz5GfoU=reQJf^)rC^lumep~6?SO_W*)_pDV-o&KRk{YPcsus zdhBiRatQye2tMLjgT{f82%^5{A+aLEhK6G49<-7cb~Z}6BZNH7(&{$#qQA~!dpo2m z2DJYuEn1LaX3&kcU*g9!lVqh_ltnXWaW>UzcryUlzL(v0c|JE2O36PSoltcCn2TH0 zxz9gFsp4E!>$7@yRM6_#(X}A+Wz$fT9%7Ikvp5XPIj$7l4e1iQYm3z8aisQs>OMgU zb?+5SGy~JU3|&kbBz{HgdmdKc3jw@E0AtGwJwRK-xZQG|Q{r=df~okhzE3AYjqvdN zY}a%$Wj2Kw=6IN{c}PvKiIONkWYT~hGUJU@Qf~e($Iw{Z?vw9L0%AdqmQN?=+n^U z_TREWv;E;A9f|sSv0;!fTP7JRn3#`H?FLyFhdM3+TG?&oj22q$i=IyxiKqwYY(lFH|;|;}V z7E@1Y7oBWgw)dwEvrah_HK++4SfIeoXFmPCg2d>K1u9leo3CD`D5$ zx{s1Md(-_dY7e(x0wtL0iSY;4qdp$?%Na9zMxWxDo`k*`UR&v?I`cTXKnXT2muN{e zvCN1xaqS7Tvue!uw%xuXg(uM*Ttnu)bjVN#a#|DQb^F?Q2kDg`Xe`)bEJbvo@Otb{ zjAIogrYd(p#V!J)S2)g(>UCH$Y?Yakctp>H+nmApOdm1d7qT`izx4@U_6F0VtOgh~ zG@;6cWU2nWv=>9La zY~7sC-kNOO@1dM$AbJ&j-5Qy@$Bo{#Kr-(?MWKIo?(Kqw?I}i6pyK+(CQYbzK3opy z#HcAEv_o_q!&Xm->S%2Q&}Rk*Z|b?XG85$%n^WhfEk!WI4Pm4ffzVydE8?u-FRG+3 zabrX8z0hYS{h#lYn)#GBg(FbHZMg9~!qMe2_{Ng23oD!&~X@#oS`}Vx^3n=gs zdfcZ4;G+SmX$N2an-F$a$pzH2Mq#~$>Ceevuo?Y1 zi|r{VsFI_*y|Y0e zgq9njMa zqGq2jbeoX7^557Zjtzi|6b8;Ks4x@qqGAsv z^for`+WxG1Y$bFb1Gt2}N8Q(mc!s`KL2ZCF6Qh znU4D~IbCa=_WE+<^FqJLaAIfL58o?Cn@D05TCX!%U5BSir*mjgdcUoG7L|I-mGEmY z-cKJX! zbiM(=GFz{AZbg~rG~egQaQa@+dH!PvW{%H72vnBusg$mV(`TF>;-``XYt4(R3~YmR z_v>n3`_|A#9L@Y?iU&>3ZI^@uy2Q=l1in6{Vqr3g9Hq z?y(4O3nHA8ARo2;v)*&`L2RcE-^A{w~ zS4s|b%aZCK`&&@zbOmH-BSiL5iL|Utcbgjn#Qb-q9?>{EWV>8Lmtw-bp$7AHP-V~e z-d?gnUn_+hb$IjLL!J#=Qxm1)@<>-uQj3s1zmCy%!iu_ZK_nRy1`NL6_v}u3iK8+6T%dq% z4P$wmV(Z^DwLUZWk*6hAyv+ZcB}DkNmGsqf9e(`M^E#i>oyY_k!hC83@6i||7dU9Yc6`!qw>&D!OzUM3&$ENaPw@rJqTfE!W-ysUo6MF{nc zK%)w>yPrN)KZ!Zevs%xk&0XuE(FrzcmlTP{ml@OT1!_tc7H*eTKEnnF=I&Rs+0W$^ z=mD3jm@OWvJhu)S25*}tm}crARdsR>jjP$CJU;KeZvVXFS4yP{bC<6A{Im=ka3Vmn zI$@-+))Lwt{DWE5*;^Ju-79;Jyrs3N3YhNU`on*}!FT;GYM1bFjl}4&GRLPh-!T=U zZ|FwxqYyqV0b}N`O#y#y%txc^hsASW=BMYX_eBbof>_vcEa&E>8a60rf_ZAZoA{NQ ztc1+W`VgV?lWjp#mZu}$b;BOD|0jTt&v+v55M)fiQ(Nl|hiy)sIk@(aPpb*?2%Hn#6xDnDTh*{JXS2qkMi= zcHJ59n-1_km&1^EJ1e|aTP#z2WBC{(3aGr?9!0RdoDZ!g_Rdo9G;Fk9sZ6n}P3Q0( zp`vtBOcPp9G9K{u$6f;*L>bM3k830oJ%%HFKM!VsmG`q61c-KRJ$%!ZK`a?ty zzg3o%!$%CV5g@gNucV{@8E#=*!i@TcRaAA�<%uOjJLB#$Lb>KSI5s-+OX7S@}gi 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�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 U>rHR+50@4fl@=)#(((F#0Cy{r5&!@I diff --git a/public/assets/images/game-icons.psd b/public/assets/images/game-icons.psd index 0d0aee7afd23f9f07339e6e6e7b7739009e08f20..6d3439950ba357f90d1baddded2f7862b856b1a3 100644 GIT binary patch delta 12412 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 JaySyp{U3*!v6uh= diff --git a/public/data/dotlink.json b/public/data/dotlink.json new file mode 100644 index 0000000..6c39222 --- /dev/null +++ b/public/data/dotlink.json @@ -0,0 +1,39833 @@ +{ + "generatedAt": "2026-06-14T10:03:04.014Z", + "seed": 3497072613, + "count": 100, + "levels": [ + { + "level": 1, + "rows": 5, + "cols": 5, + "colors": 4, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 2 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 1, + "a": [ + 1, + 0 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 2, + "a": [ + 2, + 2 + ], + "b": [ + 1, + 3 + ] + }, + { + "color": 3, + "a": [ + 2, + 3 + ], + "b": [ + 3, + 3 + ] + } + ], + "solution": [ + [ + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ] + ], + [ + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ] + ], + [ + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ] + ] + ] + }, + { + "level": 2, + "rows": 5, + "cols": 5, + "colors": 4, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 1, + "a": [ + 1, + 3 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 2, + "a": [ + 2, + 4 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 3, + "a": [ + 2, + 0 + ], + "b": [ + 3, + 3 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ] + ], + [ + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ] + ] + ] + }, + { + "level": 3, + "rows": 5, + "cols": 5, + "colors": 4, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 4 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 1, + "a": [ + 0, + 3 + ], + "b": [ + 1, + 1 + ] + }, + { + "color": 2, + "a": [ + 1, + 2 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 3, + "a": [ + 4, + 1 + ], + "b": [ + 2, + 2 + ] + } + ], + "solution": [ + [ + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ] + ], + [ + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ] + ], + [ + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ] + ] + ] + }, + { + "level": 4, + "rows": 5, + "cols": 5, + "colors": 4, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 3 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 1, + "a": [ + 4, + 0 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 2, + "a": [ + 1, + 1 + ], + "b": [ + 0, + 3 + ] + }, + { + "color": 3, + "a": [ + 0, + 4 + ], + "b": [ + 1, + 3 + ] + } + ], + "solution": [ + [ + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ] + ], + [ + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ] + ], + [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ] + ] + ] + }, + { + "level": 5, + "rows": 5, + "cols": 5, + "colors": 4, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 1, + "a": [ + 4, + 3 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 2, + "a": [ + 0, + 4 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 3, + "a": [ + 2, + 2 + ], + "b": [ + 3, + 1 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ] + ], + [ + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ] + ], + [ + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ] + ], + [ + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ] + ] + }, + { + "level": 6, + "rows": 5, + "cols": 5, + "colors": 4, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 4 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 1, + "a": [ + 4, + 2 + ], + "b": [ + 1, + 1 + ] + }, + { + "color": 2, + "a": [ + 1, + 0 + ], + "b": [ + 1, + 3 + ] + }, + { + "color": 3, + "a": [ + 2, + 3 + ], + "b": [ + 3, + 1 + ] + } + ], + "solution": [ + [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ] + ], + [ + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ] + ], + [ + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ] + ] + ] + }, + { + "level": 7, + "rows": 5, + "cols": 5, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 0 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 1, + "a": [ + 4, + 2 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 2, + "a": [ + 2, + 2 + ], + "b": [ + 1, + 3 + ] + }, + { + "color": 3, + "a": [ + 1, + 4 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 4, + "a": [ + 0, + 0 + ], + "b": [ + 3, + 3 + ] + } + ], + "solution": [ + [ + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ] + ], + [ + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ] + ], + [ + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ] + ], + [ + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ] + ] + ] + }, + { + "level": 8, + "rows": 5, + "cols": 5, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 1 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 1, + "a": [ + 4, + 1 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 2, + "a": [ + 2, + 1 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 3, + "a": [ + 1, + 3 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 4, + "a": [ + 3, + 4 + ], + "b": [ + 2, + 2 + ] + } + ], + "solution": [ + [ + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ] + ], + [ + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ] + ] + ] + }, + { + "level": 9, + "rows": 5, + "cols": 5, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 0 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 1, + "a": [ + 1, + 1 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 2, + "a": [ + 3, + 2 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 3, + "a": [ + 1, + 3 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 4, + "a": [ + 4, + 1 + ], + "b": [ + 3, + 1 + ] + } + ], + "solution": [ + [ + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ] + ], + [ + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 1 + ], + [ + 3, + 1 + ] + ] + ] + }, + { + "level": 10, + "rows": 5, + "cols": 5, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 3 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 1, + "a": [ + 0, + 1 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 2, + "a": [ + 2, + 1 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 3, + "a": [ + 3, + 2 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 4, + "a": [ + 2, + 4 + ], + "b": [ + 1, + 1 + ] + } + ], + "solution": [ + [ + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + [ + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ] + ], + [ + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ] + ] + ] + }, + { + "level": 11, + "rows": 5, + "cols": 5, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 4 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 1, + "a": [ + 3, + 3 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 2, + "a": [ + 2, + 0 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 3, + "a": [ + 0, + 3 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 4, + "a": [ + 1, + 2 + ], + "b": [ + 3, + 1 + ] + } + ], + "solution": [ + [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ] + ], + [ + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ] + ] + ] + }, + { + "level": 12, + "rows": 5, + "cols": 5, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 0 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 1, + "a": [ + 4, + 2 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 2, + "a": [ + 1, + 4 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 3, + "a": [ + 3, + 2 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 4, + "a": [ + 1, + 1 + ], + "b": [ + 2, + 2 + ] + } + ], + "solution": [ + [ + [ + 4, + 0 + ], + [ + 4, + 1 + ] + ], + [ + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ] + ] + ] + }, + { + "level": 13, + "rows": 6, + "cols": 6, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 4 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 1, + "a": [ + 1, + 1 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 2, + "a": [ + 3, + 5 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 3, + "a": [ + 4, + 3 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 4, + "a": [ + 3, + 0 + ], + "b": [ + 4, + 1 + ] + } + ], + "solution": [ + [ + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ] + ], + [ + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ] + ] + ] + }, + { + "level": 14, + "rows": 6, + "cols": 6, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 1, + "a": [ + 1, + 3 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 2, + "a": [ + 4, + 0 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 3, + "a": [ + 4, + 5 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 4, + "a": [ + 3, + 4 + ], + "b": [ + 3, + 2 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ] + ], + [ + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ] + ], + [ + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ] + ], + [ + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ] + ] + ] + }, + { + "level": 15, + "rows": 6, + "cols": 6, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 3 + ], + "b": [ + 1, + 1 + ] + }, + { + "color": 1, + "a": [ + 1, + 0 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 2, + "a": [ + 3, + 2 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 3, + "a": [ + 4, + 1 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 4, + "a": [ + 5, + 4 + ], + "b": [ + 0, + 5 + ] + } + ], + "solution": [ + [ + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ] + ], + [ + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ], + [ + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ] + ], + [ + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ] + ] + ] + }, + { + "level": 16, + "rows": 6, + "cols": 6, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 2 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 1, + "a": [ + 1, + 1 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 2, + "a": [ + 4, + 0 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 3, + "a": [ + 3, + 4 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 4, + "a": [ + 0, + 5 + ], + "b": [ + 5, + 4 + ] + } + ], + "solution": [ + [ + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ] + ], + [ + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ] + ], + [ + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ] + ] + ] + }, + { + "level": 17, + "rows": 6, + "cols": 6, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 1 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 1, + "a": [ + 2, + 2 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 2, + "a": [ + 3, + 4 + ], + "b": [ + 1, + 5 + ] + }, + { + "color": 3, + "a": [ + 2, + 5 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 4, + "a": [ + 4, + 1 + ], + "b": [ + 3, + 0 + ] + } + ], + "solution": [ + [ + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ] + ], + [ + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ] + ], + [ + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ] + ], + [ + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ] + ] + }, + { + "level": 18, + "rows": 6, + "cols": 6, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 5 + ], + "b": [ + 0, + 3 + ] + }, + { + "color": 1, + "a": [ + 1, + 3 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 2, + "a": [ + 1, + 1 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 3, + "a": [ + 2, + 2 + ], + "b": [ + 5, + 1 + ] + }, + { + "color": 4, + "a": [ + 5, + 2 + ], + "b": [ + 3, + 4 + ] + } + ], + "solution": [ + [ + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ] + ], + [ + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ] + ], + [ + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ] + ] + ] + }, + { + "level": 19, + "rows": 6, + "cols": 6, + "colors": 5, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 3 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 1, + "a": [ + 4, + 2 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 2, + "a": [ + 2, + 0 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 3, + "a": [ + 5, + 3 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 4, + "a": [ + 3, + 5 + ], + "b": [ + 1, + 4 + ] + } + ], + "solution": [ + [ + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ] + ], + [ + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ] + ] + ] + }, + { + "level": 20, + "rows": 6, + "cols": 6, + "colors": 6, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 4 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 1, + "a": [ + 2, + 4 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 2, + "a": [ + 4, + 5 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 3, + "a": [ + 0, + 1 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 4, + "a": [ + 4, + 1 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 5, + "a": [ + 1, + 1 + ], + "b": [ + 1, + 4 + ] + } + ], + "solution": [ + [ + [ + 4, + 4 + ], + [ + 3, + 4 + ] + ], + [ + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ] + ], + [ + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ], + [ + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ] + ] + ] + }, + { + "level": 21, + "rows": 6, + "cols": 6, + "colors": 6, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 1, + "a": [ + 0, + 3 + ], + "b": [ + 1, + 5 + ] + }, + { + "color": 2, + "a": [ + 2, + 5 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 3, + "a": [ + 4, + 2 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 4, + "a": [ + 3, + 1 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 5, + "a": [ + 2, + 1 + ], + "b": [ + 5, + 0 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ] + ], + [ + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ] + ], + [ + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ] + ], + [ + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ] + ] + }, + { + "level": 22, + "rows": 6, + "cols": 6, + "colors": 6, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 4 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 1, + "a": [ + 1, + 5 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 2, + "a": [ + 2, + 0 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 3, + "a": [ + 1, + 3 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 4, + "a": [ + 3, + 3 + ], + "b": [ + 5, + 0 + ] + }, + { + "color": 5, + "a": [ + 5, + 1 + ], + "b": [ + 4, + 5 + ] + } + ], + "solution": [ + [ + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ] + ], + [ + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ] + ] + ] + }, + { + "level": 23, + "rows": 6, + "cols": 6, + "colors": 6, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 4 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 1, + "a": [ + 1, + 3 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 2, + "a": [ + 2, + 0 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 3, + "a": [ + 5, + 0 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 4, + "a": [ + 4, + 1 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 5, + "a": [ + 3, + 5 + ], + "b": [ + 1, + 4 + ] + } + ], + "solution": [ + [ + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ] + ], + [ + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ] + ] + ] + }, + { + "level": 24, + "rows": 6, + "cols": 6, + "colors": 6, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 4 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 1, + "a": [ + 3, + 5 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 2, + "a": [ + 1, + 4 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 3, + "a": [ + 1, + 1 + ], + "b": [ + 5, + 0 + ] + }, + { + "color": 4, + "a": [ + 5, + 1 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 5, + "a": [ + 3, + 3 + ], + "b": [ + 4, + 3 + ] + } + ], + "solution": [ + [ + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ] + ], + [ + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ] + ], + [ + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ] + ], + [ + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ] + ], + [ + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ] + ] + ] + }, + { + "level": 25, + "rows": 6, + "cols": 6, + "colors": 6, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 2 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 1, + "a": [ + 4, + 1 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 2, + "a": [ + 3, + 2 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 3, + "a": [ + 1, + 1 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 4, + "a": [ + 1, + 5 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 5, + "a": [ + 5, + 4 + ], + "b": [ + 4, + 5 + ] + } + ], + "solution": [ + [ + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ], + [ + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ] + ], + [ + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ], + [ + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ] + ] + ] + }, + { + "level": 26, + "rows": 6, + "cols": 6, + "colors": 6, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 2 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 1, + "a": [ + 3, + 4 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 2, + "a": [ + 4, + 5 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 3, + "a": [ + 1, + 3 + ], + "b": [ + 1, + 1 + ] + }, + { + "color": 4, + "a": [ + 0, + 1 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 5, + "a": [ + 3, + 1 + ], + "b": [ + 4, + 3 + ] + } + ], + "solution": [ + [ + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ] + ], + [ + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ] + ], + [ + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ] + ], + [ + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ] + ], + [ + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ] + ] + ] + }, + { + "level": 27, + "rows": 7, + "cols": 7, + "colors": 6, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 5 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 1, + "a": [ + 1, + 0 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 2, + "a": [ + 0, + 6 + ], + "b": [ + 4, + 6 + ] + }, + { + "color": 3, + "a": [ + 4, + 5 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 4, + "a": [ + 4, + 4 + ], + "b": [ + 6, + 3 + ] + }, + { + "color": 5, + "a": [ + 6, + 2 + ], + "b": [ + 4, + 0 + ] + } + ], + "solution": [ + [ + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ] + ], + [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ], + [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ] + ], + [ + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ] + ] + ] + }, + { + "level": 28, + "rows": 7, + "cols": 7, + "colors": 6, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 1 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 1, + "a": [ + 6, + 0 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 2, + "a": [ + 0, + 0 + ], + "b": [ + 0, + 3 + ] + }, + { + "color": 3, + "a": [ + 0, + 4 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 4, + "a": [ + 6, + 4 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 5, + "a": [ + 4, + 5 + ], + "b": [ + 4, + 4 + ] + } + ], + "solution": [ + [ + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ] + ], + [ + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ] + ], + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ] + ], + [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ] + ], + [ + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ] + ], + [ + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ] + ] + }, + { + "level": 29, + "rows": 7, + "cols": 7, + "colors": 6, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 4 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 1, + "a": [ + 3, + 1 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 2, + "a": [ + 5, + 1 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 3, + "a": [ + 6, + 3 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 4, + "a": [ + 1, + 6 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 5, + "a": [ + 3, + 5 + ], + "b": [ + 4, + 4 + ] + } + ], + "solution": [ + [ + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ] + ] + ] + }, + { + "level": 30, + "rows": 7, + "cols": 7, + "colors": 6, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 5 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 1, + "a": [ + 3, + 4 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 2, + "a": [ + 6, + 4 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 3, + "a": [ + 5, + 1 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 4, + "a": [ + 3, + 2 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 5, + "a": [ + 0, + 2 + ], + "b": [ + 5, + 3 + ] + } + ], + "solution": [ + [ + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ] + ], + [ + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ] + ] + ] + }, + { + "level": 31, + "rows": 7, + "cols": 7, + "colors": 6, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 6 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 1, + "a": [ + 6, + 6 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 2, + "a": [ + 1, + 4 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 3, + "a": [ + 4, + 4 + ], + "b": [ + 6, + 0 + ] + }, + { + "color": 4, + "a": [ + 5, + 0 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 5, + "a": [ + 1, + 0 + ], + "b": [ + 3, + 1 + ] + } + ], + "solution": [ + [ + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ] + ], + [ + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ] + ], + [ + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ] + ], + [ + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ] + ] + }, + { + "level": 32, + "rows": 7, + "cols": 7, + "colors": 6, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 6, + 4 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 1, + "a": [ + 6, + 1 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 2, + "a": [ + 0, + 1 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 3, + "a": [ + 1, + 6 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 4, + "a": [ + 3, + 6 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 5, + "a": [ + 4, + 4 + ], + "b": [ + 1, + 1 + ] + } + ], + "solution": [ + [ + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ] + ], + [ + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ] + ], + [ + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ] + ], + [ + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ] + ] + ] + }, + { + "level": 33, + "rows": 7, + "cols": 7, + "colors": 6, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 1 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 1, + "a": [ + 3, + 2 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 2, + "a": [ + 0, + 0 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 3, + "a": [ + 0, + 4 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 4, + "a": [ + 2, + 6 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 5, + "a": [ + 4, + 4 + ], + "b": [ + 5, + 5 + ] + } + ], + "solution": [ + [ + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ] + ], + [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ] + ] + ] + }, + { + "level": 34, + "rows": 7, + "cols": 7, + "colors": 7, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 6, + 4 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 1, + "a": [ + 3, + 4 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 2, + "a": [ + 2, + 1 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 3, + "a": [ + 6, + 2 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 4, + "a": [ + 0, + 0 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 5, + "a": [ + 1, + 5 + ], + "b": [ + 6, + 6 + ] + }, + { + "color": 6, + "a": [ + 6, + 5 + ], + "b": [ + 1, + 3 + ] + } + ], + "solution": [ + [ + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ] + ], + [ + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ] + ], + [ + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ] + ], + [ + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ] + ], + [ + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ] + ] + ] + }, + { + "level": 35, + "rows": 7, + "cols": 7, + "colors": 7, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 2 + ], + "b": [ + 4, + 6 + ] + }, + { + "color": 1, + "a": [ + 5, + 6 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 2, + "a": [ + 5, + 2 + ], + "b": [ + 6, + 0 + ] + }, + { + "color": 3, + "a": [ + 5, + 0 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 4, + "a": [ + 4, + 2 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 5, + "a": [ + 1, + 0 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 6, + "a": [ + 3, + 5 + ], + "b": [ + 5, + 5 + ] + } + ], + "solution": [ + [ + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ], + [ + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ] + ], + [ + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ] + ], + [ + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ] + ] + ] + }, + { + "level": 36, + "rows": 7, + "cols": 7, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 1 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 1, + "a": [ + 6, + 1 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 2, + "a": [ + 3, + 0 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 3, + "a": [ + 1, + 2 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 4, + "a": [ + 4, + 3 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 5, + "a": [ + 3, + 5 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 6, + "a": [ + 1, + 6 + ], + "b": [ + 4, + 6 + ] + } + ], + "solution": [ + [ + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ] + ], + [ + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ] + ], + [ + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ] + ], + [ + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ] + ] + ] + }, + { + "level": 37, + "rows": 7, + "cols": 7, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 2 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 1, + "a": [ + 2, + 0 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 2, + "a": [ + 0, + 2 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 3, + "a": [ + 2, + 4 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 4, + "a": [ + 4, + 5 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 5, + "a": [ + 4, + 0 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 6, + "a": [ + 6, + 3 + ], + "b": [ + 3, + 5 + ] + } + ], + "solution": [ + [ + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ] + ], + [ + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ] + ], + [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ] + ], + [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ] + ] + ] + }, + { + "level": 38, + "rows": 7, + "cols": 7, + "colors": 7, + "unique": true, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 2 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 1, + "a": [ + 4, + 3 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 2, + "a": [ + 1, + 3 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 3, + "a": [ + 6, + 6 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 4, + "a": [ + 4, + 4 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 5, + "a": [ + 2, + 0 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 6, + "a": [ + 0, + 2 + ], + "b": [ + 1, + 5 + ] + } + ], + "solution": [ + [ + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ] + ], + [ + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ] + ], + [ + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ] + ] + ] + }, + { + "level": 39, + "rows": 7, + "cols": 7, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 0 + ], + "b": [ + 3, + 5 + ] + }, + { + "color": 1, + "a": [ + 2, + 5 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 2, + "a": [ + 0, + 0 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 3, + "a": [ + 1, + 6 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 4, + "a": [ + 5, + 3 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 5, + "a": [ + 4, + 0 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 6, + "a": [ + 6, + 3 + ], + "b": [ + 6, + 6 + ] + } + ], + "solution": [ + [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ] + ], + [ + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ] + ], + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ] + ], + [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ] + ] + ] + }, + { + "level": 40, + "rows": 7, + "cols": 7, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 5, + 1 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 1, + "a": [ + 5, + 2 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 2, + "a": [ + 1, + 1 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 3, + "a": [ + 0, + 3 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 4, + "a": [ + 2, + 5 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 5, + "a": [ + 6, + 4 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 6, + "a": [ + 4, + 5 + ], + "b": [ + 2, + 4 + ] + } + ], + "solution": [ + [ + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ] + ], + [ + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ] + ], + [ + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ] + ], + [ + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ] + ], + [ + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ] + ] + ] + }, + { + "level": 41, + "rows": 8, + "cols": 8, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 6, + 0 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 1, + "a": [ + 3, + 1 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 2, + "a": [ + 2, + 6 + ], + "b": [ + 6, + 6 + ] + }, + { + "color": 3, + "a": [ + 5, + 6 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 4, + "a": [ + 0, + 7 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 5, + "a": [ + 0, + 4 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 6, + "a": [ + 2, + 3 + ], + "b": [ + 6, + 1 + ] + } + ], + "solution": [ + [ + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ] + ], + [ + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ] + ], + [ + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ] + ], + [ + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ] + ], + [ + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ] + ] + ] + }, + { + "level": 42, + "rows": 8, + "cols": 8, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 4 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 1, + "a": [ + 5, + 5 + ], + "b": [ + 4, + 7 + ] + }, + { + "color": 2, + "a": [ + 3, + 7 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 3, + "a": [ + 0, + 6 + ], + "b": [ + 0, + 3 + ] + }, + { + "color": 4, + "a": [ + 0, + 2 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 5, + "a": [ + 5, + 0 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 6, + "a": [ + 3, + 3 + ], + "b": [ + 1, + 6 + ] + } + ], + "solution": [ + [ + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ] + ], + [ + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ] + ], + [ + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ] + ], + [ + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ] + ] + ] + }, + { + "level": 43, + "rows": 8, + "cols": 8, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 5, + 1 + ], + "b": [ + 7, + 1 + ] + }, + { + "color": 1, + "a": [ + 6, + 1 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 2, + "a": [ + 7, + 6 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 3, + "a": [ + 0, + 4 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 4, + "a": [ + 0, + 0 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 5, + "a": [ + 2, + 4 + ], + "b": [ + 1, + 6 + ] + }, + { + "color": 6, + "a": [ + 2, + 6 + ], + "b": [ + 5, + 2 + ] + } + ], + "solution": [ + [ + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ] + ], + [ + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ] + ], + [ + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ] + ], + [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ] + ], + [ + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ] + ], + [ + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ] + ] + }, + { + "level": 44, + "rows": 8, + "cols": 8, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 5, + 1 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 1, + "a": [ + 6, + 1 + ], + "b": [ + 6, + 6 + ] + }, + { + "color": 2, + "a": [ + 6, + 5 + ], + "b": [ + 4, + 6 + ] + }, + { + "color": 3, + "a": [ + 4, + 5 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 4, + "a": [ + 0, + 4 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 5, + "a": [ + 2, + 2 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 6, + "a": [ + 4, + 3 + ], + "b": [ + 7, + 0 + ] + } + ], + "solution": [ + [ + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ] + ], + [ + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ] + ], + [ + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ] + ], + [ + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ] + ], + [ + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ], + [ + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ] + ] + ] + }, + { + "level": 45, + "rows": 8, + "cols": 8, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 5 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 1, + "a": [ + 2, + 5 + ], + "b": [ + 6, + 7 + ] + }, + { + "color": 2, + "a": [ + 7, + 7 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 3, + "a": [ + 4, + 2 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 4, + "a": [ + 6, + 1 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 5, + "a": [ + 1, + 0 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 6, + "a": [ + 1, + 7 + ], + "b": [ + 3, + 6 + ] + } + ], + "solution": [ + [ + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ] + ], + [ + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ], + [ + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ] + ] + ] + }, + { + "level": 46, + "rows": 8, + "cols": 8, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 0 + ], + "b": [ + 5, + 1 + ] + }, + { + "color": 1, + "a": [ + 5, + 2 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 2, + "a": [ + 7, + 6 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 3, + "a": [ + 3, + 3 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 4, + "a": [ + 2, + 5 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 5, + "a": [ + 0, + 6 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 6, + "a": [ + 1, + 3 + ], + "b": [ + 3, + 2 + ] + } + ], + "solution": [ + [ + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ] + ], + [ + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ] + ], + [ + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ] + ], + [ + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ] + ], + [ + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ] + ] + ] + }, + { + "level": 47, + "rows": 8, + "cols": 8, + "colors": 7, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 4 + ], + "b": [ + 1, + 3 + ] + }, + { + "color": 1, + "a": [ + 0, + 3 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 2, + "a": [ + 2, + 3 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 3, + "a": [ + 0, + 7 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 4, + "a": [ + 5, + 2 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 5, + "a": [ + 5, + 0 + ], + "b": [ + 7, + 3 + ] + }, + { + "color": 6, + "a": [ + 6, + 3 + ], + "b": [ + 7, + 6 + ] + } + ], + "solution": [ + [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ] + ], + [ + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ] + ], + [ + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ] + ], + [ + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ] + ] + ] + }, + { + "level": 48, + "rows": 8, + "cols": 8, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 4 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 1, + "a": [ + 1, + 1 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 2, + "a": [ + 0, + 0 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 3, + "a": [ + 6, + 0 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 4, + "a": [ + 3, + 3 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 5, + "a": [ + 6, + 6 + ], + "b": [ + 5, + 7 + ] + }, + { + "color": 6, + "a": [ + 4, + 7 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 7, + "a": [ + 1, + 6 + ], + "b": [ + 2, + 5 + ] + } + ], + "solution": [ + [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ] + ], + [ + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ] + ], + [ + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ] + ], + [ + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ] + ] + ] + }, + { + "level": 49, + "rows": 8, + "cols": 8, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 2 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 1, + "a": [ + 0, + 6 + ], + "b": [ + 2, + 7 + ] + }, + { + "color": 2, + "a": [ + 3, + 7 + ], + "b": [ + 5, + 7 + ] + }, + { + "color": 3, + "a": [ + 6, + 7 + ], + "b": [ + 4, + 6 + ] + }, + { + "color": 4, + "a": [ + 4, + 5 + ], + "b": [ + 7, + 2 + ] + }, + { + "color": 5, + "a": [ + 7, + 1 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 6, + "a": [ + 2, + 0 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 7, + "a": [ + 4, + 2 + ], + "b": [ + 3, + 6 + ] + } + ], + "solution": [ + [ + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ] + ], + [ + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ] + ], + [ + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ] + ], + [ + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ] + ], + [ + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ] + ], + [ + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ] + ], + [ + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ] + ] + ] + }, + { + "level": 50, + "rows": 8, + "cols": 8, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 1 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 1, + "a": [ + 4, + 4 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 2, + "a": [ + 5, + 1 + ], + "b": [ + 7, + 1 + ] + }, + { + "color": 3, + "a": [ + 7, + 2 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 4, + "a": [ + 4, + 6 + ], + "b": [ + 7, + 7 + ] + }, + { + "color": 5, + "a": [ + 6, + 7 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 6, + "a": [ + 0, + 5 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 7, + "a": [ + 1, + 0 + ], + "b": [ + 4, + 1 + ] + } + ], + "solution": [ + [ + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ] + ], + [ + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ] + ], + [ + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ] + ], + [ + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ] + ], + [ + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ] + ], + [ + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ] + ] + ] + }, + { + "level": 51, + "rows": 8, + "cols": 8, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 6 + ], + "b": [ + 6, + 7 + ] + }, + { + "color": 1, + "a": [ + 7, + 7 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 2, + "a": [ + 5, + 5 + ], + "b": [ + 7, + 2 + ] + }, + { + "color": 3, + "a": [ + 7, + 1 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 4, + "a": [ + 5, + 1 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 5, + "a": [ + 3, + 1 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 6, + "a": [ + 0, + 1 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 7, + "a": [ + 1, + 5 + ], + "b": [ + 5, + 2 + ] + } + ], + "solution": [ + [ + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ] + ], + [ + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ] + ], + [ + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ] + ], + [ + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ] + ], + [ + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ] + ], + [ + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ] + ] + ] + }, + { + "level": 52, + "rows": 8, + "cols": 8, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 4 + ], + "b": [ + 5, + 7 + ] + }, + { + "color": 1, + "a": [ + 5, + 6 + ], + "b": [ + 7, + 6 + ] + }, + { + "color": 2, + "a": [ + 7, + 5 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 3, + "a": [ + 7, + 2 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 4, + "a": [ + 3, + 2 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 5, + "a": [ + 0, + 0 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 6, + "a": [ + 1, + 7 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 7, + "a": [ + 2, + 4 + ], + "b": [ + 6, + 1 + ] + } + ], + "solution": [ + [ + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ] + ], + [ + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ] + ], + [ + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ] + ], + [ + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ] + ], + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ], + [ + [ + 1, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ] + ], + [ + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ] + ] + ] + }, + { + "level": 53, + "rows": 8, + "cols": 8, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 0 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 1, + "a": [ + 0, + 3 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 2, + "a": [ + 1, + 3 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 3, + "a": [ + 3, + 1 + ], + "b": [ + 7, + 1 + ] + }, + { + "color": 4, + "a": [ + 7, + 2 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 5, + "a": [ + 6, + 4 + ], + "b": [ + 4, + 7 + ] + }, + { + "color": 6, + "a": [ + 4, + 6 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 7, + "a": [ + 4, + 2 + ], + "b": [ + 4, + 1 + ] + } + ], + "solution": [ + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ] + ], + [ + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ] + ], + [ + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ] + ], + [ + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ] + ], + [ + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ] + ] + ] + }, + { + "level": 54, + "rows": 8, + "cols": 8, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 6, + 4 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 1, + "a": [ + 3, + 2 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 2, + "a": [ + 5, + 1 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 3, + "a": [ + 6, + 2 + ], + "b": [ + 3, + 7 + ] + }, + { + "color": 4, + "a": [ + 2, + 7 + ], + "b": [ + 3, + 6 + ] + }, + { + "color": 5, + "a": [ + 4, + 6 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 6, + "a": [ + 2, + 5 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 7, + "a": [ + 0, + 3 + ], + "b": [ + 1, + 4 + ] + } + ], + "solution": [ + [ + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ] + ], + [ + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ] + ], + [ + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ] + ], + [ + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ] + ] + ] + }, + { + "level": 55, + "rows": 9, + "cols": 9, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 7 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 1, + "a": [ + 4, + 3 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 2, + "a": [ + 3, + 4 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 3, + "a": [ + 2, + 7 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 4, + "a": [ + 1, + 2 + ], + "b": [ + 1, + 1 + ] + }, + { + "color": 5, + "a": [ + 2, + 1 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 6, + "a": [ + 7, + 2 + ], + "b": [ + 7, + 8 + ] + }, + { + "color": 7, + "a": [ + 6, + 8 + ], + "b": [ + 2, + 6 + ] + } + ], + "solution": [ + [ + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ] + ], + [ + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ] + ], + [ + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ] + ], + [ + [ + 2, + 7 + ], + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ] + ], + [ + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ] + ], + [ + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ] + ], + [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ] + ], + [ + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ] + ] + ] + }, + { + "level": 56, + "rows": 9, + "cols": 9, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 1, + "a": [ + 0, + 5 + ], + "b": [ + 4, + 8 + ] + }, + { + "color": 2, + "a": [ + 4, + 7 + ], + "b": [ + 8, + 5 + ] + }, + { + "color": 3, + "a": [ + 8, + 4 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 4, + "a": [ + 2, + 0 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 5, + "a": [ + 4, + 3 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 6, + "a": [ + 2, + 7 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 7, + "a": [ + 6, + 6 + ], + "b": [ + 7, + 1 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ] + ], + [ + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ] + ], + [ + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ], + [ + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ] + ] + ] + }, + { + "level": 57, + "rows": 9, + "cols": 9, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 7 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 1, + "a": [ + 5, + 7 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 2, + "a": [ + 1, + 8 + ], + "b": [ + 4, + 7 + ] + }, + { + "color": 3, + "a": [ + 4, + 6 + ], + "b": [ + 6, + 4 + ] + }, + { + "color": 4, + "a": [ + 7, + 4 + ], + "b": [ + 7, + 1 + ] + }, + { + "color": 5, + "a": [ + 6, + 1 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 6, + "a": [ + 5, + 3 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 7, + "a": [ + 0, + 1 + ], + "b": [ + 2, + 2 + ] + } + ], + "solution": [ + [ + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ] + ], + [ + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ] + ], + [ + [ + 1, + 8 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ] + ], + [ + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ] + ], + [ + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ] + ], + [ + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ] + ] + ] + }, + { + "level": 58, + "rows": 9, + "cols": 9, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 7 + ], + "b": [ + 8, + 8 + ] + }, + { + "color": 1, + "a": [ + 8, + 7 + ], + "b": [ + 6, + 4 + ] + }, + { + "color": 2, + "a": [ + 6, + 3 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 3, + "a": [ + 6, + 0 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 4, + "a": [ + 3, + 1 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 5, + "a": [ + 0, + 3 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 6, + "a": [ + 2, + 2 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 7, + "a": [ + 2, + 7 + ], + "b": [ + 5, + 5 + ] + } + ], + "solution": [ + [ + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ], + [ + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ] + ], + [ + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ] + ], + [ + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ] + ], + [ + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ] + ], + [ + [ + 2, + 7 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ] + ] + ] + }, + { + "level": 59, + "rows": 9, + "cols": 9, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 2 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 1, + "a": [ + 2, + 0 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 2, + "a": [ + 0, + 2 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 3, + "a": [ + 0, + 4 + ], + "b": [ + 3, + 7 + ] + }, + { + "color": 4, + "a": [ + 2, + 7 + ], + "b": [ + 6, + 7 + ] + }, + { + "color": 5, + "a": [ + 6, + 6 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 6, + "a": [ + 8, + 4 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 7, + "a": [ + 7, + 0 + ], + "b": [ + 7, + 3 + ] + } + ], + "solution": [ + [ + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ] + ], + [ + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ] + ], + [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ] + ], + [ + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ] + ], + [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ] + ], + [ + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ] + ] + ] + }, + { + "level": 60, + "rows": 9, + "cols": 9, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 7 + ], + "b": [ + 6, + 3 + ] + }, + { + "color": 1, + "a": [ + 6, + 4 + ], + "b": [ + 3, + 8 + ] + }, + { + "color": 2, + "a": [ + 2, + 8 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 3, + "a": [ + 2, + 1 + ], + "b": [ + 1, + 5 + ] + }, + { + "color": 4, + "a": [ + 1, + 6 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 5, + "a": [ + 4, + 2 + ], + "b": [ + 7, + 2 + ] + }, + { + "color": 6, + "a": [ + 8, + 2 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 7, + "a": [ + 2, + 0 + ], + "b": [ + 0, + 0 + ] + } + ], + "solution": [ + [ + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ] + ], + [ + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ] + ], + [ + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ] + ], + [ + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ] + ], + [ + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ] + ], + [ + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ] + ] + ] + }, + { + "level": 61, + "rows": 9, + "cols": 9, + "colors": 8, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 8, + 8 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 1, + "a": [ + 0, + 5 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 2, + "a": [ + 2, + 3 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 3, + "a": [ + 2, + 7 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 4, + "a": [ + 4, + 6 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 5, + "a": [ + 7, + 6 + ], + "b": [ + 8, + 1 + ] + }, + { + "color": 6, + "a": [ + 8, + 0 + ], + "b": [ + 5, + 0 + ] + }, + { + "color": 7, + "a": [ + 5, + 1 + ], + "b": [ + 4, + 2 + ] + } + ], + "solution": [ + [ + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ] + ], + [ + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ] + ], + [ + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ] + ], + [ + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ] + ], + [ + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ] + ], + [ + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ] + ] + ] + }, + { + "level": 62, + "rows": 9, + "cols": 9, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 4 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 1, + "a": [ + 0, + 8 + ], + "b": [ + 3, + 6 + ] + }, + { + "color": 2, + "a": [ + 3, + 7 + ], + "b": [ + 6, + 6 + ] + }, + { + "color": 3, + "a": [ + 5, + 6 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 4, + "a": [ + 6, + 5 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 5, + "a": [ + 7, + 5 + ], + "b": [ + 7, + 0 + ] + }, + { + "color": 6, + "a": [ + 6, + 0 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 7, + "a": [ + 3, + 3 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 8, + "a": [ + 0, + 0 + ], + "b": [ + 2, + 2 + ] + } + ], + "solution": [ + [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ] + ], + [ + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ] + ], + [ + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 6, + 6 + ] + ], + [ + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ] + ], + [ + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ] + ], + [ + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ] + ], + [ + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ] + ] + ] + }, + { + "level": 63, + "rows": 9, + "cols": 9, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 7 + ], + "b": [ + 2, + 8 + ] + }, + { + "color": 1, + "a": [ + 2, + 7 + ], + "b": [ + 6, + 8 + ] + }, + { + "color": 2, + "a": [ + 7, + 8 + ], + "b": [ + 5, + 7 + ] + }, + { + "color": 3, + "a": [ + 4, + 7 + ], + "b": [ + 8, + 6 + ] + }, + { + "color": 4, + "a": [ + 8, + 5 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 5, + "a": [ + 6, + 3 + ], + "b": [ + 5, + 0 + ] + }, + { + "color": 6, + "a": [ + 4, + 0 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 7, + "a": [ + 5, + 1 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 8, + "a": [ + 1, + 2 + ], + "b": [ + 1, + 5 + ] + } + ], + "solution": [ + [ + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ] + ], + [ + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ] + ], + [ + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ] + ], + [ + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ] + ], + [ + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ] + ], + [ + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ] + ], + [ + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ] + ] + ] + }, + { + "level": 64, + "rows": 9, + "cols": 9, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 0 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 1, + "a": [ + 7, + 1 + ], + "b": [ + 8, + 4 + ] + }, + { + "color": 2, + "a": [ + 7, + 4 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 3, + "a": [ + 5, + 4 + ], + "b": [ + 3, + 6 + ] + }, + { + "color": 4, + "a": [ + 3, + 5 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 5, + "a": [ + 0, + 2 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 6, + "a": [ + 0, + 7 + ], + "b": [ + 2, + 8 + ] + }, + { + "color": 7, + "a": [ + 3, + 8 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 8, + "a": [ + 7, + 5 + ], + "b": [ + 6, + 6 + ] + } + ], + "solution": [ + [ + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ] + ], + [ + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ], + [ + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ] + ], + [ + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ] + ], + [ + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ], + [ + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ] + ], + [ + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 2, + 8 + ] + ], + [ + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ], + [ + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 6, + 6 + ] + ] + ] + }, + { + "level": 65, + "rows": 9, + "cols": 9, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 8, + 0 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 1, + "a": [ + 5, + 1 + ], + "b": [ + 0, + 1 + ] + }, + { + "color": 2, + "a": [ + 1, + 1 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 3, + "a": [ + 1, + 2 + ], + "b": [ + 1, + 5 + ] + }, + { + "color": 4, + "a": [ + 2, + 5 + ], + "b": [ + 6, + 4 + ] + }, + { + "color": 5, + "a": [ + 5, + 4 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 6, + "a": [ + 8, + 4 + ], + "b": [ + 3, + 8 + ] + }, + { + "color": 7, + "a": [ + 2, + 8 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 8, + "a": [ + 1, + 6 + ], + "b": [ + 3, + 5 + ] + } + ], + "solution": [ + [ + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ] + ], + [ + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ] + ], + [ + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ] + ], + [ + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ] + ], + [ + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ] + ] + ] + }, + { + "level": 66, + "rows": 9, + "cols": 9, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 7 + ], + "b": [ + 5, + 7 + ] + }, + { + "color": 1, + "a": [ + 5, + 8 + ], + "b": [ + 1, + 8 + ] + }, + { + "color": 2, + "a": [ + 0, + 8 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 3, + "a": [ + 1, + 0 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 4, + "a": [ + 1, + 3 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 5, + "a": [ + 6, + 4 + ], + "b": [ + 7, + 8 + ] + }, + { + "color": 6, + "a": [ + 8, + 8 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 7, + "a": [ + 5, + 2 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 8, + "a": [ + 7, + 0 + ], + "b": [ + 5, + 1 + ] + } + ], + "solution": [ + [ + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ] + ], + [ + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ] + ], + [ + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ] + ], + [ + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ] + ], + [ + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ] + ], + [ + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ] + ] + ] + }, + { + "level": 67, + "rows": 9, + "cols": 9, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 2, + 2 + ] + }, + { + "color": 1, + "a": [ + 3, + 2 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 2, + "a": [ + 5, + 7 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 3, + "a": [ + 1, + 5 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 4, + "a": [ + 0, + 5 + ], + "b": [ + 4, + 8 + ] + }, + { + "color": 5, + "a": [ + 5, + 8 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 6, + "a": [ + 6, + 5 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 7, + "a": [ + 6, + 2 + ], + "b": [ + 7, + 3 + ] + }, + { + "color": 8, + "a": [ + 8, + 3 + ], + "b": [ + 4, + 0 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ] + ], + [ + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ] + ], + [ + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ] + ], + [ + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ] + ], + [ + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ] + ], + [ + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ] + ] + ] + }, + { + "level": 68, + "rows": 9, + "cols": 9, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 4 + ], + "b": [ + 1, + 3 + ] + }, + { + "color": 1, + "a": [ + 2, + 3 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 2, + "a": [ + 8, + 1 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 3, + "a": [ + 2, + 6 + ], + "b": [ + 1, + 8 + ] + }, + { + "color": 4, + "a": [ + 2, + 8 + ], + "b": [ + 8, + 8 + ] + }, + { + "color": 5, + "a": [ + 8, + 7 + ], + "b": [ + 3, + 6 + ] + }, + { + "color": 6, + "a": [ + 4, + 6 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 7, + "a": [ + 7, + 2 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 8, + "a": [ + 8, + 4 + ], + "b": [ + 8, + 6 + ] + } + ], + "solution": [ + [ + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ] + ], + [ + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ] + ], + [ + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ] + ], + [ + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ] + ], + [ + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ] + ], + [ + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ] + ], + [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ] + ] + ] + }, + { + "level": 69, + "rows": 10, + "cols": 10, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 9, + 1 + ], + "b": [ + 9, + 2 + ] + }, + { + "color": 1, + "a": [ + 9, + 3 + ], + "b": [ + 9, + 8 + ] + }, + { + "color": 2, + "a": [ + 9, + 9 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 3, + "a": [ + 6, + 5 + ], + "b": [ + 3, + 8 + ] + }, + { + "color": 4, + "a": [ + 3, + 9 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 5, + "a": [ + 0, + 5 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 6, + "a": [ + 8, + 4 + ], + "b": [ + 5, + 0 + ] + }, + { + "color": 7, + "a": [ + 4, + 0 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 8, + "a": [ + 0, + 1 + ], + "b": [ + 2, + 3 + ] + } + ], + "solution": [ + [ + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ] + ], + [ + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ] + ], + [ + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ] + ], + [ + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ] + ], + [ + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ] + ], + [ + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ] + ], + [ + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ] + ], + [ + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ] + ] + ] + }, + { + "level": 70, + "rows": 10, + "cols": 10, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 5 + ], + "b": [ + 6, + 7 + ] + }, + { + "color": 1, + "a": [ + 6, + 8 + ], + "b": [ + 0, + 8 + ] + }, + { + "color": 2, + "a": [ + 0, + 7 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 3, + "a": [ + 2, + 4 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 4, + "a": [ + 3, + 0 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 5, + "a": [ + 3, + 2 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 6, + "a": [ + 6, + 3 + ], + "b": [ + 9, + 0 + ] + }, + { + "color": 7, + "a": [ + 9, + 1 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 8, + "a": [ + 6, + 6 + ], + "b": [ + 3, + 8 + ] + } + ], + "solution": [ + [ + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ] + ], + [ + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ] + ], + [ + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ] + ], + [ + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ] + ], + [ + [ + 9, + 1 + ], + [ + 9, + 2 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ] + ], + [ + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ] + ] + ] + }, + { + "level": 71, + "rows": 10, + "cols": 10, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 6 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 1, + "a": [ + 5, + 1 + ], + "b": [ + 6, + 9 + ] + }, + { + "color": 2, + "a": [ + 6, + 8 + ], + "b": [ + 9, + 8 + ] + }, + { + "color": 3, + "a": [ + 8, + 8 + ], + "b": [ + 9, + 5 + ] + }, + { + "color": 4, + "a": [ + 9, + 4 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 5, + "a": [ + 6, + 3 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 6, + "a": [ + 7, + 0 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 7, + "a": [ + 0, + 0 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 8, + "a": [ + 2, + 7 + ], + "b": [ + 2, + 9 + ] + } + ], + "solution": [ + [ + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ] + ], + [ + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 6, + 9 + ] + ], + [ + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ] + ], + [ + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 9, + 5 + ] + ], + [ + [ + 9, + 4 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ] + ], + [ + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ] + ], + [ + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ] + ], + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ] + ], + [ + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ] + ] + ] + }, + { + "level": 72, + "rows": 10, + "cols": 10, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 9, + 7 + ], + "b": [ + 3, + 9 + ] + }, + { + "color": 1, + "a": [ + 2, + 9 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 2, + "a": [ + 1, + 8 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 3, + "a": [ + 3, + 3 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 4, + "a": [ + 1, + 1 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 5, + "a": [ + 5, + 3 + ], + "b": [ + 9, + 0 + ] + }, + { + "color": 6, + "a": [ + 9, + 1 + ], + "b": [ + 8, + 6 + ] + }, + { + "color": 7, + "a": [ + 8, + 7 + ], + "b": [ + 8, + 5 + ] + }, + { + "color": 8, + "a": [ + 8, + 4 + ], + "b": [ + 3, + 6 + ] + } + ], + "solution": [ + [ + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ] + ], + [ + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ] + ], + [ + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ] + ], + [ + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ] + ], + [ + [ + 9, + 1 + ], + [ + 9, + 2 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ] + ], + [ + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ] + ] + ] + }, + { + "level": 73, + "rows": 10, + "cols": 10, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 9 + ], + "b": [ + 2, + 8 + ] + }, + { + "color": 1, + "a": [ + 1, + 8 + ], + "b": [ + 4, + 6 + ] + }, + { + "color": 2, + "a": [ + 3, + 6 + ], + "b": [ + 1, + 1 + ] + }, + { + "color": 3, + "a": [ + 1, + 2 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 4, + "a": [ + 3, + 0 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 5, + "a": [ + 1, + 3 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 6, + "a": [ + 5, + 6 + ], + "b": [ + 7, + 7 + ] + }, + { + "color": 7, + "a": [ + 7, + 8 + ], + "b": [ + 7, + 2 + ] + }, + { + "color": 8, + "a": [ + 8, + 2 + ], + "b": [ + 7, + 0 + ] + } + ], + "solution": [ + [ + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ] + ], + [ + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ] + ], + [ + [ + 3, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ] + ], + [ + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ] + ], + [ + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ] + ], + [ + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 9, + 7 + ], + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ] + ], + [ + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ] + ] + ] + }, + { + "level": 74, + "rows": 10, + "cols": 10, + "colors": 9, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 8 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 1, + "a": [ + 7, + 9 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 2, + "a": [ + 0, + 6 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 3, + "a": [ + 0, + 3 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 4, + "a": [ + 2, + 0 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 5, + "a": [ + 6, + 3 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 6, + "a": [ + 5, + 0 + ], + "b": [ + 9, + 3 + ] + }, + { + "color": 7, + "a": [ + 9, + 4 + ], + "b": [ + 7, + 7 + ] + }, + { + "color": 8, + "a": [ + 6, + 7 + ], + "b": [ + 5, + 6 + ] + } + ], + "solution": [ + [ + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ] + ], + [ + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ] + ], + [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ] + ], + [ + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 9, + 1 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ] + ], + [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ] + ], + [ + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ] + ] + ] + }, + { + "level": 75, + "rows": 10, + "cols": 10, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 9, + 7 + ], + "b": [ + 6, + 8 + ] + }, + { + "color": 1, + "a": [ + 6, + 7 + ], + "b": [ + 2, + 9 + ] + }, + { + "color": 2, + "a": [ + 2, + 8 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 3, + "a": [ + 1, + 6 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 4, + "a": [ + 2, + 6 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 5, + "a": [ + 7, + 5 + ], + "b": [ + 9, + 4 + ] + }, + { + "color": 6, + "a": [ + 9, + 3 + ], + "b": [ + 5, + 1 + ] + }, + { + "color": 7, + "a": [ + 5, + 0 + ], + "b": [ + 1, + 3 + ] + }, + { + "color": 8, + "a": [ + 1, + 2 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 9, + "a": [ + 3, + 2 + ], + "b": [ + 8, + 1 + ] + } + ], + "solution": [ + [ + [ + 9, + 7 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ] + ], + [ + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ] + ], + [ + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ] + ], + [ + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 5 + ] + ], + [ + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ] + ], + [ + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ] + ], + [ + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ] + ], + [ + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 8, + 1 + ] + ] + ] + }, + { + "level": 76, + "rows": 10, + "cols": 10, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 8 + ], + "b": [ + 7, + 6 + ] + }, + { + "color": 1, + "a": [ + 8, + 6 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 2, + "a": [ + 7, + 9 + ], + "b": [ + 0, + 8 + ] + }, + { + "color": 3, + "a": [ + 1, + 8 + ], + "b": [ + 1, + 2 + ] + }, + { + "color": 4, + "a": [ + 1, + 1 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 5, + "a": [ + 5, + 3 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 6, + "a": [ + 3, + 6 + ], + "b": [ + 8, + 5 + ] + }, + { + "color": 7, + "a": [ + 9, + 5 + ], + "b": [ + 7, + 1 + ] + }, + { + "color": 8, + "a": [ + 7, + 2 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 9, + "a": [ + 6, + 1 + ], + "b": [ + 0, + 5 + ] + } + ], + "solution": [ + [ + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ] + ], + [ + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ] + ], + [ + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ] + ], + [ + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ] + ], + [ + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ] + ], + [ + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ] + ], + [ + [ + 9, + 5 + ], + [ + 9, + 4 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ] + ], + [ + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 1 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ] + ] + ] + }, + { + "level": 77, + "rows": 10, + "cols": 10, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 5 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 1, + "a": [ + 3, + 4 + ], + "b": [ + 4, + 8 + ] + }, + { + "color": 2, + "a": [ + 4, + 7 + ], + "b": [ + 8, + 8 + ] + }, + { + "color": 3, + "a": [ + 7, + 8 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 4, + "a": [ + 1, + 8 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 5, + "a": [ + 0, + 3 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 6, + "a": [ + 3, + 0 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 7, + "a": [ + 4, + 0 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 8, + "a": [ + 6, + 1 + ], + "b": [ + 9, + 3 + ] + }, + { + "color": 9, + "a": [ + 9, + 4 + ], + "b": [ + 8, + 9 + ] + } + ], + "solution": [ + [ + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ] + ], + [ + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ] + ], + [ + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ] + ], + [ + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ] + ], + [ + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ] + ], + [ + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 9, + 1 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 9, + 3 + ] + ], + [ + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ] + ] + ] + }, + { + "level": 78, + "rows": 10, + "cols": 10, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 8, + 4 + ], + "b": [ + 9, + 8 + ] + }, + { + "color": 1, + "a": [ + 9, + 9 + ], + "b": [ + 5, + 8 + ] + }, + { + "color": 2, + "a": [ + 5, + 9 + ], + "b": [ + 1, + 8 + ] + }, + { + "color": 3, + "a": [ + 1, + 9 + ], + "b": [ + 2, + 5 + ] + }, + { + "color": 4, + "a": [ + 2, + 4 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 5, + "a": [ + 6, + 6 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 6, + "a": [ + 7, + 2 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 7, + "a": [ + 8, + 1 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 8, + "a": [ + 1, + 0 + ], + "b": [ + 1, + 3 + ] + }, + { + "color": 9, + "a": [ + 2, + 3 + ], + "b": [ + 4, + 1 + ] + } + ], + "solution": [ + [ + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ] + ], + [ + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 8 + ] + ], + [ + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ] + ], + [ + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ] + ], + [ + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ] + ], + [ + [ + 6, + 6 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ] + ], + [ + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ] + ], + [ + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ] + ], + [ + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ] + ] + ] + }, + { + "level": 79, + "rows": 10, + "cols": 10, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 1, + "a": [ + 2, + 1 + ], + "b": [ + 1, + 5 + ] + }, + { + "color": 2, + "a": [ + 1, + 4 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 3, + "a": [ + 9, + 9 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 4, + "a": [ + 6, + 5 + ], + "b": [ + 8, + 8 + ] + }, + { + "color": 5, + "a": [ + 7, + 8 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 6, + "a": [ + 4, + 6 + ], + "b": [ + 3, + 6 + ] + }, + { + "color": 7, + "a": [ + 3, + 5 + ], + "b": [ + 7, + 2 + ] + }, + { + "color": 8, + "a": [ + 8, + 2 + ], + "b": [ + 7, + 0 + ] + }, + { + "color": 9, + "a": [ + 8, + 0 + ], + "b": [ + 9, + 4 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ], + [ + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ] + ], + [ + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 1, + 9 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 8, + 9 + ] + ], + [ + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ] + ], + [ + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ] + ], + [ + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ] + ], + [ + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ] + ], + [ + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ] + ], + [ + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ] + ], + [ + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 9, + 1 + ], + [ + 9, + 2 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ] + ] + ] + }, + { + "level": 80, + "rows": 10, + "cols": 10, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 9 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 1, + "a": [ + 1, + 2 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 2, + "a": [ + 2, + 5 + ], + "b": [ + 4, + 9 + ] + }, + { + "color": 3, + "a": [ + 5, + 9 + ], + "b": [ + 9, + 9 + ] + }, + { + "color": 4, + "a": [ + 9, + 8 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 5, + "a": [ + 4, + 6 + ], + "b": [ + 4, + 5 + ] + }, + { + "color": 6, + "a": [ + 5, + 5 + ], + "b": [ + 6, + 4 + ] + }, + { + "color": 7, + "a": [ + 5, + 4 + ], + "b": [ + 8, + 1 + ] + }, + { + "color": 8, + "a": [ + 9, + 1 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 9, + "a": [ + 3, + 2 + ], + "b": [ + 6, + 1 + ] + } + ], + "solution": [ + [ + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ] + ], + [ + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ] + ], + [ + [ + 5, + 9 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 8, + 9 + ], + [ + 9, + 9 + ] + ], + [ + [ + 9, + 8 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ] + ], + [ + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ] + ], + [ + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ] + ], + [ + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ] + ], + [ + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ], + [ + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ] + ] + ] + }, + { + "level": 81, + "rows": 11, + "cols": 11, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 1 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 1, + "a": [ + 3, + 4 + ], + "b": [ + 1, + 10 + ] + }, + { + "color": 2, + "a": [ + 0, + 10 + ], + "b": [ + 0, + 8 + ] + }, + { + "color": 3, + "a": [ + 0, + 7 + ], + "b": [ + 7, + 0 + ] + }, + { + "color": 4, + "a": [ + 8, + 0 + ], + "b": [ + 8, + 4 + ] + }, + { + "color": 5, + "a": [ + 9, + 4 + ], + "b": [ + 7, + 6 + ] + }, + { + "color": 6, + "a": [ + 8, + 6 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 7, + "a": [ + 6, + 2 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 8, + "a": [ + 4, + 4 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 9, + "a": [ + 5, + 5 + ], + "b": [ + 10, + 10 + ] + } + ], + "solution": [ + [ + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ] + ], + [ + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ] + ], + [ + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 1, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 0, + 8 + ] + ], + [ + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ] + ], + [ + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ], + [ + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 7, + 9 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 9, + 8 + ], + [ + 9, + 7 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ] + ], + [ + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ] + ], + [ + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ] + ], + [ + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ] + ], + [ + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ] + ] + ] + }, + { + "level": 82, + "rows": 11, + "cols": 11, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 6 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 1, + "a": [ + 3, + 1 + ], + "b": [ + 9, + 3 + ] + }, + { + "color": 2, + "a": [ + 9, + 2 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 3, + "a": [ + 6, + 3 + ], + "b": [ + 8, + 4 + ] + }, + { + "color": 4, + "a": [ + 9, + 4 + ], + "b": [ + 8, + 5 + ] + }, + { + "color": 5, + "a": [ + 7, + 5 + ], + "b": [ + 4, + 7 + ] + }, + { + "color": 6, + "a": [ + 3, + 7 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 7, + "a": [ + 2, + 0 + ], + "b": [ + 0, + 9 + ] + }, + { + "color": 8, + "a": [ + 0, + 10 + ], + "b": [ + 9, + 9 + ] + }, + { + "color": 9, + "a": [ + 9, + 10 + ], + "b": [ + 8, + 6 + ] + } + ], + "solution": [ + [ + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 9, + 3 + ] + ], + [ + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ], + [ + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ] + ], + [ + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ] + ], + [ + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ] + ], + [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 8, + 9 + ], + [ + 8, + 8 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ] + ], + [ + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 10, + 9 + ], + [ + 10, + 8 + ], + [ + 10, + 7 + ], + [ + 9, + 7 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ] + ] + ] + }, + { + "level": 83, + "rows": 11, + "cols": 11, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 2, + 2 + ], + "b": [ + 0, + 9 + ] + }, + { + "color": 1, + "a": [ + 0, + 10 + ], + "b": [ + 1, + 6 + ] + }, + { + "color": 2, + "a": [ + 2, + 6 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 3, + "a": [ + 4, + 3 + ], + "b": [ + 4, + 6 + ] + }, + { + "color": 4, + "a": [ + 5, + 6 + ], + "b": [ + 9, + 6 + ] + }, + { + "color": 5, + "a": [ + 9, + 7 + ], + "b": [ + 6, + 7 + ] + }, + { + "color": 6, + "a": [ + 5, + 7 + ], + "b": [ + 10, + 5 + ] + }, + { + "color": 7, + "a": [ + 10, + 4 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 8, + "a": [ + 8, + 1 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 9, + "a": [ + 4, + 1 + ], + "b": [ + 7, + 5 + ] + } + ], + "solution": [ + [ + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ] + ], + [ + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ] + ], + [ + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ] + ], + [ + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ] + ], + [ + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ] + ], + [ + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 10, + 9 + ], + [ + 10, + 8 + ], + [ + 10, + 7 + ], + [ + 10, + 6 + ], + [ + 10, + 5 + ] + ], + [ + [ + 10, + 4 + ], + [ + 10, + 3 + ], + [ + 10, + 2 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 10, + 1 + ], + [ + 10, + 0 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ] + ], + [ + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ] + ], + [ + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ] + ] + ] + }, + { + "level": 84, + "rows": 11, + "cols": 11, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 10, + 10 + ], + "b": [ + 8, + 2 + ] + }, + { + "color": 1, + "a": [ + 8, + 1 + ], + "b": [ + 6, + 2 + ] + }, + { + "color": 2, + "a": [ + 6, + 3 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 3, + "a": [ + 3, + 0 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 4, + "a": [ + 0, + 0 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 5, + "a": [ + 1, + 6 + ], + "b": [ + 0, + 8 + ] + }, + { + "color": 6, + "a": [ + 0, + 9 + ], + "b": [ + 5, + 9 + ] + }, + { + "color": 7, + "a": [ + 6, + 9 + ], + "b": [ + 4, + 7 + ] + }, + { + "color": 8, + "a": [ + 5, + 7 + ], + "b": [ + 9, + 3 + ] + }, + { + "color": 9, + "a": [ + 8, + 3 + ], + "b": [ + 8, + 6 + ] + } + ], + "solution": [ + [ + [ + 10, + 10 + ], + [ + 10, + 9 + ], + [ + 10, + 8 + ], + [ + 10, + 7 + ], + [ + 10, + 6 + ], + [ + 10, + 5 + ], + [ + 10, + 4 + ], + [ + 10, + 3 + ], + [ + 10, + 2 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ] + ], + [ + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 10, + 1 + ], + [ + 10, + 0 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ] + ], + [ + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ] + ], + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ] + ], + [ + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 2, + 8 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 0, + 8 + ] + ], + [ + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 9 + ] + ], + [ + [ + 6, + 9 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 9 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 3, + 8 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ] + ], + [ + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 9, + 10 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 9, + 4 + ], + [ + 9, + 3 + ] + ], + [ + [ + 8, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ] + ] + ] + }, + { + "level": 85, + "rows": 11, + "cols": 11, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 4 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 1, + "a": [ + 7, + 5 + ], + "b": [ + 7, + 8 + ] + }, + { + "color": 2, + "a": [ + 7, + 9 + ], + "b": [ + 10, + 9 + ] + }, + { + "color": 3, + "a": [ + 10, + 8 + ], + "b": [ + 8, + 3 + ] + }, + { + "color": 4, + "a": [ + 9, + 3 + ], + "b": [ + 9, + 2 + ] + }, + { + "color": 5, + "a": [ + 8, + 2 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 6, + "a": [ + 2, + 0 + ], + "b": [ + 1, + 5 + ] + }, + { + "color": 7, + "a": [ + 1, + 4 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 8, + "a": [ + 0, + 7 + ], + "b": [ + 3, + 8 + ] + }, + { + "color": 9, + "a": [ + 3, + 9 + ], + "b": [ + 5, + 7 + ] + } + ], + "solution": [ + [ + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ] + ], + [ + [ + 7, + 5 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 8, + 9 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ] + ], + [ + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 10, + 9 + ] + ], + [ + [ + 10, + 8 + ], + [ + 10, + 7 + ], + [ + 10, + 6 + ], + [ + 10, + 5 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 8, + 3 + ] + ], + [ + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 10, + 3 + ], + [ + 10, + 2 + ], + [ + 10, + 1 + ], + [ + 10, + 0 + ], + [ + 9, + 0 + ], + [ + 9, + 1 + ], + [ + 9, + 2 + ] + ], + [ + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ] + ], + [ + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ] + ], + [ + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 4, + 9 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ] + ], + [ + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ] + ] + ] + }, + { + "level": 86, + "rows": 11, + "cols": 11, + "colors": 10, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 0 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 1, + "a": [ + 0, + 1 + ], + "b": [ + 3, + 5 + ] + }, + { + "color": 2, + "a": [ + 4, + 5 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 3, + "a": [ + 6, + 4 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 4, + "a": [ + 4, + 2 + ], + "b": [ + 6, + 0 + ] + }, + { + "color": 5, + "a": [ + 7, + 0 + ], + "b": [ + 10, + 4 + ] + }, + { + "color": 6, + "a": [ + 10, + 5 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 7, + "a": [ + 9, + 9 + ], + "b": [ + 6, + 6 + ] + }, + { + "color": 8, + "a": [ + 5, + 6 + ], + "b": [ + 4, + 9 + ] + }, + { + "color": 9, + "a": [ + 5, + 9 + ], + "b": [ + 1, + 9 + ] + } + ], + "solution": [ + [ + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ] + ], + [ + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ] + ], + [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 9, + 5 + ], + [ + 9, + 4 + ], + [ + 9, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ] + ], + [ + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ] + ], + [ + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ] + ], + [ + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 8, + 10 + ], + [ + 8, + 9 + ] + ], + [ + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ] + ], + [ + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 2, + 8 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ] + ], + [ + [ + 5, + 9 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ] + ] + ] + }, + { + "level": 87, + "rows": 11, + "cols": 11, + "colors": 11, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 1 + ], + "b": [ + 8, + 3 + ] + }, + { + "color": 1, + "a": [ + 9, + 3 + ], + "b": [ + 9, + 4 + ] + }, + { + "color": 2, + "a": [ + 8, + 4 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 3, + "a": [ + 4, + 1 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 4, + "a": [ + 0, + 3 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 5, + "a": [ + 5, + 4 + ], + "b": [ + 2, + 4 + ] + }, + { + "color": 6, + "a": [ + 2, + 5 + ], + "b": [ + 3, + 9 + ] + }, + { + "color": 7, + "a": [ + 4, + 9 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 8, + "a": [ + 9, + 9 + ], + "b": [ + 6, + 10 + ] + }, + { + "color": 9, + "a": [ + 5, + 10 + ], + "b": [ + 0, + 10 + ] + }, + { + "color": 10, + "a": [ + 0, + 9 + ], + "b": [ + 1, + 5 + ] + } + ], + "solution": [ + [ + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ] + ], + [ + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ], + [ + 9, + 4 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 9, + 5 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ] + ], + [ + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ] + ], + [ + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ] + ], + [ + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 7, + 8 + ], + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 9, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ] + ], + [ + [ + 9, + 9 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 8, + 10 + ], + [ + 7, + 10 + ], + [ + 6, + 10 + ] + ], + [ + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ] + ], + [ + [ + 0, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ] + ] + ] + }, + { + "level": 88, + "rows": 11, + "cols": 11, + "colors": 11, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 0 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 1, + "a": [ + 2, + 1 + ], + "b": [ + 6, + 4 + ] + }, + { + "color": 2, + "a": [ + 5, + 4 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 3, + "a": [ + 5, + 3 + ], + "b": [ + 5, + 1 + ] + }, + { + "color": 4, + "a": [ + 5, + 0 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 5, + "a": [ + 8, + 1 + ], + "b": [ + 10, + 8 + ] + }, + { + "color": 6, + "a": [ + 9, + 8 + ], + "b": [ + 8, + 6 + ] + }, + { + "color": 7, + "a": [ + 7, + 6 + ], + "b": [ + 9, + 10 + ] + }, + { + "color": 8, + "a": [ + 8, + 10 + ], + "b": [ + 3, + 10 + ] + }, + { + "color": 9, + "a": [ + 2, + 10 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 10, + "a": [ + 4, + 6 + ], + "b": [ + 1, + 7 + ] + } + ], + "solution": [ + [ + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + [ + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ] + ], + [ + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ] + ], + [ + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ] + ], + [ + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ] + ], + [ + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ] + ], + [ + [ + 9, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 9, + 4 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ] + ], + [ + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ] + ], + [ + [ + 8, + 10 + ], + [ + 7, + 10 + ], + [ + 6, + 10 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ] + ], + [ + [ + 2, + 10 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ] + ], + [ + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 1, + 7 + ] + ] + ] + }, + { + "level": 89, + "rows": 11, + "cols": 11, + "colors": 11, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 5 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 1, + "a": [ + 3, + 0 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 2, + "a": [ + 2, + 3 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 3, + "a": [ + 4, + 5 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 4, + "a": [ + 5, + 3 + ], + "b": [ + 7, + 1 + ] + }, + { + "color": 5, + "a": [ + 6, + 1 + ], + "b": [ + 8, + 3 + ] + }, + { + "color": 6, + "a": [ + 8, + 4 + ], + "b": [ + 10, + 3 + ] + }, + { + "color": 7, + "a": [ + 10, + 4 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 8, + "a": [ + 8, + 8 + ], + "b": [ + 7, + 9 + ] + }, + { + "color": 9, + "a": [ + 7, + 10 + ], + "b": [ + 2, + 9 + ] + }, + { + "color": 10, + "a": [ + 3, + 9 + ], + "b": [ + 0, + 8 + ] + } + ], + "solution": [ + [ + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ] + ], + [ + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ], + [ + [ + 4, + 5 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ] + ], + [ + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 9, + 5 + ], + [ + 9, + 4 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ] + ], + [ + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 8, + 10 + ], + [ + 8, + 9 + ] + ], + [ + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ] + ], + [ + [ + 7, + 10 + ], + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 1, + 9 + ], + [ + 2, + 9 + ] + ], + [ + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ] + ] + ] + }, + { + "level": 90, + "rows": 11, + "cols": 11, + "colors": 11, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 3 + ], + "b": [ + 5, + 9 + ] + }, + { + "color": 1, + "a": [ + 6, + 9 + ], + "b": [ + 0, + 9 + ] + }, + { + "color": 2, + "a": [ + 0, + 8 + ], + "b": [ + 0, + 5 + ] + }, + { + "color": 3, + "a": [ + 0, + 4 + ], + "b": [ + 0, + 0 + ] + }, + { + "color": 4, + "a": [ + 1, + 0 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 5, + "a": [ + 3, + 3 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 6, + "a": [ + 5, + 1 + ], + "b": [ + 8, + 3 + ] + }, + { + "color": 7, + "a": [ + 9, + 3 + ], + "b": [ + 10, + 7 + ] + }, + { + "color": 8, + "a": [ + 10, + 8 + ], + "b": [ + 9, + 7 + ] + }, + { + "color": 9, + "a": [ + 9, + 6 + ], + "b": [ + 6, + 8 + ] + }, + { + "color": 10, + "a": [ + 5, + 8 + ], + "b": [ + 5, + 7 + ] + } + ], + "solution": [ + [ + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ] + ], + [ + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ] + ], + [ + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ] + ], + [ + [ + 0, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ] + ], + [ + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 9, + 1 + ], + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 8, + 3 + ] + ], + [ + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ] + ], + [ + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 8, + 10 + ], + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ] + ], + [ + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 9, + 4 + ], + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ] + ], + [ + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ] + ] + ] + }, + { + "level": 91, + "rows": 11, + "cols": 11, + "colors": 11, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 8 + ], + "b": [ + 2, + 7 + ] + }, + { + "color": 1, + "a": [ + 1, + 7 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 2, + "a": [ + 0, + 6 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 3, + "a": [ + 5, + 5 + ], + "b": [ + 10, + 10 + ] + }, + { + "color": 4, + "a": [ + 10, + 9 + ], + "b": [ + 10, + 3 + ] + }, + { + "color": 5, + "a": [ + 10, + 2 + ], + "b": [ + 7, + 3 + ] + }, + { + "color": 6, + "a": [ + 8, + 3 + ], + "b": [ + 9, + 7 + ] + }, + { + "color": 7, + "a": [ + 8, + 7 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 8, + "a": [ + 4, + 3 + ], + "b": [ + 0, + 2 + ] + }, + { + "color": 9, + "a": [ + 1, + 2 + ], + "b": [ + 6, + 0 + ] + }, + { + "color": 10, + "a": [ + 5, + 0 + ], + "b": [ + 2, + 2 + ] + } + ], + "solution": [ + [ + [ + 4, + 8 + ], + [ + 5, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 9 + ], + [ + 4, + 9 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ] + ], + [ + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ] + ], + [ + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ] + ], + [ + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ] + ], + [ + [ + 10, + 9 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 10, + 8 + ], + [ + 10, + 7 + ], + [ + 10, + 6 + ], + [ + 10, + 5 + ], + [ + 10, + 4 + ], + [ + 10, + 3 + ] + ], + [ + [ + 10, + 2 + ], + [ + 10, + 1 + ], + [ + 10, + 0 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ] + ], + [ + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 2 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ] + ], + [ + [ + 8, + 7 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ] + ], + [ + [ + 4, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ] + ], + [ + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 5, + 1 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ] + ] + ] + }, + { + "level": 92, + "rows": 11, + "cols": 11, + "colors": 11, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 3 + ], + "b": [ + 3, + 2 + ] + }, + { + "color": 1, + "a": [ + 3, + 1 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 2, + "a": [ + 0, + 5 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 3, + "a": [ + 5, + 5 + ], + "b": [ + 5, + 3 + ] + }, + { + "color": 4, + "a": [ + 5, + 2 + ], + "b": [ + 9, + 1 + ] + }, + { + "color": 5, + "a": [ + 8, + 1 + ], + "b": [ + 10, + 3 + ] + }, + { + "color": 6, + "a": [ + 10, + 4 + ], + "b": [ + 8, + 6 + ] + }, + { + "color": 7, + "a": [ + 8, + 7 + ], + "b": [ + 7, + 7 + ] + }, + { + "color": 8, + "a": [ + 6, + 7 + ], + "b": [ + 0, + 7 + ] + }, + { + "color": 9, + "a": [ + 1, + 7 + ], + "b": [ + 5, + 6 + ] + }, + { + "color": 10, + "a": [ + 6, + 6 + ], + "b": [ + 9, + 5 + ] + } + ], + "solution": [ + [ + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ] + ], + [ + [ + 3, + 1 + ], + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ] + ], + [ + [ + 5, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 9, + 1 + ] + ], + [ + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ] + ], + [ + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 9, + 8 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ] + ], + [ + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 8, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 9 + ], + [ + 7, + 8 + ], + [ + 7, + 7 + ] + ], + [ + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ] + ], + [ + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ] + ], + [ + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ] + ] + ] + }, + { + "level": 93, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 9 + ], + "b": [ + 5, + 4 + ] + }, + { + "color": 1, + "a": [ + 5, + 3 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 2, + "a": [ + 7, + 5 + ], + "b": [ + 7, + 6 + ] + }, + { + "color": 3, + "a": [ + 7, + 7 + ], + "b": [ + 10, + 9 + ] + }, + { + "color": 4, + "a": [ + 10, + 10 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 5, + "a": [ + 8, + 10 + ], + "b": [ + 4, + 8 + ] + }, + { + "color": 6, + "a": [ + 4, + 9 + ], + "b": [ + 0, + 9 + ] + }, + { + "color": 7, + "a": [ + 0, + 8 + ], + "b": [ + 0, + 3 + ] + }, + { + "color": 8, + "a": [ + 1, + 3 + ], + "b": [ + 3, + 5 + ] + }, + { + "color": 9, + "a": [ + 3, + 6 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 10, + "a": [ + 2, + 0 + ], + "b": [ + 6, + 0 + ] + }, + { + "color": 11, + "a": [ + 6, + 1 + ], + "b": [ + 8, + 2 + ] + } + ], + "solution": [ + [ + [ + 1, + 9 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ], + [ + 3, + 8 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ] + ], + [ + [ + 5, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 9, + 3 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ], + [ + 9, + 4 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ] + ], + [ + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 9, + 5 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 9, + 6 + ], + [ + 8, + 6 + ], + [ + 7, + 6 + ] + ], + [ + [ + 7, + 7 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ] + ], + [ + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 8, + 9 + ] + ], + [ + [ + 8, + 10 + ], + [ + 7, + 10 + ], + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 9 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ] + ], + [ + [ + 4, + 9 + ], + [ + 4, + 10 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ] + ], + [ + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ] + ], + [ + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ] + ], + [ + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ] + ], + [ + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ] + ] + ] + }, + { + "level": 94, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 3 + ], + "b": [ + 4, + 3 + ] + }, + { + "color": 1, + "a": [ + 3, + 3 + ], + "b": [ + 3, + 4 + ] + }, + { + "color": 2, + "a": [ + 3, + 5 + ], + "b": [ + 6, + 5 + ] + }, + { + "color": 3, + "a": [ + 7, + 5 + ], + "b": [ + 9, + 5 + ] + }, + { + "color": 4, + "a": [ + 9, + 4 + ], + "b": [ + 5, + 2 + ] + }, + { + "color": 5, + "a": [ + 5, + 1 + ], + "b": [ + 2, + 0 + ] + }, + { + "color": 6, + "a": [ + 3, + 0 + ], + "b": [ + 9, + 1 + ] + }, + { + "color": 7, + "a": [ + 9, + 0 + ], + "b": [ + 10, + 8 + ] + }, + { + "color": 8, + "a": [ + 9, + 8 + ], + "b": [ + 5, + 8 + ] + }, + { + "color": 9, + "a": [ + 5, + 9 + ], + "b": [ + 1, + 10 + ] + }, + { + "color": 10, + "a": [ + 0, + 10 + ], + "b": [ + 1, + 9 + ] + }, + { + "color": 11, + "a": [ + 2, + 9 + ], + "b": [ + 1, + 1 + ] + } + ], + "solution": [ + [ + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 5, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ] + ], + [ + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 2, + 2 + ], + [ + 1, + 2 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ] + ], + [ + [ + 3, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 4, + 7 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ] + ], + [ + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ] + ], + [ + [ + 9, + 4 + ], + [ + 9, + 3 + ], + [ + 9, + 2 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ] + ], + [ + [ + 5, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 2 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ] + ], + [ + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ] + ], + [ + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 8, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 9 + ], + [ + 8, + 9 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ] + ], + [ + [ + 5, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 4, + 10 + ], + [ + 4, + 9 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 3, + 10 + ], + [ + 2, + 10 + ], + [ + 1, + 10 + ] + ], + [ + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ] + ], + [ + [ + 2, + 9 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 1, + 1 + ] + ] + ] + }, + { + "level": 95, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 1, + 3 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 1, + "a": [ + 2, + 0 + ], + "b": [ + 3, + 3 + ] + }, + { + "color": 2, + "a": [ + 2, + 3 + ], + "b": [ + 0, + 6 + ] + }, + { + "color": 3, + "a": [ + 1, + 6 + ], + "b": [ + 1, + 9 + ] + }, + { + "color": 4, + "a": [ + 1, + 8 + ], + "b": [ + 2, + 10 + ] + }, + { + "color": 5, + "a": [ + 3, + 10 + ], + "b": [ + 9, + 8 + ] + }, + { + "color": 6, + "a": [ + 8, + 8 + ], + "b": [ + 8, + 9 + ] + }, + { + "color": 7, + "a": [ + 9, + 9 + ], + "b": [ + 10, + 6 + ] + }, + { + "color": 8, + "a": [ + 10, + 5 + ], + "b": [ + 7, + 4 + ] + }, + { + "color": 9, + "a": [ + 8, + 4 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 10, + "a": [ + 7, + 0 + ], + "b": [ + 6, + 0 + ] + }, + { + "color": 11, + "a": [ + 5, + 0 + ], + "b": [ + 4, + 2 + ] + } + ], + "solution": [ + [ + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 3, + 3 + ] + ], + [ + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ] + ], + [ + [ + 1, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ] + ], + [ + [ + 1, + 8 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ] + ], + [ + [ + 3, + 10 + ], + [ + 3, + 9 + ], + [ + 4, + 9 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ] + ], + [ + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ], + [ + 6, + 7 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 8, + 9 + ] + ], + [ + [ + 9, + 9 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 10, + 9 + ], + [ + 10, + 8 + ], + [ + 10, + 7 + ], + [ + 10, + 6 + ] + ], + [ + [ + 10, + 5 + ], + [ + 10, + 4 + ], + [ + 10, + 3 + ], + [ + 9, + 3 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 7, + 5 + ], + [ + 6, + 5 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ] + ], + [ + [ + 8, + 4 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 10, + 1 + ], + [ + 10, + 0 + ], + [ + 9, + 0 + ], + [ + 9, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ] + ], + [ + [ + 7, + 0 + ], + [ + 7, + 1 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 6, + 0 + ] + ], + [ + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ] + ] + ] + }, + { + "level": 96, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 5, + 9 + ], + "b": [ + 8, + 10 + ] + }, + { + "color": 1, + "a": [ + 8, + 9 + ], + "b": [ + 7, + 7 + ] + }, + { + "color": 2, + "a": [ + 6, + 7 + ], + "b": [ + 3, + 10 + ] + }, + { + "color": 3, + "a": [ + 2, + 10 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 4, + "a": [ + 2, + 7 + ], + "b": [ + 1, + 0 + ] + }, + { + "color": 5, + "a": [ + 1, + 1 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 6, + "a": [ + 8, + 1 + ], + "b": [ + 2, + 3 + ] + }, + { + "color": 7, + "a": [ + 3, + 3 + ], + "b": [ + 3, + 6 + ] + }, + { + "color": 8, + "a": [ + 4, + 6 + ], + "b": [ + 9, + 6 + ] + }, + { + "color": 9, + "a": [ + 9, + 7 + ], + "b": [ + 10, + 8 + ] + }, + { + "color": 10, + "a": [ + 10, + 7 + ], + "b": [ + 9, + 2 + ] + }, + { + "color": 11, + "a": [ + 9, + 3 + ], + "b": [ + 9, + 5 + ] + } + ], + "solution": [ + [ + [ + 5, + 9 + ], + [ + 5, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 9 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ] + ], + [ + [ + 8, + 9 + ], + [ + 7, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 8 + ], + [ + 7, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 7, + 7 + ] + ], + [ + [ + 6, + 7 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 8 + ], + [ + 2, + 8 + ], + [ + 1, + 8 + ], + [ + 1, + 9 + ], + [ + 2, + 9 + ], + [ + 3, + 9 + ], + [ + 3, + 10 + ] + ], + [ + [ + 2, + 10 + ], + [ + 1, + 10 + ], + [ + 0, + 10 + ], + [ + 0, + 9 + ], + [ + 0, + 8 + ], + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 1, + 5 + ], + [ + 1, + 6 + ], + [ + 1, + 7 + ] + ], + [ + [ + 2, + 7 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ] + ], + [ + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ] + ], + [ + [ + 8, + 1 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ], + [ + 3, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ] + ], + [ + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ] + ], + [ + [ + 4, + 6 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ] + ], + [ + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 10, + 9 + ], + [ + 10, + 8 + ] + ], + [ + [ + 10, + 7 + ], + [ + 10, + 6 + ], + [ + 10, + 5 + ], + [ + 10, + 4 + ], + [ + 10, + 3 + ], + [ + 10, + 2 + ], + [ + 10, + 1 + ], + [ + 10, + 0 + ], + [ + 9, + 0 + ], + [ + 9, + 1 + ], + [ + 9, + 2 + ] + ], + [ + [ + 9, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 7, + 4 + ], + [ + 8, + 4 + ], + [ + 9, + 4 + ], + [ + 9, + 5 + ] + ] + ] + }, + { + "level": 97, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 0, + 8 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 1, + "a": [ + 0, + 7 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 2, + "a": [ + 3, + 2 + ], + "b": [ + 4, + 4 + ] + }, + { + "color": 3, + "a": [ + 5, + 4 + ], + "b": [ + 7, + 0 + ] + }, + { + "color": 4, + "a": [ + 8, + 0 + ], + "b": [ + 8, + 2 + ] + }, + { + "color": 5, + "a": [ + 9, + 2 + ], + "b": [ + 8, + 4 + ] + }, + { + "color": 6, + "a": [ + 9, + 4 + ], + "b": [ + 8, + 10 + ] + }, + { + "color": 7, + "a": [ + 8, + 9 + ], + "b": [ + 9, + 7 + ] + }, + { + "color": 8, + "a": [ + 9, + 6 + ], + "b": [ + 7, + 10 + ] + }, + { + "color": 9, + "a": [ + 6, + 10 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 10, + "a": [ + 6, + 5 + ], + "b": [ + 1, + 5 + ] + }, + { + "color": 11, + "a": [ + 1, + 4 + ], + "b": [ + 2, + 4 + ] + } + ], + "solution": [ + [ + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ] + ], + [ + [ + 0, + 7 + ], + [ + 0, + 6 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ], + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 4, + 0 + ], + [ + 4, + 1 + ], + [ + 3, + 1 + ] + ], + [ + [ + 3, + 2 + ], + [ + 4, + 2 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 4, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 4 + ], + [ + 4, + 4 + ] + ], + [ + [ + 5, + 4 + ], + [ + 6, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 6, + 3 + ], + [ + 6, + 2 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 6, + 1 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 7, + 0 + ] + ], + [ + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 9, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ] + ], + [ + [ + 9, + 2 + ], + [ + 10, + 2 + ], + [ + 10, + 3 + ], + [ + 9, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 4 + ] + ], + [ + [ + 9, + 4 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ], + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ], + [ + 9, + 10 + ], + [ + 8, + 10 + ] + ], + [ + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 9, + 7 + ] + ], + [ + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 8, + 8 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ] + ], + [ + [ + 6, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 9 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 5, + 6 + ], + [ + 6, + 6 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 7, + 5 + ] + ], + [ + [ + 6, + 5 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 4, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ] + ], + [ + [ + 1, + 4 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ] + ] + ] + }, + { + "level": 98, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 7, + 9 + ], + "b": [ + 5, + 5 + ] + }, + { + "color": 1, + "a": [ + 4, + 5 + ], + "b": [ + 1, + 4 + ] + }, + { + "color": 2, + "a": [ + 1, + 3 + ], + "b": [ + 4, + 1 + ] + }, + { + "color": 3, + "a": [ + 5, + 1 + ], + "b": [ + 6, + 3 + ] + }, + { + "color": 4, + "a": [ + 6, + 4 + ], + "b": [ + 9, + 5 + ] + }, + { + "color": 5, + "a": [ + 9, + 4 + ], + "b": [ + 4, + 0 + ] + }, + { + "color": 6, + "a": [ + 3, + 0 + ], + "b": [ + 0, + 3 + ] + }, + { + "color": 7, + "a": [ + 0, + 4 + ], + "b": [ + 2, + 6 + ] + }, + { + "color": 8, + "a": [ + 2, + 7 + ], + "b": [ + 1, + 10 + ] + }, + { + "color": 9, + "a": [ + 2, + 10 + ], + "b": [ + 10, + 9 + ] + }, + { + "color": 10, + "a": [ + 10, + 8 + ], + "b": [ + 10, + 2 + ] + }, + { + "color": 11, + "a": [ + 9, + 2 + ], + "b": [ + 9, + 1 + ] + } + ], + "solution": [ + [ + [ + 7, + 9 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ] + ], + [ + [ + 4, + 5 + ], + [ + 4, + 6 + ], + [ + 4, + 7 + ], + [ + 3, + 7 + ], + [ + 3, + 6 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ] + ], + [ + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ], + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ] + ], + [ + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 6, + 3 + ] + ], + [ + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ] + ], + [ + [ + 9, + 4 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ], + [ + 5, + 0 + ], + [ + 4, + 0 + ] + ], + [ + [ + 3, + 0 + ], + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ] + ], + [ + [ + 0, + 4 + ], + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ] + ], + [ + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 9 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 1, + 10 + ] + ], + [ + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 5, + 9 + ], + [ + 6, + 9 + ], + [ + 6, + 10 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 8, + 9 + ], + [ + 9, + 9 + ], + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 10, + 9 + ] + ], + [ + [ + 10, + 8 + ], + [ + 9, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 10, + 7 + ], + [ + 10, + 6 + ], + [ + 10, + 5 + ], + [ + 10, + 4 + ], + [ + 10, + 3 + ], + [ + 10, + 2 + ] + ], + [ + [ + 9, + 2 + ], + [ + 9, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 8, + 1 + ], + [ + 8, + 0 + ], + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 9, + 1 + ] + ] + ] + }, + { + "level": 99, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 4, + 2 + ], + "b": [ + 7, + 5 + ] + }, + { + "color": 1, + "a": [ + 7, + 4 + ], + "b": [ + 8, + 0 + ] + }, + { + "color": 2, + "a": [ + 9, + 0 + ], + "b": [ + 8, + 2 + ] + }, + { + "color": 3, + "a": [ + 8, + 3 + ], + "b": [ + 10, + 5 + ] + }, + { + "color": 4, + "a": [ + 10, + 6 + ], + "b": [ + 10, + 10 + ] + }, + { + "color": 5, + "a": [ + 9, + 10 + ], + "b": [ + 7, + 6 + ] + }, + { + "color": 6, + "a": [ + 6, + 6 + ], + "b": [ + 3, + 0 + ] + }, + { + "color": 7, + "a": [ + 2, + 0 + ], + "b": [ + 2, + 1 + ] + }, + { + "color": 8, + "a": [ + 2, + 2 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 9, + "a": [ + 0, + 5 + ], + "b": [ + 2, + 9 + ] + }, + { + "color": 10, + "a": [ + 2, + 10 + ], + "b": [ + 5, + 9 + ] + }, + { + "color": 11, + "a": [ + 5, + 8 + ], + "b": [ + 2, + 6 + ] + } + ], + "solution": [ + [ + [ + 4, + 2 + ], + [ + 4, + 3 + ], + [ + 4, + 4 + ], + [ + 5, + 4 + ], + [ + 5, + 3 + ], + [ + 5, + 2 + ], + [ + 5, + 1 + ], + [ + 5, + 0 + ], + [ + 6, + 0 + ], + [ + 6, + 1 + ], + [ + 6, + 2 + ], + [ + 6, + 3 + ], + [ + 6, + 4 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ] + ], + [ + [ + 7, + 4 + ], + [ + 7, + 3 + ], + [ + 7, + 2 + ], + [ + 7, + 1 + ], + [ + 7, + 0 + ], + [ + 8, + 0 + ] + ], + [ + [ + 9, + 0 + ], + [ + 10, + 0 + ], + [ + 10, + 1 + ], + [ + 10, + 2 + ], + [ + 9, + 2 + ], + [ + 9, + 1 + ], + [ + 8, + 1 + ], + [ + 8, + 2 + ] + ], + [ + [ + 8, + 3 + ], + [ + 8, + 4 + ], + [ + 8, + 5 + ], + [ + 8, + 6 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 6 + ], + [ + 9, + 5 + ], + [ + 9, + 4 + ], + [ + 9, + 3 + ], + [ + 10, + 3 + ], + [ + 10, + 4 + ], + [ + 10, + 5 + ] + ], + [ + [ + 10, + 6 + ], + [ + 10, + 7 + ], + [ + 10, + 8 + ], + [ + 10, + 9 + ], + [ + 10, + 10 + ] + ], + [ + [ + 9, + 10 + ], + [ + 9, + 9 + ], + [ + 9, + 8 + ], + [ + 8, + 8 + ], + [ + 8, + 9 + ], + [ + 8, + 10 + ], + [ + 7, + 10 + ], + [ + 7, + 9 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ], + [ + 7, + 7 + ], + [ + 7, + 6 + ] + ], + [ + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 5 + ], + [ + 4, + 5 + ], + [ + 3, + 5 + ], + [ + 3, + 4 + ], + [ + 3, + 3 + ], + [ + 3, + 2 + ], + [ + 3, + 1 + ], + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 3, + 0 + ] + ], + [ + [ + 2, + 0 + ], + [ + 1, + 0 + ], + [ + 0, + 0 + ], + [ + 0, + 1 + ], + [ + 0, + 2 + ], + [ + 0, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 2 + ], + [ + 1, + 1 + ], + [ + 2, + 1 + ] + ], + [ + [ + 2, + 2 + ], + [ + 2, + 3 + ], + [ + 2, + 4 + ], + [ + 1, + 4 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 5 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ], + [ + 1, + 10 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 2, + 8 + ], + [ + 2, + 9 + ] + ], + [ + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 3, + 9 + ], + [ + 3, + 8 + ], + [ + 4, + 8 + ], + [ + 4, + 9 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 6, + 9 + ], + [ + 5, + 9 + ] + ], + [ + [ + 5, + 8 + ], + [ + 5, + 7 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 3, + 6 + ], + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 1, + 7 + ], + [ + 1, + 6 + ], + [ + 1, + 5 + ], + [ + 2, + 5 + ], + [ + 2, + 6 + ] + ] + ] + }, + { + "level": 100, + "rows": 11, + "cols": 11, + "colors": 12, + "unique": false, + "endpoints": [ + { + "color": 0, + "a": [ + 3, + 7 + ], + "b": [ + 1, + 7 + ] + }, + { + "color": 1, + "a": [ + 1, + 6 + ], + "b": [ + 0, + 10 + ] + }, + { + "color": 2, + "a": [ + 1, + 10 + ], + "b": [ + 9, + 9 + ] + }, + { + "color": 3, + "a": [ + 9, + 10 + ], + "b": [ + 9, + 6 + ] + }, + { + "color": 4, + "a": [ + 8, + 6 + ], + "b": [ + 5, + 9 + ] + }, + { + "color": 5, + "a": [ + 4, + 9 + ], + "b": [ + 4, + 2 + ] + }, + { + "color": 6, + "a": [ + 3, + 2 + ], + "b": [ + 0, + 4 + ] + }, + { + "color": 7, + "a": [ + 0, + 3 + ], + "b": [ + 3, + 1 + ] + }, + { + "color": 8, + "a": [ + 4, + 1 + ], + "b": [ + 8, + 5 + ] + }, + { + "color": 9, + "a": [ + 9, + 5 + ], + "b": [ + 6, + 1 + ] + }, + { + "color": 10, + "a": [ + 7, + 1 + ], + "b": [ + 9, + 2 + ] + }, + { + "color": 11, + "a": [ + 9, + 3 + ], + "b": [ + 6, + 0 + ] + } + ], + "solution": [ + [ + [ + 3, + 7 + ], + [ + 2, + 7 + ], + [ + 2, + 8 + ], + [ + 3, + 8 + ], + [ + 3, + 9 + ], + [ + 2, + 9 + ], + [ + 1, + 9 + ], + [ + 1, + 8 + ], + [ + 1, + 7 + ] + ], + [ + [ + 1, + 6 + ], + [ + 0, + 6 + ], + [ + 0, + 7 + ], + [ + 0, + 8 + ], + [ + 0, + 9 + ], + [ + 0, + 10 + ] + ], + [ + [ + 1, + 10 + ], + [ + 2, + 10 + ], + [ + 3, + 10 + ], + [ + 4, + 10 + ], + [ + 5, + 10 + ], + [ + 6, + 10 + ], + [ + 6, + 9 + ], + [ + 7, + 9 + ], + [ + 7, + 10 + ], + [ + 8, + 10 + ], + [ + 8, + 9 + ], + [ + 8, + 8 + ], + [ + 8, + 7 + ], + [ + 9, + 7 + ], + [ + 9, + 8 + ], + [ + 9, + 9 + ] + ], + [ + [ + 9, + 10 + ], + [ + 10, + 10 + ], + [ + 10, + 9 + ], + [ + 10, + 8 + ], + [ + 10, + 7 + ], + [ + 10, + 6 + ], + [ + 9, + 6 + ] + ], + [ + [ + 8, + 6 + ], + [ + 7, + 6 + ], + [ + 7, + 7 + ], + [ + 7, + 8 + ], + [ + 6, + 8 + ], + [ + 6, + 7 + ], + [ + 6, + 6 + ], + [ + 5, + 6 + ], + [ + 5, + 7 + ], + [ + 5, + 8 + ], + [ + 5, + 9 + ] + ], + [ + [ + 4, + 9 + ], + [ + 4, + 8 + ], + [ + 4, + 7 + ], + [ + 4, + 6 + ], + [ + 4, + 5 + ], + [ + 4, + 4 + ], + [ + 4, + 3 + ], + [ + 4, + 2 + ] + ], + [ + [ + 3, + 2 + ], + [ + 3, + 3 + ], + [ + 2, + 3 + ], + [ + 1, + 3 + ], + [ + 1, + 4 + ], + [ + 2, + 4 + ], + [ + 3, + 4 + ], + [ + 3, + 5 + ], + [ + 3, + 6 + ], + [ + 2, + 6 + ], + [ + 2, + 5 + ], + [ + 1, + 5 + ], + [ + 0, + 5 + ], + [ + 0, + 4 + ] + ], + [ + [ + 0, + 3 + ], + [ + 0, + 2 + ], + [ + 1, + 2 + ], + [ + 2, + 2 + ], + [ + 2, + 1 + ], + [ + 1, + 1 + ], + [ + 0, + 1 + ], + [ + 0, + 0 + ], + [ + 1, + 0 + ], + [ + 2, + 0 + ], + [ + 3, + 0 + ], + [ + 3, + 1 + ] + ], + [ + [ + 4, + 1 + ], + [ + 4, + 0 + ], + [ + 5, + 0 + ], + [ + 5, + 1 + ], + [ + 5, + 2 + ], + [ + 5, + 3 + ], + [ + 5, + 4 + ], + [ + 5, + 5 + ], + [ + 6, + 5 + ], + [ + 7, + 5 + ], + [ + 8, + 5 + ] + ], + [ + [ + 9, + 5 + ], + [ + 10, + 5 + ], + [ + 10, + 4 + ], + [ + 9, + 4 + ], + [ + 8, + 4 + ], + [ + 7, + 4 + ], + [ + 6, + 4 + ], + [ + 6, + 3 + ], + [ + 7, + 3 + ], + [ + 8, + 3 + ], + [ + 8, + 2 + ], + [ + 7, + 2 + ], + [ + 6, + 2 + ], + [ + 6, + 1 + ] + ], + [ + [ + 7, + 1 + ], + [ + 8, + 1 + ], + [ + 9, + 1 + ], + [ + 9, + 2 + ] + ], + [ + [ + 9, + 3 + ], + [ + 10, + 3 + ], + [ + 10, + 2 + ], + [ + 10, + 1 + ], + [ + 10, + 0 + ], + [ + 9, + 0 + ], + [ + 8, + 0 + ], + [ + 7, + 0 + ], + [ + 6, + 0 + ] + ] + ] + } + ] +} \ No newline at end of file diff --git a/public/src/games/dotlink/DotLinkGame.js b/public/src/games/dotlink/DotLinkGame.js new file mode 100644 index 0000000..35ef40f --- /dev/null +++ b/public/src/games/dotlink/DotLinkGame.js @@ -0,0 +1,928 @@ +import * as Phaser from 'phaser'; +import { GAME_WIDTH, GAME_HEIGHT, COLORS } from '../../config.js'; +import { Button } from '../../ui/Button.js'; +import { MusicPlayer } from '../../ui/MusicPlayer.js'; +import { playSound, SFX } from '../../ui/Sounds.js'; +import { api } from '../../services/api.js'; +import { + makeRng, dateSeed, localDateString, generateBoard, isSolved, manhattanAdjacent, +} from './DotLinkLogic.js'; + +// ── Cyberpunk / synthwave palette ─────────────────────────────────────────── +const C = { + bg: 0x05060f, + bgGlow: 0x1a0a3a, + sun: 0xff2d95, + grid: 0x2b1a55, + panel: 0x0a0b1e, + panelEdge: 0x3a2c66, + neon: 0x00f0ff, + neonHex: '#00f0ff', + magenta: 0xff2bd6, + magentaHex: '#ff2bd6', + textHex: '#d8e8ff', + dimHex: '#7a86b8', + goldHex: '#ffd24a', +}; + +// Up to 12 distinct neon flow colours. +const FLOW = [ + { n: 0x00f0ff, hex: '#00f0ff' }, // cyan + { n: 0xff2bd6, hex: '#ff2bd6' }, // magenta + { n: 0x39ff14, hex: '#39ff14' }, // lime + { n: 0xff8a00, hex: '#ff8a00' }, // orange + { n: 0xb14aff, hex: '#b14aff' }, // violet + { n: 0xffe600, hex: '#ffe600' }, // yellow + { n: 0xff2d6f, hex: '#ff2d6f' }, // hot pink + { n: 0x2d9bff, hex: '#2d9bff' }, // azure + { n: 0x00ffc6, hex: '#00ffc6' }, // teal + { n: 0xff4d4d, hex: '#ff4d4d' }, // red + { n: 0xc6ff00, hex: '#c6ff00' }, // chartreuse + { n: 0xffffff, hex: '#ffffff' }, // white +]; + +const DAILY_STAGES = [ + { key: 'easy', label: 'EASY', rows: 5, cols: 5, colors: 4 }, + { key: 'medium', label: 'MEDIUM', rows: 7, cols: 7, colors: 6 }, + { key: 'difficult', label: 'DIFFICULT', rows: 8, cols: 8, colors: 8 }, + { key: 'hard', label: 'HARD', rows: 10, cols: 10, colors: 9 }, + { key: 'legendary', label: 'LEGENDARY', rows: 11, cols: 11, colors: 11 }, +]; + +const D = { chrome: 0, glow: 1, core: 2, dots: 3, hud: 5, overlay: 20, overlayUI: 22 }; + +const DAILY_BEST_KEY = 'dotlink-daily-best'; +const dailyRecKey = (date) => `dotlink-daily-${date}`; + +function lsGet(key) { try { return localStorage.getItem(key); } catch (_) { return null; } } +function lsSet(key, val) { try { localStorage.setItem(key, val); } catch (_) { /* ignore */ } } + +function fmtTime(totalSec) { + const m = Math.floor(totalSec / 60); + const s = String(Math.floor(totalSec % 60)).padStart(2, '0'); + return `${m}:${s}`; +} + +export default class DotLinkGame extends Phaser.Scene { + constructor() { super('DotLinkGame'); } + + init(data) { + this.gameDef = data.game ?? { slug: 'dotlink', name: 'Dot Link' }; + this.bank = []; + this.levelsCompleted = 0; + this.canPersist = true; + this.view = 'home'; + + // play state + this.board = null; + this.solution = null; + this.geom = null; + this.paths = null; + this.owner = null; + this.endpointGrid = null; + this.draw = null; + this.drawing = false; + this.overlayUp = false; + + // daily + this.dailyBoards = null; + this.dailyIndex = 0; + this.dailyElapsed = 0; + this.dailyDate = localDateString(); + this.timerEvent = null; + } + + async create() { + try { + const music = this.cache.json.get('music'); + if (music?.tracks) new MusicPlayer(this, music.tracks); + } catch (_) { /* optional */ } + + this.buildTextures(); + this.buildBackground(); + + const raw = this.cache.json.get('dotlink'); + this.bank = (raw?.levels ?? []).slice().sort((a, b) => a.level - b.level); + + try { + const res = await api.get('/puzzles/dotlink/progress'); + this.levelsCompleted = res?.levelsCompleted ?? 0; + } catch (_) { + this.canPersist = false; + this.levelsCompleted = 0; + } + + this.layer = this.add.container(0, 0); + this.registerInput(); + this.showHome(); + } + + // ── Background & textures ─────────────────────────────────────────────────── + buildTextures() { + if (!this.textures.exists('dlScan')) { + const s = this.make.graphics({ x: 0, y: 0, add: false }); + s.fillStyle(0x00f0ff, 0.06); s.fillRect(0, 0, GAME_WIDTH, 2); + s.generateTexture('dlScan', GAME_WIDTH, 6); + s.destroy(); + } + } + + buildBackground() { + // Deep gradient via stacked rectangles (indigo -> black). + const top = Phaser.Display.Color.ValueToColor(0x140a33); + const bot = Phaser.Display.Color.ValueToColor(C.bg); + const g = this.add.graphics().setDepth(-20); + const steps = 120; + for (let i = 0; i < steps; i++) { + const t = i / (steps - 1); + const col = Phaser.Display.Color.Interpolate.ColorWithColor(top, bot, 100, Math.round(t * 100)); + g.fillStyle(Phaser.Display.Color.GetColor(col.r, col.g, col.b), 1); + g.fillRect(0, Math.floor(t * GAME_HEIGHT), GAME_WIDTH, Math.ceil(GAME_HEIGHT / steps) + 1); + } + + // Synthwave "sun" glow low on the screen. + const sun = this.add.graphics().setDepth(-19); + for (let r = 520; r > 0; r -= 18) { + sun.fillStyle(C.sun, 0.015); + sun.fillCircle(GAME_WIDTH / 2, GAME_HEIGHT + 120, r); + } + sun.setBlendMode(Phaser.BlendModes.ADD); + + // Perspective grid: horizontals condensing toward a horizon + verticals. + const horizon = GAME_HEIGHT * 0.62; + const grid = this.add.graphics().setDepth(-18); + grid.lineStyle(1, C.grid, 0.55); + for (let i = 1; i <= 22; i++) { + const y = horizon + (i * i) * 1.7; + if (y > GAME_HEIGHT) break; + grid.lineBetween(0, y, GAME_WIDTH, y); + } + for (let i = -14; i <= 14; i++) { + const x = GAME_WIDTH / 2 + i * 64; + grid.lineBetween(GAME_WIDTH / 2 + i * 14, horizon, x, GAME_HEIGHT); + } + grid.setAlpha(0.5); + + // Scrolling scanlines. + const scan = this.add.tileSprite(GAME_WIDTH / 2, GAME_HEIGHT / 2, GAME_WIDTH, GAME_HEIGHT, 'dlScan') + .setDepth(-10).setAlpha(0.5); + scan.setBlendMode(Phaser.BlendModes.ADD); + this.tweens.add({ targets: scan, tilePositionY: GAME_HEIGHT, duration: 11000, repeat: -1, ease: 'Linear' }); + } + + // Neon title with a magenta chromatic-aberration ghost. + neonTitle(cx, y, text, size = 64) { + const main = this.add.text(cx, y, text, { + fontFamily: 'Righteous', fontSize: `${size}px`, color: C.neonHex, + }).setOrigin(0.5); + main.postFX.addGlow(C.neon, 6, 0, false, 0.1, 12); + const ghost = this.add.text(cx + 3, y + 2, text, { + fontFamily: 'Righteous', fontSize: `${size}px`, color: C.magentaHex, + }).setOrigin(0.5).setAlpha(0.35).setBlendMode(Phaser.BlendModes.ADD); + this.tweens.add({ targets: ghost, x: cx - 3, duration: 1700, yoyo: true, repeat: -1, ease: 'Sine.easeInOut' }); + this.layer.add([ghost, main]); + return main; + } + + clearLayer() { + this.drawing = false; + this.draw = null; + if (this.timerEvent) { this.timerEvent.remove(false); this.timerEvent = null; } + this.glowGfx = null; this.coreGfx = null; this.dotsGfx = null; + this.timerText = null; this.stageChips = null; + this.layer.removeAll(true); + } + + // ── HOME (mode select) ────────────────────────────────────────────────────── + showHome() { + this.view = 'home'; + this.board = null; + this.overlayUp = false; + this.clearLayer(); + const cx = GAME_WIDTH / 2; + + this.neonTitle(cx, 150, 'D O T L I N K', 90); + const sub = this.add.text(cx, 240, 'Link every pair · fill the grid · don\'t cross the streams', { + fontFamily: '"Julius Sans One"', fontSize: '26px', color: C.dimHex, + }).setOrigin(0.5); + this.layer.add(sub); + + const cardW = 520; + const cardH = 460; + const gap = 80; + const leftX = cx - cardW / 2 - gap / 2; + const rightX = cx + cardW / 2 + gap / 2; + const cardY = 640; + + this.modeCard(leftX, cardY, cardW, cardH, C.neon, C.neonHex, 'LEVELS', + `Campaign of 100 hand-picked puzzles\nof rising difficulty.`, + `Cleared ${this.levelsCompleted} / ${this.bank.length}`, + () => this.showLevelSelect()); + + const best = lsGet(DAILY_BEST_KEY); + const todayDone = lsGet(dailyRecKey(this.dailyDate)); + let dailyInfo = best ? `Best run: ${fmtTime(Number(best))}` : 'No run yet'; + if (todayDone) dailyInfo += `\nToday: ${fmtTime(Number(todayDone))} ✓`; + this.modeCard(rightX, cardY, cardW, cardH, C.magenta, C.magentaHex, "TODAY'S RUN", + `Five daily puzzles — same for everyone.\nRace the clock for your best time.`, + dailyInfo, + () => this.showDaily()); + + const back = new Button(this, cx, GAME_HEIGHT - 70, 'Back to Menu', () => this.scene.start('GameMenu'), + { variant: 'ghost', width: 240, height: 56, fontSize: 24 }); + this.layer.add(back); + } + + modeCard(x, y, w, h, accentN, accentHex, title, body, info, onClick) { + const g = this.add.graphics(); + const draw = (hover) => { + g.clear(); + g.fillStyle(C.panel, 0.92); + g.fillRoundedRect(x - w / 2, y - h / 2, w, h, 22); + g.lineStyle(hover ? 5 : 3, accentN, 1); + g.strokeRoundedRect(x - w / 2, y - h / 2, w, h, 22); + }; + draw(false); + g.postFX.addGlow(accentN, 4, 0, false, 0.06, 10); + + const t = this.add.text(x, y - h / 2 + 70, title, { + fontFamily: 'Righteous', fontSize: '56px', color: accentHex, + }).setOrigin(0.5); + const b = this.add.text(x, y - 10, body, { + fontFamily: '"Julius Sans One"', fontSize: '25px', color: C.textHex, align: 'center', lineSpacing: 10, + }).setOrigin(0.5); + const inf = this.add.text(x, y + h / 2 - 86, info, { + fontFamily: '"Julius Sans One"', fontSize: '22px', color: C.goldHex, align: 'center', lineSpacing: 8, + }).setOrigin(0.5); + + // Decorative mini dot-pair preview. + const py = y + h / 2 - 150; + const prev = this.add.graphics(); + prev.lineStyle(8, accentN, 0.9); + prev.lineBetween(x - 120, py, x + 120, py); + prev.fillStyle(accentN, 1); + prev.fillCircle(x - 120, py, 14); + prev.fillCircle(x + 120, py, 14); + prev.setBlendMode(Phaser.BlendModes.ADD); + + const hit = this.add.rectangle(x, y, w, h, 0xffffff, 0.001).setInteractive({ useHandCursor: true }); + hit.on('pointerover', () => draw(true)); + hit.on('pointerout', () => draw(false)); + hit.on('pointerup', () => { playSound(this, SFX.PIECE_CLICK); onClick(); }); + + this.layer.add([g, t, b, inf, prev, hit]); + } + + // ── LEVEL SELECT ──────────────────────────────────────────────────────────── + showLevelSelect() { + this.view = 'select'; + this.board = null; + this.overlayUp = false; + this.clearLayer(); + const cx = GAME_WIDTH / 2; + + this.neonTitle(cx, 80, 'L E V E L S', 60); + const nextLevel = Math.min(this.levelsCompleted + 1, this.bank.length); + const prog = this.add.text(cx, 138, `Cleared ${this.levelsCompleted} / ${this.bank.length}`, { + fontFamily: 'Righteous', fontSize: '24px', color: C.textHex, + }).setOrigin(0.5); + this.layer.add(prog); + + if (!this.bank.length) { + const msg = this.add.text(cx, 520, 'No puzzles found.\nRun: node server/scripts/genDotLink.js', { + fontFamily: '"Julius Sans One"', fontSize: '26px', color: COLORS.dangerHex, align: 'center', + }).setOrigin(0.5); + const back = new Button(this, cx, GAME_HEIGHT - 90, 'Back', () => this.showHome(), { variant: 'ghost' }); + this.layer.add([msg, back]); + return; + } + + const COLS = 20; + const SIZE = 78; + const GAP = 10; + const gridW = COLS * SIZE + (COLS - 1) * GAP; + const left = cx - gridW / 2 + SIZE / 2; + const top = 220; + + this.bank.forEach((p, i) => { + const col = i % COLS; + const row = Math.floor(i / COLS); + const x = left + col * (SIZE + GAP); + const y = top + row * (SIZE + GAP); + const level = p.level; + const cleared = level <= this.levelsCompleted; + const playable = level <= nextLevel; + const accent = cleared ? FLOW[2].n : playable ? C.neon : C.panelEdge; + const fill = cleared ? 0x10241a : playable ? 0x0d1430 : 0x0a0b16; + + const tile = this.add.rectangle(x, y, SIZE, SIZE, fill).setStrokeStyle(playable || cleared ? 3 : 2, accent, 1); + const num = this.add.text(x, y - 6, String(level), { + fontFamily: 'Righteous', fontSize: '26px', + color: playable || cleared ? C.textHex : '#3b4366', + }).setOrigin(0.5); + const tag = this.add.text(x, y + 22, cleared ? '✓' : playable ? `${p.rows}×${p.cols}` : '🔒', { + fontFamily: '"Julius Sans One"', fontSize: '13px', + color: cleared ? '#7df0a8' : playable ? C.dimHex : '#3b4366', + }).setOrigin(0.5); + this.layer.add([tile, num, tag]); + + if (playable) { + tile.setInteractive({ useHandCursor: true }); + tile.on('pointerover', () => tile.setStrokeStyle(4, C.magenta, 1)); + tile.on('pointerout', () => tile.setStrokeStyle(3, accent, 1)); + tile.on('pointerup', () => this.playLevel(level)); + } + }); + + const resume = new Button(this, cx - 150, GAME_HEIGHT - 70, `Play Level ${nextLevel}`, () => this.playLevel(nextLevel), + { width: 300, height: 58, fontSize: 24 }); + const back = new Button(this, cx + 180, GAME_HEIGHT - 70, 'Back', () => this.showHome(), + { variant: 'ghost', width: 180, height: 58, fontSize: 24 }); + const reset = new Button(this, 230, GAME_HEIGHT - 70, 'Reset Progress', () => this.confirmReset(), + { variant: 'ghost', width: 260, height: 58, fontSize: 22, textColor: COLORS.dangerHex }); + this.layer.add([resume, back, reset]); + + if (!this.canPersist) { + const note = this.add.text(cx, GAME_HEIGHT - 24, 'Sign in to save your progress across devices.', { + fontFamily: '"Julius Sans One"', fontSize: '16px', color: C.dimHex, + }).setOrigin(0.5); + this.layer.add(note); + } + } + + confirmReset() { + const cx = GAME_WIDTH / 2; const cy = GAME_HEIGHT / 2; + const dim = this.add.rectangle(cx, cy, GAME_WIDTH, GAME_HEIGHT, 0x000000, 0.66).setInteractive().setDepth(D.overlay); + const panel = this.add.graphics().setDepth(D.overlay); + panel.fillStyle(C.panel, 0.98); panel.fillRoundedRect(cx - 320, cy - 160, 640, 320, 20); + panel.lineStyle(3, COLORS.danger, 1); panel.strokeRoundedRect(cx - 320, cy - 160, 640, 320, 20); + const title = this.add.text(cx, cy - 90, 'Reset Progress?', { + fontFamily: 'Righteous', fontSize: '50px', color: COLORS.dangerHex, + }).setOrigin(0.5).setDepth(D.overlayUI); + const msg = this.add.text(cx, cy - 8, 'This clears every level you have cleared\nand starts you back at Level 1.', { + fontFamily: '"Julius Sans One"', fontSize: '24px', color: C.textHex, align: 'center', lineSpacing: 6, + }).setOrigin(0.5).setDepth(D.overlayUI); + const yes = new Button(this, cx - 150, cy + 88, 'Reset', () => { + api.post('/puzzles/dotlink/reset').catch(() => {}); + this.levelsCompleted = 0; + this.showLevelSelect(); + }, { width: 250, height: 58, fontSize: 24, textColor: COLORS.dangerHex }).setDepth(D.overlayUI); + const no = new Button(this, cx + 150, cy + 88, 'Cancel', () => this.showLevelSelect(), + { variant: 'ghost', width: 250, height: 58, fontSize: 24 }).setDepth(D.overlayUI); + this.layer.add([dim, panel, title, msg, yes, no]); + } + + // ── DAILY ─────────────────────────────────────────────────────────────────── + generateDaily() { + const base = dateSeed(this.dailyDate); + this.dailyBoards = DAILY_STAGES.map((s, i) => { + const rng = makeRng((base ^ Math.imul(0x9e3779b9, i + 1)) >>> 0); + return generateBoard(s.rows, s.cols, s.colors, rng); + }); + } + + showDaily() { + this.view = 'daily-intro'; + this.board = null; + this.overlayUp = false; + this.clearLayer(); + if (!this.dailyBoards) this.generateDaily(); + const cx = GAME_WIDTH / 2; + + this.neonTitle(cx, 110, "TODAY'S RUN", 64); + const dateText = this.add.text(cx, 178, this.dailyDate, { + fontFamily: '"Julius Sans One"', fontSize: '26px', color: C.dimHex, + }).setOrigin(0.5); + this.layer.add(dateText); + + // Five stage chips. + const chipW = 300; const chipH = 110; const gap = 24; + const totalW = DAILY_STAGES.length * chipW + (DAILY_STAGES.length - 1) * gap; + const startX = cx - totalW / 2 + chipW / 2; + const chipY = 360; + DAILY_STAGES.forEach((s, i) => { + const x = startX + i * (chipW + gap); + const accent = FLOW[i * 2 % FLOW.length].n; + const g = this.add.graphics(); + g.fillStyle(C.panel, 0.9); g.fillRoundedRect(x - chipW / 2, chipY - chipH / 2, chipW, chipH, 16); + g.lineStyle(3, accent, 1); g.strokeRoundedRect(x - chipW / 2, chipY - chipH / 2, chipW, chipH, 16); + const lbl = this.add.text(x, chipY - 18, s.label, { + fontFamily: 'Righteous', fontSize: '34px', color: '#' + accent.toString(16).padStart(6, '0'), + }).setOrigin(0.5); + const sz = this.add.text(x, chipY + 28, `${s.rows}×${s.cols} · ${s.colors} links`, { + fontFamily: '"Julius Sans One"', fontSize: '20px', color: C.dimHex, + }).setOrigin(0.5); + this.layer.add([g, lbl, sz]); + }); + + const best = lsGet(DAILY_BEST_KEY); + const todayDone = lsGet(dailyRecKey(this.dailyDate)); + const info = this.add.text(cx, 500, + `${best ? `Personal best: ${fmtTime(Number(best))}` : 'Set your first time today.'}` + + `${todayDone ? ` · Today solved in ${fmtTime(Number(todayDone))}` : ''}`, { + fontFamily: '"Julius Sans One"', fontSize: '24px', color: C.goldHex, + }).setOrigin(0.5); + const rules = this.add.text(cx, 560, + 'Solve all five in order. The clock runs across the whole set.', { + fontFamily: '"Julius Sans One"', fontSize: '22px', color: C.dimHex, + }).setOrigin(0.5); + this.layer.add([info, rules]); + + const start = new Button(this, cx, 690, todayDone ? 'Play Again' : 'Start Run', () => this.startDailyRun(), + { width: 320, height: 66, fontSize: 30 }); + const back = new Button(this, cx, 780, 'Back', () => this.showHome(), + { variant: 'ghost', width: 200, height: 56, fontSize: 24 }); + this.layer.add([start, back]); + } + + startDailyRun() { + this.dailyIndex = 0; + this.dailyElapsed = 0; + this.startDailyStage(0); + } + + startDailyStage(i) { + this.dailyIndex = i; + const stage = DAILY_STAGES[i]; + const g = this.dailyBoards[i]; + this.view = 'play'; + this.beginBoard(g.board, g.solution, { + mode: 'daily', + title: stage.label, + subtitle: `Puzzle ${i + 1} / ${DAILY_STAGES.length}`, + onWin: () => this.onDailyStageSolved(), + }); + // (Re)start the run timer on the first stage; keep it running across stages. + if (!this.timerEvent) { + this.timerEvent = this.time.addEvent({ + delay: 1000, loop: true, callback: () => { + this.dailyElapsed++; + if (this.timerText) this.timerText.setText(`⏱ ${fmtTime(this.dailyElapsed)}`); + }, + }); + } + } + + onDailyStageSolved() { + this.overlayUp = true; // freeze input during the transition (clock keeps running) + playSound(this, SFX.VICTORY_SHORT); + if (this.dailyIndex < DAILY_STAGES.length - 1) { + this.flashBanner(`${DAILY_STAGES[this.dailyIndex].label} CLEARED`, () => { + this.startDailyStage(this.dailyIndex + 1); + }); + } else { + if (this.timerEvent) { this.timerEvent.remove(false); this.timerEvent = null; } + this.finishDailyRun(); + } + } + + finishDailyRun() { + const total = this.dailyElapsed; + const prevBest = Number(lsGet(DAILY_BEST_KEY) ?? 0); + const isBest = !prevBest || total < prevBest; + if (isBest) lsSet(DAILY_BEST_KEY, String(total)); + lsSet(dailyRecKey(this.dailyDate), String(total)); + api.post('/history/single-player', { + slug: 'dotlink', score: total, opponentScores: [], result: 'win', + }).catch(() => {}); + + this.overlayUp = true; + const cx = GAME_WIDTH / 2; const cy = GAME_HEIGHT / 2; + const dim = this.add.rectangle(cx, cy, GAME_WIDTH, GAME_HEIGHT, 0x000000, 0.7).setDepth(D.overlay).setInteractive(); + const panel = this.add.graphics().setDepth(D.overlay); + panel.fillStyle(C.panel, 0.98); panel.fillRoundedRect(cx - 360, cy - 220, 720, 440, 22); + panel.lineStyle(3, C.magenta, 1); panel.strokeRoundedRect(cx - 360, cy - 220, 720, 440, 22); + panel.postFX.addGlow(C.magenta, 8, 0, false, 0.06, 12); + this.layer.add([dim, panel]); + + this.neonTitle(cx, cy - 130, 'RUN COMPLETE', 60); + const stat = this.add.text(cx, cy - 30, + `All five solved in ${fmtTime(total)}` + (isBest ? '\n★ NEW PERSONAL BEST ★' : `\nPersonal best: ${fmtTime(prevBest)}`), { + fontFamily: '"Julius Sans One"', fontSize: '30px', color: isBest ? C.goldHex : C.textHex, align: 'center', lineSpacing: 12, + }).setOrigin(0.5).setDepth(D.overlayUI); + this.layer.add(stat); + const again = new Button(this, cx - 130, cy + 110, 'Replay', () => this.showDaily(), + { width: 220, height: 58, fontSize: 24, variant: 'ghost' }).setDepth(D.overlayUI); + const home = new Button(this, cx + 130, cy + 110, 'Home', () => this.showHome(), + { width: 220, height: 58, fontSize: 24 }).setDepth(D.overlayUI); + this.layer.add([again, home]); + } + + flashBanner(text, onDone) { + const cx = GAME_WIDTH / 2; const cy = GAME_HEIGHT / 2; + const t = this.add.text(cx, cy, text, { + fontFamily: 'Righteous', fontSize: '72px', color: C.neonHex, + }).setOrigin(0.5).setAlpha(0).setScale(0.7).setDepth(D.overlayUI); + t.postFX.addGlow(C.neon, 8, 0, false, 0.1, 14); + this.layer.add(t); + this.tweens.add({ + targets: t, alpha: 1, scale: 1, duration: 360, ease: 'Back.easeOut', + onComplete: () => this.tweens.add({ + targets: t, alpha: 0, scale: 1.15, delay: 520, duration: 320, + onComplete: () => { t.destroy(); onDone(); }, + }), + }); + } + + // ── LEVELS PLAY ───────────────────────────────────────────────────────────── + playLevel(level) { + const lv = this.bank.find((p) => p.level === level); + if (!lv) return; + this.level = level; + this.view = 'play'; + this.beginBoard({ rows: lv.rows, cols: lv.cols, endpoints: lv.endpoints }, lv.solution, { + mode: 'level', + title: `Level ${level}`, + subtitle: `${lv.rows} × ${lv.cols} · ${lv.colors} links`, + onWin: () => this.onLevelSolved(), + }); + } + + onLevelSolved() { + this.overlayUp = true; + if (this.level > this.levelsCompleted) this.levelsCompleted = this.level; + api.post('/puzzles/dotlink/complete', { level: this.level }) + .then((res) => { if (res?.levelsCompleted != null) this.levelsCompleted = Math.max(this.levelsCompleted, res.levelsCompleted); }) + .catch(() => {}); + api.post('/history/single-player', { slug: 'dotlink', score: this.level, opponentScores: [], result: 'win' }).catch(() => {}); + playSound(this, SFX.VICTORY_SHORT); + + const cx = GAME_WIDTH / 2; const cy = GAME_HEIGHT / 2; + const dim = this.add.rectangle(cx, cy, GAME_WIDTH, GAME_HEIGHT, 0x000000, 0.66).setDepth(D.overlay).setInteractive(); + const panel = this.add.graphics().setDepth(D.overlay); + panel.fillStyle(C.panel, 0.98); panel.fillRoundedRect(cx - 320, cy - 190, 640, 380, 22); + panel.lineStyle(3, FLOW[2].n, 1); panel.strokeRoundedRect(cx - 320, cy - 190, 640, 380, 22); + panel.postFX.addGlow(FLOW[2].n, 8, 0, false, 0.06, 12); + this.layer.add([dim, panel]); + + this.neonTitle(cx, cy - 110, 'LINKED!', 64); + const hasNext = this.level < this.bank.length; + const stat = this.add.text(cx, cy - 30, hasNext ? `Level ${this.level} complete` : 'You cleared every level. Legend.', { + fontFamily: '"Julius Sans One"', fontSize: '28px', color: C.textHex, + }).setOrigin(0.5).setDepth(D.overlayUI); + this.layer.add(stat); + + const btns = []; + if (hasNext) { + btns.push(new Button(this, cx, cy + 50, `Next Level (${this.level + 1})`, () => this.playLevel(this.level + 1), + { width: 340, height: 60, fontSize: 26 }).setDepth(D.overlayUI)); + } + const replay = new Button(this, cx - 120, cy + 130, 'Replay', () => this.playLevel(this.level), + { width: 210, height: 54, fontSize: 22, variant: 'ghost' }).setDepth(D.overlayUI); + const levels = new Button(this, cx + 120, cy + 130, 'Levels', () => this.showLevelSelect(), + { width: 210, height: 54, fontSize: 22, variant: 'ghost' }).setDepth(D.overlayUI); + btns.push(replay, levels); + this.layer.add(btns); + } + + // ── Board setup & rendering ────────────────────────────────────────────────── + beginBoard(board, solution, opts) { + this.clearLayer(); + this.board = board; + this.solution = solution ?? null; + this.onWin = opts.onWin; + this.mode = opts.mode; + this.overlayUp = false; + this.drawing = false; + this.draw = null; + + const { rows, cols } = board; + this.paths = Array.from({ length: board.endpoints.length }, () => []); + this.owner = new Int16Array(rows * cols).fill(-1); + this.endpointGrid = new Int16Array(rows * cols).fill(-1); + this.endA = []; this.endB = []; + board.endpoints.forEach((e, k) => { + const a = e.a[0] * cols + e.a[1]; + const b = e.b[0] * cols + e.b[1]; + this.endpointGrid[a] = k; this.endpointGrid[b] = k; + this.endA[k] = a; this.endB[k] = b; + }); + + this.computeGeom(); + this.drawChrome(); + this.drawHud(opts.title, opts.subtitle); + + // Path graphics layers (back to front): glow then core then dots. + this.glowGfx = this.add.graphics().setBlendMode(Phaser.BlendModes.ADD); + this.coreGfx = this.add.graphics(); + this.dotsGfx = this.add.graphics(); + this.layer.add([this.glowGfx, this.coreGfx, this.dotsGfx]); + this.drawDots(); + this.redrawPaths(); + } + + computeGeom() { + const { rows, cols } = this.board; + const maxW = 1000; const maxH = 720; + const cell = Math.floor(Math.min(maxW / cols, maxH / rows)); + const boardW = cell * cols; const boardH = cell * rows; + const ox = Math.round((GAME_WIDTH - boardW) / 2); + const oy = Math.round(225 + (maxH - boardH) / 2); + this.geom = { cell, ox, oy, boardW, boardH }; + } + + cellCenter(idx) { + const { cell, ox, oy } = this.geom; + const cols = this.board.cols; + const r = Math.floor(idx / cols); const c = idx % cols; + return { x: ox + c * cell + cell / 2, y: oy + r * cell + cell / 2 }; + } + + cellFromXY(x, y) { + const { cell, ox, oy } = this.geom; + const { rows, cols } = this.board; + const c = Math.floor((x - ox) / cell); + const r = Math.floor((y - oy) / cell); + if (r < 0 || r >= rows || c < 0 || c >= cols) return -1; + return r * cols + c; + } + + drawChrome() { + const { cell, ox, oy, boardW, boardH } = this.geom; + const g = this.add.graphics().setDepth(0); + g.fillStyle(C.panel, 0.85); + g.fillRoundedRect(ox - 18, oy - 18, boardW + 36, boardH + 36, 18); + g.lineStyle(3, C.panelEdge, 1); + g.strokeRoundedRect(ox - 18, oy - 18, boardW + 36, boardH + 36, 18); + g.lineStyle(1, C.grid, 0.9); + for (let c = 0; c <= this.board.cols; c++) g.lineBetween(ox + c * cell, oy, ox + c * cell, oy + boardH); + for (let r = 0; r <= this.board.rows; r++) g.lineBetween(ox, oy + r * cell, ox + boardW, oy + r * cell); + g.postFX.addGlow(C.neon, 3, 0, false, 0.04, 6); + this.layer.add(g); + } + + drawHud(title, subtitle) { + const left = this.geom.ox - 18; + const t = this.add.text(left, 96, title, { + fontFamily: 'Righteous', fontSize: '48px', color: C.neonHex, + }).setOrigin(0, 0.5).setDepth(D.hud); + const s = this.add.text(left, 144, subtitle, { + fontFamily: '"Julius Sans One"', fontSize: '22px', color: C.dimHex, + }).setOrigin(0, 0.5).setDepth(D.hud); + this.layer.add([t, s]); + + if (this.mode === 'daily') { + this.timerText = this.add.text(this.geom.ox + this.geom.boardW + 18, 96, `⏱ ${fmtTime(this.dailyElapsed)}`, { + fontFamily: 'Righteous', fontSize: '40px', color: C.goldHex, + }).setOrigin(1, 0.5).setDepth(D.hud); + this.layer.add(this.timerText); + } + + // Side controls. + const BTN_W = 160; const BTN_H = 54; const GAP = 12; + const bx = left / 2 + 20; + let by = GAME_HEIGHT / 2 - (3 * BTN_H + 2 * GAP) / 2; + const clear = new Button(this, bx, by, 'Clear', () => this.clearAllPaths(), { width: BTN_W, height: BTN_H, fontSize: 22, variant: 'ghost' }); + by += BTN_H + GAP; + const hint = new Button(this, bx, by, 'Hint', () => this.useHint(), { width: BTN_W, height: BTN_H, fontSize: 22, variant: 'ghost' }); + by += BTN_H + GAP; + const quit = new Button(this, bx, by, this.mode === 'daily' ? 'Quit Run' : 'Levels', + () => (this.mode === 'daily' ? this.showDaily() : this.showLevelSelect()), + { width: BTN_W, height: BTN_H, fontSize: 22, variant: 'ghost' }); + this.layer.add([clear, hint, quit]); + } + + drawDots() { + const g = this.dotsGfx; + g.clear(); + const rDot = this.geom.cell * 0.30; + for (let k = 0; k < this.board.endpoints.length; k++) { + const col = FLOW[k % FLOW.length].n; + for (const idx of [this.endA[k], this.endB[k]]) { + const { x, y } = this.cellCenter(idx); + g.fillStyle(col, 0.18); g.fillCircle(x, y, rDot * 1.7); + g.fillStyle(col, 1); g.fillCircle(x, y, rDot); + g.fillStyle(0xffffff, 0.55); g.fillCircle(x - rDot * 0.28, y - rDot * 0.28, rDot * 0.34); + } + } + } + + redrawPaths() { + const glow = this.glowGfx; const core = this.coreGfx; + glow.clear(); core.clear(); + const cell = this.geom.cell; + const coreW = cell * 0.34; const glowW = cell * 0.6; + for (let k = 0; k < this.paths.length; k++) { + const path = this.paths[k]; + if (!path.length) continue; + const col = FLOW[k % FLOW.length].n; + this.strokePath(glow, path, col, glowW, 0.22); + this.strokePath(core, path, col, coreW, 1); + } + } + + strokePath(g, path, col, width, alpha) { + if (path.length === 1) { + const p = this.cellCenter(path[0]); + g.fillStyle(col, alpha); g.fillCircle(p.x, p.y, width / 2); + return; + } + g.lineStyle(width, col, alpha); + g.beginPath(); + for (let i = 0; i < path.length; i++) { + const p = this.cellCenter(path[i]); + if (i === 0) g.moveTo(p.x, p.y); else g.lineTo(p.x, p.y); + } + g.strokePath(); + // Round the joints/caps. + g.fillStyle(col, alpha); + for (let i = 0; i < path.length; i++) { + const p = this.cellCenter(path[i]); + g.fillCircle(p.x, p.y, width / 2); + } + } + + // ── Interaction ────────────────────────────────────────────────────────────── + registerInput() { + this.input.on('pointerdown', (ptr) => this.onPointerDown(ptr)); + this.input.on('pointermove', (ptr) => { if (ptr.isDown) this.onPointerMove(ptr); }); + this.input.on('pointerup', () => this.onPointerUp()); + } + + inPlay() { return this.view === 'play' && this.board && !this.overlayUp; } + + pathCells(k) { return this.paths[k]; } + + colorAt(idx) { return this.owner[idx]; } + + resetColor(k) { + for (const cell of this.paths[k]) this.owner[cell] = -1; + this.paths[k] = []; + } + + truncateColorTo(k, index) { + const path = this.paths[k]; + for (let i = index + 1; i < path.length; i++) this.owner[path[i]] = -1; + path.length = index + 1; + } + + onPointerDown(ptr) { + if (!this.inPlay()) return; + const idx = this.cellFromXY(ptr.x, ptr.y); + if (idx < 0) return; + const ec = this.endpointGrid[idx]; + if (ec >= 0) { + // Start a fresh path from this endpoint. + this.resetColor(ec); + this.paths[ec] = [idx]; + this.owner[idx] = ec; + const start = idx; + const target = start === this.endA[ec] ? this.endB[ec] : this.endA[ec]; + this.draw = { color: ec, target }; + this.drawing = true; + playSound(this, SFX.PIECE_CLICK); + this.redrawPaths(); + return; + } + const oc = this.owner[idx]; + if (oc >= 0) { + // Continue an existing path from the touched cell. + const path = this.paths[oc]; + const pi = path.indexOf(idx); + if (pi < 0) return; + this.truncateColorTo(oc, pi); + const start = path[0]; + const target = start === this.endA[oc] ? this.endB[oc] : this.endA[oc]; + this.draw = { color: oc, target }; + this.drawing = true; + this.redrawPaths(); + } + } + + onPointerMove(ptr) { + if (!this.inPlay() || !this.drawing || !this.draw) return; + const target = this.cellFromXY(ptr.x, ptr.y); + if (target < 0) return; + const cols = this.board.cols; + let guard = 0; + while (guard++ < 80) { + const path = this.paths[this.draw.color]; + const head = path[path.length - 1]; + if (head === target) break; + const next = this.stepToward(head, target, cols); + if (next < 0) break; + const moved = this.tryEnter(next); + if (!moved) break; + if (!this.drawing) break; // completed + } + } + + stepToward(head, target, cols) { + const hr = Math.floor(head / cols); const hc = head % cols; + const tr = Math.floor(target / cols); const tc = target % cols; + const dr = tr - hr; const dc = tc - hc; + // Prefer the axis with the larger remaining distance. + if (Math.abs(dr) >= Math.abs(dc) && dr !== 0) return (hr + Math.sign(dr)) * cols + hc; + if (dc !== 0) return hr * cols + (hc + Math.sign(dc)); + if (dr !== 0) return (hr + Math.sign(dr)) * cols + hc; + return -1; + } + + // Attempt to extend the active path into `next`. Returns true if the path + // changed. Sets this.drawing=false when the link is completed. + tryEnter(next) { + const k = this.draw.color; + const path = this.paths[k]; + const head = path[path.length - 1]; + if (!manhattanAdjacent(idxToRC(head, this.board.cols), idxToRC(next, this.board.cols))) return false; + + const ec = this.endpointGrid[next]; + if (ec === k && next === this.draw.target) { + // Completed link. + this.owner[next] = k; + path.push(next); + this.drawing = false; + this.redrawPaths(); + this.pulseCell(next, FLOW[k % FLOW.length].n); + playSound(this, SFX.CARD_PLACE); + this.checkWin(); + return true; + } + if (ec >= 0) return false; // another colour's dot, or our own start dot + + // Already part of our own path -> truncate back to it (backtrack / un-cross). + const selfIdx = path.indexOf(next); + if (selfIdx >= 0) { + this.truncateColorTo(k, selfIdx); + this.redrawPaths(); + return true; + } + + // Overwriting another colour's pipe: erase it from the touched cell onward. + const oc = this.owner[next]; + if (oc >= 0 && oc !== k) this.cutAt(oc, next); + + this.owner[next] = k; + path.push(next); + this.redrawPaths(); + return true; + } + + // Remove `cell` and everything drawn after it from colour `oc`'s path. + cutAt(oc, cell) { + const path = this.paths[oc]; + const i = path.indexOf(cell); + if (i < 0) return; + for (let j = i; j < path.length; j++) this.owner[path[j]] = -1; + path.length = i; + } + + pulseCell(idx, col) { + const { x, y } = this.cellCenter(idx); + const ring = this.add.circle(x, y, this.geom.cell * 0.3, col, 0).setStrokeStyle(4, col, 0.9).setDepth(D.hud); + this.layer.add(ring); + this.tweens.add({ + targets: ring, scale: 2.4, alpha: 0, duration: 460, ease: 'Cubic.easeOut', + onComplete: () => ring.destroy(), + }); + } + + onPointerUp() { + if (!this.inPlay()) return; + this.drawing = false; + this.draw = null; + this.checkWin(); + } + + clearAllPaths() { + if (!this.inPlay()) return; + for (let k = 0; k < this.paths.length; k++) this.resetColor(k); + this.drawing = false; this.draw = null; + this.redrawPaths(); + playSound(this, SFX.CARD_SHUFFLE); + } + + useHint() { + if (!this.inPlay() || !this.solution) return; + // Fill in the first colour whose current path doesn't match its solution. + for (let k = 0; k < this.solution.length; k++) { + const sol = this.solution[k]; + const cur = this.paths[k]; + const same = cur.length === sol.length && cur.every((idx, i) => idx === sol[i][0] * this.board.cols + sol[i][1]); + if (same) continue; + this.resetColor(k); + const cells = sol.map((rc) => rc[0] * this.board.cols + rc[1]); + for (const cell of cells) { + const oc = this.owner[cell]; + if (oc >= 0 && oc !== k) this.cutAt(oc, cell); + this.owner[cell] = k; + } + this.paths[k] = cells; + this.redrawPaths(); + playSound(this, SFX.PIECE_CLICK); + this.checkWin(); + return; + } + } + + checkWin() { + if (this.overlayUp || !this.board) return; + const asRC = this.paths.map((p) => p.map((idx) => idxToRC(idx, this.board.cols))); + if (isSolved(this.board, asRC)) { + this.drawing = false; this.draw = null; + if (this.onWin) this.onWin(); + } + } +} + +function idxToRC(idx, cols) { return [Math.floor(idx / cols), idx % cols]; } diff --git a/public/src/games/dotlink/DotLinkLogic.js b/public/src/games/dotlink/DotLinkLogic.js new file mode 100644 index 0000000..751c9b4 --- /dev/null +++ b/public/src/games/dotlink/DotLinkLogic.js @@ -0,0 +1,348 @@ +// Dot Link — pure puzzle engine (no Phaser). Shared by the Phaser scene, the +// offline bank generator (server/scripts/genDotLink.js) and the verifier. +// +// "Dot Link" is a Flow-Free / Numberlink puzzle: every colour has two endpoint +// dots; connect each pair with a non-crossing path so that EVERY cell of the +// grid is covered exactly once. +// +// Board model: +// { rows, cols, endpoints: [ { color, a:[r,c], b:[r,c] }, ... ] } +// A solution assigns every cell to exactly one colour such that each colour +// forms a single simple path between its two endpoints and no cell is empty. + +// ── Seeded RNG (mulberry32) ────────────────────────────────────────────────── +export function makeRng(seed) { + let a = seed >>> 0; + return () => { + a |= 0; a = (a + 0x6d2b79f5) | 0; + let t = Math.imul(a ^ (a >>> 15), 1 | a); + t = (t + Math.imul(t ^ (t >>> 7), 61 | t)) ^ t; + return ((t ^ (t >>> 14)) >>> 0) / 4294967296; + }; +} + +// Hash an arbitrary string (e.g. a date "2026-06-14") to a uint32 seed so that +// everyone playing on the same day gets the same daily boards. +export function dateSeed(str) { + let h = 0x811c9dc5; + for (let i = 0; i < str.length; i++) { + h ^= str.charCodeAt(i); + h = Math.imul(h, 0x01000193); + } + return h >>> 0; +} + +// Local YYYY-MM-DD for a Date (defaults to now). +export function localDateString(d = new Date()) { + const y = d.getFullYear(); + const m = String(d.getMonth() + 1).padStart(2, '0'); + const day = String(d.getDate()).padStart(2, '0'); + return `${y}-${m}-${day}`; +} + +// ── Grid helpers ───────────────────────────────────────────────────────────── +function buildNeighbors(rows, cols) { + const nbr = new Array(rows * cols); + for (let r = 0; r < rows; r++) { + for (let c = 0; c < cols; c++) { + const list = []; + if (r > 0) list.push((r - 1) * cols + c); + if (r < rows - 1) list.push((r + 1) * cols + c); + if (c > 0) list.push(r * cols + (c - 1)); + if (c < cols - 1) list.push(r * cols + (c + 1)); + nbr[r * cols + c] = list; + } + } + return nbr; +} + +export function manhattanAdjacent(a, b) { + return Math.abs(a[0] - b[0]) + Math.abs(a[1] - b[1]) === 1; +} + +// ── Solver / solution counter ──────────────────────────────────────────────── +// Grows each colour's path from endpoint a toward endpoint b. Counts solutions +// up to `countLimit` (default 2 — enough to decide uniqueness). Aborts and +// reports `aborted:true` if it exceeds `maxNodes` search nodes. +// +// Returns { count, aborted, solvable }. +export function solve(board, opts = {}) { + const { rows, cols } = board; + const N = rows * cols; + const colors = board.endpoints.length; + const countLimit = opts.countLimit ?? 2; + const maxNodes = opts.maxNodes ?? 400000; + const nbr = buildNeighbors(rows, cols); + const idx = (rc) => rc[0] * cols + rc[1]; + + const grid = new Int16Array(N).fill(-1); // cell -> colour or -1 empty + const headAt = new Int16Array(N).fill(-1); // cell -> colour whose active head sits here + const goalAt = new Int16Array(N).fill(-1); // cell -> colour whose goal sits here (fixed) + const heads = new Int32Array(colors); + const goals = new Int32Array(colors); + const connected = new Uint8Array(colors); + + for (let k = 0; k < colors; k++) { + const e = board.endpoints[k]; + const a = idx(e.a); + const b = idx(e.b); + if (grid[a] !== -1 || grid[b] !== -1) { + return { count: 0, aborted: false, solvable: false }; // overlapping endpoints + } + grid[a] = k; grid[b] = k; + heads[k] = a; goals[k] = b; + headAt[a] = k; + goalAt[b] = k; + } + + let count = 0; + let nodes = 0; + let aborted = false; + + // Reusable BFS buffers (stamp-based to avoid per-call clears). + const reachStamp = new Int32Array(N); // empty cell reachable by some head + const seenStamp = new Int32Array(N); + const queue = new Int32Array(N); + let stamp = 0; + + // Two safe, strong prunes (never reject a real solution): + // (1) Degree: every empty cell needs >=2 open connections (empty neighbour, + // active head, or open goal endpoint) since it must be an interior path + // cell of degree 2. + // (2) Reachability: each unconnected colour's head must still reach its goal + // through empty cells, AND every empty cell must be reachable from some + // head through empty cells (or it can never be filled). + function pruneOk() { + for (let i = 0; i < N; i++) { + if (grid[i] !== -1) continue; + let deg = 0; + const ns = nbr[i]; + for (let j = 0; j < ns.length; j++) { + const nb = ns[j]; + if (grid[nb] === -1) { deg++; if (deg >= 2) break; continue; } + const h = headAt[nb]; + if (h !== -1 && !connected[h]) { deg++; if (deg >= 2) break; continue; } + const g = goalAt[nb]; + if (g !== -1 && !connected[g]) { deg++; if (deg >= 2) break; } + } + if (deg < 2) return false; + } + + const reachTag = ++stamp; + for (let k = 0; k < colors; k++) { + if (connected[k]) continue; + const head = heads[k]; + const goal = goals[k]; + const seenTag = ++stamp; + let qh = 0; let qt = 0; + let reachedGoal = false; + const hns = nbr[head]; + for (let j = 0; j < hns.length; j++) { + const nb = hns[j]; + if (nb === goal) { reachedGoal = true; } + else if (grid[nb] === -1 && seenStamp[nb] !== seenTag) { + seenStamp[nb] = seenTag; reachStamp[nb] = reachTag; queue[qt++] = nb; + } + } + while (qh < qt) { + const cur = queue[qh++]; + const cns = nbr[cur]; + for (let j = 0; j < cns.length; j++) { + const nb = cns[j]; + if (nb === goal) { reachedGoal = true; continue; } + if (grid[nb] === -1 && seenStamp[nb] !== seenTag) { + seenStamp[nb] = seenTag; reachStamp[nb] = reachTag; queue[qt++] = nb; + } + } + } + if (!reachedGoal) return false; + } + for (let i = 0; i < N; i++) { + if (grid[i] === -1 && reachStamp[i] !== reachTag) return false; + } + return true; + } + + function dfs() { + nodes++; + if (nodes > maxNodes) { aborted = true; return; } + + // Most-constrained colour to extend (fewest moves). Bail if any unconnected + // colour has no move. + let allConnected = true; + let bestK = -1; + let bestMoves = null; + let bestLen = Infinity; + for (let k = 0; k < colors; k++) { + if (connected[k]) continue; + allConnected = false; + const h = heads[k]; + const g = goals[k]; + const moves = []; + const ns = nbr[h]; + for (let j = 0; j < ns.length; j++) { + const nb = ns[j]; + if (nb === g) moves.push(nb); + else if (grid[nb] === -1) moves.push(nb); + } + if (moves.length === 0) return; // stuck colour + if (moves.length < bestLen) { bestLen = moves.length; bestK = k; bestMoves = moves; } + } + + if (allConnected) { + for (let i = 0; i < N; i++) if (grid[i] === -1) return; // unfilled -> dead + count++; + return; + } + + if (!pruneOk()) return; + + const k = bestK; + const h = heads[k]; + const g = goals[k]; + for (let m = 0; m < bestMoves.length; m++) { + const n = bestMoves[m]; + if (n === g) { + // Connect: head reaches its goal. + headAt[h] = -1; + connected[k] = 1; + dfs(); + connected[k] = 0; + headAt[h] = k; + } else { + grid[n] = k; headAt[h] = -1; headAt[n] = k; heads[k] = n; + dfs(); + heads[k] = h; headAt[n] = -1; headAt[h] = k; grid[n] = -1; + } + if (aborted || count >= countLimit) return; + } + } + + dfs(); + return { count, aborted, solvable: count > 0 }; +} + +// ── Random board generation ────────────────────────────────────────────────── +// Generate a random Hamiltonian path over the whole grid via the "backbite" +// algorithm, then cut it into `colors` contiguous segments. Each segment's two +// ends become a colour's endpoints — guaranteeing a full-cover solution exists. +function randomHamiltonian(rows, cols, rng) { + const N = rows * cols; + const nbr = buildNeighbors(rows, cols); + const path = []; + for (let r = 0; r < rows; r++) { + if (r % 2 === 0) for (let c = 0; c < cols; c++) path.push(r * cols + c); + else for (let c = cols - 1; c >= 0; c--) path.push(r * cols + c); + } + const pos = new Int32Array(N); + for (let i = 0; i < N; i++) pos[path[i]] = i; + + const reverse = (lo, hi) => { + while (lo < hi) { + const a = path[lo], b = path[hi]; + path[lo] = b; path[hi] = a; + pos[b] = lo; pos[a] = hi; + lo++; hi--; + } + }; + + const iters = Math.max(2000, N * 30); + for (let it = 0; it < iters; it++) { + const L = path.length; + if (rng() < 0.5) { + // Backbite the tail. + const t = path[L - 1]; + const cand = nbr[t]; + const m = cand[Math.floor(rng() * cand.length)]; + const k = pos[m]; + if (k < L - 2) reverse(k + 1, L - 1); + } else { + // Backbite the head. + const hcell = path[0]; + const cand = nbr[hcell]; + const m = cand[Math.floor(rng() * cand.length)]; + const k = pos[m]; + if (k > 1) reverse(0, k - 1); + } + } + return path; +} + +// Cut the Hamiltonian path into `colors` contiguous segments. Returns both the +// puzzle (endpoints) and the reference `solution` (each colour's full cell list) +// — the partition is itself a valid full-cover solution. +function cutIntoColors(ham, colors, rows, cols, rng) { + const N = ham.length; + if (colors > Math.floor(N / 2)) return null; // need >=2 cells per colour + const lens = new Array(colors).fill(2); + let rem = N - 2 * colors; + while (rem > 0) { lens[Math.floor(rng() * colors)]++; rem--; } + const endpoints = []; + const solution = []; + let p = 0; + for (let k = 0; k < colors; k++) { + const cells = []; + for (let j = 0; j < lens[k]; j++) { + const cell = ham[p + j]; + cells.push([Math.floor(cell / cols), cell % cols]); + } + endpoints.push({ color: k, a: cells[0], b: cells[cells.length - 1] }); + solution.push(cells); + p += lens[k]; + } + return { board: { rows, cols, endpoints }, solution }; +} + +// Produce a board for the given size/colour count. Always returns a valid, +// solvable, full-cover board plus its reference solution. When `uniqueCheck` is +// set (cheap only on small grids) it prefers a board the search solver proves +// uniquely solvable, falling back to the first candidate otherwise. +// Deterministic for a given rng sequence. Returns { board, solution, unique }. +export function generateBoard(rows, cols, colors, rng, opts = {}) { + const cells = rows * cols; + const uniqueCheck = opts.uniqueCheck ?? (cells <= 64); + const tries = uniqueCheck ? (opts.tries ?? 24) : 1; + const maxNodes = opts.maxNodes ?? 200000; + let fallback = null; + for (let t = 0; t < tries; t++) { + const ham = randomHamiltonian(rows, cols, rng); + const cut = cutIntoColors(ham, colors, rows, cols, rng); + if (!cut) return null; + if (!fallback) fallback = cut; + if (!uniqueCheck) break; + const res = solve(cut.board, { countLimit: 2, maxNodes }); + if (!res.aborted && res.count === 1) { + return { board: cut.board, solution: cut.solution, unique: true }; + } + } + return { board: fallback.board, solution: fallback.solution, unique: false }; +} + +// ── Win check for live play ────────────────────────────────────────────────── +// `paths` maps colour index -> array of [r,c] cells the player has drawn for +// that colour (endpoints included). Returns true when every colour links its +// two endpoints with a contiguous simple path, every cell is covered exactly +// once, and nothing overlaps. +export function isSolved(board, paths) { + const { rows, cols } = board; + const owner = new Int16Array(rows * cols).fill(-1); + for (let k = 0; k < board.endpoints.length; k++) { + const path = paths[k]; + if (!path || path.length < 2) return false; + const e = board.endpoints[k]; + const first = path[0]; + const last = path[path.length - 1]; + const endsOk = + (first[0] === e.a[0] && first[1] === e.a[1] && last[0] === e.b[0] && last[1] === e.b[1]) || + (first[0] === e.b[0] && first[1] === e.b[1] && last[0] === e.a[0] && last[1] === e.a[1]); + if (!endsOk) return false; + for (let i = 0; i < path.length; i++) { + const cell = path[i][0] * cols + path[i][1]; + if (owner[cell] !== -1) return false; // overlap + owner[cell] = k; + if (i > 0 && !manhattanAdjacent(path[i - 1], path[i])) return false; // broken + } + } + for (let i = 0; i < owner.length; i++) if (owner[i] === -1) return false; // unfilled + return true; +} diff --git a/public/src/main.js b/public/src/main.js index dd91777..4bd0015 100644 --- a/public/src/main.js +++ b/public/src/main.js @@ -75,6 +75,7 @@ import MiniMotorwaysGame from './games/minimotorways/MiniMotorwaysGame.js'; import SlotsGame from './games/slots/SlotsGame.js'; import CribbageGame from './games/cribbage/CribbageGame.js'; import CanastaGame from './games/canasta/CanastaGame.js'; +import DotLinkGame from './games/dotlink/DotLinkGame.js'; const config = { type: Phaser.AUTO, @@ -163,6 +164,7 @@ const config = { SlotsGame, CribbageGame, CanastaGame, + DotLinkGame, ], }; diff --git a/public/src/scenes/GameRoomScene.js b/public/src/scenes/GameRoomScene.js index bd7092f..d6ee0de 100644 --- a/public/src/scenes/GameRoomScene.js +++ b/public/src/scenes/GameRoomScene.js @@ -22,7 +22,7 @@ export default class GameRoomScene extends Phaser.Scene { } create() { - const slugDispatch = { backgammon: 'Backgammon', holdem: 'HoldemGame', blackjack: 'BlackjackGame', parchisi: 'ParchisiGame', yatzi: 'YatziGame', skipbo: 'SkipBoGame', phase10: 'Phase10Game', chinesecheckers: 'ChineseCheckersGame', gofish: 'GoFishGame', uno: 'UnoGame', craps: 'CrapsGame', roulette: 'RouletteGame', mexicantrain: 'MexicanTrainGame', hearts: 'HeartsGame', catan: 'CatanGame', tickettoride: 'TicketToRideGame', nerts: 'NertsGame', bingo: 'BingoGame', baccarat: 'BaccaratGame', dominion: 'DominionGame', checkers: 'CheckersGame', chess: 'ChessGame', wordle: 'WordleGame', scrabble: 'ScrabbleGame', ghost: 'GhostGame', wordladder: 'WordLadderGame', wordsearch: 'WordSearchGame', hangman: 'HangmanGame', sudoku: 'SudokuGame', othello: 'OthelloGame', go: 'GoGame', battleship: 'BattleshipGame', mastermind: 'MastermindGame', connect4: 'Connect4Game', boggle: 'BoggleGame', oldmaid: 'OldMaidGame', blokus: 'BlokusGame', spellingbee: 'SpellingBeeGame', minicrossword: 'MiniCrosswordGame', forbiddenisland: 'ForbiddenIslandGame', solitairetour: 'SolitaireTourGame', splendor: 'SplendorGame', tectonic: 'TectonicGame', labyrinth: 'LabyrinthGame', videopoker: 'VideoPokerGame', farkel: 'FarkelGame', stratego: 'StrategoGame', kiitos: 'KiitosGame', monopoly: 'MonopolyGame', triominoes: 'TriominoesGame', freecell: 'FreecellGame', rushhour: 'RushHourGame', hexsweeper: 'HexsweeperGame', puddingmonsters: 'PuddingMonstersGame', shift: 'ShiftGame', blockfighter: 'BlockFighterGame', mahjongmatch: 'MahjongMatchGame', mahjong: 'MahjongGame', jewelquest: 'JewelQuestGame', zuma: 'ZumaGame', bejeweled: 'BejeweledGame', minimotorways: 'MiniMotorwaysGame', slots: 'SlotsGame', cribbage: 'CribbageGame', canasta: 'CanastaGame' }; + const slugDispatch = { backgammon: 'Backgammon', holdem: 'HoldemGame', blackjack: 'BlackjackGame', parchisi: 'ParchisiGame', yatzi: 'YatziGame', skipbo: 'SkipBoGame', phase10: 'Phase10Game', chinesecheckers: 'ChineseCheckersGame', gofish: 'GoFishGame', uno: 'UnoGame', craps: 'CrapsGame', roulette: 'RouletteGame', mexicantrain: 'MexicanTrainGame', hearts: 'HeartsGame', catan: 'CatanGame', tickettoride: 'TicketToRideGame', nerts: 'NertsGame', bingo: 'BingoGame', baccarat: 'BaccaratGame', dominion: 'DominionGame', checkers: 'CheckersGame', chess: 'ChessGame', wordle: 'WordleGame', scrabble: 'ScrabbleGame', ghost: 'GhostGame', wordladder: 'WordLadderGame', wordsearch: 'WordSearchGame', hangman: 'HangmanGame', sudoku: 'SudokuGame', othello: 'OthelloGame', go: 'GoGame', battleship: 'BattleshipGame', mastermind: 'MastermindGame', connect4: 'Connect4Game', boggle: 'BoggleGame', oldmaid: 'OldMaidGame', blokus: 'BlokusGame', spellingbee: 'SpellingBeeGame', minicrossword: 'MiniCrosswordGame', forbiddenisland: 'ForbiddenIslandGame', solitairetour: 'SolitaireTourGame', splendor: 'SplendorGame', tectonic: 'TectonicGame', labyrinth: 'LabyrinthGame', videopoker: 'VideoPokerGame', farkel: 'FarkelGame', stratego: 'StrategoGame', kiitos: 'KiitosGame', monopoly: 'MonopolyGame', triominoes: 'TriominoesGame', freecell: 'FreecellGame', rushhour: 'RushHourGame', hexsweeper: 'HexsweeperGame', puddingmonsters: 'PuddingMonstersGame', shift: 'ShiftGame', blockfighter: 'BlockFighterGame', mahjongmatch: 'MahjongMatchGame', mahjong: 'MahjongGame', jewelquest: 'JewelQuestGame', zuma: 'ZumaGame', bejeweled: 'BejeweledGame', minimotorways: 'MiniMotorwaysGame', slots: 'SlotsGame', cribbage: 'CribbageGame', canasta: 'CanastaGame', dotlink: 'DotLinkGame' }; if (slugDispatch[this.game.slug]) { this.scene.start(slugDispatch[this.game.slug], { game: this.game, diff --git a/public/src/scenes/PreloadScene.js b/public/src/scenes/PreloadScene.js index a81a58d..7dd0257 100644 --- a/public/src/scenes/PreloadScene.js +++ b/public/src/scenes/PreloadScene.js @@ -68,6 +68,7 @@ export default class PreloadScene extends Phaser.Scene { this.load.json('blockfighter', '/data/blockfighter.json'); this.load.json('jewelquest', '/data/jewelquest.json'); this.load.json('zuma', '/data/zuma.json'); + this.load.json('dotlink', '/data/dotlink.json'); this.load.audio('sfx-water-splash', '/assets/fx/water-splash.mp3'); this.load.audio('sfx-water-sink', '/assets/fx/water-sink.mp3'); diff --git a/server/games/registry.js b/server/games/registry.js index 75bda00..e36ef71 100644 --- a/server/games/registry.js +++ b/server/games/registry.js @@ -90,3 +90,4 @@ registerGame({ slug: 'minimotorways', name: 'Mini Motorways', category: 'logic', registerGame({ slug: 'slots', name: 'Slot Machines', category: 'casino', minPlayers: 1, maxPlayers: 1, minOpponents: 0, maxOpponents: 0, iconFrame: 63 }); registerGame({ slug: 'cribbage', name: 'Cribbage', category: 'cards', cardGame: true, minPlayers: 2, maxPlayers: 2, minOpponents: 1, maxOpponents: 1, hasTutorial: true, iconFrame: 64 }); registerGame({ slug: 'canasta', name: 'Canasta', category: 'cards', cardGame: true, minPlayers: 4, maxPlayers: 4, minOpponents: 3, maxOpponents: 3, hasTutorial: true, iconFrame: 65 }); +registerGame({ slug: 'dotlink', name: 'Dot Link', category: 'logic', minPlayers: 1, maxPlayers: 1, minOpponents: 0, maxOpponents: 0, iconFrame: 66 }); diff --git a/server/scripts/genDotLink.js b/server/scripts/genDotLink.js new file mode 100644 index 0000000..4f84f56 --- /dev/null +++ b/server/scripts/genDotLink.js @@ -0,0 +1,111 @@ +// Offline generator for Dot Link puzzles. +// +// Builds a smooth easy->legendary curve of 100 Flow-Free boards by growing a +// random Hamiltonian path over each grid (backbite) and cutting it into colour +// segments, then preferring boards the solver proves uniquely solvable. Writes +// ordered levels to public/data/dotlink.json. +// +// Usage: +// node server/scripts/genDotLink.js [seed] [outFile] +// +// Deterministic: same seed -> same bank. + +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { makeRng, generateBoard, isSolved } from '../../public/src/games/dotlink/DotLinkLogic.js'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const OUT_FILE = process.argv[3] + ? path.resolve(process.argv[3]) + : path.join(__dirname, '../../public/data/dotlink.json'); +const SEED = process.argv[2] ? Number(process.argv[2]) >>> 0 : 0xd07117e5; + +// Difficulty curve: grid size grows, colour count grows. counts sum to 100. +const TIERS = [ + { count: 12, rows: 5, cols: 5, colorsMin: 4, colorsMax: 5 }, + { count: 14, rows: 6, cols: 6, colorsMin: 5, colorsMax: 6 }, + { count: 14, rows: 7, cols: 7, colorsMin: 6, colorsMax: 7 }, + { count: 14, rows: 8, cols: 8, colorsMin: 7, colorsMax: 8 }, + { count: 14, rows: 9, cols: 9, colorsMin: 8, colorsMax: 9 }, + { count: 12, rows: 10, cols: 10, colorsMin: 9, colorsMax: 10 }, + { count: 12, rows: 11, cols: 11, colorsMin: 10, colorsMax: 11 }, + { count: 8, rows: 11, cols: 11, colorsMin: 12, colorsMax: 12 }, +]; + +function canonKey(board) { + return board.endpoints + .map((e) => { + const a = e.a[0] * board.cols + e.a[1]; + const b = e.b[0] * board.cols + e.b[1]; + return a < b ? `${a}-${b}` : `${b}-${a}`; + }) + .sort() + .join('|'); +} + +const rng = makeRng(SEED); +console.log(`[dotlink] generating with seed 0x${SEED.toString(16)}…`); + +const levels = []; +const seen = new Set(); +let uniqueCount = 0; +const startedAt = Date.now(); + +for (const tier of TIERS) { + for (let i = 0; i < tier.count; i++) { + const span = tier.colorsMax - tier.colorsMin; + const colors = tier.count > 1 + ? tier.colorsMin + Math.round((i / (tier.count - 1)) * span) + : tier.colorsMin; + + // generateBoard always returns a valid (solvable) board with its reference + // solution; prefer one that is uniquely solvable (only checked on small + // grids) and not a duplicate of an earlier level. + let chosen = null; + for (let attempt = 0; attempt < 4; attempt++) { + const g = generateBoard(tier.rows, tier.cols, colors, rng, { tries: 24, maxNodes: 200000 }); + if (!g) continue; + const dup = seen.has(canonKey(g.board)); + if (!chosen || (!dup && (g.unique || !chosen.unique))) chosen = g; + if (g.unique && !dup) break; + } + if (!chosen) { + console.error(`[dotlink] FAILED to generate a ${tier.rows}x${tier.cols}/${colors} board`); + process.exit(1); + } + seen.add(canonKey(chosen.board)); + if (chosen.unique) uniqueCount++; + + levels.push({ + level: levels.length + 1, + rows: chosen.board.rows, + cols: chosen.board.cols, + colors, + unique: !!chosen.unique, + endpoints: chosen.board.endpoints, + solution: chosen.solution, + }); + process.stdout.write(`\r[dotlink] built ${levels.length}/100 (unique ${uniqueCount}) `); + } +} +process.stdout.write('\n'); + +// Sanity pass: every level's stored reference solution must validate. +let unsolvable = 0; +for (const lv of levels) { + if (!isSolved(lv, lv.solution)) unsolvable++; +} + +const payload = { + generatedAt: new Date().toISOString(), + seed: SEED, + count: levels.length, + levels, +}; +fs.mkdirSync(path.dirname(OUT_FILE), { recursive: true }); +fs.writeFileSync(OUT_FILE, JSON.stringify(payload, null, 2)); + +const secs = ((Date.now() - startedAt) / 1000).toFixed(1); +console.log(`[dotlink] wrote ${levels.length} levels (${uniqueCount} unique, ${unsolvable} unsolvable) in ${secs}s -> ${OUT_FILE}`); +if (unsolvable > 0) process.exit(1); diff --git a/server/scripts/verifyDotLink.js b/server/scripts/verifyDotLink.js new file mode 100644 index 0000000..8eca09a --- /dev/null +++ b/server/scripts/verifyDotLink.js @@ -0,0 +1,104 @@ +// Verifier for Dot Link (Node only — no browser). +// +// Asserts every level in public/data/dotlink.json is solvable with a full-cover +// solution, reports how many are uniquely solvable, and confirms the daily +// board generator is deterministic for a fixed seed. +// +// Usage: node server/scripts/verifyDotLink.js + +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; +import { + makeRng, dateSeed, generateBoard, solve, isSolved, +} from '../../public/src/games/dotlink/DotLinkLogic.js'; + +const __dirname = path.dirname(fileURLToPath(import.meta.url)); +const FILE = path.join(__dirname, '../../public/data/dotlink.json'); + +let failures = 0; +const fail = (msg) => { console.error(` ✗ ${msg}`); failures++; }; + +// ── Bank checks ────────────────────────────────────────────────────────────── +const raw = JSON.parse(fs.readFileSync(FILE, 'utf8')); +const levels = raw.levels ?? []; +console.log(`[verify] ${FILE}`); +console.log(`[verify] ${levels.length} levels (seed 0x${(raw.seed >>> 0).toString(16)})`); + +if (levels.length !== 100) fail(`expected 100 levels, found ${levels.length}`); + +let unique = 0; +let prevCells = 0; +for (const lv of levels) { + const cells = lv.rows * lv.cols; + // Endpoints in-bounds and distinct. + const used = new Set(); + for (const e of lv.endpoints) { + for (const p of [e.a, e.b]) { + if (p[0] < 0 || p[0] >= lv.rows || p[1] < 0 || p[1] >= lv.cols) fail(`L${lv.level}: endpoint out of bounds`); + const key = p[0] * lv.cols + p[1]; + if (used.has(key)) fail(`L${lv.level}: endpoint overlap`); + used.add(key); + } + } + + // Solvable: the stored reference solution must be a valid full-cover solution + // whose colour endpoints match the puzzle's. + if (!lv.solution || lv.solution.length !== lv.endpoints.length) { + fail(`L${lv.level}: missing/mismatched solution`); + } else if (!isSolved(lv, lv.solution)) { + fail(`L${lv.level}: stored solution does not validate`); + } + + // Uniqueness (best-effort; only cheap on small grids). + if (cells <= 64) { + const two = solve(lv, { countLimit: 2, maxNodes: 600000 }); + if (!two.aborted && two.count === 1) unique++; + } + + // Difficulty should be non-decreasing in grid size. + if (cells < prevCells) fail(`L${lv.level}: grid shrank vs previous level`); + prevCells = cells; +} +console.log(`[verify] all ${levels.length} reference solutions validate; ${unique} small boards provably unique`); + +// isSolved must reject an obviously incomplete board. +if (isSolved(levels[0], levels[0].endpoints.map((e) => [e.a]))) { + fail('isSolved accepted an incomplete board'); +} + +// ── Daily determinism ──────────────────────────────────────────────────────── +function dailyBoards(dateStr) { + const STAGES = [ + { rows: 5, cols: 5, colors: 4 }, + { rows: 7, cols: 7, colors: 6 }, + { rows: 8, cols: 8, colors: 8 }, + { rows: 10, cols: 10, colors: 9 }, + { rows: 11, cols: 11, colors: 11 }, + ]; + const base = dateSeed(dateStr); + return STAGES.map((s, i) => { + const rng = makeRng((base ^ Math.imul(0x9e3779b9, i + 1)) >>> 0); + return generateBoard(s.rows, s.cols, s.colors, rng); + }); +} + +const day = '2026-06-14'; +const a = dailyBoards(day); +const b = dailyBoards(day); +if (a.some((x) => !x)) fail('daily generation returned a null board'); +if (JSON.stringify(a) !== JSON.stringify(b)) fail('daily boards are not deterministic for the same date'); +const c = dailyBoards('2026-06-15'); +if (JSON.stringify(a.map((g) => g.board)) === JSON.stringify(c.map((g) => g.board))) { + fail('different dates produced identical daily boards'); +} +for (const g of a) { + if (g && !isSolved(g.board, g.solution)) fail('a daily board solution does not validate'); +} +console.log('[verify] daily boards: deterministic per date, distinct across dates, solvable'); + +if (failures > 0) { + console.error(`\n[verify] FAILED with ${failures} problem(s).`); + process.exit(1); +} +console.log('\n[verify] All Dot Link checks passed.');