Dado un número entero positivo, escriba un código para tomar su factorización prima y reemplazar todos sus factores de 2
con 3
.
Por ejemplo
12 = 2 * 2 * 3 -> 3 * 3 * 3 = 27
Este es el código de golf, por lo que el objetivo es minimizar el recuento de bytes de su respuesta.
Casos de prueba
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
fuente
Python 2 , 28 bytes
Pruébalo en línea!
Divide recursivamente el número por 2 y multiplica el resultado por 3, siempre que el número sea par. Los números impares se devuelven.
32 bytes alt:
Pruébalo en línea . Tiene algún error de flotación. La constante es
log_2(3)-1
.Usos
(n&-n)
para encontrar el mayor factor de potencia de 2n
, los conversos3**k
al2**k
elevarlo al poder delog_2(3)-1
.fuente
05AB1E , 4 bytes
Pruébalo en línea!
Cómo funciona
fuente
Haskell,
2423 bytesDivide por dos y multiplica por 3 hasta un truco extraño en Haskell.
Pruébalo en línea!
Alternativa con una función lambda en lugar de una función de punto libre y con el mismo número de bytes:
Editar: @ ais523 guardó un byte en la versión original y @ Ørjan Johansen en la versión alternativa, por lo que ambas versiones tienen la misma longitud. ¡Gracias!
fuente
odd`until`\x->div(x*3)2
.$
para reemplazar un par de paréntesis: ¡ Pruébelo en línea!()
la versión lambdaJavaScript (ES6), 19 bytes
Si bien la entrada es divisible por dos, la multiplica por 1.5, lo que equivale a dividir por 2 y multiplicar por 3.
fuente
x*3/2
tiene el mismo bytecountf=
usualmente no es necesario para js.f(x*1.5)
mismo necesita tener el nombref
, de ahí por quéf=
está incluido.Brain-Flak , 76 bytes
Pruébalo en línea!
Explicación
Este programa funciona dividiendo el número entre dos y triplicando hasta obtener el resto de la división. Luego deja de hacer bucles y se duplica y agrega uno al número final.
Una explicación más detallada eventualmente ...
fuente
Mathematica,
2219 bytes¡Gracias a lanlock4 por guardar 3 bytes!
Función pura que hace el reemplazo repetidamente, un factor de 2 a la vez. Funciona en todos los enteros positivos menores que 2 65537 .
fuente
x_?EvenQ
Funcionaría en lugar dex_/;EvenQ@x
?MATL ,
7, 6 bytesPruébalo en línea!
1 byte guardado gracias a la observación genial de Dennis
La mejor manera de explicar esto es mostrar la pila en varios puntos.
Solución alternativa:
fuente
Yf3H$X>p
para 8 bytes05AB1E ,
65 bytesSalvó un byte gracias a Adnan .
Pruébalo en línea!
Explicación
fuente
ÒDÈ+P
debería guardar un byteAlice , 9 bytes
Pruébalo en línea!
Alice tiene una función incorporada para reemplazar un divisor de un número con otro. No pensé que podría usarlo tan pronto ...
Usando los puntos de código de caracteres para E / S, esto se convierte en 6 bytes:
I23SO@
.Explicación
fuente
Jalea ,
85 bytesPruébalo en línea!
-3 bytes gracias a una pista de @Dennis!
fuente
Pyth -
14109 bytesCuenta el número de 2s en la factorización prima (/ PQ2). Multiplica la entrada por 1.5 ^ (# de 2s)
Intentalo
fuente
Java , 38 bytes
Pruébalo en línea!
Solución anterior de 43 bytes:
Pruébalo en línea!
fuente
Hexagonía ,
11291 bytesTamaño de cuadrícula 6 (91 bytes)
Versión compacta
Tamaño de cuadrícula 7 (112 bytes)
Pruébalo en línea!
Versión compacta:
Versión sin golf para una mejor legibilidad:
Diseño aproximado de memoria
Ruta gris (inicialización de memoria)
Entrada de bucle
Green Path (el valor sigue siendo divisible por 2)
Camino rojo (el valor ya no es divisible por 2)
fuente
%2
y:2
ambos en el borde del "módulo"? (Para que pueda deshacerse de los dos bordes superiores). Y luego, ¿podría unir la rama "multiplicador" en el borde "módulo" en lugar del borde "divisor" para que necesite menos movimiento después de cada rama? (Es posible que incluso pueda rotar esa sección, de modo que "resultado" o "temp 2" toque "módulo", lo que significaría que solo necesita copiar el resultado final una vez antes de poder calcular el producto).Retina , 23 bytes
Pruébalo en línea!
fuente
Brachylog , 7 bytes
Pruébalo en línea!
Cómo funciona
fuente
J , 11 bytes
Pruébalo en línea!
[:
cap (marcador de posición para llamar al siguiente verbo de forma mónada)*/
el producto deq:
los factores primos+
plus (es decir, con uno agregado donde)2
dos=
es igual a (cada uno de)q:
los factores primosfuente
[:
asqueroso.J ,
151210 bytesPruébalo en línea! Funciona de manera similar a la siguiente, solo tiene una lógica diferente con respecto al reemplazo de
2
con3
.15 bytes
Pruébalo en línea!
Explicación
fuente
roll
aquí. :)Pyth , 9 bytes
Salida entera \ o /
Banco de pruebas .
Cómo funciona
fuente
Japt ,
19 16 10 97 bytesPruébalo en línea!
Explicación
fuente
×
es un acceso directo parar@X*Y}1
(o simplementer*1
), que puede ser útil. También hayXwY
cuál esMath.max(X,Y)
.k m_w3Ã×
para guardar un byte. Además,m_
se puede acortar a®
.PHP, 36 bytes
Pruébalo en línea!
fuente
for($a=$argn;!1&$a;)$a*=3/2;echo$a;
renombrar$argn
guarda un solo byte.CJam,
109 bytesMuy simple
Explicación:
fuente
Hexagonía ,
28 2726 bytesPruébalo en línea!
Dispuesto:
Esto básicamente se ejecuta:
En este punto, es un ejercicio sobre cuán tortuoso puedo obtener la ruta del bucle para minimizar los bytes.
fuente
Japt , 7 bytes
Pruébalo en línea!
Explicación
fuente
APL (Dyalog Unicode) , 26 bytes
Pruébalo en línea!
Esto es demasiado detallado, debo estar haciendo algo mal ...
fuente
R, 42 bytes
La única cantidad correcta de bytes en una respuesta.
Bastante sencillo, usa el
gmp
paquete para factorizarx
, reemplaza 2s por 3s y devuelve el producto.fuente
Befunge-93 , 20 bytes
Pruébalo en línea!
fuente
Perl 6 , 14 bytes
lsb devuelve la posición del bit menos significativo, contado desde la derecha. Es decir, cuántos ceros finales en la representación binaria, que es el mismo que el número de factores de 2. Entonces eleva 3/2 a esa potencia y listo.
fuente
Pyke , 5 bytes
Pruébalo en línea!
fuente
En realidad , 9 bytes
Pruébalo en línea!
Explicación:
fuente