Dado um número inteiro positivo, escreva algum código para obter sua fatoração primária e substituir todos os fatores de 2
por 3
.
Por exemplo
12 = 2 * 2 * 3 -> 3 * 3 * 3 = 27
Isso é código-golfe, portanto, o objetivo é minimizar a contagem de bytes de sua resposta.
Casos de teste
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
fonte
Python 2 , 28 bytes
Experimente online!
Divida recursivamente o número por 2 e multiplique o resultado por 3, desde que o número seja par. Números ímpares retornam a si mesmos.
Alt de 32 bytes:
Experimente online . Tem algum erro de flutuação. A constante é
log_2(3)-1
.Usa
(n&-n)
para encontrar o maior fator de potência-2 den
, convertido3**k
em2**k
, elevando-o à potência delog_2(3)-1
.fonte
05AB1E , 4 bytes
Experimente online!
Como funciona
fonte
Haskell,
2423 bytesDivida por dois e multiplique por 3 até um truque ímpar em Haskell.
Experimente online!
Alternativa com uma lambda em vez de uma função sem ponto e com a mesma contagem de bytes:
Edit: @ ais523 salvou um byte na versão original e @ Ørjan Johansen na versão alternativa, portanto, ambas as versões ainda têm o mesmo comprimento. Obrigado!
fonte
odd`until`\x->div(x*3)2
.$
para substituir um par de parênteses: Experimente online!()
versão lambda #JavaScript (ES6), 19 bytes
Enquanto a entrada é divisível por dois, multiplica-a por 1,5, o que equivale a dividir por 2 e multiplicar por 3.
fonte
x*3/2
tem o mesmo bytecountf=
geralmente não é necessário para js.f(x*1.5)
precisa ter o nome ef
, por isso, o motivof=
está incluído.Flacidez cerebral , 76 bytes
Experimente online!
Explicação
Esse programa funciona dividindo o número por dois e triplicando até obter o restante de um da divisão. Então ele pára de repetir e dobra e adiciona um ao número final.
Explicação mais detalhada eventualmente ...
fonte
Mathematica,
2219 bytesObrigado ao lanlock4 por economizar 3 bytes!
Função pura que faz a substituição repetidamente, um fator de 2 por vez. Funciona em todos os números inteiros positivos menores que 2 65537 .
fonte
x_?EvenQ
trabalhar em vez dex_/;EvenQ@x
?MATL ,
7, 6 bytesExperimente online!
1 byte economizado graças à observação genial de Dennis
A melhor maneira de explicar isso é mostrar a pilha em vários pontos.
Solução alternativa:
fonte
Yf3H$X>p
8 bytes05AB1E ,
65 bytesGuardou um byte graças a Adnan .
Experimente online!
Explicação
fonte
ÒDÈ+P
deve salvar um byteAlice , 9 bytes
Experimente online!
Alice tem um built-in para substituir um divisor de um número por outro. Eu não achava que iria usá-lo tão cedo ...
Usando os pontos de código dos caracteres para E / S, isso se torna 6 bytes:
I23SO@
.Explicação
fonte
Geléia ,
85 bytesExperimente online!
-3 bytes graças a uma dica de @Dennis!
fonte
Pitão -
14109 bytesConta o número de 2s na fatoração principal (/ PQ2). Multiplica a entrada por 1,5 ^ (# de 2s)
Tente
fonte
Java , 38 bytes
Experimente online!
Solução anterior de 43 bytes:
Experimente online!
fonte
Hexagonia ,
11291 bytesTamanho da grade 6 (91 bytes)
Versão compacta
Tamanho da grade 7 (112 bytes)
Experimente online!
Versão compacta:
Versão Ungolfed para melhor legibilidade:
Layout aproximado da memória
Caminho cinza (inicialização da memória)
Entrada de loop
Caminho verde (o valor ainda é divisível por 2)
Caminho vermelho (o valor não é mais divisível por 2)
fonte
%2
e:2
ambos na borda do "módulo"? (Para que você possa se livrar das duas arestas superiores.) E então, você pode anexar o ramo "multiplicador" à aresta "módulo" em vez da aresta "divisor" para precisar de menos movimento após cada ramo? (Você pode até girar essa seção, para que "result" ou "temp 2" toque em "modulo", o que significa que você só precisa copiar o resultado final uma vez antes de poder calcular o produto.)Retina , 23 bytes
Experimente online!
fonte
Braquilog , 7 bytes
Experimente online!
Como funciona
fonte
J , 11 bytes
Experimente online!
[:
cap (espaço reservado para chamar o próximo verbo monadicamente)*/
o produto deq:
os principais fatores+
mais (ou seja, com um adicionado onde)2
dois=
é igual a (cada um)q:
os principais fatoresfonte
[:
nojento.J ,
151210 bytesExperimente online! Funciona de maneira semelhante à abaixo, apenas possui uma lógica diferente em relação à substituição de
2
por3
.15 bytes
Experimente online!
Explicação
fonte
roll
aqui. :)Pitão , 9 bytes
Saída inteira \ o /
Conjunto de teste .
Como funciona
fonte
Japt ,
19 16 10 97 bytesExperimente online!
Explicação
fonte
×
é um atalho parar@X*Y}1
(ou apenasr*1
), que pode ser útil. Há também oXwY
que éMath.max(X,Y)
.k m_w3Ã×
para salvar um byte. Além disso,m_
pode ser reduzido para®
.PHP, 36 bytes
Experimente online!
fonte
for($a=$argn;!1&$a;)$a*=3/2;echo$a;
renomear$argn
salva um único byte.CJam,
109 bytesRealmente simples.
Explicação:
fonte
Hexagonia ,
28 2726 bytesExperimente online!
Dispostas:
Isso basicamente é executado:
Neste ponto, é um exercício sobre como posso torturar o caminho do loop para minimizar bytes.
fonte
Japonês , 7 bytes
Experimente online!
Explicação
fonte
APL (Dyalog Unicode) , 26 bytes
Experimente online!
Isso é muito detalhado, devo estar fazendo algo errado ...
fonte
R, 42 bytes
A única quantidade certa de bytes em uma resposta.
Bem simples, usa o
gmp
pacote para fatorarx
, substitui 2s por 3s e retorna o produto.fonte
Befunge-93 , 20 bytes
Experimente online!
fonte
Perl 6 , 14 bytes
lsb retorna a posição do bit menos significativo, contado a partir da direita. Ou seja, quantos zeros à direita na representação binária, que é o mesmo que o número de fatores de 2. Portanto, eleve 3/2 a essa potência e pronto.
fonte
Pyke , 5 bytes
Experimente online!
fonte
Na verdade , 9 bytes
Experimente online!
Explicação:
fonte