Вызов
Для целого числа n ≥ 4 выведите перестановку целых чисел [0, n-1] со свойством того, что никакие два последовательных целых числа (целые числа с абсолютной разностью 1) не стоят рядом друг с другом.
Примеры
- 4 → [1, 3, 0, 2]
- 5 → [0, 2, 4, 1, 3]
- 6 → [0, 2, 4, 1, 3, 5]
- 7 → [0, 2, 4, 1, 5, 3, 6]
Вместо этого вы можете использовать 1-индексирование (используя целые числа [1, n] вместо [0, n-1] ).
Ваш код должен выполняться за полиномиальное время по n , поэтому вы не можете попробовать все перестановки и протестировать каждую.
[[1,3],[0,2]]
ли приемлемый формат вывода?Ответы:
Желе ,
32 байтаСортирует целые числа в [1, ..., n] по их LSB.
Попробуйте онлайн!
источник
Þ
стабильная сортировка, потому что она реализована с использованиемsorted
функции Python , которая гарантированно стабильна .Python 2 , 32 байта
Попробуйте онлайн!
источник
Python 3 ,
40, 38 байтПопробуйте онлайн!
Это работает во
O(n)
времени.Спасибо Деннису за сохранение 2 байта!
источник
Python 2 , 34 байта
Попробуйте онлайн!
Python 2 , 40 байт
Попробуйте онлайн!
источник
Haskell, 22 байта
f является функцией n, которая возвращает соответственно упорядоченный список. Я использую опцию 1-indexing.
источник
Октава , 17 байт
Попробуйте онлайн!
Это использует тот же подход, что и многие другие. Объединить два вектора, один со всеми четными числами в включающем диапазоне 2 ... x , и все нечетные числа в включающем диапазоне 1 ... x . Синтаксис должен быть достаточно очевидным, поэтому я не буду это объяснять.
источник
3
и2
рядом друг с другомf(4)
?JavaScript (ES6), 40 байт
Редактировать: 1 байт сохранен благодаря @Arnauld.
источник
Gaia , 2 байта
Попробуйте онлайн!
Это просто (устойчиво) ∫ ORTS целых чисел в диапазоне [1,] входные их ра г Ity.
источник
R ,
393635 байтПопробуйте онлайн!
источник
05AB1E , 3 байта
Порт DJMcMayhem's Python ответ и ответ Дениса Желе
Попробуйте онлайн!
Как?
источник
Japt, 4 байта
Вы также можете заменить
u
на,v
чтобы получить другой заказ.Попытайся
Или, если мы можем вывести массив из 2 массивов:
Попытайся
источник
4
, к сожалению, не работают; Вы можете установить первый, изменивu
вv
илиo
наõ
.Mathematica, 50 -> 47 -> 42 байта
Попробуйте онлайн!
Спасибо user202729 за указание на двойной потенциал оптимизации Join [] вместо Flatten [] и использование чистых функций.
Я хотел бы добавить два замечания.
1) Довольно просто построить определенную перестановку без последовательности падения или нарастания при n> = 4 в соответствии с запросом n OP.
Он состоит из двух последовательных списков.
Для четного n это:
list1 = (2,4, ..., n / 2)
list2 = (1,3, ..., n / 2-1)
Для нечетного n имеем:
list1 = (2,4, ..., Floor [n / 2])
list2 = (1,3, ..., Floor [n / 2])
Для этого «алгоритма» должно быть принято только одно решение (n четных или нечетных), а остальные просто записывают n чисел.
Возможное решение Mathematica предоставляется в верхней части.
2) С этим связан вопрос, сколько таких перестановок существует в зависимости от n.
Mathematica, 124 байта
Попробуйте онлайн!
Пример:
Подсчет количества таких перестановок является стандартной задачей.
Для n = 4 есть 2: {{2,4,1,3}, {3,1,4,2}}
Для n = 5 существует 14: {{1,3,5,2,4}, {1,4,2,5,3}, {2,4,1,3,5}, {2,4, 1,5,3}, {2,5,3,1,4}, {3,1,4,2,5}, {3,1,5,2,4}, {3,5,1, 4,2}, {3,5,2,4,1}, {4,1,3,5,2}, {4,2,5,1,3}, {4,2,5,3, 1}, {5,2,4,1,3}, {5,3,1,4,2}}
Число a (n) этих перестановок быстро возрастает: 2, 14, 90, 646, 5242, 47622, 479306, 5296790, 63779034, ...
Для больших n отношение a (n) / n! кажется, приближается к пределу 1 / e ^ 2 = 0,135335 ... У меня нет строгих доказательств, но это всего лишь предположение из численных доказательств. Вы можете проверить это, попытавшись запустить программу онлайн.
Программа выше (на основе ссылки, приведенной ниже) рассчитывает эти числа.
Вы можете найти больше информации в соответствующей последовательности на OEIS: A002464 . Проблема Герцшпрунга: способы размещения n неагрессивных королей на доске n X n, по 1 в каждом ряду и столбце. Также число перестановок длины n без последовательностей роста или падения.
источник
[some text](the_link)
. Что касается ссылки «Попробуйте онлайн», в частности, веб-сайт https://tio.run/ , который размещается на нашем собственном @Dennis, содержит ссылки на все виды языков программирования. Wolfram Language (Mathematica) является одним из них. Вверху вы можете нажать кнопку воспроизведения, чтобы запустить код, или кнопку гиперссылки, чтобы скопировать «Попробуйте онлайн». (markup-) ссылка. И вы можете разделить ваш код на фактический «Код» (ваше представление) с помощью дополнительного верхнего / нижнего колонтитула для (красивой) печати одного или нескольких тестовых случаев.JavaScript (Node.js) , 42 байта
Попробуйте онлайн!
JavaScript (Node.js) , 47 байт
Попробуйте онлайн!
источник
Рубин , 27 байт
Попробуйте онлайн!
Использование 1-индексации
источник
Пробел , 161 байт
Вот официальное, некомментированное представление: попробуйте онлайн!
Попробуйте онлайн!
Я пожертвовал несколькими байтами, чтобы программа работала без ошибок, я считаю, что я могу потерять около 7-8 байтов, и все равно будет выводиться правильно, но он также будет выводить сообщения об ошибках, и никто этого не хочет.
Полное Байт Объяснение:
источник
push_0, read_STDIN_as_int, push_0, retrieve
можноpush_0, duplicate_0, read_STDIN_as_int, retrieve
сэкономить байт. И первая метка может быть пустой сNSSN
вместоNSSSN
(а затем вторая метка может бытьNSSSN
; третьяNSSTN
; и четвертаяNSSSSN
). Это также должно сэкономить 8 байт. Кроме того, вы можете удалить первый,Jump_to_third_label
потому что у вас уже естьSet_third_label
право под ним. Всего: 140 байт ; (или с комментариями: попробуйте онлайн .) -3 байта, если вы удалитеNNN
выход.F # (моно) , 27 байтов
Попробуйте онлайн!
источник
Gol> <> , 14 байт
Попробуйте онлайн!
Пример полной программы и как она работает
источник
J , 10 байт
Попробуйте онлайн!
Объяснение:
источник
Java 8, 56 байт
Порт ответа @Neil на JavaScript (ES6) .
Попробуйте онлайн.
Старый 66-байтовый ответ:
Попробуйте онлайн.
Объяснение:
источник
Рубин, 27 байт
Как и в этом ответе ,
n
первые целые числа отсортированы по их младшему значащему биту.Попробуйте онлайн!
источник