Day eight
This commit is contained in:
parent
c81ea4f786
commit
68238609db
3 changed files with 222 additions and 0 deletions
80
8-1.rb
Executable file
80
8-1.rb
Executable file
|
@ -0,0 +1,80 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
problem = 8
|
||||
input = File.readlines("#{problem}.input").map(&:strip)
|
||||
#input = DATA.read.split("\n")
|
||||
|
||||
# Find diferent antennas
|
||||
signals = input.join.chars.uniq
|
||||
.reject { _1 == "." }
|
||||
.map { [_1, []] }
|
||||
.to_h
|
||||
|
||||
grid = input.map(&:chars)
|
||||
# map antenna locations
|
||||
signals.keys.each do |signal|
|
||||
grid.each_with_index do |row, x|
|
||||
row.each_with_index do |val, y|
|
||||
signals[val] << [x, y] if val == signal
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# calculate antinodes between all node pairs
|
||||
antinodes = []
|
||||
signals.each do |(signal, locations)|
|
||||
locations.combination(2).each do |(first, second)|
|
||||
x = (first.first - second.first).abs
|
||||
y = (first.last - second.last).abs
|
||||
|
||||
if first.first < second.first
|
||||
x1 = first.first - x
|
||||
x2 = second.first + x
|
||||
else
|
||||
x1 = first.first + x
|
||||
x2 = second.first - x
|
||||
end
|
||||
|
||||
if first.last < second.last
|
||||
y1 = first.last - y
|
||||
y2 = second.last + y
|
||||
else
|
||||
y1 = first.last + y
|
||||
y2 = second.last - y
|
||||
end
|
||||
|
||||
antinode_1 = [x1, y1]
|
||||
antinode_2 = [x2, y2]
|
||||
#require "debug";debugger
|
||||
|
||||
antinodes << antinode_1 if x1 >= 0 && y1 >= 0 && x1 < grid.size && y1 < grid.first.size
|
||||
antinodes << antinode_2 if x2 >= 0 && y2 >= 0 && x2 < grid.size && y2 < grid.first.size
|
||||
end
|
||||
end
|
||||
|
||||
p antinodes.uniq.size
|
||||
|
||||
grid.each_with_index do |row, x|
|
||||
row.each_with_index do |val, y|
|
||||
if antinodes.index([x,y])
|
||||
print "#"
|
||||
else
|
||||
print grid[x][y]
|
||||
end
|
||||
end
|
||||
puts
|
||||
end
|
||||
|
||||
__END__
|
||||
............
|
||||
........0...
|
||||
.....0......
|
||||
.......0....
|
||||
....0.......
|
||||
......A.....
|
||||
............
|
||||
............
|
||||
........A...
|
||||
.........A..
|
||||
............
|
||||
............
|
92
8-2.rb
Executable file
92
8-2.rb
Executable file
|
@ -0,0 +1,92 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
problem = 8
|
||||
input = File.readlines("#{problem}.input").map(&:strip)
|
||||
#input = DATA.read.split("\n")
|
||||
|
||||
# Find diferent antennas
|
||||
signals = input.join.chars.uniq
|
||||
.reject { _1 == "." }
|
||||
.map { [_1, []] }
|
||||
.to_h
|
||||
|
||||
grid = input.map(&:chars)
|
||||
# map antenna locations
|
||||
signals.keys.each do |signal|
|
||||
grid.each_with_index do |row, x|
|
||||
row.each_with_index do |val, y|
|
||||
signals[val] << [x, y] if val == signal
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
# calculate antinodes between all node pairs
|
||||
antinodes = []
|
||||
signals.each do |(signal, locations)|
|
||||
locations.each { antinodes << _1 }
|
||||
locations.combination(2).each do |(first, second)|
|
||||
x = (first.first - second.first).abs
|
||||
y = (first.last - second.last).abs
|
||||
|
||||
node1, node2 = first, second
|
||||
loop do
|
||||
if first.first < second.first
|
||||
x1 = node1.first - x
|
||||
else
|
||||
x1 = node1.first + x
|
||||
end
|
||||
if first.last < second.last
|
||||
y1 = node1.last - y
|
||||
else
|
||||
y1 = node1.last + y
|
||||
end
|
||||
node1 = [x1, y1]
|
||||
break unless x1 >= 0 && y1 >= 0 && x1 < grid.size && y1 < grid.first.size
|
||||
antinodes << node1
|
||||
end
|
||||
|
||||
loop do
|
||||
if first.first < second.first
|
||||
x2 = node2.first + x
|
||||
else
|
||||
x2 = node2.first - x
|
||||
end
|
||||
if first.last < second.last
|
||||
y2 = node2.last + y
|
||||
else
|
||||
y2 = node2.last - y
|
||||
end
|
||||
|
||||
node2 = [x2, y2]
|
||||
break unless x2 >= 0 && y2 >= 0 && x2 < grid.size && y2 < grid.first.size
|
||||
antinodes << node2
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
p antinodes.uniq.size
|
||||
|
||||
grid.each_with_index do |row, x|
|
||||
row.each_with_index do |val, y|
|
||||
if antinodes.index([x,y])
|
||||
print "#"
|
||||
else
|
||||
print grid[x][y]
|
||||
end
|
||||
end
|
||||
puts
|
||||
end
|
||||
|
||||
__END__
|
||||
............
|
||||
........0...
|
||||
.....0......
|
||||
.......0....
|
||||
....0.......
|
||||
......A.....
|
||||
............
|
||||
............
|
||||
........A...
|
||||
.........A..
|
||||
............
|
||||
............
|
50
8.input
Normal file
50
8.input
Normal file
|
@ -0,0 +1,50 @@
|
|||
.......................O......T.....d......M......
|
||||
..............................F...................
|
||||
..........V..................R....................
|
||||
............B..t..........T..........d............
|
||||
.....................B.........T................M.
|
||||
..V.................................2.......M.....
|
||||
.......V........................F.O..........2....
|
||||
...................................T..............
|
||||
..................................................
|
||||
......r..........B......................c.........
|
||||
.....o3.B.............................2...........
|
||||
..................1...m..o....d..c.....M..........
|
||||
......Qr....o............F....0............1......
|
||||
....Q.......................0....................2
|
||||
......t..........0................................
|
||||
.............R.................................mL.
|
||||
....r..............3.....................c..1.....
|
||||
.........Q.........................1..............
|
||||
................x...R.............................
|
||||
...x........8.R...................................
|
||||
..................8...............................
|
||||
........x.u.................Z.....................
|
||||
...........................X...............d......
|
||||
....................30.....................f......
|
||||
......q...............v...................c.......
|
||||
..........t8.........D.3..........................
|
||||
.......t.......4.............8....................
|
||||
...b..................C...........D...............
|
||||
.........................v..ND4..........K........
|
||||
.......F.........u...........C..............fZ....
|
||||
........X..9...........N.........Z..........k.....
|
||||
.............X.6...q..........................k...
|
||||
..............................C.Z...........m....k
|
||||
...................4.v..............N.............
|
||||
....................u.......D..............m......
|
||||
............................vl.....UK.............
|
||||
............................l..6.......f..........
|
||||
..................q.4............N................
|
||||
..........b....x..............fu..................
|
||||
.9..................................U.......l.....
|
||||
....w......b.........L......6.....z.5.............
|
||||
..........X..........W6........5............z.....
|
||||
...........q..........L............z........n...W.
|
||||
............................5.........n...W..z....
|
||||
........9........w................7....n..........
|
||||
............w......................7...K.....n....
|
||||
.........................U....K......W............
|
||||
.........w.....L.................k....7...........
|
||||
...................7.............l.............5..
|
||||
..............9...................................
|
Loading…
Reference in a new issue