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 |