Вступление
Ксенодром в базе n - это целое число, в котором все его цифры в базе n различны. Вот некоторые последовательности OEIS ксенодромов.
Так , например, в базе 16, FACE
, 42
и FEDCBA9876543210
некоторые xenodromes (которые 64206
, 66
и 18364758544493064720
в базе 10), но 11
и DEFACED
не являются.
Вызов
Учитывая входную базу n , выведите все ксенодромы для этой базы в базе 10 .
Вывод должен быть в порядке от наименьшего к наибольшему. Должно быть понятно, где заканчивается термин в последовательности и начинается новый (например [0, 1, 2]
, ясно, где 012
нет.)
n будет целым числом больше 0.
Разъяснения
Эта задача делает IO специально в базе 10, чтобы избежать обработки целых чисел и их базы в виде строк. Задача заключается в абстрактной обработке любой базы. Поэтому я добавляю это дополнительное правило:
Целые числа не могут быть сохранены как строки в базе, отличной от базы 10.
Ваша программа должна быть способна теоретически обрабатывать достаточно высокие значения n, если бы не было времени, памяти, точности или других технических ограничений при реализации языка.
Это код-гольф , поэтому выигрывает самая короткая в байтах программа.
Пример ввода и вывода
1 # Input
0 # Output
2
0, 1, 2
3
0, 1, 2, 3, 5, 6, 7, 11, 15, 19, 21
4
0, 1, 2, 3, 4, 6, 7, 8, 9, 11, 12, 13, 14, 18, 19, 24, 27, 28, 30, 33, 35, 36, 39, 44, 45, 49, 50, 52, 54, 56, 57, 75, 78, 99, 108, 114, 120, 135, 141, 147, 156, 177, 180, 198, 201, 210, 216, 225, 228
ssize_t
. Разбивается ли это таким образом?Ответы:
Pyth , 8 байт
Фильтрует числа в [0, n ^ n - 1], если в базе n нет повторяющихся элементов . Преобразование базы в Pyth будет работать с любой базой, но, поскольку при этом просматривается очень быстро растущий список чисел, он в конечном итоге не сможет сохранить значения в памяти.
Попробуйте онлайн!
Объяснение:
источник
Python 2, 87 байт
Печатает лишние пустые строки для не ксенодромов:
источник
Желе ,
98 байтСпасибо @JonathanAllan за отыгрывание 1 байта!
Попробуйте онлайн! или проверьте все тестовые случаи .
Как это устроено
источник
Желе , 12 байт
TryItOnline!
Будет работать для любого
n
, учитывая достаточно памяти, базовое преобразование Jelly не является ограничительным.Как?
источник
JavaScript (ES7), 86 байт
источник
1
(должен выводить[0]
, но RangeErrors.)37
n
от1
до13
до, пока точность с плавающей запятой не убьет его.Perl 6 , 47 байт
Возвращает Seq . ( Seq - это базовая оболочка Iterable для Iterator. )
Для ввода
16
53905-го элемента Seq требуется 20 секунд.87887
) .Expanded:
источник
Пакет,
204200 байтНе будет работать при n> 9, потому что Batch имеет только 32-битную арифметику. Удобно, Пакет оценивает
f &= b ^= f = 1 << j % n
какf = 1 << j % n, b = b ^ f, f = f & b
а неf = f & (b = b ^ (f = 1 << j % n))
.источник
Mathematica,
5948 байтовСодержит U + F4A1 «Персональное использование»
объяснение
Генерировать
{1, 2, ..., n^n}
. Вычесть 1. (дает{0, 1, ..., n^n - 1}
)Булева функция:
True
если каждая цифра встречается в базе не более одного разаn
.Из списка
{0, 1, ..., n^n - 1}
выберите те, которые выдаютсяTrue
при применении вышеуказанной логической функции.59-байтовая версия
источник
Mathematica,
4855 байтов(Тройной пробел между
x
символами s должен быть заменен 3-байтовым символом \ uF4A1, чтобы код работал.)Безымянная функция одного аргумента. Вместо проверки целых чисел на ксенодромность, он просто генерирует все возможные перестановки подмножеств разрешенных цифр (что автоматически избегает повторения) и преобразует соответствующие целые числа в основание 10. Каждый ксенодром генерируется дважды, как с начальным 0, так и без него;
Union
удаляет дубликаты и сортирует список для загрузки.источник
2
. Функция дает{0, 1}
. Я считаю, что вам нужно,Permutations[Range@#-1, #]
а неSubsets[Range@#-1]
.