<!doctypehtml><html lang=en><meta charset=UTF-8><style>body{background:#000;color:#fff;font-family:monospace;margin:0;overflow:hidden}pre{line-height:.5;font-size:8px;margin:0}</style><pre id=output></pre><script>const ph=(1+Math.sqrt(5))/2,v=[];[1,-1].forEach(x=>{[1,-1].forEach(y=>{[1,-1].forEach(z=>{v.push({x,y,z})})})});[1/ph,-1/ph].forEach(y=>{[ph,-ph].forEach(z=>{v.push({x:0,y,z})})});[1/ph,-1/ph].forEach(x=>{[ph,-ph].forEach(y=>{v.push({x,y,z:0})})});[ph,-ph].forEach(x=>{[1/ph,-1/ph].forEach(z=>{v.push({x,y:0,z})})});let e=[];for(let i=0;i<v.length;i++){let d=[];for(let j=0;j<v.length;j++){if(i===j)continue;let dx=v[i].x-v[j].x,dy=v[i].y-v[j].y,dz=v[i].z-v[j].z;d.push({j,d:Math.sqrt(dx*dx+dy*dy+dz*dz)})}d.sort((a,b)=>a.d-b.d);for(let k=0;k<3;k++){let j=d[k].j,ed=[Math.min(i,j),Math.max(i,j)];if(!e.some(x=>x[0]===ed[0]&&x[1]===ed[1]))e.push(ed)}}const w=300,h=150,s=300,ox=Math.floor(w/2),oy=Math.floor(h/2),d=8;let ax=1,ay=0,az=0,sx,sy,drag=0,rsx=0,rsy=0;function r(o,a,b,c){let{x,y,z}=o, C=Math.cos(a),S=Math.sin(a),Y=y*C-z*S,Z=y*S+z*C; y=Y;z=Z; C=Math.cos(b),S=Math.sin(b);let X=x*C+z*S,Z2=-x*S+z*C; x=X;z=Z2; C=Math.cos(c),S=Math.sin(c);return{x:x*C-y*S,y:x*S+y*C,z:z}}function pr(o){let f=s/(d+o.z);return{x:o.x*f,y:o.y*f}}function cg(){let g=[];for(let i=0;i<h;i++)g.push(Array(w).fill(" "));return g}function dl(x0,y0,x1,y1,g,ch){let dx=Math.abs(x1-x0),dy=Math.abs(y1-y0),sx=x0<x1?1:-1,sy=y0<y1?1:-1,err=dx-dy;for(;;){if(y0>=0&&y0<g.length&&x0>=0&&x0<g[0].length)g[y0][x0]=ch;if(x0===x1&&y0===y1)break;let e2=2*err;if(e2>-dy){err-=dy;x0+=sx}if(e2<dx){err+=dx;y0+=sy}}}function a(){let g=cg(),p=[];for(let o of v){let t=r(o,ax,ay,az),q=pr(t);p.push({c:Math.round(ox+q.x),r:Math.round(oy-q.y)})}for(let i=0;i<e.length;i++){let a0=p[e[i][0]],a1=p[e[i][1]];dl(a0.c,a0.r,a1.c,a1.r,g,"+")}document.getElementById("output").textContent=g.map(x=>x.join("")).join("\n");ax+=rsy,ay+=rsx,rsx*=.95,rsy*=.95,requestAnimationFrame(a)}a();document.addEventListener("mousedown",e=>{drag=1,sx=e.clientX,sy=e.clientY});document.addEventListener("mousemove",e=>{if(!drag)return;let dx=e.clientX-sx,dy=e.clientY-sy;rsx=-dx*.005,rsy=-dy*.005,sx=e.clientX,sy=e.clientY});document.addEventListener("mouseup",()=>{drag=0});document.addEventListener("mouseleave",()=>{drag=0});</script>