Распечатать прямоугольник с рубином - PullRequest
0 голосов
/ 09 мая 2019

Как напечатать прямоугольник, как показано ниже, используя Ruby:

* = = = *
* = = = *
* * * * *
* = = = *
* = = = *

в этом случае длина строки и столбца одинаковы и должны быть нечетными.

Пример:

r = прямоугольник (5)

следует напечатать:

* = = = *
* = = = *
* * * * *
* = = = *
* = = = *

и если:

r = прямоугольник (7)

должен печатать:

* = = = = = *
* = = = = = *
* * * * * * *
* = = = = = *
* = = = = = *
* * * * * * *
* = = = = = *

Заранее спасибо.

Ответы [ 5 ]

4 голосов
/ 09 мая 2019

Я бы начал с создания двух строк: (есть множество способов добиться этого)

size = 7

a = Array.new(size, '*').fill('=', 1..-2).join(' ') #=> "* = = = = = *"
b = Array.new(size, '*').join(' ')                  #=> "* * * * * * *"

Затем я бы определил повторяющийся шаблон:

pattern = [a, a, b].cycle

Наконец, я напечатал бы образец размер раз:

puts pattern.take(size)
* = = = = = *
* = = = = = *
* * * * * * *
* = = = = = *
* = = = = = *
* * * * * * *
* = = = = = *
1 голос
/ 09 мая 2019
def rectangle(n)
  puts("-----------------For #{n}--------------------")
  if n % 2 == 1
    for i in (1..n)
      for j in (1..n)
        if j == 1 || j == n || 0 == i % 3
          print "* "
        else
          print "= "
        end
      end
      print("\n")
    end
  end
end

rectangle(3)
rectangle(5)
rectangle(7)
rectangle(9)
rectangle(11)

-----------------For 3--------------------
* = * 
* = * 
* * * 

-----------------For 5--------------------
* = = = * 
* = = = * 
* * * * * 
* = = = * 
* = = = * 

-----------------For 7--------------------
* = = = = = * 
* = = = = = * 
* * * * * * * 
* = = = = = * 
* = = = = = * 
* * * * * * * 
* = = = = = * 

-----------------For 9--------------------
* = = = = = = = * 
* = = = = = = = * 
* * * * * * * * * 
* = = = = = = = * 
* = = = = = = = * 
* * * * * * * * * 
* = = = = = = = * 
* = = = = = = = * 
* * * * * * * * * 

-----------------For 11--------------------
* = = = = = = = = = * 
* = = = = = = = = = * 
* * * * * * * * * * * 
* = = = = = = = = = * 
* = = = = = = = = = * 
* * * * * * * * * * * 
* = = = = = = = = = * 
* = = = = = = = = = * 
* * * * * * * * * * * 
* = = = = = = = = = * 
* = = = = = = = = = *
1 голос
/ 09 мая 2019

Просто для удовольствия изменить @spn answer

def rectangle(count)
  return 'Must odd number more than 1' unless count.is_a?(Integer) && count.odd? && count > 1
  Array.new(count) { |index| (index + 1) % 3 == 0 ?
                               "#{'* ' * count}".chomp(" ") :
                               "#{'*'} #{'= ' * (count - 2)}#{'*'}" }.join("\n")
end

А теперь

puts rectangle(2) # will print Must odd number more than 1
puts rectangle("asdf") # will print Must odd number more than 1
puts rectangle(9) # will print:
* = = = = = = = *
* = = = = = = = *
* * * * * * * * *
* = = = = = = = *
* = = = = = = = *
* * * * * * * * *
* = = = = = = = *
* = = = = = = = *
* * * * * * * * *

Лучше избегать puts в методах. Таким образом, вы можете снова использовать их в сети, телеграммах и т. Д. Также не стоит дублировать исключения Ruby своими (но одинаковыми) сообщениями.

1 голос
/ 09 мая 2019

[РЕШАЙТЕ МНЕ]: D

def square(n)
  begin
    if n.odd?
      1.upto(n) do | row |
        if row % 3 != 0
          puts "#{'*'} #{'= ' * (n - 2)}#{'*'}"
        else
          puts "#{'* ' * n}"
        end
      end
    else
      puts 'Must odd number!'
    end
  rescue
    puts 'Must integer number!'
  end
end

square(5) Выход:

* = = = *
* = = = *
* * * * *
* = = = *
* = = = *

square(7) Выход:

* = = = = = *
* = = = = = *
* * * * * * *
* = = = = = *
* = = = = = *
* * * * * * *
* = = = = = *

square(8) Выход:

Must odd number!

square(8.5) Выход:

Must integer number!

square('blabla') Выход:

Must integer number!

0 голосов
/ 09 мая 2019

Давайте сначала определим метод для построения двух типов линий.

def make_line(n, mid_char)
  ['*', *[mid_char]*(n-2), '*'].join(' ')
end

make_line(5, '*') #=> "* * * * *" 
make_line(5, '#') #=> "* # # # *" 

Теперь создайте метод для рисования линий по нужному шаблону. i-я линия (базовый ноль) состоит из звезд и пробелов, только если (i+1) % 3 равно нулю; иначе это также строка, содержащая знаки фунта.

def draw(n)
  all_stars = make_line(n, '*')
  two_stars = make_line(n, '#')  
  n.times { |i| puts ((i+1) % 3).zero? ? all_stars : two_stars }
end

draw 5
* # # # *
* # # # *
* * * * *
* # # # *
* # # # *
draw 6
* # # # # *
* # # # # *
* * * * * *
* # # # # *
* # # # # *
* * * * * *
draw 7
* # # # # # *
* # # # # # *
* * * * * * *
* # # # # # *
* # # # # # *
* * * * * * *
* # # # # # *
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...