Вывод программы FizzBuzz в виде таблицы - PullRequest
0 голосов
/ 10 сентября 2018

Я написал логику для программы для выполнения операций FizzBuzz:

FizzBuzz

module FizzBuzz
  class Operation
    def input
      puts 'Enter a number upto which Fizz/Buzz needs to be printed'
      num = gets.chomp.to_i
      fizzbuzz_function(num)
    end

    def fizzbuzz_function(num)
      for i in 1..num
        if i % 3 == 0 && i % 5 == 0
          puts 'FizzBuzz'
        elsif i % 3 == 0
          puts 'Fizz'
        elsif i % 5 == 0
          puts 'Buzz'
        else
          puts i
        end
      end
    end
end
  res = Operation.new
  res.input
end

Но я пытаюсь распечатать вывод в виде таблицы.

1 Ответ

0 голосов
/ 10 сентября 2018

Вот FizzBuzz в виде таблицы:

def fizzbuzz_gen(num)
  Enumerator.new do |y|
    (1..num).each do |i|
      if i % 3 == 0 && i % 5 == 0
        y << 'FizzBuzz'
      elsif i % 3 == 0
        y << 'Fizz'
      elsif i % 5 == 0
        y << 'Buzz'
      else
        y << i.to_s
      end
    end
  end
end

def fill_to_width(width, e)
  result = ""
  future_length = -1
  while result.length + future_length < width
    result << e.next
    result << " "
    future_length = e.peek.length
  end
  result.center(width)
end

def format_table(num)
  fb = fizzbuzz_gen(num)
  begin
    puts fill_to_width(75, fb)
    puts fill_to_width(75, fb)
    loop do
      puts "%10s%s%31s%s" % ["", fill_to_width(12, fb), "", fill_to_width(12, fb)]
    end
  rescue StopIteration
  end
end

format_table(100)

Может быть меньше выводимых чисел, чем указано, чтобы одна нога не была короче другой.

...