Solved Part 2
parent
e36d97951a
commit
c085f4461f
|
@ -0,0 +1,12 @@
|
||||||
|
00100
|
||||||
|
11110
|
||||||
|
10110
|
||||||
|
10111
|
||||||
|
10101
|
||||||
|
01111
|
||||||
|
00111
|
||||||
|
11100
|
||||||
|
10000
|
||||||
|
11001
|
||||||
|
00010
|
||||||
|
01010
|
|
@ -1,16 +1,14 @@
|
||||||
#!/bin/env ruby
|
#!/bin/env ruby
|
||||||
|
|
||||||
#part 1
|
# Part 1
|
||||||
report = File.readlines('./input').map(&:strip)
|
report = File.readlines('./input').map(&:strip)
|
||||||
masks = []
|
masks = []
|
||||||
report[0].length.times{ masks.push(2 ** _1) }
|
report[0].length.times { masks.push(2**_1) }
|
||||||
report.map!{ _1.to_i(2) }
|
report.map! { _1.to_i(2) }
|
||||||
gamma = 0
|
gamma = 0
|
||||||
|
|
||||||
masks.each do |mask|
|
masks.each do |mask|
|
||||||
if report.map{ mask & _1 }.reject(&:zero?).count > report.count / 2
|
gamma += mask if report.map { mask & _1 }.reject(&:zero?).count > report.count / 2
|
||||||
gamma += mask
|
|
||||||
end
|
|
||||||
end
|
end
|
||||||
|
|
||||||
epsilon = gamma ^ masks.sum
|
epsilon = gamma ^ masks.sum
|
||||||
|
@ -18,3 +16,28 @@ puts "Gamma is #{gamma}"
|
||||||
puts "Epsilon is #{epsilon}"
|
puts "Epsilon is #{epsilon}"
|
||||||
puts "Power is #{gamma * epsilon}"
|
puts "Power is #{gamma * epsilon}"
|
||||||
|
|
||||||
|
# Part 2
|
||||||
|
def get_rating(report, masks, invert)
|
||||||
|
report_copy = report.clone
|
||||||
|
masks.each do |mask|
|
||||||
|
common = invert ? 1 : 0
|
||||||
|
if report_copy.map { mask & _1 }.reject(&:zero?).count >= report_copy.count / 2.to_f
|
||||||
|
common = invert ? 0 : 1
|
||||||
|
end
|
||||||
|
report_copy.reject! do |number|
|
||||||
|
if common.zero?
|
||||||
|
(mask & number).zero? ? false : true
|
||||||
|
else
|
||||||
|
(mask & number).zero? ? true : false
|
||||||
|
end
|
||||||
|
end
|
||||||
|
return report_copy[0] if report_copy.count == 1
|
||||||
|
end
|
||||||
|
end
|
||||||
|
|
||||||
|
masks.reverse!
|
||||||
|
o2 = get_rating(report, masks, false)
|
||||||
|
co2 = get_rating(report, masks, true)
|
||||||
|
puts "Oxygen rating is #{o2}"
|
||||||
|
puts "CO2 rating is #{co2}"
|
||||||
|
puts "Life Support rating is #{o2 * co2}"
|
||||||
|
|
Loading…
Reference in New Issue