The Python Challenge on Ruby 2

http://www.pythonchallenge.com/

Rubyで解く。激しくネタばれ注意。

レベル3

http://www.pythonchallenge.com/pc/def/equality.html

One small letter, surrounded by EXACTLY three big bodyguards on each of its sides.

これだけではラチがあかないのでソースを見ると例のごとくコメントに文字列が。

<!--
kAewtloYgcFQaJNhHVGxXDiQmzjfcpYbzxlWrVcqsmUbCunkfxZWDZjUZMiGqhRRiUvGmYmvnJIHEmbT

問題の文意は「正確に*1前後を大文字3文字ずつで囲まれた小文字1文字」つまり"ABCxDEF"のようなパターンということだ。パターンマッチング一発。


f=File.open("./equality.html")
flg=0
while l=f.gets
if l=~/<!--/
flg=1
next
elsif l=~/-->/
flg=0
next
end
l.gsub(/[^A-Z][A-Z][A-Z][A-Z][a-z][A-Z][A-Z][A-Z][^A-Z]/){|e|print e[4].chr} if flg==1
end
f.close
適当な名前をつけて実行。

$ ruby py_3.rb
linkedlist

解答:"linkedlist.html"

ちなみにhttp://www.pythonchallenge.com/pc/def/linkedlist.htmlへアクセスするとlinkedlist.phpとだけ書いてある。Python ChallengeなのにPHPかよw

*1:これがちょっと難しい。"ABCDxEFG"のように「前後4文字以上大文字があってもならない」のが罠になる。