Entrada
La entrada es un solo entero positivo n
Salida
La salida está n
con su bit más significativo establecido en 0
.
Casos de prueba
1 -> 0
2 -> 0
10 -> 2
16 -> 0
100 -> 36
267 -> 11
350 -> 94
500 -> 244
Por ejemplo: 350
en binario es 101011110
. Establecer su bit más significativo (es decir, el 1
bit más a la izquierda ) para 0
convertirlo en un 001011110
equivalente al entero decimal 94
, la salida. Este es OEIS A053645 .
10
obviamente da0
: DRespuestas:
C (gcc) ,
49444039 bytesPruébalo en línea!
fuente
i<=n
con eln/i
de -1 bytes. Este no es mi golf, alguien más trató de editarlo en su publicación, pero lo revertí porque las ediciones para publicaciones de golf no se aceptan de acuerdo con las reglas de nuestra comunidad.Python 2 , 27 bytes
Pruébalo en línea!
26 bytes
Desafortunadamente, esto no funciona para
1
:Pruébalo en línea!
fuente
05AB1E , 5 bytes
Pruébalo en línea!
Extracción del bit más significativo de un número entero N es equivalente a encontrar la distancia desde N a la potencia entera más alta de 2 menor que N .
Por lo tanto, utilicé la fórmula N - 2 piso (log 2 N) :
.²
- Logaritmo con base 2 .ó
- Piso a un entero.o
- 2 elevado a la potencia del resultado anterior.-
- Diferenciafuente
b¦C
también funciona ... ¿no? Convertir a binario, MSB siempre está en el índice 1, eliminar MSB, volver a convertir.1
!Jalea , 3 bytes
Pruébalo en línea!
Explicación
fuente
Ḅ
yḊ
puntos de código de dos bytes? Esto cambiaría el tamaño total a 5 bytes.C (gcc) - 59 bytes
Esta respuesta de gcc usa solo operaciones enteras de bit a bit y aritméticas. No hay logaritmos aquí! Puede tener problemas con una entrada de 0 y es totalmente no portátil.
Es mi primera respuesta en este sitio, por lo que me encantaría recibir comentarios y mejoras. Me divertí mucho aprendiendo expresiones bit a bit.
fuente
main
, una función es una presentación válida . Cambiar esto en una función y tomar la entrada como argumento para dicha función ahorra 18 bytes .MATL ,
86 bytesPruébalo en línea!
Guardado dos bytes gracias a Cinaski. Cambiar a la indexación de asignación en lugar de la indexación de referencia fue 2 bytes más corto :)
Explicación:
fuente
4L
lugar de hacerlo[2J]
. Otra diversión de 6 bytes:tZlcW-
(solo funciona en MATLAB, no en TIO / Octave)Java (OpenJDK 8) , 23 bytes
Pruébalo en línea!
Lo sentimos, incorporado: - /
fuente
n->n^1<<(int)Math.log2(n)
funcionará y es probable que sea más corto que 38 bytes. Era mi segunda idea (aún no probada), si lahighestOneBit
que no funcionaba correctamente. Por curiosidad, ¿cuál fue su solución?n->n^1<<(int)(Math.log(n)/Math.log(2))
porqueMath.log2
no existe en Java. ; P OnlyMath.log
,Math.log10
yMath.loglp
están disponibles.Math.log2
hecho no existe ... Lo malo. ¿Ver?highestOneBit
Existe un buen método ( ) pero no otro (Math.log2
). Java es raro ;-)Casco , 3 bytes
Pruébalo en línea!
Explicación:
fuente
Ohm v2 , 3 bytes
Pruébalo en línea!
fuente
Python 2 , 27 bytes
Pruébalo en línea!
Explicación
fuente
2**len(bin(n))/8
también se puede deletrear1<<len(bin(n))-3
, y luego funcionará en 2 y 3 (sin bytes guardados / agregados).Python 3 , 30 bytes
-8 bytes gracias a caird coinheringaahing. Escribí eso de memoria. : o
Pruébalo en línea!
fuente
lambda n:int(bin(n)[3:],2)
?Mathematica, 37 bytes
Pruébalo en línea!
fuente
JavaScript,
2220 bytesGuardado 2 bytes gracias a ovs
Pruébalo en línea!
Otro enfoque, 32 bytes
Pruébalo en línea!
fuente
.slice`1`^0
cuándo.slice(1)^0
funcionaría igual de bien, jajaJ, 6 bytes
Bastante simple.
Explicación
fuente
APL (Dyalog) , 10 bytes
Función de prefijo tácito.
Pruébalo en línea!
2∘⊥
... decodificar desde base-2 ......
⍣¯1
negativo una vez (es decir, codificar en base-2)1↓
suelta el primer bit2⊥
decodificar desde la base-2fuente
Rubí, 26 bytes
-7 Bytes gracias a Ventero. -2 Bytes gracias a historicrat.
fuente
->n{n.to_s(2)[1..-1].to_i 2}
->n{/./=~'%b'%n;$'.to_i 2}
C (gcc), 38 bytes
Incorporado en gcc utilizado.
fuente
31-
con~
debería guardar dos bytes.Ensamblaje ARM,
4643 bytes(Puede omitir el registro de destino en agregar cuando sea igual que la fuente)
fuente
shr
/shl
/ret
y quiere algo comolsr
/lsl
/bx lr
.Pyth, 5 bytes
Banco de pruebas.
Explicación:
fuente
Alice , 8 bytes
Pruébalo en línea!
Explicación
fuente
Japt , 6 bytes
Pruébalo en línea!
Explicación
Si la entrada
1
puede fallar: 4 bytesPruébalo en línea!
Explicación : obtenga la entrada binary (
¢
), corte el primer char (Å
), analice como binary nuevamente en un número (n2
).fuente
Octava , 20 bytes
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , 9 bytes
Pruébalo en línea!
-1 byte gracias a Adam
fuente
⊢-2*∘⌊2⍟⊢
guarda un byte.CJam , 7 bytes
Pruébalo en línea!
Explicación:
Reutilice el MSB (que siempre es 1) para evitar tener que eliminarlo; el equivalente sin ese truco sería
{2b1>2b}
o{2b(;2b}
.fuente
Retina ,
1513 bytesPruébalo en línea!
Entrada y salida en unario (el conjunto de pruebas incluye conversión de y a decimal por conveniencia).
Explicación
Esto es bastante fácil de hacer en unario. Todo lo que queremos hacer es eliminar la mayor potencia de 2 de la entrada. Podemos igualar una potencia de 2 con algunas referencias hacia adelante. En realidad, es más fácil hacer coincidir los valores de la forma 2 n -1 , así que haremos eso y combinaremos uno 1 por separado:
El grupo
1
coincide con un sencillo1
al principio para comenzar, o coincide con el doble de lo que hizo en la última iteración. Entonces coincide1
, entonces2
,4
y así sucesivamente. Dado que estos se suman, siempre tenemos una potencia de 2, que solucionamos con1
el final.Debido al avance de línea final, la coincidencia simplemente se elimina de la entrada.
fuente
R , 28 bytes
Pruébalo en línea!
Es más fácil calcular el bit más significativo a través
2 ^ floor(log2(x))
de conversiones de base en lugar de realizarlas, que son bastante detalladas en Rfuente
PARI / GP, 18 bytes
Solución alternativa:
fuente
n->n-2^logint(n,2)
? El segundo no es compatible con mi versión de PARI / GP, ni en la versión utilizada por tio.run . ¿Es esa una nueva función?exponent
se agregó hace 5 días, en comparación con este desafío que se agregó ayer. :)Haskell ,
3229 bytesPruébalo en línea!
-3 bytes gracias a @Laikoni
Solución anterior, 32 bytes
Pruébalo en línea!
fuente
f=
la primera variante. Ademász<-2*y=x!z
guarda un byte: ¡ Pruébelo en línea!Excel, 20 bytes
fuente
Excel,
3631 bytes-5
bytes gracias a @ IanM_Matrix1Nada interesante.
fuente