Dado un entero N, realice los siguientes pasos: (usando 9 como ejemplo).
- Recibir entrada N. (
9
) - Convierta N de base10 a base2. (
1001
) - Aumentar cada bit en 1. (
2112
) - Trate el resultado como base3 y conviértalo de nuevo a base10. (
68
) - Devolver / dar salida al resultado.
Entrada
Se puede recibir en cualquier formato de número razonable.
Solo necesita manejar casos donde N> 0.
Salida
Regrese como un número o cadena, o imprima en stdout
.
Reglas
- Este es el código de golf , gana el código más corto en bytes.
- Las lagunas predeterminadas están prohibidas.
Casos de prueba
1 -> 2
2 -> 7
5 -> 23
9 -> 68
10 -> 70
20 -> 211
1235 -> 150623
93825 -> 114252161
code-golf
number
base-conversion
Ian H.
fuente
fuente
+n%2+1
agrega el bit binario más a la derecha más 1 al valor de retorno,n/2
desplaza a la derechan
en 1 bit binario,3*f(n/2)
agrega recursivamente 3 veces este cálculo en esos bits desplazados a la derecha yn and
finaliza la recursión cuandon
es 0JavaScript (Node.js) , 23 bytes
Pruébalo en línea!
fuente
x>>1
es lo mismo quex/2
no?Infinity
en JS ... Pruébalo en línea. (Es posible que desee agregar un enlace TIO a su respuesta, I4m2 )1>>1=0
while1/2=0.5
n/2
funciona en esa, y la razón por la que lo sugerí aquí.Java (JDK 10) , 44 bytes
Pruébalo en línea!
fuente
-~
vez ayudará?long
? :) Y aquí pensé que mi enfoque de secuencia era inteligente ... Lo expulsaste del parque en menos de 5 minutos ...>.>: '(Jalea , 4 bytes
Pruébalo en línea!
fuente
J , 7 bytes
Pruébalo en línea!
¡Gracias Galen Ivanov por -4 bytes! Realmente necesito mejorar mi habilidad de golf J ...
fuente
3#.1+#:
TIO: 0
.R ,
5543 bytesPruébalo en línea!
Utiliza el truco de conversión base estándar en R, incrementos, y luego usa un producto de puntos con potencias
3
para convertir de nuevo a un entero.¡Gracias a @ user2390246 por dejar caer 12 bytes!
fuente
05AB1E , 5 bytes
Pruébalo en línea!
05AB1E , 5 bytes
Pruébalo en línea!
fuente
S
que funciona para€
también.Java 10,
8152 bytes (conversión base)Pruébalo en línea.
-29 bytes gracias a @Holger .
Explicación:
Java 10,
171167151150149 bytes (secuencia)-16 bytes gracias a @ musicman523 , cambiando
(int)Math.pow(2,t)
a(1<<t)
.-1 byte gracias a @Holger , cambiando
(int)(Math.log(n)/Math.log(2))
a31-n.numberOfLeadingZeros(n)
.Pruébalo en línea.
Explicación:
Cuando miramos la secuencia:
Podemos ver múltiples subsecuencias:
Entonces la secuencia que se pregunta es:
Soy un asco para encontrar patrones, así que estoy orgulloso de lo que encontré arriba ... Dicho esto, @ user202729 encontró un enfoque mejor y más corto en Java en unos pocos minutos ...: '(
fuente
n.toString(n,2).getBytes()
... Creo que la conversión manual puede ser más corta.long
y noint
?(int)Math.pow(2,t)
por1<<t
... y luego en línea esa expresión y soltar la variable i ( 152 bytes )31-Integer.numberOfLeadingZeros(n)
lugar de(int)(Math.log(n)/Math.log(2))
, pero no es más corto. A menos que lo useimport static
en el encabezado, lo que podría extender las reglas demasiado.n -> n.toString(n,2).chars().reduce(0,(r,c)->r*3+c-47)
APL (Dyalog) , 10 bytes
Pruébalo en línea!
fuente
Brachylog , 7 bytes
Pruébalo en línea!
Explicación
No es que realmente necesites uno, pero ...
fuente
Rubí , 27 bytes
Pruébalo en línea!
fuente
Python 2 ,
5655 bytesPruébalo en línea!
fuente
Adjunto , 19 bytes
Pruébalo en línea!
Esta es una composición de tres funciones:
FromBase&3
1&`+
Bin
Este primero se convierte en binario (
Bin
), lo incrementa (1&`+
), luego se convierte en ternario (FromBase&3
).Alternativas
Sin puntos, 21 bytes:
{FromBase[Bin!_+1,3]}
Sin incorporaciones, 57 bytes:
Sum@{_*3^(#_-Iota!_-1)}@{If[_>0,$[_/2|Floor]'(1+_%2),[]]}
fuente
Retina 0.8.2 , 36 bytes
Pruébalo en línea! Explicación:
Convierte de decimal a unario.
Repetidamente divmod por 2, y agregue 1 al resultado del módulo.
Agregue 1 al primer dígito también.
Convierta de base codificada unaria 3 a unaria.
Convierte a decimal.
fuente
Japt , 6 bytes
Toma la entrada como un número, emite un número.
Pruébalo en línea!
fuente
MATL ,
1276 bytesPruébalo en línea!
Guardado 5 bytes gracias a Giuseppe y otro gracias a Luis Mendo.
Antigua respuesta de 7 bytes:
Pruébalo en línea!
Explicación:
El anterior para 12 bytes:
Pruébalo en línea!
Oh, eso fue desordenado ... Así es esto: `BQ3GBn: q ^! Y *.
Explicación:
fuente
C # (compilador de Visual C #) , 128 bytes
Pruébalo en línea!
Estoy contando
System
porque usoConvert
yMath
.fuente
z
variable. También en el cuerpo de expresión que podría deshacerse de los{
,}
yreturn
declaraciones. Entonces algo como eston=>Convert.ToString(n,2).Reverse().Select((x,i)=>(x-47)*Math.Pow(3,i)).Sum();
Python 2 ,
5654 bytesPruébalo en línea!
fuente
C,
3227 bytesBasado en la respuesta Java de user202729 . Pruébelo en línea aquí . Gracias a Kevin Cruijssen por jugar al golf 5 bytes.
Versión sin golf:
fuente
return
conx=
e invirtiendo el ternario para!
que ya no sea necesario:n(x){x=x?x%2+1+3*n(x/2):0;}
Casco , 5 bytes
Pruébalo en línea!
Explicación
fuente
Octava con la caja de herramientas de comunicación,
3332 bytesPruébalo en línea!
Convierte la entrada en un vector binario usando
de2bi
e incrementando todos los números. Hace la multiplicación de matrices con un vector vertical de 3 elevado a las potencias apropiadas:1, 3, 9, ...
obteniendo así la suma sin una llamada explícita asum
.fuente
@(x)base2dec(de2bi(x)+49,3)
por 27 (una rara ocasión en la que MATLAB es más indulgente que Octave)PHP,
8464 bytesPruébalo en línea !!
Código ORIGINAL
Pruébalo en línea !!
Gracias a Cristoph , menos bytes si se ejecuta con php -R
Explicación
fuente
strtr
<?="Will do!!"
CJam , 8 bytes
Pruébalo en línea!
Explicación
fuente
:)
...Espacio en blanco , 117 bytes
Se agregaron letras
S
(espacio),T
(tabulación) yN
(nueva línea) solo como resaltado.[..._some_action]
agregado solo como explicación.Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Explicación en pseudocódigo:
Primero convertí la función recursiva
int f(int n){return n<1?0:n%2+1+3*f(n/2);}
a su forma iterativa (en pseudocódigo):Y luego implementé este enfoque iterativo en el espacio en blanco del lenguaje basado en la pila, usando su pila predeterminada.
Ejecuciones de ejemplo:
Entrada:
1
Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Se detiene con error: Salida no definida.
Entrada:
4
Pruébelo en línea (solo con espacios en bruto, pestañas y nuevas líneas).
Se detiene con error: Salida no definida.
fuente
n < 1
verificación presionando los valores hasta que n sea 0 y luego explotándolos hasta que alcance su valor límite (0). La profundidad de la pila no necesita almacenarse explícitamente y ni siquiera debería ser necesario intercambiar (si quiere decir intercambiar los dos valores superiores como en lisp)n < 1
(on == 0
) ESTÁ presionando los valores hasta quen
es 0 ... O estoy malinterpretando algo aquí ...: S " La profundidad de la pila no necesita ser almacenada explícitamente " En Java sí, de lo contrario no puedo crear la matriz. Podría haber usado unjava.util.Stack
en su lugar, pero solo usé una matriz para hacerlo menos detallado. En el espacio en blanco, la pila es de tamaño indefinido.Brain-Flak , 74 bytes
Pruébalo en línea!
Versión "legible"
fuente
Añadir ++ , 14 bytes
Pruébalo en línea!
fuente
Japt , 7 bytes
Pruébalo aquí
fuente
Haskell , 32 bytes
Pruébalo en línea!
fuente
Perl 5 , 36 bytes
Pruébalo en línea!
fuente
Pyth, 8
¿Cómo eliminar el espacio y hacer
Q
implícito?Pyth en línea .
fuente
Q
implícito? No creo que puedas.