Учитывая положительное целое число п написать код , чтобы взять его разложение на простые множители и замены всех его факторов 2
с 3
.
Например
12 = 2 * 2 * 3 -> 3 * 3 * 3 = 27
Это код-гольф, поэтому цель состоит в том, чтобы минимизировать количество байтов в вашем ответе.
Контрольные примеры
1 -> 1
2 -> 3
3 -> 3
4 -> 9
5 -> 5
6 -> 9
7 -> 7
8 -> 27
9 -> 9
10 -> 15
11 -> 11
12 -> 27
13 -> 13
14 -> 21
15 -> 15
16 -> 81
17 -> 17
18 -> 27
19 -> 19
20 -> 45
21 -> 21
22 -> 33
23 -> 23
24 -> 81
25 -> 25
26 -> 39
27 -> 27
28 -> 63
29 -> 29
источник
Python 2 , 28 байт
Попробуйте онлайн!
Рекурсивно разделите число на 2 и умножьте результат на 3, если число четное. Нечетные числа возвращаются.
32 байта alt:
Попробуйте онлайн . Имеет некоторую ошибку с плавающей точкой. Константа есть
log_2(3)-1
.Используется
(n&-n)
для нахождения наибольшего фактора силы-2n
, который преобразуется3**k
в2**k
возведение его в степеньlog_2(3)-1
.источник
05AB1E , 4 байта
Попробуйте онлайн!
Как это работает
источник
Haskell,
2423 байтаРазделите на два и умножьте на 3 до странного трюка в Хаскеле.
Попробуйте онлайн!
Альтернатива с лямбдой вместо функции pointfree и с тем же количеством байтов:
Изменить: @ ais523 сохранил байт в исходной версии и @ Örjan Johansen в альтернативной версии, поэтому обе версии имеют одинаковую длину. Благодарность!
источник
odd`until`\x->div(x*3)2
.$
замены пары скобок: попробуйте онлайн!()
из лямбда-версииJavaScript (ES6), 19 байт
Хотя вход делится на два, он умножается на 1,5, что эквивалентно делению на 2 и умножению на 3.
источник
x*3/2
имеет тот же счетчикf=
Обычно не требуется для JS.f(x*1.5)
ему нужно имяf
, следовательно, почемуf=
оно включено.Brain-Flak , 76 байт
Попробуйте онлайн!
объяснение
Эта программа работает, деля число на два и утраивая, пока не получит остаток от деления. Затем он останавливается, удваивается и добавляет единицу к последнему числу.
Более подробное объяснение в конце концов ...
источник
Mathematica,
2219 байтовСпасибо lanlock4 за сохранение 3 байта!
Чистая функция, которая выполняет замену несколько раз, один фактор 2 за один раз. Работает на всех натуральных числах менее 2 65537 .
источник
x_?EvenQ
работать вместоx_/;EvenQ@x
?MATL ,
7, 6 байтовПопробуйте онлайн!
1 байт сохранен благодаря гениальному наблюдению Денниса
Лучший способ объяснить это - показать стек в разных точках.
Альтернативное решение:
источник
Yf3H$X>p
по 8 байт05AB1E ,
65 байтСохранил байт благодаря Аднану .
Попробуйте онлайн!
объяснение
источник
ÒDÈ+P
должен сохранить байтАлиса , 9 байт
Попробуйте онлайн!
Алиса имеет встроенную функцию для замены делителя числа другим. Я не думал, что смогу использовать это так скоро ...
Используя кодовые точки символов для ввода / вывода, получается 6 байтов:
I23SO@
.объяснение
источник
Желе ,
85 байтПопробуйте онлайн!
-3 байта благодаря подсказке от @Dennis!
источник
Pyth -
14109 байтСчитает число 2s в простой факторизации (/ PQ2). Умножает ввод на 1,5 ^ (число из 2 с)
Попытайся
источник
Java , 38 байт
Попробуйте онлайн!
Предыдущее 43-байтовое решение:
Попробуйте онлайн!
источник
Гексагония ,
11291 байтРазмер сетки 6 (91 байт)
Компактная версия
Размер сетки 7 (112 байт)
Попробуйте онлайн!
Компактная версия:
Версия Ungolfed для лучшей читаемости:
Примерный план памяти
Серый путь (инициализация памяти)
Цикл входа
Зеленый путь (значение все еще делится на 2)
Красный путь (значение больше не делится на 2)
источник
%2
и то и:2
другое по краю "по модулю"? (Таким образом, вы можете просто избавиться от двух верхних ребер.) И затем, вы могли бы прикрепить ветвь «множителя» к ребру «по модулю» вместо ребра «делителя», чтобы вам было нужно меньше движения после каждой ветки? (Вы могли бы даже повернуть этот раздел, чтобы «result» или «temp 2» касались «modulo», что означало бы, что вам нужно скопировать окончательный результат только один раз, прежде чем вы сможете вычислить продукт.)Сетчатка , 23 байта
Попробуйте онлайн!
источник
Брахилог , 7 байт
Попробуйте онлайн!
Как это работает
источник
J 11 байт
Попробуйте онлайн!
[:
cap (заполнитель для вызова следующего глагола monadically)*/
продуктq:
основные факторы+
плюс (т.е. с одним добавленным где)2
два=
равно (каждому из)q:
основные факторыисточник
[:
отвратительным.J ,
151210 байтПопробуйте онлайн! Работает аналогично ниже, только имеет другую логику в отношении замены
2
с3
.15 байт
Попробуйте онлайн!
объяснение
источник
roll
здесь. :)Pyth , 9 байт
Целочисленный вывод \ o /
Тестирование .
Как это работает
источник
Japt ,
19 16 10 97 байтПопробуйте онлайн!
объяснение
источник
×
это ярлык дляr@X*Y}1
(или простоr*1
), который может пригодиться. Там такжеXwY
есть чтоMath.max(X,Y)
.k m_w3Ã×
чтобы сохранить байт. Такжеm_
можно сократить до®
.PHP, 36 байт
Попробуйте онлайн!
источник
for($a=$argn;!1&$a;)$a*=3/2;echo$a;
переименование$argn
сохраняет один байт.CJam,
109 байтовДействительно просто.
Объяснение:
источник
Гексагония ,
28 2726 байтПопробуйте онлайн!
Выложил:
Это в основном работает:
На данный момент это упражнение о том, как мучительно я могу получить путь цикла, чтобы минимизировать байты.
источник
Japt , 7 байт
Попробуйте онлайн!
объяснение
источник
APL (Dyalog Unicode) , 26 байт
Попробуйте онлайн!
Это слишком многословно, я, должно быть, делаю что-то не так ...
источник
R, 42 байта
Единственное правильное количество байтов в ответе.
Довольно просто, использует
gmp
пакет для разложенияx
, заменяет 2 на 3 и возвращает продукт.источник
Befunge-93 , 20 байтов
Попробуйте онлайн!
источник
Perl 6 , 14 байт
lsb возвращает позицию младшего бита, отсчитанную справа. То есть, сколько концевых нулей в двоичном представлении, что совпадает с числом факторов, равных 2. Так что поднимите 3/2 до этой степени, и мы закончили.
источник
Пайк , 5 байт
Попробуйте онлайн!
источник
На самом деле , 9 байтов
Попробуйте онлайн!
Объяснение:
источник