parent
cfef580250
commit
7f751bdfee
@ -0,0 +1,32 @@
|
|||||||
|
require "pp"
|
||||||
|
|
||||||
|
asteroids = ARGF.read.strip.lines.map(&:strip).map {|l| l.chars }
|
||||||
|
|
||||||
|
max_y = asteroids.size
|
||||||
|
max_x = asteroids.first.size
|
||||||
|
|
||||||
|
asteroids = asteroids.flat_map.with_index {|row, y|
|
||||||
|
row.filter_map.with_index {|l, x| l == ?. ? nil : [x, y] }
|
||||||
|
}
|
||||||
|
|
||||||
|
asteroids = asteroids.each.with_object({}) {|(x, y), h|
|
||||||
|
visible = asteroids
|
||||||
|
.reject {|ax, ay| [x, y] == [ax, ay] }
|
||||||
|
.each.with_object(Hash.new {|h,k| h[k] = [] }) {|(ax, ay), ah|
|
||||||
|
rad = (Math.atan2(ax - x, y - ay) + 2*Math::PI) % (2*Math::PI)
|
||||||
|
ah[rad] << [ax, ay]
|
||||||
|
}
|
||||||
|
|
||||||
|
h[[x, y]] = visible
|
||||||
|
}
|
||||||
|
|
||||||
|
station = asteroids.max_by {|_,v| v.size }
|
||||||
|
# p station.last.size
|
||||||
|
|
||||||
|
asteroids = station.last.to_h.sort_by(&:first).map(&:last)
|
||||||
|
199.times do
|
||||||
|
a = asteroids.shift
|
||||||
|
asteroids.concat(a[1..-1]) if a.first.is_a?(Array)
|
||||||
|
end
|
||||||
|
x, y = asteroids.first.first
|
||||||
|
p 100*x + y
|
Loading…
Reference in new issue