From 39f73f693594b480c66d1c71e610dee851ccc581 Mon Sep 17 00:00:00 2001 From: Alpha Chen Date: Tue, 13 Dec 2016 08:26:31 -0800 Subject: [PATCH] [2016][ruby][12.0] --- 2016/ruby/day_12.rb | 51 +++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 2016/ruby/day_12.rb diff --git a/2016/ruby/day_12.rb b/2016/ruby/day_12.rb new file mode 100644 index 0000000..85b45c7 --- /dev/null +++ b/2016/ruby/day_12.rb @@ -0,0 +1,51 @@ +registers = Hash[(?a..?d).map {|c| [c, 0] }] +pc = 0 +data = DATA.each_line.to_a + +while pc < data.size + line = data[pc] + case line + when /cpy ([a-d]|\d+) ([a-d])/ + value = registers.fetch($1) { $1.to_i } + registers[$2] = value + pc += 1 + when /inc ([a-d])/ + registers[$1] += 1 + pc += 1 + when /dec ([a-d])/ + registers[$1] -= 1 + pc += 1 + when /jnz ([a-d]|\d+) (-?\d+)/ + value = registers.fetch($1) { $1.to_i } + pc += value.zero? ? 1 : $2.to_i + else + raise "invalid line: #{line}" + end +end + +p registers + +__END__ +cpy 1 a +cpy 1 b +cpy 26 d +jnz c 2 +jnz 1 5 +cpy 7 c +inc d +dec c +jnz c -2 +cpy a c +inc a +dec b +jnz b -2 +cpy c b +dec d +jnz d -6 +cpy 16 c +cpy 17 d +inc a +dec d +jnz d -2 +dec c +jnz c -5