Тасовка карт на пайтон

Вначале Саша берет верхнюю карту из колоды и кладет ее в правый столбик. После этого берет следующую карту и кладет ее в левую колонку. Когда все карты закончились, он кладет левый столбик на правый. Но одного такого перемешивания недостаточно. Поэтому он повторяет перемешивание «сначала направо, затем налево» p раз.

Input №1
10 2
1 6 4 7 8 3 5 10 9 2
Output №1 
1
8
9
7
10
4
5
6
3
2

Input №2
5 1
2 3 5 1 4
Output №2 
4
5
2
1
3

Мой код работает только на втором примере.Вот он

s, p = map(int, input().split())
cards = list(map(int, input().split()))

for i in range(p):
   right = []
   left = []
   for j in range(s):
      if j % 2 == 0:
        right.append(cards[j])
      else:
        left.append(cards[j])
  cards = right + left
cards += left

for card in cards:
    print(card)

Не пойму почему не работает на втором примере:(


Ответы (1 шт):

Автор решения: MBo

Ваш код и для второго примера не работает. И cards += left вообще ни к чему.

По примерам видно, что верхняя карта - последняя в списке. Так что список нужно обходить с конца

for i in range(p):
    right = []
    left = []
    for j in range(s):
        if j % 2 == 0:
            right.append(cards[s - 1 - j])
        else:
            left.append(cards[s - 1 - j])
    cards = right + left

Чуть покороче:

for i in range(p):
    leftright = [[],[]]
    for j in range(s):
        leftright[j % 2].append(cards[s - 1 - j])
    cards = leftright[0] + leftright[1]
→ Ссылка