Skip to content

Instantly share code, notes, and snippets.

@tompng
Last active Jul 27, 2019
Embed
What would you like to do?
自己紹介用コード(moved to https://github.com/tompng/tompng)
########################################################################################################################################################################################
########################################################################################################################################################################################
########################################################################################################################################################################################
########### ########################################################################################################################################################################
########### ########################################################################################################################################################################
########### ########################################################################################################################################################################
########### ########################################################################################################################################################################
##### ######### ########## ### ###### ######### ## ########## #### ############## ## #####
##### ####### ######## # ## ####### ######## ## ########## #####
##### ##### ##### ###### ## ### ###### #### ###### ### ####### ##### #####
########### ########## ########## ##### ####### ####### ###### ########## ###### ######## ###### ######### #####
########### ######### ############ ##### ######### ########## ###### ############ ##### ########## ##### ########### #####
########### ######### ############# #### ########## ########## ###### ############## ##### ########### #### ############# #####
########### ######### ############## #### ########## ########## ###### ############## ##### ############ #### ############# #####
########### ######### ############## #### ########## ########## ###### ############## ##### ############ #### ############# #####
########### ######### ############## #### ########## ########## ###### ############## ##### ############ #### ############# #####
########### ######### ############# ##### ########## ########## ###### ############# ##### ############ ##### ############ #####
########### ########## ############ ##### ########## ########## ###### ########### ##### ############ ##### ########## #####
########### ########## ######## ###### ########## ########## ###### ####### ###### ############ ###### #### #####
########### ##### ####### ########## ########## ###### ####### ############ ######## #####
########### ####### ######### ########## ########## ###### # ######### ############ ########## ### #####
############# ########## ############ ########## ########## ###### ##### ############# ############ ####################### ######
################################################################################################# ##################################################################### ######
################################################################################################# ##################################################### ######### #######
################################################################################################# ##################################################### ########
################################################################################################# ####################################################### ##########
################################################################################################# ############################################################ ################
########################################################################################################################################################################################
########################################################################################################################################################################################
require'io/console';cx,w,h,m=cy=0.5;zm=2;R=->{l='';h,w=IO.console&.winsize||[48]*2;h*=2;m=1.0*[w,h].min;m*zm<=w&&cx=0.5;m*zm<=h&&cy=0.5;g=(0...h).map{[0]*w};[[524,489,%(H9zR0b8H/R4EJlT
y5fyPUDVdSVeyIiuzaChOoHiIwhiK9wfZpEuoHKGEBkHQcBv9EWmH28FWXMf0kHDYhi0R3AYdgxEYgYNDGZiGKZ3zOTeC52RWRdv5Zr414suo7ujuEpZHeZyNUsMMEE5a0e41OvXu5/b3wvf/z299+f/lX6H4wQY)],[509,22,%(FVAgpVA59Dv
dSraTKmVyJoeGk6FkaGhSNB1JDwE0SZK1gWKgHNjP98f1x9a2uGluWnANC7Igx8wwS1+Tv+Qv/EiKpBD6iiAGPoFiME5G04EkHxpGEyxBOYmQiI2wMA1HEjEYg8Pq0Ua0jt8ggYR3yGADHbfcjOnkTc4M4RmZFpFWop6oD/wT+h/6D76Doi+pv67
velZAD31yUD ATzJBJ4WGhoZERsVwsmx8ZtCGHv7iCL3b/9H73/rR/1n82fn170yv3y7Tbr/cb9Xq5Wqo9rxQrxXL7T7PZbPQ6DVHvV0wZBA)],[628,111,%(APz70G6321JUVFU/w/+DhWA13My2cnqsHmvGssVuuBthciZt0/0oiMF4cD
CDDMT+E4GFN qRP+0N/R0VURHQIhkEqDgAArBnqBDvj3/MO7wJBNDHEU8tsBFBJBfmvOqpT7tV1Xf/0Xdqh3QgMgdDIJGSQaWawRlIppHE/4ailkFpooe5rYIAhhhrqsxop3LdaaeUbsA7r9HuoEqpEa8lmspVr5EzODOPpYCo4aDgAAQ)],
[639,115,%( EMzODowPTIweFIlH4zSNKGKYeOihMsoo06y3ZUfUZNu3XZF74AEEHnjQLOqe7jth+65vasBDDwD0AQ)],[417,358,%(DndGi+FieHu5nqQmu6lwOBxOJ2KCCULYYUc/4P/4H/pACrjA/pI+6TOBIQImCcIwApMkQsIszhGH
UUn7tK++gC7 seoc7uJv/Bhqw0a44bbX10EGXYTEQhymYU1k5/Veyl+xREVERFZEhGIbhMCUUA0oQhiGNIIIeAwyIjeEgDobCjDLGHeWUw6kYIEAkklCaouu6nukBAzQyCCCQHhnKh3LB0cHBwcHB4eFMOJMbAgAA1U+yLuq9/0ADDSwCCGS
HAgCA /NAviGLje 6fUKdWLqqM 6so 088rFI MBgMZoYhD 4H umb7pV78YY QSQ1 jtngUUG9kOWOgo pp JBy5q
mnimu kUccbbX WoZvu2L3 t 9I 0wLtmmb VjPNcCPc Cj bCzXA9Wg/W g6VgG
7VRxw sjjOl qq50B BhjomA EG iJ4 DFgBoc Q)], [733,+ 435 ,%(HkcZ pJAoC imgLE
QghtRhi60X2 CATdMggA6S z1gpvoYWAW mhBp2 +AARYDF A)],[33 +400,+ 624,%(AITH hrKhTH ZSiIUYBS Ef8sl+ UAd1SALnn fUGGN
iJCtRHfdzTX V0rdmudWu 0NAAE)],[673 ,622, %(AOTaMRW XQzvcBm0QA A+cshp o0GA90iVd2ud 93kgB EA)],[513, +803, %(APzLi3g/r lImZZ
JmIIyjOMtgj DEE1BOfas RBHIwZzBBDEBG HHfl CO6zDu9RQz RDWyNi2FU5 4KYUSb dEUrf67MgAB)], [689, 683,%(7Wh9O QiBI KIEURSRHHLIWJ AFaTQ
RJBxTxC03kT 9cBRVzHHA fYdQTgD1yyAHlt TfeS inFhVs1W7V 90okG)],[8 *60-1, 766,%(DoORMARD hALqq WUAAJBAERAGO Rd2Y R+zAACgpdVOmb bt275
qeesN9M4716 J92Ac1a6E BHngc)],[659,+ 765, %(ANAulVTF ekxyiRTXTA dVCIVg OBvmERbDYRzBWQ wAAEZ ZbXSv2ev2u/W mErJ vrBVO4LrXTnur nfbFU
Ae3cY1opJAD DjnsMCCQB BnmhJMY4JB74rh lvZA LuiCLQwoYY AAE)],[600 ,72,%( ANTKbdmSdVUGZf AxVIl UI+1UP96P27B N2RQ Z6AeCvJqJEEZI UkB8l
FFMMWYEEgAt c8xN6BBPH PIAQvA9I7jkDu ugCvY yhltmqccee QwhBLF2UIV UTIdNW HMYkVE5pBRpRV qgHu6 Gu3nJFVfUQgm lbIh+ X1Rk27VcDfVx n0jus
CMQIYLp0CTE kBjkkEPWW2 yxjymmWItJJJ G0Ghn kmSGGyLCEE vW9VkrZIqy havw7b /Em0cFOsB0p xPrRX tzFXcJmQBwn8 KA4AA E)],[16*31 ,205,
%(FkpmiSWGQ QgR99hjRxy y2BLlHXD GWRA)] ,[375,5*68 ,%(DqiYCZt IbyCIw mg4hSGG 0GGLbe Qn6ZIubgAAQC dtnPX4 j7fe eOtB)
],[645,130, %(AJA 8D/NwPB jncT4IxVmc JYKMMEIZ8B C0S33R 77dkx3R 0FWmrjVXQQZu j0AJb6HR 0V5c1
AAE)],[433, 379,%(D lrosMMo7a IuIqM6oZO9 jB6kB5lZIO mTIIkh g thigzQqox ZsggpuozZpY4 klNVAj7QS0 0AI LPQQE
QgyRZT7ouU2iC IzQFCGEEkQ 89ayLFZFIAgm lllBAEWwTQ SR1uI/65oe RRkprv fUOeO QgCjvkkAXWWSe KzjnngQMB)], [843,387,%(ANR+9tv9Vqvk nPXeO+
ghisAQCsIwi7PEyHkIYwIRAtBD5a231jvjtO2avul3/gMAwMAhGGGEEPQB)]].map{|x,y,c|n=[];c=c.unpack('m')[0]. unpack('b*')[0].chars;[]while'1'!=c.pop;n<<(c.shift==?0?(v=c.shift(4) .join.
to_i(2))>7?v-=16:v:(v=(c.shift(5+2*a=c.shift.to_i)*l).to_i(2))>15+a*48?v-40-a*112:v+7+a*15)while( c[0]);c=[];n.each_slice(6){|q,r,s,t,u,v,p=(zm*m/1024) |u+=s+=q; v+=t+=r
;(0...n=1+(u.abs+v.abs)*p).map{|i|a=3*(1-z=i/n)**2*z;c<<[(x+a*q+z**3*u+s*b=3*z*z*(1-z))*p+(w-m*zm )*cx,(y+a*r+z**3*v+t*b)*p+(h-m*zm)*cy]};x+=u;y+=v};c} .zip([1,
2,*([3]*8),4,4,*([5]*6)]){|c,a|s={};c.size.times{|i|u,v=c[i-2];x,y=c[i-1];p,q=[u,x].sort;([p.ceil ,0].max..[q.floor,w-1].min).each{|j|j!=u&&(j!=x||(x-u)* (-c[i][0]+
x)<0)&&(s[j]||=[])<<v+(y-v)*(j-u)/(x-u)}};s.map{|i,t|t.sort.each_slice(2){|u,v|([u.ceil,0].max... [v,h].min).map{|j|g[j][i]=a}}}};$><<("\e[1;1H\e[J");$>.write g.each_slice(2).
map{|a,b|(a.zip(b).map{|i,j|%(\x20`''"^.:]TYY,;IEPPcjL8RRxLJ&WWxLJ&##)[i+6*j]}*l)}*"\r\n"};R[];trap(:WINCH){R[]};STDIN.raw{loop{s=$<.getc;s.ord==3&&exit;s=="\e"&&s<<$<.gets(2);zm=[2**(
('-m+p'.index(s)||1.0)/2*2-1)*zm,16,1].sort[1];cx=[0,cx+(s=~/[ahD]/?1:s=~/[dlC]/?-1:0)*w/(w-m*zm+1)/2,1].sort[1];cy=[0,cy+(s=~/[wkA]/?1:s=~/[sjB]/?-1:0)*h/(h-m*zm+1)/2,1].sort[1];R[]}}
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
data = File.read 'tompng.svg'
colors = data.scan(/<path fill="#(.{6})"/).map do |(color)|
rgb = color.scan(/../).map { |c| c.to_i(16) }
1 - rgb.sum.fdiv(0xff*3)
end
colors = colors.map { |c| (c - colors.min) / (colors.max - colors.min) * 0.9 + 0.1 }
starts = []
curves_base = data.scan(/d="[^"]+"/).map do |s|
x, y, *other = s.scan(/-?\d+/).map(&:to_i)
starts.push [x, y]
other.each_slice(6).map { |a,b,c,d,e,f| [a, b, c - a, d - b, e - c, f - d] }.flatten
end
packed = curves_base.zip(starts).map do |numbers,(sx,sy)|
bits = numbers.map do |v|
next [0, 4.times.map{|i|(v>>i)&1}.reverse] if -8 <= v && v < 8
v -= v > 0 ? 8-1 : -8
next [1, 0, 5.times.map{|i|(v>>i)&1}.reverse] if -16 <= v && v < 16
v -= v > 0 ? 16-1 : -16
next [1, 1, 7.times.map{|i|(v>>i)&1}.reverse]
end
[sx,sy,[[bits.join+'1'].pack('b*')].pack('m').delete("\n=")]
end
code = File.read(__FILE__).split(/\nexit\n/).last
packed_rb = '[' + packed.map { |x,y,s| "[#{x},#{y},%(#{s})]" }.join(",\n") + ']'
code = code.gsub('packed', packed_rb)
File.write('tmp.rb', code) unless File.exist? 'tmp.rb'
tmp = File.read('tmp.rb').delete "\n "
unless File.exist? 'template.txt'
require 'chunky_png'
png = ChunkyPNG::Image.from_file 'template.png'
ratio = (png.width*png.height).times.count{|xy|(png[xy%png.width,xy/png.width]&0xff00)<0xff00/2}.fdiv(png.width*png.height)
w = 184
h = (tmp.size / (1-ratio) / w).round
p tmp.size, w, h
shape = h.times.map{|y|
w.times.map{|x|
(png[x*png.width/w,y*png.height/h]&0xff00)<0xff00/2 ? ' ' : '#'
}.join
}.join("\n")
File.write 'template.txt', shape
end
shape = File.read 'template.txt'
idx=0
out=''
shape.chars.map{|c|
if c=='#'
out << (tmp[idx] || ';')
idx+=1
else
out << c
end
}
out << (tmp[idx..-1]||';')
File.write('out.rb', out)
code.delete!("\n ")
eval code
exit
require'io/console';
cx,w,h,m=cy=0.5;
zm=2;
R=->{
l='';
h,w=IO.console&.winsize||[48]*2;
h*=2;m=1.0*[w,h].min;
m*zm<=w&&cx=0.5;
m*zm<=h&&cy=0.5;
g=(0...h).map{[0]*w};
packed.map{|x,y,c|
c=c.unpack(?m)[0].unpack('b*')[0].chars;
[]while'1'!=c.pop;
n=[];
n<<(
c.shift==?0 ?
(v=(c.shift(4)*l).to_i(2))>7?v-=16:v :
(v=(c.shift(5+2*a=c.shift.to_i)*l).to_i(2))>15+a*48?v-40-a*112:v+7+a*15
)while(c[0]);
c=[];
n.each_slice(6){|q,r,s,t,u,v,p=(m*zm/1024.0)|
u+=s+=q;
v+=t+=r;
(0...n=1+(u.abs+v.abs)*p).each{|i|
a=3*(1-z=i/n)**2*z;
c<<[
(x+a*q+z**3*u+s*b=3*z*z*(1-z))*p+(w-m*zm)*cx,
(y+a*r+z**3*v+t*b)*p+(h-m*zm)*cy
]
};
x+=u;
y+=v
};
c
}.zip([1,2,*([3]*8),4,4,*([5]*6)]){|c,a|
s={};
c.size.times{|i|
u,v=c[i-2];
x,y=c[i-1];
p,q=[u,x].sort;
([p.ceil,0].max..[q.floor,w-1].min).each{|j|
j!=u&&(j!=x||(u-x)*(c[i][0]-x)<0)&&(s[j]||=[])<<v+(y-v)*(j-u)/(x-u)
}
};
s.map{|i,t|
t.sort.each_slice(2){|u,v|
([u.ceil,0].max...[v,h].min).map{|j|g[j][i]=a}
}
}
};
$> << "\e[1;1H\e[J"+g.each_slice(2).map{|a,b|(a.zip(b).map{|i,j|%(\x20`''"^.:]TYY,;IEPPcjL8RRxLJ&WWxLJ&##)[i+6*j]}*l)}*"\r\n"
};
R[];
trap(:WINCH){R[]};
STDIN.raw{
loop{
s=$<.getc;
s.ord==3&&exit;
s=="\e"&&s<<$<.gets(2);
zm=[1,16,zm*2**(('-m+p'.index(s)||1.0)/2*2-1)].sort[1];
cx=[0,cx+(s=~/[ahD]/?1:s=~/[dlC]/?-1:0)*w/(w-m*zm+1)/2,1].sort[1];
cy=[0,cy+(s=~/[wkA]/?1:s=~/[sjB]/?-1:0)*h/(h-m*zm+1)/2,1].sort[1];
R[]
}
}
require 'chunky_png'
def load_shape(name, w)
img = ChunkyPNG::Image.from_file "#{name}.png"
h = (w * img.height / img.width).round
lines = h.times.map do |y|
chars = w.times.map do |x|
color = img[img.width * x / w, img.height * y / h]
color & 0xff00 < 0xff00 / 2 ? '#' : ' '
end
chars.join
end
a=lines.map{|a|a.scan(/^ */).first.size}.min
b=lines.map{|a|a.scan(/ *$/).first.size}.min
p [a, b]
lines.map!{|l|l[a...-b]}
lines.shift while lines.first.count('#')==0
lines.pop while lines.last.count('#')==0
lines=lines.each_slice(2).map(&:first)+lines.each_slice(2).map(&:last)
[lines[0].size,lines.size, lines.join("\n")]
end
# w,h,shape = load_shape('template2', 40)
w, h = [34, 56]
shape = %(
| ##### |
| ############ |
| ############### |
|################### |
|####################### |
|######################### |
| ######################### |
| ########################## |
| ########################### |
| ############################ |
|### ########################## |
|## ######################## ### |
| ######################### #### |
| ######################### #### |
| ########################## ####|
| ######################### ####|
|### ##################### ###|
|### ################## #|
|### ########## ##### |
|### ####### ###### |
|## ###### ######### |
| ##### ########## |
| ##### #### |
| #### |
| ######## |
| ########## |
| ######## |
| ######## |
| ########## |
| ############## |
| ################ |
|##################### |
|######################## |
| ######################### |
| ########################## |
| ########################## |
| ########################### |
| ############################ |
|## ############################ |
|########################### #### |
| ######################### #### |
| ########################## #### |
| ########################## ####|
|### ###################### ###|
|### ################### ##|
|### ################## |
|### ######## ##### |
|## ####### ####### |
|## ##### ########## |
| #### ######## # |
| ##### ## |
| ###### |
| ######## |
| ########## |
| ######## |
| ## |
).lines.map{|l|l.split('|')[1]}.compact.join("\n")
segments = shape.delete("\n").scan(/( +)(#+)/).flatten.map(&:size)
s=segments.map{|a|(a+32).chr}.join
s+='@tompng'.reverse
quote = '%q~'+s.gsub('\\','\\\\\\')+'~'
code, template = DATA.read.split(/\n{2,}/)
chars = code.delete(" \n").gsub('QUOTE', quote).chars
eval chars.join
formatted = template.lines.map{|l|
chars.shift if chars.first==';'
l.gsub('#') { chars.shift }
}.join
File.write 'tompng_simple.rb', formatted
puts formatted
__END__
i=0;s=%w`a=(q=QUOTE).chars.map{|c|[i=1-i]*(c.ord-32)}*'';952.times{|i|
$><<(q[1127-i]||('#".%c'%32)[(a[i]+a[i+952]).to_i(2)])<<$/[~i%34]
}`*'';eval(s)
###
######### ######## ######## ###### ######### ### ##### #########
######### ########## ################ ########### ########## ###########
### ### ### ### #### ### ### ### #### ### #### ####
### ### ### ### #### ### ### ### ### ### #### ####
###### ########## ### #### ### ########### ### ### ##########
###### ######## ### #### ### ######### ### ### ########
### ### ####
### ##########
,cxJJJJJxc
,cJ&###RRRPPPRRJ
,I8####REEIIIIIIIIE,
IL####PIIIIIIIIIIIIII,
II####EIIIILJJJJJLIIIIE&&xc
II###EIIIII########8IIIR###R8c
II##8IIIIIIIP#######IIII8RRR##&xc
'I##8IIIIIJ8#####RPEIIIIIIIIIIEPR&
I##8IILJ&&####R8IIIIIIIIIIIIIIIIE8
'RR&JJ#R#####REIIIIIIIIIIIILLIIIII,
88888&####REIIIIIIIIIIIL88888LIL88
c888&###RR8EIIIIIIIIIL888EEE88EII&E8
&88&REIIIEIIIIIIIIL888EIIIIIIEE88##IE,
#88'8L8LIIIIIILL888EIIIIIIIIIII888#RJI,
### 88#8&8EE888EEEIIIIIIIIIIIIIIIE8,#8LI,
##'L88####8IIIIIIIIIIIIIIIIIIIIIIII8 P8LII
88######IIIIIIIIIIIIIIIIIIIE8L8IE 88LI,
L8#R####EIIIIIIIIIIIIIIIIIIIIE8III I88II,
,8&#8###EIIIIIIIIIIIIIIIIIIIIIIIIII E88II
I8#8I###IIIIIIIIIIIIIIIIIIIIIIIIII' 'LEIII
88#I]##RIIIIIIIIIIIIIIIIIIIIIIIII' ILIII
I8##::888IIIIIIIIIIIIIIIIIIIIIILL' 'LIII
:I8#P::IEEIIIIIIIIIIIIIIIIIILEEI' 'LI'
::I8#I::IIIIIIIIIIIIIIIIIIJJJJWWW '
..:::I88I:::IIIIIIIIIIII]]]:YWWWWWWW
.:::::::I88::::EIIIIIIIII::::::::WWWWWWWx.
.:::::::::I88:::::ELIIIIIII::::::::WWWRRWWWWL:..
:::::::::::I8E::::::ELIIILL]:::::::WWR8888RRWWW:::.
:::::::::::::]:::::::IIEEEI]::::::::R888888888888j``
::::::::::::::::::::::WWWWW::::::::`'''888888'''''
::::::::::::::::::::::WWWWWW::::` '888'
:::::::::::`:::::::::WWWWWWL``
::::`` ``` c888888888c
.::: 88888888888
::` 888888888888'
`` 8888888888'
8888888888
' ''8'
i=0
s=%w`a=(q =%q~'%9, 4/23/7+9 *9):(; '<%#!:$"! 8!# %9!$$ 9"$":#$!9
$'!5&&"2* $"*#%+##'& &)"%&%).%&*-%)$1 $=(9*8(:(8* 6.3015-8+9 ):(:(;'<%"!
<#; !$$ 9"$ ":" $":# '!6 %&" 3(% "2+# "(& %*"$ '&'(
"%% &*- $'( !!- %*"2 &;( 9*8 (?" gnp mot @~). char
s.map{ |c|[i=1-i] *(c .ord -32 )}*'';952.t ime s{| i|$><<(q[1
127-i] ||('#".% c'% 32)[ (a[ i]+a[i+95 2]) .to _i(2)])<
<$/ [~i %34]
}`* '';eval(s)
...#####..
.############.
###############.
###################..
#######################.
"########################.
#########################.
##########################
###########################
############################
##".##########################.
##.######################## ###.
######################### "###.
.######################### ####
########################## ####
.##"###################### "###
### "###################" "##
### ################## "
### ########"" "####.
##" ####### ######.
## #####" #########.
####" ########"#
##### "##"
####..
########
##########
########
"""""##" @tompng
require'io/console';h,w=IO.console&.winsize||[0,0];g=(0...m=[[h,w/2].min*2,48].max).map{[0]*m};[[524,489,%w(H9zR0b8H/R4EJlTy5fyPUDVdSVeyIiuzaChOoHiIwhiK9wfZpEuoHKGEBkHQcBv9EWmH28FW
XMf0kHDYhi0R3AYdgxEYgYNDGZiGKZ3zOTeC52RWRdv5Zr414suo7ujuEpZHeZyNUsMMEE5a0e41OvXu5/b3wvf/z299+f/lX6H4wQY)*l=''],[509,22,%w(FVAgpVA59DvdSraTKmVyJoeGk6FkaGhSNB1JDwE0SZK1gWKgHNjP98f1x9
a2uGluWnANC7Igx8wwS1+Tv+Qv/EiKpBD6iiAGPoFiME5G04EkHxpGEyxBOYmQiI2wMA1HEjEYg8Pq0Ua0jt8ggYR3yGADHbfcjOnkTc4M4RmZFpFWop6oD/wT+h/6D76Doi+pv67velZAD31yUDATzJBJ4WGhoZERsVwsmx8ZtCGHv7iCL3
b/9H73/rR/1n82fn170yv3y7Tbr/cb9Xq5Wqo9rxQrxXL7T7PZbPQ6DVHvV0wZBA)*l],[628,111,%w(APz70G6321JUVFU/w/+DhWA13My2cnqsHmvGssVuuBthciZt0/0oiMF4cDCDDMT+E4GFNqRP+0N/R0VURHQIhkEqDgAArBnqBDv
j3/MO7wJBNDHE U8tsBFBJBfmvOqpT7tV1Xf/0Xdqh3QgMgdDIJGSQaWawRlIppHE/4ailkFpooe5rYIAhhhrqsxop3LdaaeUbsA7r9HuoEqpEa8lmspVr5EzODOPpYCo4aDgAAQ)*l],[639,115,%w(EMzODowPTIweFIlH4zSNKG
KYeOihMsoo06y 3ZUfUZNu3XZF74AEEHnjQLOqe7jth+65vasBDDwD0AQ)*l],[417,358,%w(DndGi+FieHu5nqQmu6lwOBxOJ2KCCULYYUc/4P/4H/pACrjA/pI+6TOBIQImCcIwApMkQsIszhGHUUn7tK++gC7seoc7uJv/Bhqw0
a44bbX10EGXYT EQhymYU1k5/Veyl+xREVERFZEhGIbhMCUUA0oQhiGNIIIeAwyIjeEgDobCjDLGHeWUw6kYIEAkklCaouu6nukBAzQyCCCQHhnKh3LB0cHBwcHB4eFMOJMbAgAA1U+yLuq9/0ADDSwCCGSHAgCA/NAviGLje6fUKdW
LqqM6so0 88rFIMBgMZ oYhD4Humb7p V78 YYQSQ1jt ngUUG9kOW Ogo ppJBy5qmni mukU ccbbXWoZvu2L3t9I 0wLt mmbVjPNc
CPcCjbCz XA9Wg/ Wg6VgG7 V Rxwsjj Olqq50B B hjomAEGi J4DFgBoc
Q)*l],[9 +733 ,435,%w( HkcZp JAoC imgL EQght Rhi60 X2CAT dMggA 6Sz1gp voYWAW mhBp2+AA
RYDFA)*l],[33 +400,624 ,%w(AITHhrKh THZS iIUYBSEf 8sl+UAd 1SALn nfUGGNiJCt RHfd zTXV0rdm udWu0 NAAE)*l],[ 673,622,
%w(AOTaMRWXQz vcBm0QAA +cshpo0GA90iV d2ud 93kgBEA)* l],[513,3 +800, %w(APzLi3g/rl ImZZ JmIIyjOMtgj DEE1 BOfasRBHIwZz BBDEBGHH
flCO6zDu9RQzR DWyNi2FU 54KYUSbdEUrf6 7Mg AB)*l],[9 +680,683, %w(7W h9OQiBIKIEURS RHH LIWJAFaTQRJ BxTx C03kT9cBRVzHH AfYdQTgD
1yyAHltTfeSin FhVs1W7V 90okG)*l],[9+ 470, 766,%w(Do ORMARDhAL qqWUA AJBAERAGORd2Y R+z AACgpdVOmbb t275 qeesN9M4716J 92Ac1a6E
BHngc)*l],[9+ 650,765, %w(ANAulVTFe kxyi RTXTAdVCI VgOBvmERb DYRzB WQwAAEZZbXS v2ev 2u/WmErJvrB VO4L rXTnurnfbFU Ae3cY1op
JADDjnsMCCQBB nmhJMY4JB 74rhlvZAL uiCLQ woYYAAE)* l],[600,2 +7*10 ,%w(ANTKb dmSd VUGZfAxVIlU I+1UP 96P27BN 2RQZ6AeC
vJqJEEZIUkB8l FFMMW YEE gAtc8x N6BBPHPIA QvA9I7jkD uugCv Yyhlt mqcceeQwhBL F2UIVU TIdNWHMY
kVE5pBRpRVqgHu 6Gu3nJ FVfUQgml bIh+X1Rk2 7VcDfVxn0 jusCM Q IYLp0CTE kBjkkEPWW2y xjymmWItJJ JG0 GhnkmSGG
yLCEEvW9VkrZIqyhavw 7b/Em0cFOsB0pxP rRXtzFXcJmQBwn8KA4AAE)*l],[496,205,%w(FkpmiSWGQQgR99h jRxyy2BLlHXDGWRA)*l],[375,340,%w(DqiYCZtIbyCIwmg4hSGG0GGLbeQn6ZIu bgAAQCdtn
PX4j7feeOtB)*l],[645,130,%w(AJA8D/NwPBjncT4IxVmcJYKMMEIZ8BC0S33R77dkx3R0FWmrjVXQQZuj0AJb6HR0V5 c1AAE)*l],[433,379,%w(DlrosMMo7aIuIqM6oZO9jB6kB5lZ IOmTIIkh gthigzQqox
ZsggpuozZpY4klNVAj7QS00AILPQQEQgyRZT7ouU2iCIzQFCGEEkQ89ayLFZFIAgmlllBAEWwTQSR1uI/65oeRRkprvfUO eOQgCjvkkAXWWSeKzjnngQMB)*l],[843,387,%w(ANR+9tv9V qvknPXeO+gh
isAQCsIwi7PEyHkIYwIRAtBD5a231jvjtO2avul3/gMAwMAhGGGEEPQB)*l]].map{|x,y,c|c=c.unpack('m');c=c[0 ].unpack('b*')[0].chars;[]while'1'!=c.pop;n=[];n<<(c .shift==?0?(v=(
c.shift(4)*l).to_i(2))>7?v-=16:v:(v=(c.shift(5+2*a=c.shift.to_i)*l).to_i(2))>15+a*48?v-40-a*112:v+7+a*15)while(c[0]);c=[];n.each_slice(6).map{|q,r,s,t,u,v|u+=s+=q;v+=t+=r;n=(u.abs+
v.abs)*(w=m/1024.0)+1;n.to_i.times{|i|a=3*(1-z=i/n)**2*z;c<<[(x+a*q+z**3*u+s*b=3*z*z*(1-z))*w,(y+a*r+z**3*v+t*b)*w]};x+=u;y+=v};c}.zip([1,2,*([3]*8),4,4,*([5]*6)]){|c,a|s={};(0...(
c.size)).each{|i|u,v=c[i-2];x,y=c[i-1];([u,x].min.ceil..[u,x].max.floor).each{|j|j!=u&&(j!=x||(u-x)*(c[i][0]-x)<0)&&(s[j]||=[])<<v+(y-v)*(j-u)/(x-u)}};s.each{|i,t|t.sort_by(&:to_f)
.each_slice(2){|u,v|(u.ceil...v).each{|j|g[j][i]=a}}}};puts(g.each_slice(2).map{|a,b|(a.zip(b).map{|i,j|(%Q(\x20`''"^.:]TYY,;IEPPcjL8RRxLJ&WWxLJ&)+?#*2)[i+6*j]}*l).gsub(/\s+$/,l)})
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment