ピラミッド その2

30分プログラム、その85。うー、日付をつけ間違えた。
id:mzp:20070714:pyramidoをRubyでやりなおしてみる。多少、表示を変えてたりする。

$ ruby pyramido.rb 6
     *
    ***
***********
 *********
 *********
***********
    ***
     *

$ ruby pyramido.rb 10
         *
        ***
       *****
*******************
 *****************
  ***************
   *************
  ***************
 *****************
*******************
       *****
        ***
         *
#!/usr/bin/env ruby

class Array
  def zip_by(*array,&f)
    result = []
    self.zip(*array){|item|
      result << f.call(*item)
    }
    result
  end
end

def to_pyramido(sizes)
  width = sizes.max
  sizes.map{|size|
    ('*'*size).center width,' '
  }
end

height = ARGV[0].to_i
padding = Array.new(height/3,0)
sizes = Array.new(height){|i| 2*i+1 } + padding

s = sizes.zip_by(sizes.reverse){|*item| item.max }

puts to_pyramido(s).join("\n")
  • ちょっとネタ切れ風味
  • というか最近、勉強してからやるから、あまり難しいのはできないだけだったりする
  • うわ、雷だっ