The Python Challenge on Ruby
http://www.pythonchallenge.com/
をRubyで解く。激しくネタばれ注意。
ちなみにhttp://gumuz.looze.net/wordpress/index.php/archives/2005/05/09/python-challenge-solutions-part-1/でPythonの解答がネタばれ済。
レベル0
http://www.pythonchallenge.com/pc/def/0.html
画像の式(2の38乗)の値を求め、それに".html"をつけ、URLとして辿る。
irb(main):007:0> print baseurl, 2**38, ".html\n" http://www.pythonchallenge.com/pc/def/274877906944.html => nil
レベル1
http://www.pythonchallenge.com/pc/def/map.html
K -> M O -> Q E -> G
上記がヒント(画像)、下記文字列が問題文。
g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyr amknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclr ylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgle qrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.
これ、問題の文字列をアルファベットを2つずつ進めて読めということだな。と思った。
はっ…Σ( ̄□ ̄;) 気が付くと、意味もなくクラスに! Java使いの業病!*1。
class Converter
@@small_case = [*('a'..'z')]
def initialize()
@small_hash = {}
for i in 0..25 # the alphabet has 26 chars @small_hash[@@small_case[i]] = @@small_case[(i+2)%26]
end
end
def convert(s)
ret = ""
s.split(//).each{|e|
ret.concat(
if e.downcase == e.upcase
e
elsif e == e.downcase
@small_hash[e]
else
@small_hash[e.downcase].upcase
end)
}
ret
end
end
クラス指向厨テラキモスw
その上、問題文に大文字なんてないのに大文字変換に対応している!! オーバースペック*2だ。やり杉(・A・)イクナイ!と反省。
irb(main):043:0> def increase_all_chars_twice(str) irb(main):044:1> a = [*('a'..'z')] irb(main):045:1> str.split(//).each{|e| print a.index(e)!=nil ? a[(a.index(e)+2)%26] : e} irb(main):046:1> end => nil
これでいいんだ。
irb(main):050:0> increase_all_chars_twice("g fmnc wms bgblr rpylqjyrc gr zw fylb. rfyrq ufyramknsrcpq ypc dmp. bmgle gr gl zw fylb gq glcddgagclrylb rfyr'q ufw rfgq rcvr gq qm jmle. sqgleqrpgle.kyicrpylq() gq pcamkkclbcb. lmu ynnjw ml rfc spj.");print "\n" i hope you didnt translate it by hand. thats whatcomputers are for. doing it in by hand is inefficientand that's why this text is so long. usingstring.maketrans() is recommended. now apply on the url. => nil
最後の"now apply on the url."が答え。
問いのURLの末尾"map.html"に、この関数を適用すると、出力は"ocr.jvon"になる。そこでURLを"ocr.jvon"にしてアクセスすると、Have you ever heard of jvon files !?
とつっこまれる!!!!!!!!!
……見なかったことにして(つд∩)
もちろん、拡張子はhtmlにしましょう! ということで。