ネットで見つけた以下の問題をといてみます。
(難易度 超簡単, 目標時間 10分以内)
与えられた英語の大文字で構成された文字列の中の文字を、与えられた数字の分だけ左にシフトさせなさい。たとえば、’C’を2つ左にシフトさせると’A’、’Z’を2つ左にシフトさせると’X’。
与えられる英語の文字列はAからZで、Aの次はZにシフトさせるものとする。例1)
"VQREQFGT"
2
Returns: "TOPCODER"例2)
"ABCDEFGHIJKLMNOPQRSTUVWXYZ"
10
Returns: "QRSTUVWXYZABCDEFGHIJKLMNOP"例3)
"TOPCODER"
0
Returns: "TOPCODER"例4)
"LIPPSASVPH"
4
"HELLOWORLD"
回答は↓
inputString = "VQREQFGT" shiftNum = 2 output = "" for i in 0..(inputString.length - 1) code = ((inputString[i] - shiftNum - 'A'[0] + 26) % 26 + 'A'[0]) output += code.chr end puts output
剰余を使ってA〜Zの範囲を超えた場合のループを表現することぐらいしか工夫するところがないですな。