Guest User

Untitled

a guest
Jan 20th, 2018
77
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.58 KB | None | 0 0
  1. require 'matrix'
  2. m1 = Matrix[[1,2], [3,4]]
  3. print m1
  4.  
  5. => 1 2
  6. 3 4
  7.  
  8. => Matrix[[1,2][3,4]]
  9.  
  10. m1.to_a.each {|r| puts r.inspect}
  11.  
  12. => [1, 2]
  13. [3, 4]
  14.  
  15. puts m1.to_a.map(&:inspect)
  16.  
  17. require 'matrix'
  18.  
  19. m1 = Matrix[[1,2],[3,4],[5,6]]
  20.  
  21. class Matrix
  22. def to_readable
  23. i = 0
  24. self.each do |number|
  25. print number.to_s + " "
  26. i+= 1
  27. if i == self.column_size
  28. print "n"
  29. i = 0
  30. end
  31. end
  32. end
  33. end
  34.  
  35. m1.to_readable
  36.  
  37. => 1 2
  38. 3 4
  39. 5 6
  40.  
  41. m1.each_slice(m1.column_size) {|r| p r }
  42. => [1,2]
  43. [3,4]
  44.  
  45. class Matrix
  46. def to_readable
  47. column_counter = 0
  48. columns_arrays = []
  49. while column_counter < self.column_size
  50. maximum_length = 0
  51. self.column(column_counter).each do |column_element|# Get maximal size
  52. length = column_element.to_s.size
  53. if length > maximal_length
  54. maximum_length = length
  55. end
  56. end # now we've got the maximum size
  57. column_array = []
  58. self.column(column_counter).each do |column_element| # Add needed spaces to equalize each column
  59. element_string = column_element.to_s
  60. element_size = element_string.size
  61. space_needed = maximal_length - element_size +1
  62. if space_needed > 0
  63. space_needed.times {element_string.prepend " "}
  64. if column_counter == 0
  65. element_string.prepend "["
  66. else
  67. element_string.prepend ","
  68. end
  69. end
  70. column_array << element_string
  71. end
  72. columns_arrays << column_array # Now columns contains equal size strings
  73. column_counter += 1
  74. end
  75. row_counter = 0
  76. while row_counter < self.row_size
  77. columns_arrays.each do |column|
  78. element = column[row_counter]
  79. print element #Each column yield the correspondant row in order
  80. end
  81. print "]n"
  82. row_counter += 1
  83. end
  84. end
  85. end
  86.  
  87. require 'matrix'
  88.  
  89. class Matrix
  90.  
  91. def print
  92. matrix = self.to_a
  93. field_size = matrix.flatten.collect{|i|i.to_s.size}.max
  94. matrix.each do |row|
  95. puts (row.collect{|i| ' ' * (field_size - i.to_s.size) + i.to_s}).join(' ')
  96. end
  97. end
  98.  
  99. end
  100.  
  101. m = Matrix[[1,23,3],[123,64.5, 2],[0,0,0]]
  102. m.print
  103.  
  104. require 'matrix'
  105.  
  106. class Matrix
  107. def to_pretty_s
  108. s = ""
  109. i = 0
  110. while i < self.column_size
  111. s += "n" if i != 0
  112. j = 0
  113. while j < self.row_size
  114. s += ' ' if j != 0
  115. s += self.element(i, j).to_s
  116. j += 1
  117. end
  118. i += 1
  119. end
  120. s
  121. end
  122. end
  123.  
  124. m = Matrix[[0, 3], [3, 4]]
  125.  
  126. puts m # same as 'puts m.to_s'
  127. # Matrix[[0, 3], [3, 4]]
  128.  
  129. puts m.to_pretty_s
  130. # 0 3
  131. # 3 4
  132.  
  133. p m.to_pretty_s
  134. # "0 3n3 4"
  135.  
  136. require 'matrix'
  137.  
  138. module ReadableArrays
  139. def readable(factor: 1, method: :rjust)
  140. repr = to_a.map { |row|
  141. row.map(&:inspect)
  142. }
  143.  
  144. column_widths = repr.transpose.map { |col|
  145. col.map(&:size).max + factor
  146. }
  147.  
  148. res = ""
  149. repr.each { |row|
  150. row.each_with_index { |el, j|
  151. res += el.send method, column_widths[j]
  152. }
  153. res += "n"
  154. }
  155. res.chomp
  156. end
  157. end
  158.  
  159. class Matrix
  160. include ReadableArrays
  161. end
  162. class Array
  163. include ReadableArrays
  164. end
  165.  
  166. arr = [[1, 20, 3], [20, 3, 19], [-32, 3, 5]]
  167. mat = Matrix[*arr]
  168.  
  169. p arr
  170. #=> [[1, 20, 3], [20, 3, 19], [-2, 3, 5]]
  171. p mat
  172. #=> Matrix[[1, 20, 3], [20, 3, 19], [-2, 3, 5]]
  173.  
  174. puts arr.readable
  175. #=>
  176. # 1 20 3
  177. # 20 3 19
  178. # -32 3 5
  179. puts mat.readable
  180. #=>
  181. # 1 20 3
  182. # 20 3 19
  183. # -32 3 5
  184. puts mat.readable(method: :ljust)
  185. #=>
  186. # 1 20 3
  187. # 20 3 19
  188. # -32 3 5
  189. puts mat.readable(method: :center)
  190. #=>
  191. # 1 20 3
  192. # 20 3 19
  193. # -32 3 5
Add Comment
Please, Sign In to add comment