Программа курса:
Разбор задачи:
Предложенный нами код:
def deckRevealedIncreasing(deck):
ind = list(range(len(deck)))
for num in sorted(deck):
deck[ind[0]] = num
ind = ind[2:] + [ind[1]] if len(ind) > 1 else []
return deck
Пошаговый разбор
Создание индексов:
ind = list(range(len(deck)))Здесь создается список
ind, который содержит индексы карт в исходной колоде. Например, если колода из 7 карт, тоind = [0, 1, 2, 3, 4, 5, 6].Этот список будет использоваться для размещения карт в правильных позициях.
Сортировка карт:
for num in sorted(deck):Картам присваиваются значения в порядке их возрастания, так как мы хотим расположить их так, чтобы при раскрытии карт они открывались в возрастающем порядке.
Назначение карт и обновление индексов:
deck[ind[0]] = num ind = ind[2:] + [ind[1]] if len(ind) > 1 else []deck[ind[0]] = num: Текущая карта (num) помещается в позицию, указанную первым индексом в спискеind.- Затем обновляется список индексов:
ind[2:]: Убираются первые два индекса, так как:- Первый используется для размещения текущей карты.
- Второй индекс отправляется в конец списка, так как следующая карта перемещается в конец колоды.
[ind[1]]: Добавляется второй индекс в конец (только если он существует, т.е. если длинаindбольше 1).
Если список индексов содержит только один элемент, то это означает, что осталась только одна карта, и обновление завершено.
Пример: Пусть
deck = [17, 13, 11, 2, 3, 5, 7]:- Отсортированные карты:
[2, 3, 5, 7, 11, 13, 17]. ind = [0, 1, 2, 3, 4, 5, 6].
Шаги обновления:
- Берем карту
2. Помещаем её на позициюind[0] = 0. Обновляемind = [2, 3, 4, 5, 6, 1]. - Берем карту
3. Помещаем её на позициюind[0] = 2. Обновляемind = [4, 5, 6, 1, 3]. - Берем карту
5. Помещаем её на позициюind[0] = 4. Обновляемind = [6, 1, 3, 5]. - Берем карту
7. Помещаем её на позициюind[0] = 6. Обновляемind = [3, 5, 1]. - Берем карту
11. Помещаем её на позициюind[0] = 3. Обновляемind = [1, 5]. - Берем карту
13. Помещаем её на позициюind[0] = 1. Обновляемind = [5]. - Берем карту
17. Помещаем её на позициюind[0] = 5. Обновлять больше нечего.
Получаем результат:
[2, 13, 3, 11, 5, 17, 7].Возврат результата:
return deckВозвращается отсортированная колода в формате, который обеспечит открытие карт в возрастающем порядке.