Advertisement
Guest User

Untitled

a guest
Oct 20th, 2018
82
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Ruby 2.11 KB | None | 0 0
  1. require 'matrix'
  2.  
  3. class Point
  4.     attr_accessor :x, :y, :more_distant_points, :distance_at_points
  5.     def initialize(x = 0.0, y = 0.0)
  6.         @x = x
  7.         @y = y
  8.         #[ [Point,distance], [Point,distance], [Point,distance] ]
  9.         @more_distant_points = Array.new(3)
  10.         @distance_at_points = Array.new(3,-1)
  11.     end
  12.  
  13.     def distance( point )
  14.         sum_of_squares = ( point.x - @x ) ** 2
  15.         sum_of_squares += ( point.y - @y) ** 2
  16.         return_value = Math.sqrt(sum_of_squares)
  17.         update_distances(point, return_value)
  18.         return_value
  19.     end
  20.  
  21.     def update_distances(point, distance)
  22.         if distance > @distance_at_points[0]
  23.             old_point = @more_distant_points[0]
  24.             old_distance = @distance_at_points[0]
  25.             @distance_at_points[0] = distance
  26.             @more_distant_points[0] = point
  27.             update_distances(old_point, old_distance)
  28.         elsif distance > @distance_at_points[1]
  29.             old_point = @more_distant_points[1]
  30.             old_distance = @distance_at_points[1]
  31.             @distance_at_points[1] = distance
  32.             @more_distant_points[1] = point
  33.             update_distances(old_point, old_distance)
  34.         elsif distance > @distance_at_points[2]
  35.             @distance_at_points[2] = distance
  36.             @more_distant_points[2] = point
  37.         end
  38.     end
  39.  
  40.     def to_s
  41.         content = '('+ @x.to_s + ', ' + @y.to_s + ')'
  42.     end
  43. end
  44.  
  45. class Matrix
  46.     def []=(i, j, x)
  47.         @rows[i][j] = x
  48.     end
  49.  
  50.     def to_readable
  51.         i = 0
  52.         content = ''
  53.         self.each do |number|
  54.             content += number.to_s + "\t"
  55.             i+= 1
  56.             if i == self.column_size
  57.                 content+= "\n"
  58.                 i = 0
  59.             end
  60.         end
  61.         content
  62.     end
  63.  
  64. end
  65.  
  66. puntos = Array.new
  67.  
  68. File.open("in", "r") do |f|
  69.   f.each_line do |line|
  70.     x_coord = line[/[-+]?[0-9]*\.?[0-9]*/].to_f
  71.     y_coord = line[/[-+]?[0-9]*\.?[0-9]*$/].to_f
  72.     puntos << Point.new(x_coord, y_coord)
  73.   end
  74. end
  75.  
  76. m = Matrix.empty(puntos.size, 0) * Matrix.empty(0, puntos.size)
  77.  
  78. m.each_with_index do |e, row, col|
  79.     m[row,col] = puntos[row].distance(puntos[col]).round(4)
  80. end
  81.  
  82. resultado = m.to_readable
  83. resultado += "\nPunto \t\tp1 \t\tp2 \t\tp3"
  84.  
  85. puntos.each do |p|
  86.     resultado += "\n" + p.to_s
  87.     p.more_distant_points.each do |q|
  88.         resultado += "\t" + q.to_s
  89.     end
  90. end
  91.  
  92. File.write('out', resultado + "\n")
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement