Пространство x набора целых чисел - это множество всех целых чисел, которые можно получить, комбинируя начальные целые числа с обычным побитовым оператором xor ( ^
). Например, xorspace из (8, 4)
IS (0, 4, 8, 12)
: 0 4 ^ 4, 12 4 ^ 8, и никакие другие числа не может быть достигнуто. Обратите внимание, что начальные числа всегда включены, согласно этому определению (например, 4 равно 4 ^ 4 ^ 4).
Ваша цель - написать самую короткую программу, которая принимает список неотрицательных целых чисел в качестве входных данных и выводит количество элементов в их пространстве.
- Стандартные лазейки запрещены.
- Ввод и вывод могут быть в любом из обычных форматов . Вклад гарантированно будет действительным, непустым и без дубликатов.
- Ваш код должен быть в состоянии обработать все тестовые случаи менее чем за день .
Контрольные примеры
Input: 0
Output: 1
Input: 6
Output: 2
Input: 8 4
Ouput: 4
Input: 0 256
Output: 2
Input: 256 259 3
Output: 4
Input: 60 62 94 101 115
Output: 32
Input: 60 62 94 101 115 40 91
Output: 32
Input: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63
Output: 64
Input: 1 2 4 8 16 32 64 128 256 512 1024 2048 4096 8192 16384
Output: 32768
l{mxFdy
.y
применяемый к тестам с 1 по 63, слишком медленный. У меня нет 2 ^ 63 памяти.MATL , 11 байт
Попробуйте онлайн!
Последний тестовый пример не запускается в онлайн-интерпретаторе из-за ограничений памяти, но работает на компьютере менее чем за 2 секунды на современном компьютере.
объяснение
Для ввода размера
n
это делает следующее:n
раз:Код комментирования.
пример
Промежуточные результаты (шаги 2.1 и 2.3) для ввода
[256 259 3]
:Первая итерация:
[256 259 3]
с[256 259 3]
: вычисление всех пар побитового XOR дает матрицуПрикрепление
[256 259 3]
и дедупликацияВторая итерация: текущий результат
[0 3 259 256]
с[256 259 3]
. После дедупликации это снова даетТретья итерация: снова
Таким образом, вывод
4
(количество записей результата).источник
M
. Таким образом, размер вектора промежуточных результатов никогда не превышаетM
, а сложность равна O (M*M
). ОП сказал, что точное определениеn
не имеет значения, поэтому, если я определю,n
какM
я могу утверждать, что это O (n*n
).Haskell , 64 байта
f
принимает список целых чисел и возвращает целое числоПопробуйте онлайн!
Это не обрабатывает пустой список, для этого вы можете, но
$0:
вместо пробела послеmaximum
.Как это устроено
m
списка равен нулю, возвращает 1.источник
Mathematica, 52 байта
источник
05AB1E , 8 байтов
Попробуйте онлайн!
Все тесты заканчиваются менее чем за 1 минуту на TIO.
источник
2^n
часть: /âü^Ùg
пока я не увидел, что вы можете xor более одного раза, отличное решение.Python 2 , 55 байт
Попробуйте онлайн!
Выбивает функции:
Красивый метод исключения строк Эрджана Йохансена на один байт короче.
Python 2 , 54 байта
Попробуйте онлайн!
источник
Желе ,
98 байтЗавершает все тестовые случаи менее чем за 8 секунд на TIO с незначительными требованиями к памяти.
Попробуйте онлайн!
Как это устроено
источник
Python, 113 байт
источник
u+=[c][c in s:]
эквивалентно вашемуif
утверждению.