JavaScript (ES6), 30 28 байт
Сэкономлено 2 байта благодаря @Arnauld
0, 1, 0, 1
По сути, это вычисляет обратное побитно: мы начинаем с д = 0; пока н положительно, умножаем д на 2, отрезать последний бит от н с 1: [10]
2: []
1: [5]
2: [0]
1: [2]
2: [0, 1]
1: [1]
2: [0, 1, 0]
1: [0]
2: [0, 1, 0, 1]
, and add it to д с \ Implicit: Input is an integer on main stack.
$ ; \ While i != 0:
&2%v \ Put i % 2 on auxiliary stack
2/ \ i = i // 2 (integer division)
F \ Swap stacks (so result is on main stack)
. When н достигает 0, число успешно изменено, и мы возвращаем д.
Благодаря длинным встроенным именам JS, решение этой задачи простым способом занимает 44 байта:
$&2%v2/;F
Используя рекурсию и строку, вы можете получить 32-байтовое решение, которое делает то же самое:
$&2%v2/;FL:vK2*;OS#
||answer||
Java 8, 53 47 46 45 байт
- -4 байта благодаря Титусу
- -1 байт благодаря Кевину Круйссену
Это лямбда-выражение, которое имеет тот же принцип, что и Ответ ETH (хотя в Java рекурсия была бы слишком многословной, поэтому вместо этого мы используем цикл):
miscFuncs
Попробуйте онлайн!
Это можно назначить с помощью bin
, and then called with sum(2^((length(y<-rev(miscFuncs::bin(scan()))):1)-1)*y)
. В развернутом виде, без гольфа и с комментариями это выглядит так:
using System.Linq;using b=System.Convert;a=>b.ToInt64(string.Concat(b.ToString(a,2).Reverse()),2);
||answer||
Дж, 6 байт
r
n
reverse
n
under
%
base 2