CodeIQのスペーストーキー問題を解いてみた
ワナも、引っ掛けも、あるんだよ。
というわけで、仕事終わりの午前零時半にコード書いてさっさと提出したら見落としがありました。検算大事。
解答
連長圧縮。2文字ごとに英字とその連続回数を英小文字で示す。文字数が奇数のコマンドは生成できない。
・・・まではすぐにわかったのですが。
いつもは気にする境界値をすっかり忘れてました。
例えば1,3文字目などに同一文字が連続で来た場合、2文字は'z'以外は変換できない。
私の理解が正しければ、スペーストーキーのコーナーケースはexerciseとsqueezedの2つ。前者のみがXになります。#codeiq
— しえる (@cielavenir) April 28, 2014
そして訂正したコードがこちらになります。
デコード部分
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
全ソース
感想
提出は 一晩寝かせて 再チェック。