Задний план
Вес Хэмминга целого числа есть число единиц в его двоичном представлении. Для этой задачи целые числа представлены с 32 битами, и они без знака.
Вызов
Если задано целое число от 0 до 2 ^ 32-1 (не включительно), выведите другое целое число в том же диапазоне, а также с тем же весом Хэмминга.
Примеры
Input (Decimal) | Input (Binary) | Hamming weight | Possible output (Decimal)
46 | 0b0010 1110 | 4 | 15
12 | 0b0000 1100 | 2 | 3
1 | 0b0000 0001 | 1 | 2
3 | 0b0000 0011 | 2 | 6
2^31 | 0b1000....0 | 1 | 1
2^31+2 | 0b1000...10 | 2 | 3
2^32-5 | 0b1111..011 | 31 | 2^31-1
2^32-2 | 0b1111....0 | 31 | 2^31-1
0 | 0b0000 0000 | 0 | None (This case need not be handled)
2^32-1 | 0b1111....1 | 32 | None (This case need not be handled)
счет
Это код-гольф , поэтому выигрывает решение с наименьшим количеством байтов на каждом языке.
2^31+2
, я повторю, что сказал нечетное число. Ответы, о которых идет речь, терпят неудачу только тогда, когда имеют место как старший, так и младший биты1
.Ответы:
сборка x86-64,
54 байтаФункция, использующая соглашение о вызове C, которая побитно поворачивает свой аргумент влево на 1 бит.
источник
n << 1 | n >> 31
вrol
вместоror
(сохранение байта).Python, 20 байт
Побитовое вращение влево на 1 бит.
источник
MATL , 9 байт
По кругу сдвигает 32-разрядное двоичное представление на один шаг вправо.
Попробуйте онлайн!
источник
Желе ,
108 байтМеняет местами младший значащий и неустановленный бит.
Попробуйте онлайн!
Как это работает
источник
JavaScript (ES6),
3531 байтИщет первый битовый переход (0 → 1 или 1 → 0) и инвертирует его.
демонстрация
Показать фрагмент кода
Вращение бита, 14 байтов
Гораздо короче, но не так весело.
демонстрация
Показать фрагмент кода
источник
f(2147483647)
есть-1073741825
и(n=>n>>>31|n<<1)(2147483647)
есть-2
.k
изначально установлен наundefined
и мы пользуемся тем фактом, что~undefined
равен-1
.Brain-Flak , 78 байт
Попробуйте онлайн!
Возвращает 2n, если n <2 ^ 31, и 2n + 1-2 ^ 32 в противном случае. К сожалению, поскольку у Brain-Flak нет быстрого способа определения знака числа, программа отключает TIO, если ввод отличается от 2 ^ 31 более чем на 500000.
объяснение
Сначала вставьте -2 ^ 32 в стек:
Затем вычислите желаемый результат:
источник
постоянный ток, 10
Попробуйте онлайн .
Это арифметическая реализация 32-битного правого поворота:
источник
Java 8,
1171729 байт+12 байтов путем изменения
int
наlong
, потому чтоint
максимальный размер2³¹-1
10089 байтов сэкономлено путем создания порта удивительного ответа Python @AndersKaseorg .Попробуй это здесь.
Выходы:
Старый ответ (
117118 байт):+1 байт, изменив
int
наlong
, потому чтоint
максимальный размер2³¹-1
Попробуй это здесь.
Выходы:
источник
Mathematica, 29 байт
Попробуйте в песочнице Wolfram
Поворачивается влево арифметически: сначала умножьте на 2, что, возможно, сместит число за пределы диапазона, затем обрежьте цифру вне диапазона с помощью
Mod[...,2^32]
и добавьте обратно справа с помощью+Quotient[...,2^32]
.(У Mathematica есть единственная встроенная функция, которая дает модуль и частное за один раз, но это
QuotientRemainder
немного гандикап для игры в гольф…)источник
APL, 12 байт
Как?
источник
05AB1E , 5 байтов
Попробуйте онлайн!
объяснение
Использует трюк, чтобы повернуть двоичное представление влево на 1 бит из ответа Питера Андерса Касерга .
источник
R,
4263 байтаСлучайно перемешивает биты, но проверяет, чтобы случайно не вернуть тот же номер.
источник
Пробел ,
8180 байт(1 байт сохранен благодаря @ Örjan Johansen, напомнившему мне, что dup короче, чем push 0)
Попробуйте онлайн!
В основном реализует циклический сдвиг вправо с использованием целочисленной арифметики. Выдвигать большую константу в Whitespace дорого, поэтому мы экономим несколько байтов, нажимая 2 ^ 8 и возводя в квадрат ее дважды. (Сохраняет 1 байт (2 ^ 16) ^ 2 и 10 байт при прямом нажатии 2 ^ 32.)
объяснение
источник
push 0
сdup
одна командой ранее.Python 2.7, 89 байт
Полная программа:
Попробуйте онлайн!
Предложения приветствуются! :)
источник
Пари / ГП , 15 байт
Попробуйте онлайн!
источник
Japt , 5 байт
Побитовое вращение, как и большинство ответов здесь.
Попытайся
источник
Perl 5
-p
, 39 байтПопробуйте онлайн!
источник
Python 3 , 45 байт
Попробуйте онлайн!
источник
C ++ (gcc) ,
4539 байт-6 байтов, спасибо
Попробуйте онлайн!
источник