CodeIQのスペーストーキー問題を解いてみた

ワナも、引っ掛けも、あるんだよ。
というわけで、仕事終わりの午前零時半にコード書いてさっさと提出したら見落としがありました。検算大事。

解答

連長圧縮。2文字ごとに英字とその連続回数を英小文字で示す。文字数が奇数のコマンドは生成できない。

・・・まではすぐにわかったのですが。
いつもは気にする境界値をすっかり忘れてました。
例えば1,3文字目などに同一文字が連続で来た場合、2文字は'z'以外は変換できない。

そして訂正したコードがこちらになります。

デコード部分
def decode(s)
  r=""
  if (s.length % 2 == 1) then
    return "X"
  end

  p = ""
  s.scan(/.{2}/).each {|c|
    if (p[0] == c[0] && p[1] != "z") then 
      return "X"
    end
    r += c[0] * (c[1].ord-0x60)
    p = c
  }
  return r
end
全ソース


実行結果

感想

提出は 一晩寝かせて 再チェック。