如何制作一个 Ruby 方法来制作宽度为 'n' 的星号菱形?

How do I make a Ruby method that makes a diamond of asterisks with 'n' width?

我正在尝试创建一种方法,使用星号 (*) 字符,returns 字符串在屏幕上打印时看起来像菱形。我想删除任何尾随字符和每一行 终止 (\n)。如果输入是偶数或负数,我也希望它 return nil ,因为不可能打印偶数或负尺寸的钻石。例如

       *
n=3   ***
       * 

        *
       ***
n=5   *****
       ***
        *

或者换句话说

"  *\n ***\n*****\n ***\n  *\n"

方法看起来像这样:

def diamond(n)
  
end

有人可以帮忙吗?谢谢!

你可以试试这个:

def diamond(n)
  return nil if n < 1 || n.even?

  odds = (1..n).select(&:odd?)
  (odds + odds[0..-2].reverse).map { |i| ('*' * i).center(n).chomp << "\n" }.join
end

另一个解决方案:

def diamond(n)
  return nil if n.even? || n.negative?
  
  diamond_string = ""
  n.times do |i|
    space_count = (i - n / 2).abs
    asterisk_count = n - space_count * 2
    diamond_string << [' ' * space_count, '*' * asterisk_count].join + "\n"
  end

  return diamond_string
end