[2016][ruby][4.1]
change vuqxzvmxssxnmomnnmvuslvpwmrwzzpu
commit 97c1e92302db5c1dc89ce189cd796149746998cf
author Alpha Chen <alpha.chen@gmail.com>
date
parent nmmzrmkn
diff --git a/2016/ruby/day_04.rb b/2016/ruby/day_04.rb
index f11a02b..1f8779f 100644
--- a/2016/ruby/day_04.rb
+++ b/2016/ruby/day_04.rb
@@ -17,6 +17,25 @@ class Room
       .map(&:first)
       .join
   end
+
+  def name
+    name = encrypted_name.chars
+    sector_id.times do
+      name = name.map {|char|
+        case char
+        when /[a-y]/
+          char.succ
+        when ?z
+          ?a
+        when ?-, ' '
+          ' '
+        else
+          raise "unexpected char: '#{char.inspect}'"
+        end
+      }
+    end
+    name.join
+  end
 end
 
 if __FILE__ == $0
@@ -25,11 +44,9 @@ if __FILE__ == $0
     room = Room.new(name, sector_id.to_i)
     [room, checksum]
   }.select {|room, checksum|
-    room.checksum == checksum
-  }.inject(0) {|n, (room, _)|
-    n += room.sector_id
-  }.tap {|count|
-    puts count
+    room.checksum == checksum && room.name =~ /north/
+  }.tap {|rooms|
+    p rooms
   }
 end
 
@@ -42,6 +59,8 @@ class TestDay04 < Minitest::Test
     assert_equal 'abcde', Room.new('a-b-c-d-e-f-g-h', 987).checksum
     assert_equal 'oarel', Room.new('not-a-real-room', 404).checksum
     refute_equal 'decoy', Room.new('totally-real-room', 200).checksum
+
+    assert_equal 'very encrypted name', Room.new('qzmt-zixmtkozy-ivhz', 343).name
   end
 end