Статья Автор: Лебедев Дмитрий

TUZ_7-01_Идеальное перемешивание элементов списков

TUZ_7-01_Идеальное перемешивание элементов списков

TUZ_7-01_Идеальное перемешивание элементов списков
7.1. Идеальное перемешивание элементов списка
В этом задании дается список с четным числом элементов и требуется перемешать их.
Для перемешивания список делится на две равные половины, и из каждой половины поочередно выбирается по одному элементу.
Существует два типа идеального перемешивания: out-shuffle, когда первым берется первый элемент из первой половины,
за ним следует первый элемент из второй половины – и так до тех пор, пока все элементы не будут перемешаны.
Второй: in-shuffle, когда первым берется первый элемент из второй половины, а за ним – первый элемент из первой половины.
Например, пусть дан список items = [19, 456, 3, 4, 5, 6, 64, 11] и требуется перемешать элементы,
используя тип перемешивания out-shuffle.
  • Сначала разбиваем список items на две равные половины и получаем
                   p1 = [19, 456, 3, 4] и p2 = [5, 6, 64, 11].
  • Пусть есть список st, куда будут складываться элементы в процессе перемешивания.
    Вот как выглядит порядок вставки элементов в выходной список:
    st = [19] → st = [19, 5] → st = [19, 5, 456] → st = [19, 5, 456, 6] → st = [19, 5, 456, 6, 3] →
    st = [19, 5, 456, 6, 3, 64] → st = [19,5, 456, 6, 3, 64, 4] → st = [19, 5, 456, 6, 3, 64, 4, 11].
  • Итак, [19, 5, 456, 6, 3, 64, 4, 11] – это перемешанный список.
Результат перемешивания элементов при использовании in-shuffle выглядит так: st = [5, 19, 6, 456, 64, 3, 11, 4].
Он получен следующим образом:
st = [5] → st = [5, 19] → st = [5, 19, 6] → st = [5, 19, 6, 456] → st = [5, 19, 6, 456, 64] →
st = [5, 19, 6, 456, 64, 3]→ st = [5, 19, 6, 456, 64, 3, 11] → st = [5, 19, 6, 456, 64, 3, 11, 4].
Ваша задача: написать функцию, которая принимает список элементов и логическую переменную, определяющую тип перемешивания,
и возвращает перемешанный список элементов.
В табл. 7.1 показаны ожидаемые результаты для некоторых входных данных.
Таблица 7.1. Некоторые ожидаемые результаты для задачи идеального перемешивания элементов списка
Items, outin Ожидаемый результат
19, 456, 3, 4, 5, 6, 64, 11
True
19, 5, 456, 6, 3, 64, 4, 11
19, 456, 3, 4, 5, 6, 64, 11
False
5, 19, 6, 456, 64, 3, 11, 4
0, 7, 89, 654, 5, 0, 1, 7
True
0, 5, 7, 0, 89, 1, 654, 7

Алгоритм
Пусть items – заданный список элементов, storage – выходной список, куда будут сохраняться элементы в процессе перемешивания,
а outin – логическое значение, значение True которого определяет тип перемешивания out-shuffle, а значение False – тип in-shuffle.
Первая половина исходного списка сохраняется в part1, а вторая – в part2.
Длина списка items делится пополам, и результат сохраняется в halves.
Тогда если outin = True, сначала в storage сохраняется w-й элемент part1 [w], а вслед за ним – элемент part2 [w].
Иначе если outin = False, сначала в storage сохраняется w-й элемент part2 [w], а вслед за ним – элемент part1 [w].
По завершении цикла в storage будет храниться перемешанный список.


Пропустить Навигационные Ссылки.
Чтобы оставить комментарий нужна авторизация
Печать