[2017][ruby][16.x] use StringScanner better
change utpmqkrpzmtowmlvutnutnlzxuqklmzs
commit c0f243174c5f228f246603799f22732048b3b56b
author Alpha Chen <alpha.chen@gmail.com>
date
parent wquwykwr
diff --git a/2017/ruby/day_16.rb b/2017/ruby/day_16.rb
index ed2290b..9168d28 100644
--- a/2017/ruby/day_16.rb
+++ b/2017/ruby/day_16.rb
@@ -7,18 +7,13 @@ def run
   ss = StringScanner.new(@dance)
   until ss.eos?
     case
-    when ss.scan(/s/)
-      spin = ss.scan(/\d+/).to_i
-      @programs.rotate!(@programs.size - spin)
-    when ss.scan(/x/)
-      a = ss.scan(/\d+/).to_i
-      ss.scan(/\//)
-      b = ss.scan(/\d+/).to_i
+    when ss.scan(/s(\d+)/)
+      @programs.rotate!(@programs.size - ss[1].to_i)
+    when ss.scan(/x(\d+)\/(\d+)/)
+      a, b = ss[1].to_i, ss[2].to_i
       @programs[a], @programs[b] = @programs[b], @programs[a]
-    when ss.scan(/p/)
-      a = @programs.index(ss.scan(/\w/))
-      ss.scan(/\//)
-      b = @programs.index(ss.scan(/\w/))
+    when ss.scan(/p(\w)\/(\w)/)
+      a, b = @programs.index(ss[1]), @programs.index(ss[2])
       @programs[a], @programs[b] = @programs[b], @programs[a]
     when ss.scan(/,/)
     end