#!/usr/bin/ruby

class Sierpinski {

    #   **
    # * * *
    #  **
    method letter_s(n) {
        var c = ['*'];
        {
            c = (c.map{|x| ' '*(x.len*2) + x*2 + ' '*(x.len*1)   } +
                 c.map{|x| x + ' '*(x.len) + x + ' '*(x.len) + x } +
                 c.map{|x| ' '*(x.len*1) + x*2 + ' '*(x.len*2)   }
                );
        } * n;
        return c;
    }

    # *
    # *
    # *
    method letter_i(n) {
        var c = ['*'];
        {
            c = (c.map{|x| x*2 } +
                 c.map{|x| x*2 } +
                 c.map{|x| x*2 }
                );
        } * n;
        return c;
    }

    # *
    # **
    # ***
    method letter_d(n) {
        var c = ['*'];
        {
            c = (c.map{|x| x*1 + ' '*(x.len*2) } +
                 c.map{|x| x*2 + ' '*(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 + ' '*(x.len) } +
                 c.map{|x| x*3                    }
                );
        } * n;
        return c;
    }

    # ***
    # **
    # *
    method letter_f(n) {
        var c = ['*'];
        {
            c = (c.map{|x| x*3                      } +
                 c.map{|x| x*2 + ' '*(x.len*1) } +
                 c.map{|x| x*1 + ' '*(x.len*2) }
                );
        } * n;
        return c;
    }
}

var size = 2;
var ski = Sierpinski();
var str = "sidef";

var chars = [];
str.each { |char|
    chars.append(ski.('letter_' + char)(size));
}

chars.zip { |*a|
    say a.join('   ')
}