diff options
author | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2020-12-25 15:31:15 +0100 |
---|---|---|
committer | Marcin Chrzanowski <marcin.j.chrzanowski@gmail.com> | 2020-12-25 15:31:15 +0100 |
commit | 7cadfc7ce07f30f21447f3a1b748af8a59cf0703 (patch) | |
tree | 31beb56375ec4a25ada661a7b4b8c71ff4e9951e /14/a.rb | |
parent | 8c33b12b21f30724c6a6e3cc357facb7b0cc1b85 (diff) |
Add day 14
Diffstat (limited to '14/a.rb')
-rw-r--r-- | 14/a.rb | 41 |
1 files changed, 41 insertions, 0 deletions
@@ -0,0 +1,41 @@ +lines = File.readlines('input.txt') + +one_mask = 0 +zero_mask = (1 << 36) - 1 + +mem = Hash.new 0 + +lines.each do |line| + if line.slice(0, 4) == 'mask' + mask = line.split(' = ')[1].strip + one_mask = 2 + zero_mask = 3 + mask.each_char do |c| + case c + when '1' + one_mask += 1 + when '0' + zero_mask -= 1 + end + one_mask *= 2 + zero_mask *= 2 + zero_mask += 1 + end + one_mask >>= 1 + zero_mask >>= 1 + else + split = line.split(/\[|\] = /) + address = split[1].to_i + value = split[2].to_i + actual_value = (value & zero_mask) | one_mask + mem[address] = actual_value + end +end + +sum = 0 +mem.each_value do |v| + sum += v + sum -= 1 << 36 +end + +puts sum |