[問題]
- 相性をチェックする二人の名前を並べた英小文字からなる文字列を入力します。
- "a" を 1、"b" を 2、...、"z" を 26 として、文字列を数列に変換します。この数列を A とします。
- 数列 A の隣り合う 2 つの数を足して前から順番に並べた新しい数列 A' を作り、これを新たに A とします。このとき、A の要素の大きさが 101 を超えていた場合、その要素から 101 を引きます。
- 数列 A の要素数が 1 になるまで 3. の手順を繰り返します。A の要素数が 1 となったとき、残った要素の値を「二人の相性」とします。
名前の並べ方は 2 通りあります。そこで、あなたは相性占いの結果として、 2 通りの方法で計算した「二人の相性」のうち大きい方を出力するようにプログラムを組むことにしました。
たとえば、ai さんと ueo さんの名前を "aiueo" として並べたとき、「二人の相性」は 97 になります。
[1, 9, 21, 5, 15]
[10, 30, 26, 20]
[40, 56, 46]
[96, 1]
[97]
ueo さんの名前を先に持ってきて "ueoai" とすると、「二人の相性」は 43 になります。
[21, 5, 15, 1, 9]
[26, 20, 16, 10]
[46, 36, 26]
[82, 62]
[43]
相性占いをする二人の人物の名前が与えられたとき、相性占いの結果を出力するプログラムを作成してください。
Python
1a , b = input().split() 2abc = {'a':1,'b':2,'c':3,'d':4,'e':5,'f':6,'g':7,'h':8,'i':9,'j':10,'k':11,'l':12,'m':13,'n':14,'o':15,'p':16,'q':17,'r':18,'s':19,'t':20,'u':21,'v':22,'w':23,'x':24,'y':25,'z':26} 3c = a+b 4l = [] 5 6for i in range(len(c)): 7 8 x = c[i] 9 10 y = abc[x] 11 12 l.append(y) 13 14 15print(l) 16 17m = [] 18count = 0 19 20for i in range(len(c)-1): 21 count = l[i] + l[i+1] 22 if count > 101: 23 count -= 101 24 m.append(count) 25 26print(m) 27 28n = [] 29p = 0 30 31for i in range(len(c)-2): 32 p = m[i] + m[i+1] 33 if p > 101: 34 p -= 101 35 n.append(p) 36 37print(n) 38 39q = [] 40j = 0 41 42for i in range(len(c)-3): 43 j = n[i] + n[i+1] 44 if j > 101: 45 j -= 101 46 q.append(j) 47 48print(q) 49 50v = [] 51h = 0 52for i in range(len(c)-4): 53 h = q[i] + q[i+1] 54 if h > 101: 55 h -= 101 56 v.append(h) 57 58print(v)
上のコードの通り、5文字までは実行でき解答を求めることができるのですが、a b の標準入力の範囲が1 ≦ (a の長さ) ≦ 1,000、1 ≦ (b の長さ) ≦ 1,000の時のプログラムの書き方が思いつきません。
np.cumsumを使って解くのかなと思ったのですが、できませんでした。
プログラミングに詳しい方、
入力例 alice bob
出力 97
などの上記の範囲(1 ≦ (a の長さ) ≦ 1,000、1 ≦ (b の長さ) ≦ 1,000)に対応するプログラムの書き方を教えてください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/08/03 02:28
2020/08/03 02:32
2020/08/03 02:48 編集
2020/08/03 02:48
2020/08/03 02:57