Day twenty-five Part one
This commit is contained in:
parent
94e04cc796
commit
c6c314ca30
2 changed files with 4068 additions and 0 deletions
69
25/main.rb
Executable file
69
25/main.rb
Executable file
|
@ -0,0 +1,69 @@
|
||||||
|
#!/usr/bin/env ruby
|
||||||
|
|
||||||
|
class Component < Array
|
||||||
|
def self.from_line(line)
|
||||||
|
new(line.map(&:chars)[1..-2].transpose.map { _1.count("#") })
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
class Lock < Component
|
||||||
|
def accepts?(key) = zip(key).all? { _1.sum <= 5 }
|
||||||
|
end
|
||||||
|
|
||||||
|
Key = Class.new(Component)
|
||||||
|
|
||||||
|
def create(line)
|
||||||
|
(line.first == "#####" ? Lock : Key).from_line(line)
|
||||||
|
end
|
||||||
|
|
||||||
|
input = (ARGV.first.nil? ? DATA : ARGF)
|
||||||
|
.readlines(chomp: true)
|
||||||
|
.slice_when { |a, b| b.empty? }
|
||||||
|
.map { _1.reject { |a| a.empty? } }
|
||||||
|
.map(&method(:create))
|
||||||
|
|
||||||
|
locks, keys = input.partition { _1.is_a?(Lock) }
|
||||||
|
|
||||||
|
p locks.sum { |lock| keys.count { lock.accepts?(_1) } }
|
||||||
|
|
||||||
|
|
||||||
|
__END__
|
||||||
|
#####
|
||||||
|
.####
|
||||||
|
.####
|
||||||
|
.####
|
||||||
|
.#.#.
|
||||||
|
.#...
|
||||||
|
.....
|
||||||
|
|
||||||
|
#####
|
||||||
|
##.##
|
||||||
|
.#.##
|
||||||
|
...##
|
||||||
|
...#.
|
||||||
|
...#.
|
||||||
|
.....
|
||||||
|
|
||||||
|
.....
|
||||||
|
#....
|
||||||
|
#....
|
||||||
|
#...#
|
||||||
|
#.#.#
|
||||||
|
#.###
|
||||||
|
#####
|
||||||
|
|
||||||
|
.....
|
||||||
|
.....
|
||||||
|
#.#..
|
||||||
|
###..
|
||||||
|
###.#
|
||||||
|
###.#
|
||||||
|
#####
|
||||||
|
|
||||||
|
.....
|
||||||
|
.....
|
||||||
|
.....
|
||||||
|
#....
|
||||||
|
#.#..
|
||||||
|
#.#.#
|
||||||
|
#####
|
Loading…
Reference in a new issue