Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- puts "Введите размер стороны квадрата:"
- n = STDIN.gets.to_i
- arr = [
- [1]
- ]
- 2.upto(n) do |counter|
- range_start = arr.flatten.size + 1
- range_end = range_start + arr.size - 1
- arr_to_zip = (range_start..range_end).to_a
- if counter.even?
- # right side
- arr = arr.zip(arr_to_zip).map(&:flatten)
- else
- # left side
- arr = arr_to_zip.reverse.zip(arr).map(&:flatten)
- end
- transposed_arr = arr.transpose
- range_start = range_end + 1
- range_end = range_start + transposed_arr.size - 1
- arr_to_zip = (range_start..range_end).to_a
- if counter.even?
- # bottom side
- arr = transposed_arr.zip(arr_to_zip.reverse).map(&:flatten).transpose
- else
- # top side
- arr = arr_to_zip.zip(transposed_arr).map(&:flatten).transpose
- end
- end
- # pretty print
- max_size = (n**2).digits.size
- arr.each do |line|
- pp line.map { |number| number.to_s.rjust(max_size, " ") }
- end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement