Вчера я задавал этот вопрос о риффл-тасовках. Похоже, что вчерашний вопрос был слишком сложным, поэтому этот вопрос является связанной, но гораздо более легкой задачей.
Сегодня вас просят определить, является ли перестановка на самом деле случайным образом. Наше определение riffle shuffle адаптировано из нашего последнего вопроса:
Первая часть шаффла - это разделение. В разделе делить колода карт на две части. Два подраздела должны быть непрерывными, взаимоисключающими и исчерпывающими. В реальном мире вы хотите, чтобы ваш раздел был как можно ближе к максимально возможному, однако в этом испытании это не рассматривается, все разделы, включая вырожденные (один раздел пуст), имеют одинаковое значение.
После того, как они были разделены, карты объединяются таким образом, что карты поддерживают свой относительный порядок в пределах раздела, членом которого они являются . Например, если карта 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, +∞)
для правдивых?