day21 solution
parent
519bbbe38f
commit
c83777d70d
|
@ -0,0 +1,88 @@
|
|||
#!/usr/bin/env ruby
|
||||
|
||||
grid = [ ['.', '#', '.'],
|
||||
['.', '.', '#'],
|
||||
['#', '#', '#'] ]
|
||||
|
||||
def string_to_grid(string)
|
||||
string.chomp.split("/").map do |row|
|
||||
row.split("")
|
||||
end
|
||||
end
|
||||
|
||||
def get_permutations(grid, depth = 0)
|
||||
return [grid] if depth == 4
|
||||
flipped = grid.map(&:reverse)
|
||||
rotated = grid.transpose.map(&:reverse)
|
||||
flipped_and_rotated = rotated.map(&:reverse)
|
||||
[ grid, flipped, flipped_and_rotated ].concat(get_permutations(rotated, depth + 1)).uniq
|
||||
end
|
||||
|
||||
def get_input_rules(filename)
|
||||
sum = {}
|
||||
File.readlines(filename).each do |line|
|
||||
source, dest = line.split(" => ")
|
||||
sgrid = string_to_grid(source)
|
||||
dgrid = string_to_grid(dest)
|
||||
get_permutations(sgrid).each do |perm|
|
||||
sum[perm] = dgrid
|
||||
end
|
||||
end
|
||||
sum
|
||||
end
|
||||
|
||||
def break_grid_into(grid, size)
|
||||
results = []
|
||||
split = grid[0].size / size
|
||||
split.times do |i|
|
||||
grid[i * size, size].each_with_index do |row, index|
|
||||
split.times do |j|
|
||||
results[i] ||= []
|
||||
results[i][j] ||= []
|
||||
results[i][j] << row[j * size, size]
|
||||
end
|
||||
end
|
||||
end
|
||||
results
|
||||
end
|
||||
|
||||
def recombine_grid(grid)
|
||||
results = []
|
||||
size = grid[0][0].size
|
||||
grid.each_with_index do |row, k|
|
||||
size.times do |i|
|
||||
row_index = size * k + i
|
||||
row.size.times do |j|
|
||||
results[row_index] ||= []
|
||||
results[row_index].concat(row[j][i])
|
||||
end
|
||||
end
|
||||
end
|
||||
results
|
||||
end
|
||||
|
||||
def process_grid(grid, rules, depth = 5)
|
||||
if depth == 0
|
||||
grid.each { |row| puts row.join("") }
|
||||
puts grid.flatten.select { |x| x == "#" }.size
|
||||
return
|
||||
end
|
||||
new_size = grid[0].length.even? ? 2 : 3
|
||||
new_grid = break_grid_into(grid, new_size)
|
||||
mutated = new_grid.map do |row|
|
||||
row.map do |entry|
|
||||
if rules[entry].nil?
|
||||
rules.each { |k, v| puts "#{k} => #{v}" }
|
||||
raise "#{entry.inspect} has no match"
|
||||
else
|
||||
rules[entry]
|
||||
end
|
||||
end
|
||||
end
|
||||
mutated_grid = recombine_grid(mutated)
|
||||
process_grid(mutated_grid, rules, depth - 1)
|
||||
end
|
||||
|
||||
process_grid(grid, get_input_rules('sample'), 2)
|
||||
process_grid(grid, get_input_rules('problem'), 5)
|
||||
process_grid(grid, get_input_rules('problem'), 18)
|
|
@ -0,0 +1,108 @@
|
|||
../.. => ..#/.#./...
|
||||
#./.. => .../#../.##
|
||||
##/.. => .##/###/##.
|
||||
.#/#. => #.#/..#/#.#
|
||||
##/#. => .../.##/...
|
||||
##/## => ##./..#/..#
|
||||
.../.../... => ##../..../##../.###
|
||||
#../.../... => ...#/.#.#/.#../.#.#
|
||||
.#./.../... => #.#./...#/#.#./.##.
|
||||
##./.../... => ..#./#.##/#.../.###
|
||||
#.#/.../... => ##../##.#/..#./#.##
|
||||
###/.../... => ..../.#.#/.###/#..#
|
||||
.#./#../... => #..#/#.../.##./....
|
||||
##./#../... => #.##/..##/####/.###
|
||||
..#/#../... => ..#./#.##/####/####
|
||||
#.#/#../... => .##./#.##/#.#./##.#
|
||||
.##/#../... => #.##/####/.###/...#
|
||||
###/#../... => ..../#.#./##.#/..##
|
||||
.../.#./... => .###/.##./##../.##.
|
||||
#../.#./... => ..../#.##/...#/#.#.
|
||||
.#./.#./... => ...#/####/.##./#...
|
||||
##./.#./... => .###/#.##/###./....
|
||||
#.#/.#./... => #.##/###./..../..#.
|
||||
###/.#./... => .#../#.#./#.##/#.##
|
||||
.#./##./... => .###/##../..##/#..#
|
||||
##./##./... => ..#./#.#./.#.#/##.#
|
||||
..#/##./... => .#../####/...#/..##
|
||||
#.#/##./... => ..../##.#/.##./....
|
||||
.##/##./... => .#.#/.#.#/.##./####
|
||||
###/##./... => ##.#/..../..../....
|
||||
.../#.#/... => ..##/##../##.#/###.
|
||||
#../#.#/... => ####/#.##/#.../###.
|
||||
.#./#.#/... => ..../#..#/..##/.#..
|
||||
##./#.#/... => #.../..##/##../..#.
|
||||
#.#/#.#/... => ...#/#.#./#.#./#...
|
||||
###/#.#/... => ###./###./##.#/###.
|
||||
.../###/... => ..#./###./##.#/####
|
||||
#../###/... => ##.#/..#./##../..##
|
||||
.#./###/... => #.../#.##/##../....
|
||||
##./###/... => ..##/.#.#/#..#/#.##
|
||||
#.#/###/... => #.##/..#./.#../..##
|
||||
###/###/... => ..#./#..#/####/.##.
|
||||
..#/.../#.. => ##.#/#.##/...#/###.
|
||||
#.#/.../#.. => #..#/..#./##../###.
|
||||
.##/.../#.. => ..#./.#../###./#.#.
|
||||
###/.../#.. => ...#/...#/.#.#/.##.
|
||||
.##/#../#.. => ##../#.#./#..#/##..
|
||||
###/#../#.. => ##../.#.#/##../#..#
|
||||
..#/.#./#.. => ##.#/##.#/...#/.#..
|
||||
#.#/.#./#.. => .###/.#.#/###./....
|
||||
.##/.#./#.. => #..#/###./####/..#.
|
||||
###/.#./#.. => ..#./.###/.###/...#
|
||||
.##/##./#.. => #.##/..##/...#/.###
|
||||
###/##./#.. => ####/##.#/#.##/#..#
|
||||
#../..#/#.. => ..../.##./#.##/#...
|
||||
.#./..#/#.. => #..#/##../...#/#...
|
||||
##./..#/#.. => ..#./.###/..##/.#.#
|
||||
#.#/..#/#.. => .##./..##/..#./#..#
|
||||
.##/..#/#.. => ####/.#.#/#.../.#.#
|
||||
###/..#/#.. => ..../..##/#.##/###.
|
||||
#../#.#/#.. => #.##/.#.#/.#../.##.
|
||||
.#./#.#/#.. => ..##/###./.###/###.
|
||||
##./#.#/#.. => ##.#/##.#/#.#./##..
|
||||
..#/#.#/#.. => ###./###./.#.#/.#..
|
||||
#.#/#.#/#.. => ##../..#./##../....
|
||||
.##/#.#/#.. => .###/#.#./##.#/##..
|
||||
###/#.#/#.. => ##.#/#.#./.#.#/#...
|
||||
#../.##/#.. => .#.#/...#/.#.#/..#.
|
||||
.#./.##/#.. => ###./##../##.#/....
|
||||
##./.##/#.. => ..##/###./#.#./#.#.
|
||||
#.#/.##/#.. => ##.#/..##/#..#/####
|
||||
.##/.##/#.. => ..../####/..#./##..
|
||||
###/.##/#.. => .###/#..#/..../.#..
|
||||
#../###/#.. => #..#/.#../.#.#/#...
|
||||
.#./###/#.. => .#../..../.##./.###
|
||||
##./###/#.. => ##.#/.#../.#.#/#..#
|
||||
..#/###/#.. => #.##/##../..##/#...
|
||||
#.#/###/#.. => ####/..##/.#../##.#
|
||||
.##/###/#.. => .###/#..#/.###/#.##
|
||||
###/###/#.. => ..##/.##./##../#..#
|
||||
.#./#.#/.#. => ..##/.##./.##./.###
|
||||
##./#.#/.#. => ..##/...#/.##./####
|
||||
#.#/#.#/.#. => .###/.###/#.#./.#..
|
||||
###/#.#/.#. => ##.#/###./##.#/####
|
||||
.#./###/.#. => ...#/..#./.#.#/.#..
|
||||
##./###/.#. => ###./##.#/#.../#.#.
|
||||
#.#/###/.#. => .##./#.#./...#/..#.
|
||||
###/###/.#. => .#.#/.#../..##/####
|
||||
#.#/..#/##. => .##./...#/#..#/.###
|
||||
###/..#/##. => #.##/.#.#/...#/..##
|
||||
.##/#.#/##. => ###./.###/...#/....
|
||||
###/#.#/##. => .##./.##./#.#./#...
|
||||
#.#/.##/##. => #.#./.##./.#.#/.###
|
||||
###/.##/##. => ..../####/.#.#/#.##
|
||||
.##/###/##. => .##./.###/###./.#..
|
||||
###/###/##. => #.../###./.##./##.#
|
||||
#.#/.../#.# => #.#./..../#.##/###.
|
||||
###/.../#.# => .#../.#.#/#.../.###
|
||||
###/#../#.# => ###./#..#/####/##..
|
||||
#.#/.#./#.# => ###./##.#/..../.#..
|
||||
###/.#./#.# => ####/.#.#/.#../..##
|
||||
###/##./#.# => #.#./####/..##/#...
|
||||
#.#/#.#/#.# => #.#./#.#./#.../#.##
|
||||
###/#.#/#.# => #.##/.#../..#./.##.
|
||||
#.#/###/#.# => .###/..##/####/#..#
|
||||
###/###/#.# => #.../..#./..#./#.##
|
||||
###/#.#/### => .#.#/.###/#.##/..##
|
||||
###/###/### => #.#./...#/.#../.#.#
|
|
@ -0,0 +1,2 @@
|
|||
../.# => ##./#../...
|
||||
.#./..#/### => #..#/..../..../#..#
|
Loading…
Reference in New Issue