ブロックを９０度回す

「オフラインリアルタイムどう書くF05の問題」の解答
問題：http://nabetani.sakura.ne.jp/hena/ordf05rotblo/

オンラインだけども・・・ちょっぴり頭の体操します。

1. 中心関係なく、90度時計回りに回転させる。
2. 中心も一緒に回転してるので、中心が元の位置になるように全体をズラして補正する。
ズラす際に足りない部分は"0"を埋め、5*5マスから漏れる要素は捨てる。
3. 回転前と回転後のブロックの数が同じなら回転成功。

```rb
#!/usr/bin/env ruby

def f05(line)
  point, data = line.chomp.split(":")

  blocks = data
    .split("/").map{|row| row.split("")}
    .reverse.transpose

  if point == "a"
    blocks.pop
    blocks.unshift(["0"] * 5)
    blocks.map  do |row|
      row.shift
      row.push("0")
    end
  else
    blocks.map  do |row|
      row.shift
      row.push("0")
    end
  end

  if data.count("1") == blocks.flatten.count("1")
    blocks.map{|row| row.join("")}.join("/")
  else
    "-"
  end
end

DATA.each.with_index do |line, no|
  data, expected = line.chomp.split(",")
  actual = f05(data)
  if expected != actual
    puts "NG No.%d %s (%s == %s)" % [no, data, expected, actual]
    exit
  end
end
puts "OK"

__END__
a:00000/00110/00100/00100/00000,00000/00000/00000/11100/00100
b:00000/00000/00000/00011/00011,-
a:00000/00000/00000/00011/00011,-
b:00000/00000/00100/00000/00000,00000/00000/01000/00000/00000
a:00000/00000/00100/00000/00000,00000/00000/00000/01000/00000
b:00000/00110/00100/00100/00000,00000/00000/11100/00100/00000
b:00000/00000/00011/00011/00000,00000/00000/00000/11000/11000
a:00000/00000/00011/00011/00000,-
a:01110/00100/00000/00000/00000,00000/00000/00010/00110/00010
b:01110/00100/00000/00000/00000,00000/00010/00110/00010/00000
a:00000/11110/00000/00000/00000,00000/00100/00100/00100/00100
b:00000/11110/00000/00000/00000,00100/00100/00100/00100/00000
a:00000/00011/00110/00000/00000,-
b:00000/00011/00110/00000/00000,00000/00000/01000/01100/00100
a:00000/11100/11100/11100/00000,00000/11100/11100/11100/00000
b:00000/11100/11100/11100/00000,11100/11100/11100/00000/00000
a:01000/00000/00101/10010/10001,-
b:01000/00000/00101/10010/10001,-
b:10000/00000/10010/00000/00000,01010/00000/00000/01000/00000
a:10000/00000/10010/00000/00000,00000/01010/00000/00000/01000
a:00000/10101/11010/11010/01000,-
b:00000/10101/11010/11010/01000,-
b:01101/00011/01101/00000/00000,00000/01010/01010/00100/01110
a:01101/00011/01101/00000/00000,-
a:00001/00000/00000/00100/00010,-
b:00001/00000/00000/00100/00010,-
b:00100/00000/00100/01000/00000,00000/10000/01010/00000/00000
a:00100/00000/00100/01000/00000,00000/00000/10000/01010/00000
a:00010/00100/00000/10000/00000,00000/10000/00000/00100/00010
b:00010/00100/00000/10000/00000,10000/00000/00100/00010/00000
b:11010/00011/10101/00001/00001,-
a:11010/00011/10101/00001/00001,-
a:00100/00010/00000/11000/00000,00000/10000/10000/00010/00100
b:00100/00010/00000/11000/00000,10000/10000/00010/00100/00000
b:01010/00000/00000/01000/00000,00000/10010/00000/00010/00000
a:01010/00000/00000/01000/00000,00000/00000/10010/00000/00010
a:00000/00000/00100/10100/00000,00000/10000/00000/11000/00000
b:00000/00000/00100/10100/00000,10000/00000/11000/00000/00000
b:10000/01101/01000/01100/10011,-
a:10000/01101/01000/01100/10011,-
a:00010/00000/00110/01000/10001,-
b:00010/00000/00110/01000/10001,-
b:00000/01000/01100/00000/00000,00000/01100/01000/00000/00000
a:00000/01000/01100/00000/00000,00000/00000/01100/01000/00000
a:01000/00000/00000/10000/00000,00000/10000/00010/00000/00000
b:01000/00000/00000/10000/00000,10000/00010/00000/00000/00000
b:00000/01101/00000/01010/11010,-
a:00000/01101/00000/01010/11010,-
a:00110/00101/00000/10100/00100,-
b:00110/00101/00000/10100/00100,-
b:11000/10110/00000/00110/00000,00110/00010/10100/10100/00000
a:11000/10110/00000/00110/00000,00000/00110/00010/10100/10100
a:00000/00000/00000/00001/00110,-
b:00000/00000/00000/00001/00110,-
b:01011/10001/00000/00000/00000,00100/00010/00000/00010/00110
a:01011/10001/00000/00000/00000,-
```