AtCoder ABC146
AtCoder ABC146解いた分だけまとめ。
今回はABの2完。 最近のC問題難しくなってきてない...?
CTFで散々使うASCII変換をうまく使えなかったの、猛反省...
目次
A. Can't Wait for Holiday
おやすみっていいよね。
曜日のリストと、日曜から見て次の日曜があと何日か計算済みのリストを作り、
for文で入力と照合しておしまい。
#coding:utf-8 s = input() day = ['SUN','MON','TUE','WED','THU','FRI','SAT'] num = [7, 6, 5, 4, 3, 2, 1,] for i in range(0, 7): if s == day[i]: print(num[i])
B. ROT N
CTFでおなじみ、N=13ならROT13,もといシーザー暗号のやつ。
ここでお目にかかるとは...と言いつつ題材にしやすいよねこれ。
提出したコードがこちら。終わったあとで効率悪すぎて自分を殴りたくなる。
リストの入力がイケてないのと、アルファベットの変換、なぜascii変換使わなかった...
ACしたけど51msだった。
いや、前やってたでしょ...
#coding:utf-8 n = int(input()) s = input() string = ['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'] letter = [] ans = [] for i in s: letter.append(i) for i in letter: for j in range(0, 26): if i == string[j]: tmp = j + n #print(tmp) if tmp > 25: tmp = tmp % 26 ans.append(string[tmp]) #print(ans) print(''.join(ans))
ASCII変換を使って書き直したのがこちら。ACして21msになった。
ord('A')
でASCIIコード変換、chr('65')
でASCIIから文字へ変換される。
先に元の文字をASCIIコード変換し、n字ずらした分のmod26を計算しておく。
AのASCIIコードは65なので、それを利用する。
#coding:utf-8 n = int(input()) s = list(input()) #print(s) ans = [] # AをASCII変換すると65なので、元の字をASCII変換してから計算する for i in s: tmp = ((ord(i) - 65 + n) % 26) + 65 ans.append(chr(tmp)) print(''.join(ans))