m = {1 => ""} r = 1 p = '' (1..100).each { |c| mof = c % 5 == 0 mot = c % 3 == 0 f = c > 9 ? " " : " " done = mot && !mof && (c + 1) % 5 != 0 && (c + 2) % 5 != 0 if mot && !mof m[r] << f unless done r += 1 if m[r].nil? m[r] = "" (m[r-1].to_s.length - c.to_s.length).times { m[r] << " " } end elsif mof && !mot m[r] << f r -= 1 end m[r-1] << f if r != 1 && !mot m[r+1] << f if !m[r+1].nil? && !mof m[r] << c.to_s p += m[r-1].to_s + "\n" if done } puts p + m[r] + "\n" + m[r+1]