過去問やっていきます
AtCoder Beginner Contest 146
Aは流石にやらなくていいかな
問題
https://atcoder.jp/contests/abc146/tasks/abc146_b
1回目
回答
N = gets.to_i
S = gets.chomp
alf = ['A','B','C','D','E','F','G',
'H','I','J','K','L','M','N','O','P',
'Q','R','S','T','U','V','W','X','Y','Z']
result = ''
for c in S.chars
x = alf.index(c)
x = ( x + N ) % 26
result += alf[x]
end
puts result
結果

2回目
回答
N = gets.to_i
S = gets.chomp
N.times do |i|
S = S.tr('A-Z', 'B-ZA')
end
puts S
結果

感想
流石にAからZ書かなくてもいい方法あるよな〜と思ったけど、書き方が分からなかった。。。
メモリ使用量9割くらい減ったな。。。
追記
コメントを頂いて、もう一回やりました!ありがとうございます!
あと alphabet の頭をとったつもりが alf となっていたのめっちゃ恥ずかしい
(alfabet はポーランド語らしい。へえ〜)
回答
N = gets.to_i
S = gets.chomp
a = [*"A".."Z"]
puts S.tr(a.to_s, a.rotate(N).to_s)
追記2
to_s
では配列の文字を繋げられないとのご指摘を頂きました。
今回はたまたま上手くいきましたが、
本来の想定では以下のコードの挙動になる予定でしたので、
追記しておきます!
N = gets.to_i
S = gets.chomp
a = [*"A".."Z"]
puts S.tr(a.join, a.rotate(N).join)
結果
