Чи може масив бути без змін?


15

Фон

Дуже кваліфіковані обробники карт здатні використовувати техніку, завдяки якій вони розрізають колоду навпіл, а потім ідеально переплітають карти. Якщо вони розпочнуть з відсортованої колоди і бездоганно виконають цю техніку 52 рази поспіль, колоду відновлять у відсортованому порядку. Ваше завдання - взяти колоду карт на цілий масив і визначити, чи можна її сортувати, використовуючи лише переміщення Фаро.

Визначення

Математично перемикання Фаро - це перестановка на 2 n елементів (для будь-якого додатного цілого числа n ), яка приймає елемент у положенні i (1-індексований) у положення 2 i (mod 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

Оцінка балів

Це тому найкоротше джерело в байтах виграє.


Щоб уникнути плутанини з будь-якими колегами, які обробляють картки, слід зазначити, що існує два види перетасовок Faro. Внутрішнє перемішання і перетасування . Метод, описаний тут, - це перетасовка. Цікаво, що для повернення колоди в початковий порядок потрібно лише 8 перестановок. Більше інформації
BrainSteel

Хіба це не просто "in-shuffle N + 1 разів і побачити, чи сортується будь-який із списків на цьому шляху"?
lirtosiast

Насправді n разів достатньо, тому що, виконуючи це 2 n рази, гарантовано знайдете всі можливі перестановки, але ви отримаєте принаймні один або порядковий або висхідний порядок у першій n.
Кінтопія


1
чи не перший елемент завжди залишається на першій позиції?
Евмель

Відповіді:


3

Pyth - 26 25 24 байти

Використовуйте сукупне зменшення, щоб застосувати перемикання Faro кілька разів і зберегти всі результати. Потім він відображає через нього і перевіряє, чи є вони інваріантними під час сортування, а потім використовує суму, щоб перевірити, чи є правда. Повертає додатне або нульове значення.

smSI-db.usC_c2NQsC.tc2Qb

Тестовий сюїт .


3

MATL , 41 байт

itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx

Вихід 1або 0.

Пояснення

i              % get input array
tn2\           % is size odd?
?              % if that's the case
  YNh          % concat NaN at the end
]              % end if
tn             % get size of input array
t1+:           % vector 1:n+1, where n is input size, so loop will be entered even with []
"              % for loop
  x[]2e!PY)    % delete result from previous iteration and do the shuffling
  ttZN~)       % remove NaN, if there's any
  tS=A         % check if array is sorted
  t.           % copy the result. If true, break loop
]              % end for
wx             % remove unwanted intermediate result

Приклад

>> matl itn2\?YNh]tnt1+:"x[]2e!PY)ttZN~)tS=At.]wx
> [1,1,2,3,5,8,13,21]
1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.