#!/usr/bin/ruby
class Sierpinski(c='*', s=' ') {
# *
# * *
# * *
method letter_a(n) {
# needs more work
var c = [self.c];
{ |i|
var xp = s*(pow(2, i-1) * i + 1);
var sp = s*(pow(2, i-1));
c = [c.map{|x| xp + x + xp },
c.map{|x| sp + x + s*i + x + sp},
c.map{|x| x + sp + xp + x },
]«+»;
} * n;
return c;
}
# **
# ***
# **
method letter_b(n) {
var c = [self.c];
{
c = [c.map{|x| x*2 + s*(x.len) },
c.map{|x| x*3 },
c.map{|x| x*2 + s*(x.len) },
]«+»;
} * n;
return c;
}
# ***
# *
# ***
method letter_c(n) {
var c = [self.c];
{
c = [c.map{|x| x*3 },
c.map{|x| x + s*(x.len*2) },
c.map{|x| x*3 },
]«+»;
} * n;
return c;
}
# *
# **
# ***
method letter_d(n) {
var c = [self.c];
{
c = [c.map{|x| x*1 + s*(x.len*2) },
c.map{|x| x*2 + s*(x.len*1) },
c.map{|x| x*3 },
]«+»;
} * n;
return c;
}
# ***
# **
# ***
method letter_e(n) {
var c = ['*'];
{
c = [c.map{|x| x*3 },
c.map{|x| x*2 + s*(x.len) },
c.map{|x| x*3 },
]«+»;
} * n;
return c;
}
# ***
# **
# *
method letter_f(n) {
var c = [self.c];
{
c = [c.map{|x| x*3 },
c.map{|x| x*2 + s*(x.len*1) },
c.map{|x| x*1 + s*(x.len*2) },
]«+»;
} * n;
return c;
}
# **
# * *
# ****
method letter_g(n) {
var c = [self.c];
{
c = [c.map{|x| x*2 + s*(x.len*2) },
c.map{|x| x + s*(x.len*2) + x },
c.map{|x| x*4 },
]«+»;
} * n;
return c;
}
# * *
# ****
# * *
method letter_h(n) {
var c = [self.c];
{
c = [c.map{|x| x + s*(x.len*2) + x },
c.map{|x| x * 4 },
c.map{|x| x + s*(x.len*2) + x },
]«+»;
} * n;
return c;
}
# *
# *
# *
method letter_i(n) {
var c = [self.c];
{ |i|
c = [c.map{|x| x*i },
c.map{|x| x*i },
c.map{|x| x*i },
]«+»;
} * n;
return c;
}
# *
# *
# * *
# ****
method letter_J(n) {
var c = [self.c];
{
c = [c.map{|x| s*(x.len*3) + x },
c.map{|x| s*(x.len*3) + x },
c.map{|x| x + s*(x.len*2) + x },
c.map{|x| x * 4 },
]«+»;
} * n;
return c;
}
# *
# *
# **
method letter_j(n) {
var c = [self.c];
{
c = [c.map{|x| s*(x.len) + x },
c.map{|x| s*(x.len) + x },
c.map{|x| x * 2 },
]«+»;
} * n;
return c;
}
# **
# * * *
# **
method letter_s(n) {
var c = [self.c];
{
c = [c.map{|x| s*(x.len*2) + x*2 + s*(x.len*1) },
c.map{|x| x + s*x.len + x + s*(x.len) + x },
c.map{|x| s*(x.len*1) + x*2 + s*(x.len*2) },
]«+»;
} * n;
return c;
}
# *****
# *
# *
method letter_t(n) {
var c = [self.c];
{
c = [c.map{|x| x*5 },
c.map{|x| s*(x.len*2) + x + s*(x.len*2)},
c.map{|x| s*(x.len*2) + x + s*(x.len*2)},
]«+»;
} * n;
return c;
}
# ***
# *
# ***
method letter_z(n) {
var c = [self.c];
{
c = [c.map{|x| x*3 + s*(x.len*2)},
c.map{|x| s*(x.len*2) + x + s*(x.len*2) },
c.map{|x| s*(x.len*2) + x*3},
]«+»;
} * n;
return c;
}
# **** *
# * *
# * *
# *******
# * *
# * *
# * ****
method letter_Z(n) {
var c = [self.c];
{
c = [c.map{|x| x*4 + s*(x.len*2) + x },
c.map{|x| s*(x.len*3) + x + s*(x.len*2) + x },
c.map{|x| s*(x.len*3) + x + s*(x.len*2) + x },
c.map{|x| x*7 },
c.map{|x| x + s*(x.len*2) + x + s*(x.len*3) },
c.map{|x| x + s*(x.len*2) + x + s*(x.len*3) },
c.map{|x| x + s*(x.len*2) + x*4 },
]«+»;
} * n;
return c;
}
}
var size = 2;
var ski = Sierpinski('*');
var word = "best";
var chars = word.chars.map {|char| ski.("letter_#{char}")(size)};
chars.zip { |*a|
say a.join(' ')
};
__END__
*
* *
* *
* *
* * * *
* * * *
* *
* * * *
* * * *