Advertisement
Guest User

Spiral Matriz

a guest
Jun 13th, 2020
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 0.95 KB | None | 0 0
  1. puts "Введите размер стороны квадрата:"
  2.  
  3. n = STDIN.gets.to_i
  4.  
  5. arr = [
  6.   [1]
  7. ]
  8.  
  9. 2.upto(n) do |counter|
  10.   range_start = arr.flatten.size + 1
  11.   range_end   = range_start + arr.size - 1
  12.   arr_to_zip  = (range_start..range_end).to_a
  13.  
  14.   if counter.even?
  15.     # right side
  16.     arr = arr.zip(arr_to_zip).map(&:flatten)
  17.   else
  18.     # left side
  19.     arr = arr_to_zip.reverse.zip(arr).map(&:flatten)
  20.   end
  21.  
  22.   transposed_arr = arr.transpose
  23.   range_start    = range_end + 1
  24.   range_end      = range_start + transposed_arr.size - 1
  25.   arr_to_zip     = (range_start..range_end).to_a
  26.  
  27.   if counter.even?
  28.     # bottom side
  29.     arr = transposed_arr.zip(arr_to_zip.reverse).map(&:flatten).transpose
  30.   else
  31.     # top side
  32.     arr = arr_to_zip.zip(transposed_arr).map(&:flatten).transpose
  33.   end
  34. end
  35.  
  36. # pretty print
  37. max_size = (n**2).digits.size
  38.  
  39. arr.each do |line|
  40.   pp line.map { |number| number.to_s.rjust(max_size, " ") }
  41. end
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement