日々精進

新しく学んだことを書き留めていきます

文字Shift

ネットで見つけた以下の問題をといてみます。

(難易度 超簡単, 目標時間 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の範囲を超えた場合のループを表現することぐらいしか工夫するところがないですな。