Вчора я задав це питання щодо гвинтівок. Здається, питання вчорашнього дня було занадто важким, тому це питання пов'язане, але набагато простіше завдання.
Сьогодні вас просять визначити, чи справді перестановка насправді є мішанням стрілецької зброї. Наше визначення перемикання гвинтівки адаптоване з нашого останнього запитання:
Перша частина перетасовки - це поділ. У розділі розділити колоду карт на два. Два підрозділи повинні бути безперервними, взаємовиключними та вичерпними. У реальному світі хочуть зробити свій розділ максимально наближеним, однак у цьому виклику це не враховується, всі розділи, включаючи вироджені (одна секція порожня), мають однакове врахування.
Після їх розділення картки з'єднуються між собою таким чином, що картки підтримують свій відносний порядок у розділі, до якого вони входять . Наприклад, якщо карта A знаходиться перед карткою B на колоді, а картки A і B знаходяться в одному розділі, карта A повинна бути перед карткою B в остаточному результаті, навіть якщо кількість карт між ними збільшилася. Якщо A і B знаходяться в різних розділах, вони можуть бути в будь-якому порядку, незалежно від їх початкового порядку, у кінцевому результаті.
Кожен переміщення стрілецької зброї можна розглядати як перестановку оригінальної колоди карт. Наприклад перестановка
1,2,3 -> 1,3,2
являє собою стрілецький перетасування. Якщо ви розділите колоду так
1, 2 | 3
ми бачимо, що кожна карта в 1,3,2
такому ж відносному порядку, як і для кожної іншої карти в її розділі. 2
все ще після 1
.
З іншого боку, наступна перестановка не є стрілецьким переміщенням.
1,2,3 -> 3,2,1
Ми можемо це побачити, оскільки для всіх двох (нетривіальних) розділів
1, 2 | 3
1 | 2, 3
є пара карток, які не підтримують свого відносного впорядкування. У першому розділі 1
і 2
зміни їх упорядкування, а в другому розділі 2
і 3
зміни їх упорядкування.
Завдання
З огляду на перестановку будь-яким розумним методом, визначте, чи є вона дійсною мішанням гвинтівки. Вам слід вивести два різних постійних значення: одне для "Так, це переміщення стрілецької зброї" і одне для "Ні, це не переміщення стрілецької зброї".
Це код-гольф, тому відповіді будуть набиратись у байтах, а менша кількість байтів - краща.
Випробування
1,3,2 -> True
3,2,1 -> False
3,1,2,4 -> True
2,3,4,1 -> True
4,3,2,1 -> False
1,2,3,4,5 -> True
1,2,5,4,3 -> False
5,1,4,2,3 -> False
3,1,4,2,5 -> True
2,3,6,1,4,5 -> False
[3,1,4,2,5]
.
[2,3,6,1,4,5]
.
[0, ..., n-1]
замість [1, ..., n]
як вхідні дані?
0
для фальси, але будь-яке ціле число[1, +∞)
для truthy?