Tuesday, March 02, 2010

Google Dev Fest 2010 Japan の Quiz 暗号通信版

パッチワークの問題の解き方があまりにも恥しかったので,自分への懲戒のため自分の回答を晒します。(Google Dev Fest 2010 の Quiz) まずは,暗号通信から。 楽に,手を抜くために慣れたRubyで実装しました。

シーザー暗号なんだなと思ったけど,tr コマンドの使い方を理解していなかったことが発覚。なので,地味に書きました。手を抜くために,gemのJSONライブラリ,JSON implementation for Rubyを利用しました。

#!/opt/local/bin/ruby

require "json"
require "net/http"

target_host = "devquiz.appspot.com"
target_file = "/personalpost"
key = "(snip)"

plain_text="my email address"
pass_text=""

for i in 0 .. plain_text.size - 1
  ch = plain_text[i]
  if (ch >= 'a'[0] && ch <= 'z'[0] )    # 小文字の変換
    tmp = (ch - 'a'[0] + 4) % 26
    pass_text += ('a'[0] + tmp).chr
  elsif (ch >= 'A'[0] && ch <= 'Z'[0] ) # 大文字の変換
    tmp = (ch - 'A'[0] + 4) % 26
    pass_text += ('A'[0] + tmp).chr
  else                                  # その他の文字はそのまま通過 
    pass_text += plain_text[i].chr
  end
end

json = {"key" => key, "pass" => pass_text}.to_json
#p json

Net::HTTP.start(target_host, 80 )  do |http|
  # response = http.get('/')
  response = http.post( target_file, json )
  p response
end

tr を用いた別解
DevFestクイズ答案: 暗号通信

No comments: