вход
Ввод одно целое положительное число n
Выход
Выход n
с наиболее значимым битом установлен в 0
.
Тестовые случаи
1 -> 0
2 -> 0
10 -> 2
16 -> 0
100 -> 36
267 -> 11
350 -> 94
500 -> 244
Например: 350
в двоичном есть 101011110
. Установка его старшего значащего бита (т. Е. Самого левого 1
бита) для 0
преобразования его в выход, 001011110
эквивалентный десятичному целому 94
числу Это OEIS A053645 .
10
явно дает0
: DОтветы:
C (gcc) ,
49444039 байтПопробуйте онлайн!
источник
i<=n
сn/i
на -1 байт. Это не мой гольф, кто-то еще пытался отредактировать его в вашем сообщении, но я откатил его, потому что изменения для сообщений о гольфе не принимаются в соответствии с правилами нашего сообщества.Python 2 , 27 байт
Попробуйте онлайн!
26 байт
К сожалению, это не работает для
1
:Попробуйте онлайн!
источник
05AB1E , 5 байтов
Попробуйте онлайн!
Удаление наиболее значимый бит из целых чисел N эквивалентно нахождению расстояния от N до самого высокого целой степени 2 ниже , чем N .
Таким образом, я использовал формулу N - 2 этажа (log 2 N) :
.²
- Логарифм с основанием 2 .ó
- Пол до целого числа.o
- 2 возведены в степень результата выше.-
- Разницаисточник
b¦C
тоже работает ... не так ли? Преобразовать в двоичный файл, MSB всегда находится в индексе 1, удалить MSB, преобразовать обратно.1
!Желе , 3 байта
Попробуйте онлайн!
объяснение
источник
Ḅ
иḊ
два байта кодовых? Это изменит общий размер до 5 байтов.C (gcc) - 59 байтов
Этот ответ gcc использует только целочисленные побитовые и арифметические операции. Здесь нет логарифмов! У него могут быть проблемы с вводом 0, и он полностью непереносим.
Это мой первый ответ на этом сайте, поэтому я хотел бы получить отзывы и улучшения. Я, конечно, весело проводил время с изучением побитовых выражений.
источник
main
, функция является верным представлением . Преобразование этого в функцию и принятие ввода в качестве аргумента указанной функции экономит 18 байт .MATL ,
86 байтПопробуйте онлайн!
Сохранено два байта благодаря Cinaski. Переключение на индексацию присваивания вместо индексации ссылок было на 2 байта короче :)
Объяснение:
источник
4L
вместо[2J]
. Еще один забавный 6 байт:tZlcW-
(работает только в MATLAB, а не в TIO / Octave)Java (OpenJDK 8) , 23 байта
Попробуйте онлайн!
Извините, встроенный: - /
источник
n->n^1<<(int)Math.log2(n)
будет работать и, вероятно, короче, чем 38 байтов. Это была моя вторая (пока не проверенная) идея, еслиhighestOneBit
она не работает должным образом. Из любопытства, каково было ваше решениеn->n^1<<(int)(Math.log(n)/Math.log(2))
потомуMath.log2
что не существует в Java. ; P толькоMath.log
,Math.log10
иMath.loglp
доступны.Math.log2
на самом деле не существует ... Мой плохой. Видеть?highestOneBit
Существует один хороший метод ( ), но нет другого (Math.log2
). Ява странная ;-)Шелуха , 3 байта
Попробуйте онлайн!
Объяснение:
источник
Ом v2 , 3 байта
Попробуйте онлайн!
источник
Python 2 , 27 байт
Попробуйте онлайн!
объяснение
источник
2**len(bin(n))/8
также может быть написано1<<len(bin(n))-3
, и тогда он будет работать как 2 и 3 (без сохранения / добавления байтов).Python 3 , 30 байт
-8 байт благодаря caird. Я набрал это по памяти. : о
Попробуйте онлайн!
источник
lambda n:int(bin(n)[3:],2)
?Mathematica, 37 байт
Попробуйте онлайн!
источник
JavaScript,
2220 байтСохранено 2 байта благодаря ovs
Попробуйте онлайн!
Другой подход, 32 байта
Попробуйте онлайн!
источник
.slice`1`^0
если.slice(1)^0
бы сработало так же хорошо, ха-хаJ, 6 байт
Довольно просто
объяснение
источник
APL (Dyalog) , 10 байт
Функция молчаливого префикса.
Попробуйте онлайн!
2∘⊥
... декодировать из базы-2 ......
⍣¯1
отрицательно один раз (т.е. кодировать в базе-2)1↓
брось первый бит2⊥
декодировать с базы-2источник
Рубин, 26 байт
-7 байт благодаря Ventero. -2 байта благодаря исторират.
источник
->n{n.to_s(2)[1..-1].to_i 2}
->n{/./=~'%b'%n;$'.to_i 2}
C (gcc), 38 байт
Встроенный в GCC используется.
источник
31-
на~
должна сохранить два байта.Сборка ARM,
4643 байта(Вы можете опустить регистр назначения при добавлении, если он совпадает с исходным)
источник
shr
/shl
/ret
и вместо этого хочет что-то вродеlsr
/lsl
/bx lr
.Pyth, 5 байт
Тестирование.
Объяснение:
источник
Алиса , 8 байт
Попробуйте онлайн!
объяснение
источник
Japt , 6 байт
Попробуйте онлайн!
объяснение
Если ввод
1
может быть неудачным: 4 байтаПопробуйте онлайн!
Объяснение : получить входные данные binary (
¢
), вырезать первый символ char (Å
), проанализировать как двоичный код обратно в число (n2
).источник
Октава , 20 байт
Попробуйте онлайн!
источник
APL (Dyalog Unicode) , 9 байтов
Попробуйте онлайн!
-1 байт благодаря Адаму
источник
⊢-2*∘⌊2⍟⊢
сохраняет байт.CJam , 7 байтов
Попробуйте онлайн!
Объяснение:
Повторно используйте MSB (который всегда равен 1), чтобы избежать необходимости его удаления; эквивалент без этого трюка будет
{2b1>2b}
или{2b(;2b}
.источник
Сетчатка ,
1513 байтПопробуйте онлайн!
Ввод и вывод в одинарный (набор тестов включает в себя преобразование из и в десятичное для удобства).
объяснение
Это довольно легко сделать в одинарном. Все, что мы хотим сделать, это удалить наибольшую степень 2 из входных данных. Мы можем сопоставить степень 2 с некоторыми ссылками вперед. На самом деле проще сопоставить значения в форме 2 n -1 , поэтому мы сделаем это и сопоставим одно 1 отдельно:
Группа
1
либо совпадает с единичным1
в начале, либо с двойным совпадением, чем на последней итерации. Так что это соответствует1
, тогда2
, тогда4
и так далее. Так как они складываются, у нас всегда есть одна степень от 2, которую мы исправляем1
в конце.Из-за завершающего перевода строки совпадение просто удаляется из ввода.
источник
R , 28 байт
Попробуйте онлайн!
Проще всего вычислить старший значащий бит,
2 ^ floor(log2(x))
а не выполнять базовые преобразования, которые довольно многословны в Rисточник
PARI / GP, 18 байт
Альтернативное решение:
источник
n->n-2^logint(n,2)
? Второй вариант не поддерживается ни в моей версии PARI / GP, ни в версии, используемой tio.run . Это новая функция?exponent
был добавлен 5 дней назад, по сравнению с этим вызовом, который был добавлен вчера. :)Haskell ,
3229 байтПопробуйте онлайн!
-3 байта благодаря @Laikoni
Старое решение, 32 байта
Попробуйте онлайн!
источник
f=
использовать первый вариант. Дополнительноz<-2*y=x!z
сохраняет байт: попробуйте онлайн!Excel, 20 байт
источник
Excel,
3631 байт-5
байт благодаря @ IanM_Matrix1Ничего интересного.
источник