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文字以上大文字があってもならない」のが罠になる。