Вызов:
Входные данные: список различных положительных целых чисел в диапазоне .
Вывод: целое число: количество раз, когда список перемешивается . Для получения списка, это означает , что список делится на две половины, и эти половины чередуются (т.е. желобок-перетасовки списка [1,2,3,4,5,6,7,8,9,10]
раз приведет [1,6,2,7,3,8,4,9,5,10]
, так что для этой задачи вход [1,6,2,7,3,8,4,9,5,10]
приведет 1
).
Правила соревнований:
- Вы можете предположить, что список будет содержать только положительные целые числа в диапазоне (или если вы решите иметь 0-индексированные входные списки ).
- Вы можете предположить, что все входные списки будут либо действительным списком с перемешиванием, либо отсортированным списком, который не перемешивается (в этом случае вывод
0
). - Можно предположить, что входной список будет содержать как минимум три значения.
Пошаговый пример:
Входные данные: [1,3,5,7,9,2,4,6,8]
Разбрасывание это однажды становится:, [1,5,9,4,8,3,7,2,6]
потому что каждый четный 0-индексированный элемент идет первым [1, ,5, ,9, ,4, ,8]
, а затем все нечетные 0-индексированные элементы после этого [ ,3, ,7, ,2, ,6, ]
.
Список еще не упорядочен, поэтому мы продолжаем:
Перестановка списка снова становится: [1,9,8,7,6,5,4,3,2]
Снова становится: [1,8,6,4,2,9,7,5,3]
Тогда: [1,6,2,7,3,8,4,9,5]
И наконец:, [1,2,3,4,5,6,7,8,9]
который является упорядоченным списком, так что мы закончили перестановку.
Мы перетасовали оригинал [1,3,5,7,9,2,4,6,8]
пять раз, чтобы добраться до [1,2,3,4,5,6,7,8,9]
, так что вывод 5
в этом случае.
Основные правила:
- Это код-гольф , поэтому выигрывает самый короткий ответ в байтах.
Не позволяйте языкам кода-гольфа отговаривать вас от публикации ответов на языках, не относящихся к кодексу. Попробуйте придумать как можно более короткий ответ для «любого» языка программирования. - Стандартные правила применяются к вашему ответу с правилами ввода / вывода по умолчанию , поэтому вы можете использовать STDIN / STDOUT, функции / метод с правильными параметрами и типом возврата, полные программы. Ваш звонок.
- По умолчанию лазейки запрещены.
- Если возможно, добавьте ссылку с тестом для вашего кода (например, TIO ).
- Кроме того, добавление объяснения для вашего ответа настоятельно рекомендуется.
Тестовые случаи:
Input Output
[1,2,3] 0
[1,2,3,4,5] 0
[1,3,2] 1
[1,6,2,7,3,8,4,9,5,10] 1
[1,3,5,7,2,4,6] 2
[1,8,6,4,2,9,7,5,3,10] 2
[1,9,8,7,6,5,4,3,2,10] 3
[1,5,9,4,8,3,7,2,6,10] 4
[1,3,5,7,9,2,4,6,8] 5
[1,6,11,5,10,4,9,3,8,2,7] 6
[1,10,19,9,18,8,17,7,16,6,15,5,14,4,13,3,12,2,11,20] 10
[1,3,5,7,9,11,13,15,17,19,2,4,6,8,10,12,14,16,18,20] 17
[1,141,32,172,63,203,94,234,125,16,156,47,187,78,218,109,249,140,31,171,62,202,93,233,124,15,155,46,186,77,217,108,248,139,30,170,61,201,92,232,123,14,154,45,185,76,216,107,247,138,29,169,60,200,91,231,122,13,153,44,184,75,215,106,246,137,28,168,59,199,90,230,121,12,152,43,183,74,214,105,245,136,27,167,58,198,89,229,120,11,151,42,182,73,213,104,244,135,26,166,57,197,88,228,119,10,150,41,181,72,212,103,243,134,25,165,56,196,87,227,118,9,149,40,180,71,211,102,242,133,24,164,55,195,86,226,117,8,148,39,179,70,210,101,241,132,23,163,54,194,85,225,116,7,147,38,178,69,209,100,240,131,22,162,53,193,84,224,115,6,146,37,177,68,208,99,239,130,21,161,52,192,83,223,114,5,145,36,176,67,207,98,238,129,20,160,51,191,82,222,113,4,144,35,175,66,206,97,237,128,19,159,50,190,81,221,112,3,143,34,174,65,205,96,236,127,18,158,49,189,80,220,111,2,142,33,173,64,204,95,235,126,17,157,48,188,79,219,110,250]
45
источник
[1,3,5,7,9,2,4,6,8]
Длина 9, но я добавлю еще несколько для длины 7 и 11, возможно. РЕДАКТИРОВАТЬ: Добавлены тестовые случаи[1,3,5,7,2,4,6] = 2
(длина 7) и[1,6,11,5,10,4,9,3,8,2,7] = 6
(длина 11). Надеюсь, это поможет.[1,6,2,7,3,8,4,9,5,10]
или[6,1,7,2,8,3,9,4,10,5]
возможны. В моем испытании это означает, что верхняя карта всегда будет оставаться верхней, так что это действительно немного хитрости ... Однако я никогда не видел, чтобы кто-нибудь использовал только риффл-тасовки, чтобы перетасовать колоду карт. Обычно они также используют другой тип перемешивания между ними. В любом случае, уже слишком поздно менять вызов, поэтому ради этого вызова верхняя карта всегда будет оставаться главной после риффл-тасовки.Ответы:
Желе , 8 байт
Попробуйте онлайн!
Как?
источник
JavaScript (ES6), 44 байта
Более короткая версия, предложенная @nwellnhof
Ожидается колода с 1-проиндексированными картами в качестве входных данных.
Попробуйте онлайн!
Для данной колоды[ с0, … , СL - 1] длины L мы определяем:
И мы ищемn такой, что cxn=2 .
JavaScript (ES6),
57 5250 байтОжидается колода с 0-индексированными картами в качестве входных данных.
Попробуйте онлайн!
Как?
Поскольку в JS отсутствует встроенная поддержка извлечения фрагментов массива с помощью пользовательского пошагового выполнения, имитация всего перемешивания может быть довольно дорогостоящей (но, честно говоря, я даже не пробовал). Однако решение также можно найти, просто взглянув на 2-ю карту и общее количество карт в колоде.
Учитывая колоду длинойL , этот код выглядит для N такие , что:
гдес2 - вторая карта, а К определяется как:
источник
Python 2 , 39 байт
Попробуйте онлайн!
-4 спасибо Джонатану Аллану .
источник
f=lambda x:2!=x[1]and-~f(x[::2]+x[1::2])
!=
может быть-
. ;-)x[1]>2
я предполагаю)R ,
585545 байтПопробуйте онлайн!
Имитирует процесс сортировки. Ввод 1 индексируется, возвращается
FALSE
0.источник
Perl 6 ,
3432 байта-2 байта благодаря Джо Кингу
Попробуйте онлайн!
Похож на подход Арно . Индекс второй карты после n перемешиваний -
2**n % k
с k, определенным как в ответе Арно.источник
APL (Dyalog Unicode) ,
35262322 байта SBCSПопробуйте онлайн!
Спасибо Adám за помощь, Эрик Outgolfer за -3 и ngn за -1.
Ссылка TIO содержит два теста.
Объяснение:
¹
источник
∧/2≤/⍵
->⍵≡⍳≢⍵
Perl 6 ,
36 3432 байта-2 байта благодаря nwellnhof
Попробуйте онлайн!
Обратный риффл тасует путем сортировки по индексу по модулю 2, пока список не будет отсортирован, а затем возвращает длину последовательности.
Забавно, я обычно не пробую рекурсивный подход к Perl 6, но на этот раз он оказался короче оригинала.
Объяснение:
источник
05AB1E (legacy) , 9 байтов
Попробуйте онлайн!
объяснение
источник
Å≠
которая вдохновила меня на этот вызов. :)Java (JDK) , 59 байт
Попробуйте онлайн!
Надежно работает только для массивов с размером менее 31 или решений с менее чем 31 итерацией. Для более общего решения см. Следующее решение с 63 байтами:
Попробуйте онлайн!
объяснение
В риффе следующая позиция - это предыдущая единица, умноженная на два, либо по длине, если она нечетная, либо по длине - 1, если она четная.
Поэтому я перебираю все индексы, используя эту формулу, пока не найду значение 2 в массиве.
кредиты
источник
x.clone()
вместоA.copyOf(x,l)
.J ,
2826 байт-2 байта благодаря Ионе!
Попробуйте онлайн!
Вдохновлен решением AP AP от Ven.
Объяснение:
К (нгн / к) , 25 байтов
Спасибо ngn за совет и за его переводчик K!
Попробуйте онлайн!
источник
1#@}.(\:2|#\)^:(2<1{])^:a:
для 26 байтовAPL (NARS), символы 49, байты 98
зачем использовать в самом глубоком цикле один алгоритм, который должен быть nlog (n), когда мы можем использовать один линейный n? только на несколько байт больше? [⍵≡⍵ [⍋⍵] O (nlog n) и сопоставление каждого элемента для просмотра в порядке, используя тест ∧ / ¯1 ↓ ⍵≤1⌽⍵ O (n)]:
источник
Рубин , 42 байта
Попробуйте онлайн!
Как:
Найдите номер 2 внутри массива: если он находится на второй позиции, колода не была перетасована, в противном случае проверьте позиции, в которые ее поместили бы последующие тасовки.
источник
р ,
7072 байтаПопробуйте онлайн!
Теперь обрабатывает случай нулевого шаффла.
источник
C (GCC)
6463 байта-1 байт от nwellnhof
Это значительно более короткий ответ, основанный на ответах Арно и Оливье Грегуара. Я оставлю свое старое решение ниже, так как оно решает немного более общую проблему колод с картами, которые не являются смежными.
Попробуйте онлайн
C (GCC) 162 байта
Попробуйте онлайн
источник
R 85 байт
Попробуйте онлайн.
объяснение
Глупый (грубая сила) метод, гораздо менее элегантный, чем следование карточке №2.
Вместо того, чтобы переставлять ввод,
s
мы начинаем с отсортированного вектора,u
который мы постепенно перемешиваем, пока он не будет идентиченs
. Это дает предупреждения (но количество случайных чисел все еще корректно) для нечетных длин ввода из-за складывания вектора нечетной длины в матрицу из 2 столбцов; в этом случае в R пропущенная точка данных заполняется повторным использованием первого элемента ввода.Цикл никогда не завершится, если мы предоставим вектор, который не может быть перемешан.
Приложение: вы сохраняете один байт, если не переставляете. В отличие от ответа выше, нет необходимости перемещать с
t()
, однако, упорядочение -byrow=TRUE
вот почемуT
появляется вmatrix()
.R , 84 байта
Попробуйте онлайн!
источник
PowerShell ,
116 114 108 8478 байт-24 байта благодаря Эрик Outgolfer «s решение .
-6 байт благодаря маззи .
Попробуйте онлайн!
источник
Wolfram Language (Mathematica) , 62 байта
Попробуйте онлайн!
объяснение
Список ввода есть
a
. Он не разбирается и сравнивается с отсортированным списком, пока не совпадет.источник
Красный ,
877978 байтПопробуйте онлайн!
источник
Perl 5
-pa
, 77 байтПопробуйте онлайн!
источник
Pyth , 18 байт
Попробуйте онлайн!
-2 благодаря @ Эрику Аутгольферу.
Сценарий имеет две строки: первая определяет функцию
y
, вторая вызываетсяy
с неявнымQ
(оцененным stdin) аргументом.¹
источник
PowerShell ,
62717066 байт+9 байт при тестировании с добавлением четного числа элементов.
-1 байт с брызгами.
-4 байта: перенести выражение с
$i
,$j
в новую область.Попробуйте онлайн!
источник
Japt ,
131110 байтВзяв моего блестящего, нового
, очень работающегопереводчика для тест-драйва.Попробуйте или запустите все тесты
источник
Python 3, 40 байт
Попробуйте онлайн!
Мне нужно обновлять страницу чаще: пропустил редактирование Эрика Outgolfer, делающего подобный трюк =)
источник