mid-kid
5 years ago
2 changed files with 113 additions and 0 deletions
@ -0,0 +1,65 @@ |
|||||
|
rocks = {} |
||||
|
pos_y = 0 |
||||
|
for line in io.lines(arg[1]) do |
||||
|
pos_x = 0 |
||||
|
for char in line:gmatch(".") do |
||||
|
if char == "#" then |
||||
|
table.insert(rocks, {y=pos_y, x=pos_x}) |
||||
|
end |
||||
|
pos_x = pos_x + 1 |
||||
|
end |
||||
|
pos_y = pos_y + 1 |
||||
|
end |
||||
|
pos_y = nil |
||||
|
pos_x = nil |
||||
|
|
||||
|
max = nil |
||||
|
for _, rock in ipairs(rocks) do |
||||
|
count = 0 |
||||
|
angles_array = {} |
||||
|
angles = {} |
||||
|
for _, in_rock in ipairs(rocks) do |
||||
|
if rock ~= in_rock then |
||||
|
angle = math.atan(in_rock.y - rock.y, in_rock.x - rock.x) + math.pi / 2 |
||||
|
if angle < 0 then |
||||
|
angle = angle + math.pi * 2 |
||||
|
end |
||||
|
if angles[angle] == nil then |
||||
|
angles[angle] = {in_rock} |
||||
|
table.insert(angles_array, angle) |
||||
|
count = count + 1 |
||||
|
else |
||||
|
table.insert(angles[angle], in_rock) |
||||
|
end |
||||
|
end |
||||
|
end |
||||
|
if not max or max.count < count then |
||||
|
max = {count=count, rock=rock, angles=angles, angles_array=angles_array} |
||||
|
end |
||||
|
end |
||||
|
|
||||
|
print(string.format("Part 1: %d (%d,%d)", max.count, max.rock.x, max.rock.y)) |
||||
|
|
||||
|
table.sort(max.angles_array) |
||||
|
for _, angle in ipairs(max.angles_array) do |
||||
|
table.sort(max.angles[angle], function(x, y) |
||||
|
local dist_x = math.sqrt((x.x - max.rock.x) ^ 2 + (x.y - max.rock.y) ^ 2) |
||||
|
local dist_y = math.sqrt((y.x - max.rock.x) ^ 2 + (y.y - max.rock.y) ^ 2) |
||||
|
return dist_x < dist_y |
||||
|
end) |
||||
|
end |
||||
|
|
||||
|
shot = 0 |
||||
|
while true do |
||||
|
for _, angle in ipairs(max.angles_array) do |
||||
|
if #max.angles[angle] > 0 then |
||||
|
shot = shot + 1 |
||||
|
if shot >= 200 then |
||||
|
rock = max.angles[angle][#max.angles[angle]] |
||||
|
print(string.format("Part 2: %d", rock.x * 100 + rock.y)) |
||||
|
os.exit(true) |
||||
|
end |
||||
|
max.angles[angle][#max.angles[angle]] = nil |
||||
|
end |
||||
|
end |
||||
|
end |
@ -0,0 +1,48 @@ |
|||||
|
#.#................#..............#......#...... |
||||
|
.......##..#..#....#.#.....##...#.........#.#... |
||||
|
.#...............#....#.##...................... |
||||
|
......#..####.........#....#.......#..#.....#... |
||||
|
.....#............#......#................#.#... |
||||
|
....##...#.#.#.#.............#..#.#.......#..... |
||||
|
..#.#.........#....#..#.#.........####.......... |
||||
|
....#...#.#...####..#..#..#.....#............... |
||||
|
.............#......#..........#...........#.... |
||||
|
......#.#.........#...............#............. |
||||
|
..#......#..#.....##...##.....#....#.#......#... |
||||
|
...#.......##.........#.#..#......#........#.#.. |
||||
|
#.............#..........#....#.#.....#......... |
||||
|
#......#.#................#.......#..#.#........ |
||||
|
#..#.#.....#.....###..#.................#..#.... |
||||
|
...............................#..........#..... |
||||
|
###.#.....#.....#.............#.......#....#.... |
||||
|
.#.....#.........#.....#....#................... |
||||
|
........#....................#..#............... |
||||
|
.....#...#.##......#............#......#.....#.. |
||||
|
..#..#..............#..#..#.##........#......... |
||||
|
..#.#...#.......#....##...#........#...#.#....#. |
||||
|
.....#.#..####...........#.##....#....#......#.. |
||||
|
.....#..#..##...............................#... |
||||
|
.#....#..#......#.#............#........##...#.. |
||||
|
.......#.....................#..#....#.....#.... |
||||
|
#......#..###...........#.#....#......#......... |
||||
|
..............#..#.#...#.......#..#.#...#......# |
||||
|
.......#...........#.....#...#.............#.#.. |
||||
|
..##..##.............#........#........#........ |
||||
|
......#.............##..#.........#...#.#.#..... |
||||
|
#........#.........#...#.....#................#. |
||||
|
...#.#...........#.....#.........#......##...... |
||||
|
..#..#...........#..........#................... |
||||
|
.........#..#.......................#.#......... |
||||
|
......#.#.#.....#...........#...............#... |
||||
|
......#.##...........#....#............#........ |
||||
|
#...........##.#.#........##...........##....... |
||||
|
......#....#..#.......#.....#.#.......#.##...... |
||||
|
.#....#......#..............#.......#........... |
||||
|
......##.#..........#..................#........ |
||||
|
......##.##...#..#........#............#........ |
||||
|
..#.....#.................###...#.....###.#..#.. |
||||
|
....##...............#....#..................#.. |
||||
|
.....#................#.#.#.......#..........#.. |
||||
|
#........................#.##..........#....##.. |
||||
|
.#.........#.#.#...#...#....#........#..#....... |
||||
|
...#..#.#......................#...............# |
Loading…
Reference in new issue