▼考え方
ポイントになる考え方1.~4.を以下に示します。
基本的には、問題文に書いてある通りにコードを書きました。
1.現在のトランプの山札を辞書T、perfect shuffle後をTSで示します。keyは山札の一番上(0)から何枚目のカードかを数値で示し、valueは絵柄のアルファベットとカードの数字をタプル示します。最終的にTSが答えです。以下に例を示します。
T[0] = ('S',1)
T[1] = ('S',2)
...
T[51] = ('C',13)
2.題意より、K=0(perfect shuffleが行われない)があり得るため、TをTSにコピーしておきます。
3.K>=1ならばperfect shuffleが行われます。以下のように、Tの内容をTSにコピーします。
TS[51] ← T[51]
TS[50] ← T[25]
TS[49] ← T[50]
TS[48] ← T[24]
TS[47] ← T[49]
TS[46] ← T[23]
...
TS[1] ← T[26]
TS[0] ← T[0]
4.K>=2(perfect shuffleが複数行われる)があり得るため、次のperfect shuffleに備えTSをTにコピーしておきます。
▼コード
########## 処理0(準備) インプット,リスト,辞書の定義 ###########
K = int(input())
# a:トランプの山札の全枚数
a = 52
# 考え方1.
egara = ["S","H","D","C"]
T = {}
TS = {}
for i in range(a):
if i % 13 == 0:
j = 1
T[i] = (egara[i//(a//4)],j)
j += 1
# 考え方2.
TS = T.copy()
########## 処理1 perfect shuffleと、 perfect shuffle後の山札の出力###########
# 考え方3.
# k:TSのkeyをうまく調整するための変数
k = 0
for i in range(K):
for j in range(1,a//2+1):
TS[a-j-k] = T[a-j]
TS[a-j-1-k] = T[a-(a//2+j)]
k += 1
k = 0
# 考え方4.
T = TS.copy()
for i in range(a):
print(TS[i][0],"_",TS[i][1],sep="")