require"io/console";I=[[0,-1],[0,1],[1,0],[-1,0],!1];K=["\e[0m"]+"#,'h_(e(#kek#df/)de/`(f)f.#j".scan(/../).map{|x|"\e[#{x.ord-5};#{x[1].ord}m"}+"## []()@@OO%%XX++".scan(/../);a=IO.console.winsize;R=a[0]-2;U= ~-a[1]/2;G="aqqqyydraqqyfsaqqydrraqyfssaqyerrraygsssaydrrrayfsssaycpyybqyyerydryfsygsyetyguyjvykpyhvyipyhwyixyltymuycryycsyya".split(/y/).map{|x|x=="" ? a : a=x.bytes.map{|y|K[y-97]}*""};A=(a=ARGV[0].to_f)>=0.1 ? 1/a : 0.2;if R<10||U<19;print"console too small\n";exit;end;r=c=1;d=g=2;f=e=!1;a=[s=m=n=l=fc=j=k=v=0]*8;u=[*1..(U-2)].product([*1..(R-2)]).shuffle;h=o=[];R.times{|i|o+=[[5]+[i>0&&i(x,y){f=z%6/3+7;r=*-1..1;r.product(r).all?{|p,q|r=o[y+q][x+p];r==f||r==6}};u.map{|x,y|;if (y-q).abs>1&&rand<0.1&&ef.call(x,y);o[y][x]=f;z+=1;end;};rf=->{;x=" #{s}";y=" "*(U*2-6-x.size);if n>0;y=" %-#{U*2-8-x.size}s"%"#{n} chain";i=[y.size,n*2].min;y=K[n>9 ? (y.upcase!;14) : 13]+y[0,i]+"\e[0m"+y[i,y.size];end;print "\e[#{R+1}A\r"+G[m*2+b-7]+y+"\e[1m#{x}\e[0m\n\r"+o.map{|p|p.map{|q|G[q*2+c]}*""}*"\e[0m\n\r"+"\n";};T=Thread.new{;while r;i="\e[".index(y=STDIN.getch) ? !1 : ("AwBsCdDa".index(y)||8)/2;if i;a[x=-~j%8]=i;j=x;end;end;};STDIN.echo=!1;print "\e[?25l\n"*R;rf.call;lt=Time::now;while r;if m>2;print "\e[#{R+1}A\r#{G[b-1+fc]}\e[#{R+1}B";fc^=2;end;if k!=j;i=I[w=a[k=-~k%8]];i=i ? o[q+i[1]][p+i[0]] : (c^=1);if i>5&&i<9;d=w;lt=Time.at(0);else;rf.call;end;end;ct=Time::now;if ct-lt0;if b==i;m+=1;if m==3;n+=1;l=[l,n].max;s+=2**[n-1,8].min*100;end;else;b=i;m=1;n=0;end;else;b=i;m=1;end;g+=2;o[q][p]=9;w=0;3.times{|i|u.size.times{;if (w&(1<3||(y-q).abs>3,ef.call(x,y)].take(3-i).all?;e||=i>0&&(o[R-1][U-1]=f+7);o[y][x]=f;w=rand<0.1 ? 6 : 7;z+=e ? 0 : 1;end;end;}};rf.call;else;o[q][p]=13;rf.call;print "\e[#{R/2+1}A\r\e[#{U-8}C\e[0m GAME OVER ","\n\r"*(R/2);r=!1;end;else;o[q][p]=9;t+=[[p,q]];if h.size>g;x,y=h.shift;o[y][x]=6;t+=[[x,y]];if m==3;m=0;rf.call;end;end;print "\e[#{R}A"+t.map{|x,y|"\e[#{y}B\r\e[#{x*2}C#{G[o[y][x]*2+c]}\e[#{y}A"}*""+"\e[#{R}B";end;end;end;T.join;rf.call;x=(R-2)*(U-2);g="Dot eater";if l>0;y=x/2;4.times{|i|;if h.size>x*(i*0.3-0.1)||s>y*10+y/3*100*2**(i*3-2);g="CBAS"[i];end;};end;print "\e[0m\e[?25h\nArea: \e[1m#{h.size*100/x}%\e[0m\nScore: \e[1m#{s}\e[0m\nMax: \e[1m#{l} chain\e[0m\nGrade: \e[1m#{g}\e[0m\n";STDIN.echo=true