Таким образом, вам дается положительное основание 10 (десятичное) число. Ваша задача - поменять двоичные цифры и вернуть этот базовый номер 10.
Примеры:
1 => 1 (1 => 1)
2 => 1 (10 => 01)
3 => 3 (11 => 11)
4 => 1 (100 => 001)
5 => 5 (101 => 101)
6 => 3 (110 => 011)
7 => 7 (111 => 111)
8 => 1 (1000 => 0001)
9 => 9 (1001 => 1001)
10 => 5 (1010 => 0101)
Это задача кода-гольфа , поэтому выигрывает решение, использующее наименьшее количество байтов.
Это A030101 в OEIS.
code-golf
number
base-conversion
binary
juniorRubyist
источник
источник
Ответы:
Python , 29 байт
Попробуйте онлайн!
Это анонимная, безымянная функция, которая возвращает результат.
Сначала
bin(n)
преобразует аргумент в двоичную строку. Мы обычно обращаем это вспять с помощью обозначения среза[::-1]
. Это читает строку с шагом -1 , то есть в обратном направлении. Однако двоичные строки в Python начинаются с префикса0b
, и поэтому мы даем второму аргументу среза значение 1 , указывающее Python читать назад, заканчиваясь на индексе 1 , таким образом, не читая индексы 1 и 0 .Теперь, когда у нас есть обратная двоичная строка, мы передаем ее
int(...)
со вторым аргументом как 2 . Это читает строку как целое число с основанием 2, которое затем является неявностью, возвращаемой лямбда-выражением.источник
Python, 29 байт
Попробуйте онлайн
источник
JavaScript (ES6),
3028 байтСохранено 2 байта благодаря @Arnauld
Это в основном вычисляет реверс по одному биту за раз: мы начинаем с q = 0 ; в то время как n положительно, мы умножаем q на 2, отрываем последний бит от n с помощью
n>>1
и добавляем его к q с помощью|n%2
. Когда n достигает 0, число было успешно изменено, и мы возвращаем q .Благодаря длинным встроенным именам JS, решение этой простой задачи занимает 44 байта:
Используя рекурсию и строку, вы можете получить 32-байтовое решение, которое делает то же самое:
источник
f=(n,q)=>n?f(n>>1,q*2|n%2):q
почти работает. Но, к сожалению, не дляn=0
.Java 8,
53474645 байтЭто лямбда-выражение, которое имеет тот же принцип, что и ответ ETH (хотя рекурсия была бы слишком многословна в Java, поэтому вместо этого мы будем использовать цикл):
Попробуйте онлайн!
Это может быть назначено с
IntFunction<Integer> f = ...
, а затем вызвано сf.apply(num)
. Развернутое, разглаженное и прокомментированное, это выглядит так:источник
t*2
вместо(t<<1)
, еще один с перемещением этого вычисления из заголовка цикла в тело цикла. Можете ли вы использоватьx
вместоx>0
этого условия?x>>=1
может быть заменено, такx/=2
как это будет автоматически целочисленное деление.t=t*2+
наt+=t+
.)J, 6 байт
|.
обратный&.
под#:
база 2источник
Желе , 3 байта
Попробуйте онлайн!
источник
Mathematica, 19 байт
источник
Лабиринт, 23 байта
Ну, это неудобно ... это возвращает обратный двоичный номер ... Спасибо @Martin Ender за то, что указал и на мою ошибку, и на мою ошибку ID 10T. Так что это не работает, я должен найти другое решение.
источник
# Labyrinth, 89 bytes
_
находятся на стыках.C
48444342 байта-1 байт благодаря Гурке и -1 байт благодаря Анатолигу:
Предыдущее 44-байтовое решение:
Предыдущее 48-байтовое решение:
Ungolfed и использование:
источник
r
уже нет инициализации нуляr;f(n){r=0;
, например, нетr=0;
необходимости? Также незначительная опечатка: «Предыдущая 48 байт решения»for
петли всегда по крайней мере такие же короткие, какwhile
петли, и часто короче.r;f(n){for(r=n&1;n/=2;r=2*r+n%2);return r;}
? На 1 байт короче, но я не уверен, действительно ли это C (C99).=
в ,+=
чтобы сделать его короче и более запутаннымРубин,
2928 байт"% b"% n форматирует ввод n как двоичную строку, обратный, затем преобразует обратно в число
Использование / Тестовые случаи:
источник
2
является базой, в которую он конвертирует, иn
является входом.->args{return value}
такое рубиновый лямбда-синтаксис.to_i(2)
?05AB1E , 3 байта
Попробуйте онлайн!
источник
Java (OpenJDK) , 63 байта
Попробуйте онлайн!
Спасибо, что тыкаете за -12 байт, а Сайоссу за -8 байт!
источник
a
в этом контексте)print
вместо игрыprintln
в гольф :)StringBuffer
сохраняет байты болееStringBuilder
+""
вместо.toString()
?Perl 6 , 19 байт
источник
$_
. Это не упоминается по имени, ноbase
метод вызывается на нем.{:2(.base(2).flip)}(10)
в REPL будет напечатано 5. Таким образом, оно соответствует стандартным критериям кода-гольф для функции.Haskell, 36 байт
Тот же алгоритм (и длина!), Что и в ответе ETHproductions на JavaScript .
источник
Утилиты Bash / Unix,
2423 байтаПопробуйте онлайн!
источник
PHP, 33 байта
преобразовать в base2, перевернуть строку, преобразовать в десятичную. Сохранить в файл и запустить как канал с
-F
.нет встроенных
итеративный, 41 байт
Пока на входе установлены биты, извлеките бит из ввода и подтолкните его к выводу. Беги как труба с
-nR
.рекурсивный, 52 байта
источник
$r+=$r
. Но я на самом деле не помню, почему я поставил это перед собой.MATL , 4 байта
Попробуйте онлайн!
объяснение
источник
Pyth, 6 байт
Тестовый набор доступен здесь.
объяснение
источник
Japt , 5 байт
Попробуйте онлайн!
источник
)
тоже может быть пробел :-)Скала, 40 байт
Использование:
Объяснение:
источник
Mathematica, 38 байт
источник
Groovy, 46 байт
источник
it
относится к аргументу, данному блоку IIRCCJam , 8 байт
Попробуйте онлайн!
объяснение
источник
Пакетная, 62 байта
Объяснение: На первом проходе
%1
содержит входной параметр, пока%2
он пуст. Поэтому мы оцениваемn
как половину%1
иr
как+%1
по модулю 2 (%
оператор должен быть удвоен, чтобы заключить его в кавычки). Еслиn
не ноль, мы тогда называем себя хвостом, рекурсивно передающим вход,n
и выражение, которое вычисляется на следующем проходе, эффективно удваиваетсяr
каждый раз.источник
C #, 98 байт
источник
R, 55 байт
Читает ввод из stdin и, следовательно, использует
bin
функцию изmiscFuncs
пакета для преобразования из десятичного в двоичный вектор.источник
Напористый , 19 байт
Нет встроенной базы преобразования!
Попробуйте онлайн!
У Pushy есть два стека, и этот ответ широко использует это.
Эта программа состоит из двух частей. Во-первых,
$&2%v2/;F
преобразует число в обратное двоичное представление:Учитывая пример 10, стеки будут выглядеть следующим образом на каждой итерации:
Мы можем видеть , что после последней итерации,
0, 1, 0, 1
был создан на втором ярусе - обратные двоичные цифры 10,0b1010
.Вторая часть кода
L:vK2*;OS#
взята из моего предыдущего ответа, который преобразует двоичный код в десятичный . Используя метод, описанный и объясненный в этом ответе, он преобразует двоичные цифры в стеке в целое число 10 и печатает результат.источник
к, 18 байт
Пример:
источник
C #, 167 байт
Объяснение:
Здесь я буду повторять n значений, и каждый раз итерированное целочисленное значение преобразуется в байтовое значение, а затем инвертировать это байтовое значение, и это байтовое значение преобразуется в целочисленное значение.
источник
STDIN
(я думаю, что это так,console.Read()
но вы, вероятно, знаете об этом лучше, чем я) иSTDOUT
. В любом случае, добро пожаловать на сайт, если вам нужен более опытный совет по игре в гольф C #, я бы порекомендовал codegolf.stackexchange.com/questions/173/….Reverse()
возвращаетсяIEnumerable<char>
. ПосколькуConvert.ToInt32
не имеет перегрузки для IEnumerable, он генерирует исключение. Кроме того, ответ не соответствует правилам для кода гольф: 1) Поскольку ничего не указано, представление должно быть полной программой или функцией, а не просто фрагментом. 2)using
операторы должны быть включены в счетчик байтовc / c ++ 136 байт
Это не победит, но я хотел использовать другой подход в c / c ++ 120 байтов в функции
Чтобы уточнить, что я делаю, я использовал функцию log, чтобы определить количество бит, используемых входом. Чем последовательность трех битовых сдвигов влево / вправо, внутри / снаружи, четный / нечетный, который переворачивает все целое число. Наконец немного сдвинуть, чтобы сместить число обратно вправо. Использование десятичных чисел для битовых сдвигов вместо шестнадцатеричных - это боль, но это сэкономило несколько байтов.
источник