Для заданного целого числа N выполните следующие действия: (используя 9 в качестве примера).
- Получите вход N. (
9
) - Конвертировать N из base10 в base2. (
1001
) - Увеличивайте каждый бит на 1. (
2112
) - Рассматривайте результат как base3 и конвертируйте его обратно в base10. (
68
) - Возврат / Вывод результата.
вход
Может быть получено в любом разумном числовом формате.
Вам нужно обрабатывать только случаи, когда N> 0.
Выход
Либо верните в виде числа или строки, либо напечатайте в stdout
.
правила
- Это код-гольф , выигрывает самый короткий код в байтах.
- Лазейки по умолчанию запрещены.
Тестовые случаи
1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
+n%2+1
добавляет крайний правый двоичный бит плюс 1 к возвращаемому значению,n/2
сдвиг вправоn
на 1 двоичный бит,3*f(n/2)
рекурсивно добавляет в 3 раза это вычисление для этих сдвинутых вправо битов иn and
заканчивает рекурсию, когдаn
равно 0JavaScript (Node.js) , 23 байта
Попробуйте онлайн!
источник
x>>1
так же, какx/2
не так ли?Infinity
в JS .. Попробуйте онлайн. (Возможно, вы захотите добавить TIO-ссылку к вашему ответу, I4m2 )1>>1=0
пока1/2=0.5
n/2
работает в этом, и причина, по которой я предложил это здесь.Java (JDK 10) , 44 байта
Попробуйте онлайн!
источник
-~
поможет?long
? :) И тут я подумал, что мой подход к последовательности был умным. Вы взорвали его из парка менее чем за 5 минут ..>.>: '(Желе , 4 байта
Попробуйте онлайн!
источник
J 7 байт
Попробуйте онлайн!
Спасибо Галену Иванову за -4 байта! Мне действительно нужно улучшить свои навыки игры в гольф ...
источник
3#.1+#:
TIO: 0
.R ,
5543 байтаПопробуйте онлайн!
Использует стандартную базовую уловку преобразования в R, увеличивает ее, а затем использует скалярное произведение со степенями
3
преобразования для преобразования в целое число.Спасибо @ user2390246 за удаление 12 байтов!
источник
05AB1E , 5 байтов
Попробуйте онлайн!
05AB1E , 5 байтов
Попробуйте онлайн!
источник
S
работает€
тоже.Java 10,
8152 байта (базовое преобразование)Попробуйте онлайн.
-29 байт благодаря @Holger .
Объяснение:
Java 10,
171167151150149 байт (последовательность)-16 байт благодаря @ musicman523 , меняется
(int)Math.pow(2,t)
на(1<<t)
.-1 байт благодаря @Holger , меняется
(int)(Math.log(n)/Math.log(2))
на31-n.numberOfLeadingZeros(n)
.Попробуйте онлайн.
Объяснение:
Когда мы смотрим на последовательность:
Мы можем увидеть несколько подпоследовательностей:
Итак, запрашиваемая последовательность:
Я отстой в поиске шаблонов, поэтому я горжусь тем, что нашел выше .. Сказав это, @ user202729 нашел лучший и более короткий подход в Java в течение нескольких минут ..: '(
источник
n.toString(n,2).getBytes()
... Я думаю, что ручное преобразование может быть короче.long
нетint
?(int)Math.pow(2,t)
на1<<t
..., а затем вставить это выражение и опустить переменную i ( 152 байта )31-Integer.numberOfLeadingZeros(n)
вместо(int)(Math.log(n)/Math.log(2))
, но это не короче. Если вы не используетеimport static
в заголовке, что может слишком сильно расширить правила.n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
APL (Dyalog) , 10 байт
Попробуйте онлайн!
источник
Брахилог , 7 байт
Попробуйте онлайн!
объяснение
Не то чтобы тебе это действительно нужно, но ...
источник
Рубин , 27 байт
Попробуйте онлайн!
источник
Python 2 ,
5655 байтПопробуйте онлайн!
источник
Атташе , 19 байт
Попробуйте онлайн!
Это композиция из трех функций:
FromBase&3
1&`+
Bin
Сначала он преобразуется в двоичный (
Bin
), увеличивает его (1&`+
), затем преобразует в троичный (FromBase&3
).альтернативы
Без точки, 21 байт:
{FromBase[Bin!_+1,3]}
Без встроенных, 57 байтов:
Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}
источник
Сетчатка 0.8.2 , 36 байт
Попробуйте онлайн! Объяснение:
Преобразовать из десятичной в одинарную.
Неоднократно делим на 2 и добавляем 1 к результату по модулю.
Добавьте 1 к первой цифре тоже.
Преобразовать из унарно-кодированного основания 3 в унарный.
Преобразовать в десятичную.
источник
Japt , 6 байт
Принимает ввод как число, выводит число.
Попробуйте онлайн!
источник
MATL ,
1276 байтПопробуйте онлайн!
Сэкономили 5 байтов благодаря Джузеппе и еще один благодаря Луису Мендо.
Старый 7-байтовый ответ:
Попробуйте онлайн!
Объяснение:
Старый на 12 байт:
Попробуйте онлайн!
О боже, это было грязно ... Так вот: `BQ3GBn: q ^! Y *.
Объяснение:
источник
C # (компилятор Visual C #) , 128 байт
Попробуйте онлайн!
Я считаю,
System
потому что я используюConvert
иMath
.источник
z
переменной. Кроме того, в теле выражения вы могли бы избавиться от{
,}
иreturn
заявления. Так что-то вроде этогоn=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
Python 2 ,
5654 байтаПопробуйте онлайн!
источник
C,
3227 байтНа основе user202729 «s Java ответ . Попробуйте это онлайн здесь . Спасибо Кевину Круйссену за игру в гольф 5 байтов.
Безголовая версия:
источник
return
сx=
и реверсирования троичной поэтому!
больше не нужно:n(x){x=x?x%2+1+3*n(x/2):0;}
Шелуха , 5 байт
Попробуйте онлайн!
объяснение
источник
Октава с инструментарием связи,
3332 байтаПопробуйте онлайн!
Преобразует входные данные в двоичный вектор, используя
de2bi
и увеличивая все числа. Делает ли матричное умножение с вертикальным вектором 3 поднятые до соответствующих степеней:,1, 3, 9, ...
получая таким образом сумму без явного вызоваsum
.источник
@(x)base2dec(de2bi(x)+49,3)
за 27 (редкий случай, когда MATLAB более снисходительно, чем Octave)PHP,
8464 байтаПопробуйте онлайн!
ОРИГИНАЛЬНЫЙ КОД
Попробуйте онлайн!
Благодаря Кристофу , меньше байтов, если работает с php -R
объяснение
источник
strtr
<?="Will do!!"
CJam , 8 байт
Попробуйте онлайн!
объяснение
источник
:)
...Пробел , 117 байт
Буквы
S
(пробел),T
(табуляция) иN
(новая строка) добавляются только как подсветка.[..._some_action]
добавлено только для пояснения.Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Объяснение в псевдокоде:
Сначала я преобразовал рекурсивную функцию
int f(int n){return n<1?0:n%2+1+3*f(n/2);}
в ее итеративную форму (в псевдокоде):И затем я реализовал этот итеративный подход в основанном на стеке языке Whitespace, используя его стек по умолчанию.
Пример работы:
Входные данные:
1
Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Останавливается с ошибкой: выход не определен.
Входные данные:
4
Попробуйте онлайн (только с необработанными пробелами, вкладками и новыми строками).
Останавливается с ошибкой: выход не определен.
источник
n < 1
проверки, нажимая значения до тех пор, пока n не станет равным 0, а затем выталкивая их, пока вы не достигнете своего граничного значения (0). Глубина стека не должна храниться в явном виде и даже не должнаn < 1
(илиn == 0
) ИС не толкает значения до тех пор, пока неn
станет 0 .. Или я что-то здесь неправильно понимаю:: S « Глубина стека не должна храниться в явном виде » В Java это происходит, иначе я не могу создать массив. Я мог бы использоватьjava.util.Stack
вместо этого, но я просто использовал массив, чтобы сделать его менее многословным. В Whitespace стек имеет неопределенный размер.Brain-Flak , 74 байта
Попробуйте онлайн!
«Читаемая» версия
источник
Добавить ++ , 14 байт
Попробуйте онлайн!
источник
Japt , 7 байт
Попробуй здесь
источник
Haskell , 32 байта
Попробуйте онлайн!
источник
Perl 5 , 36 байт
Попробуйте онлайн!
источник
Пиф, 8
Как устранить пространство и сделать
Q
неявным?Pyth онлайн .
источник
Q
неявным? Я не думаю, что ты можешь.