Фон
Очень опытные обработчики карт способны использовать технику, при которой они идеально режут колоду пополам, а затем прекрасно чередуют карты. Если они начинают с отсортированной колоды и выполняют эту технику безупречно 52 раза подряд, колода будет восстановлена в отсортированном порядке. Ваша задача состоит в том, чтобы взять колоду карт целочисленного массива и определить, может ли она быть отсортирована, используя только перемешивания Фаро.
Определение
Математически, перемешивание Фаро - это перестановка из 2 n элементов (для любого натурального числа n ), которая переводит элемент в позицию i (с индексом 1) в позицию 2 i (мод 2 n +1). Мы также хотели бы иметь возможность обрабатывать списки нечетной длины, поэтому в этом случае просто добавьте один элемент в конец списка (джокер, если у вас есть один удобный) и Фаро перемешает новый список, как указано выше, но игнорируйте добавлен фиктивный элемент при проверке порядка в списке.
Цель
Напишите программу или функцию, которая принимает список целых чисел и возвращает или выводит правду, если некоторое количество случайных чисел Фаро приведет к сортировке этого списка в неубывающем порядке (даже если это число равно нулю - маленькие списки должны давать правду). В противном случае верните или выведите ложь.
Примеры
[1,1,2,3,5,8,13,21] => True
[5,1,8,1,13,2,21,3] => True
[9,36,5,34,2,10,1] => True
[1,0] => True
[0] => True
[] => True
[3,2,1] => True
[3,1,2] => False
[9,8,7,6,5,4,3,2,1,0] => True
[9,8,7,6,5,4,3,2,0,1] => False
[3,1,4,1,5,9,2,6,9] => False
[-1,-1,-1,-2] => True
счет
Это код-гольф, поэтому выигрывает самый короткий источник в байтах.
источник
Ответы:
Pyth -
262524 байтаИспользует кумулятивное уменьшение, чтобы применить Faro shuffle несколько раз и сохранить все результаты. Затем он просматривает его и проверяет, являются ли они инвариантными при сортировке, а затем использует сумму для проверки, являются ли они истинными. Возвращает положительный результат или ноль.
Тестовый пакет .
источник
MATL , 41 байт
Выход -
1
или0
.объяснение
пример
источник