0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

paizaラーニング問題集「【シミュレーション 2】perfect shuffle」を解いてみた

Posted at

▼考え方

ポイントになる考え方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="")
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?