Введение (может быть проигнорировано)
Размещать все положительные числа в обычном порядке (1, 2, 3, ...) немного скучно, не правда ли? Итак, вот ряд проблем, связанных с перестановками (перестановками) всех положительных чисел. Это четвертая задача в этой серии (ссылки на первую , вторую и третью задачу).
В этой задаче мы исследуем не одну перестановку натуральных чисел, а целый мир перестановок!
В 2000 году Кларк Кимберлинг поставил проблему в 26- м выпуске Crux Mathematicorum , научном журнале по математике, опубликованном Канадским математическим обществом. Проблема была:
Каждое положительное целое число встречается ровно один раз в этой последовательности?
В 2004 году Матеуш Квасницкий представил положительные доказательства в том же журнале, а в 2008 году он опубликовал более формальное и (по сравнению с первоначальным вопросом) более общее доказательство. Он сформулировал последовательность с параметрами и :
Он доказал, что для любого такого, что иррационально, последовательность является перестановкой натуральных чисел. Поскольку существует бесконечное число значений и для которых это верно, это действительно целый мир перестановок натуральных чисел. Мы будем придерживаться оригинала , и для этих параметров, последовательность может быть найдена как A050000в ОЕИС. Его первые 20 элементов:
1, 3, 9, 4, 2, 6, 18, 54, 27, 13, 39, 19, 57, 28, 14, 7, 21, 10, 5, 15
Поскольку это задача «чистой последовательности», задача состоит в том, чтобы вывести для заданного качестве входных данных, где равно A050000 .
задача
Учитывая целочисленный ввод , выведите в целочисленном формате, где:
Примечание: здесь предполагается индексирование на основе 1; Вы можете использовать индексирование на основе 0, поэтому и т. д. Пожалуйста, укажите это в своем ответе, если вы решите использовать это.
Контрольные примеры
Input | Output
---------------
1 | 1
5 | 2
20 | 15
50 | 165
78 | 207
123 | 94
1234 | 3537
3000 | 2245
9999 | 4065
29890 | 149853
правила
- Вход и выход являются целыми числами (ваша программа должна по крайней мере поддерживать вход и выход в диапазоне от 1 до 32767)
- Неверный ввод (0, число с плавающей запятой, строки, отрицательные значения и т. Д.) Может привести к непредсказуемому выводу, ошибкам или (не) определенному поведению.
- Применяются правила ввода / вывода по умолчанию .
- Лазейки по умолчанию запрещены.
- Это код-гольф , поэтому самые короткие ответы в байтах выигрывают
Ответы:
Japt ,
1514 байтов1-индексироваться.
Попытайся
источник
JavaScript (ES6),
55 5150 байтСохранено 1 байт благодаря @EmbodimentofIgnorance
Сохранено 1 байт благодаря @tsh
Попробуйте онлайн!
источник
n=>eval("for(o=[p=2];n--;)o[p=o[q=p>>1]?3*p:q]=p")
Желе , 15 байт
Полная программа, принимающая целое число
n
(на основе 1) из STDIN, которое печатает результат.Попробуйте онлайн!
Как?
источник
05AB1E ,
1615 байтСохранено 1 байт благодаря Кевину Круйссену .
0 индексированные.
Попробуйте онлайн!
объяснение
Используя в
n=1
качестве примераисточник
Perl 6 , 49 байт
-2 байта благодаря nwellnof
Попробуйте онлайн!
Возвращает 0-индексированный элемент в последовательности. Вы можете изменить это на 1-indexed, изменив начальные элементы на
0,1
вместо1,3
Объяснение:
источник
J ,
4740 байтПопробуйте онлайн!
ungolfed
Прямой перевод определения в J. Он строится снизу вверх, используя
^:
для итерации от начального значения требуемое количество раз.источник
Java 10,
12099 байтПопробуйте онлайн.
Объяснение:
источник
Haskell ,
6765 байтПопробуйте онлайн!
Использует индексирование на основе 0.
РЕДАКТИРОВАТЬ: сохранить 2 байта, используя
elem
вместоnotElem
и условия переключенияисточник
Желе , 21 байт
Попробуйте онлайн!
Монадическая ссылка с нулевым индексированиемN в качестве аргумента и возвращает а ( н ) ,
источник
Рубин ,
545248 байтПопробуйте онлайн!
источник
С ++ (gcc) ,
189180 байт-9 байт для малого гольфа
Попробуйте онлайн!
Вычисляет последовательность до
n
, затем возвращает нужный элемент. Медленно для больших индексов.источник
Python 2 , 66 байт
Попробуйте онлайн!
Используется индексирование с нуля. Лямбда делает только рекурсивное построение последовательности и возвращает ее, как только будет достигнут требуемый индекс.
источник
Stax , 14 байт
Запустите и отладьте его
Zero-индексироваться.
источник
Wolfram Language (Mathematica) , 63 байта
Попробуйте онлайн!
Это индексировано 0
(в TIO я добавил -1 в каждом тестовом примере)
источник
Python 2 , 62 байта
Попробуйте онлайн!
Возвращает
True
заa(0)
. 0 индексированные.источник
Python 3 ,
1051031009583 байта-2 байта благодаря agtoever
-12 байтов благодаря ArBo
Попробуйте онлайн!
источник
while len(s)<=n
и заменить его на-1
. Это должно сбрить одного из двух персонажей.if
изwhile
цикла цикл, чтобы разрешитьГайя ,
2220 байтПопробуйте онлайн!
Индекс на основе 0
Кредит Шегги за подход
;D
источник
Haskell , 55 байтов
Попробуйте онлайн!
Golfing пользовательский 1472751 скользкий метод генерации списка .
Одинаковая длина:
Попробуйте онлайн!
источник
Луа , 78 байт
Попробуйте онлайн!
источник
z
переменной и замены оператора if на троичный