Desafío :
Cuente el número de unidades 1
en la representación binaria de todos los números entre un rango.
Entrada:
Dos enteros positivos no decimales
Salida:
La suma de todas las 1
s en el rango entre los dos números.
Ejemplo:
4 , 7 ---> 8
4 = 100 (adds one) = 1
5 = 101 (adds two) = 3
6 = 110 (adds two) = 5
7 = 111 (adds three) = 8
10 , 20 ---> 27
100 , 200 ---> 419
1 , 3 ---> 4
1 , 2 ---> 2
1000, 2000 ---> 5938
Solo he explicado el primer ejemplo; de lo contrario, habría ocupado una gran cantidad de espacio si hubiera intentado explicarlo a todos.
Nota :
- Los números pueden estar separados por más de 1000
- Toda entrada será válida.
- El resultado mínimo será uno.
- Puede aceptar el número como una matriz de dos elementos.
- Puedes elegir cómo se ordenan los números.
Criterios ganadores:
Este es el código de golf, por lo que gana el código más corto en bytes para cada idioma.
IntRange
en Kotlin,Range
en Ruby)?1000 - 2000
rinde 5938, pero menor el caso de 1000, el resultado también se reduce en 1000:0-1000 = 4938
. PruebaRespuestas:
JavaScript (ES6), 38 bytes
Toma entrada en la sintaxis de curry
(a)(b)
.Pruébalo en línea!
Comentado
fuente
Python 2 , 47 bytes
Pruébalo en línea!
fuente
>=
...Java (JDK 10) , 55 bytes
Pruébalo en línea!
fuente
IntStream.range(a,b+1).map(Integer::bitCount).sum()
a->b->java.util.stream.IntStream.range(a,b+1).map(Integer::bitCount).sum()
, es para un total de 74 bytes. Incluso si la importación no fuera obligatoria, los parámetros sí lo son, por lo que tendríamos que escribira->b->IntStream.range(a,b+1).map(Integer::bitCount).sum()
, que cuenta como 57 bytesa->b->IntStream.range(a,b+1).map(Long::bitCount).sum()
una mejora de 1 byte. Marginal, pero sigue siendo uno.a->b->java.util.stream.IntStream.range(a,b+1).map(Long::bitCount).sum()
(71 bytes).05AB1E , 4 bytes
Pruébalo en línea!
fuente
Python 2 , 45 bytes
Pruébalo en línea!
fuente
MATL ,
54 bytesPruébalo en línea!
¡Gracias a Luis Mendo por salvar un byte!
fuente
R ,
4134 bytesPruébalo en línea!
Muy inspirado por la otra solución R de ngm . Esto utiliza un enfoque diferente después de la conversión a bits. Muchas gracias a Giuseppe por insinuar una posible solución de 34 bytes.
fuente
sum
vector mable: publicaré si usted / ngm no puede encontrarlo.sd
yvar
coaccionó todo lo que pudieron para duplicar.pryr::f
para guardar 4 bytes: tio.run/##K/qfZvu/…Jalea , 4 bytes
Pruébalo en línea!
Explicación
fuente
Pyth ,
87 bytes1 byte gracias al Sr. Xcoder.
Pruébalo en línea!
fuente
APL (Dyalog Unicode) , 16 bytes
Pruébalo en línea!
-1 gracias a H.PWiz .
Argumento izquierdo = min
Argumento derecho = max
fuente
Python 3 ,
565452 bytesEsto se puede jugar más imo.-2 Bytes gracias a Mr.Xcoder -2 Más bytes gracias a MI WrightPruébalo en línea!
fuente
Stax , 6 bytes
Ejecutar y depurarlo
fuente
Bash + utilidades comunes, 50
Pruébalo en línea!
Convertir enteros en cadenas binarias siempre es un poco doloroso en bash. El enfoque aquí es ligeramente diferente: convierta los enteros en octal, luego reemplace cada dígito octal con el número de 1 binarios que contiene. Entonces podemos sumar todos los dígitos convertidos
fuente
APL + WIN,
3326 bytesIndicaciones para el vector de enteros:
Pruébalo en línea! Cortesía de Dalog Classic.
Explicación:
fuente
R ,
44 4037 bytesPruébalo en línea!
Previamente:
fuente
Octava con caja de herramientas de comunicación, 21 bytes
Pruébalo en línea!
El código debería ser bastante obvio. Número de elementos distintos de cero en la representación binaria de cada uno de los números en el rango.
Esto sería
@(a,b)nnz(dec2bin(a:b)-48)
sin la caja de herramientas de comunicación.fuente
Casco , 4 bytes
Pruébalo en línea!
Explicación
fuente
Ruby , 38 bytes.
Pruébalo en línea!
fuente
PHP, 97 bytes
(seguro que esto se puede acortar, pero quería usar las funciones)
Pruébalo en línea
Código
Explicación
fuente
$argv[0]
es el nombre del programa o "-"; Deberías trabajar con$argv[1]
y$argv[2]
. Y puede usar enjoin
lugar deimplode
acortar esto a 68 bytes:<?=substr_count(join(array_map(decbin,range($argv[1],$argv[2]))),1);
PowerShell , 72 bytes
Pruébalo en línea!
Largo debido a la conversión a binario
[convert]::ToString($_,2)
y la eliminación de los ceros-replace0
. De lo contrario, solo tomamos los números de entrada, hacemos un rango$x..$y
y para cada número en el rango lo convertimos a binario, eliminamos los ceros, tomamos los.length
mismos (es decir, el número de unos restantes) y los agregamos a nuestro$o
resultado.fuente
count
en su lugarlength
:)count
siempre será1
porque estamos contando ellength
de una cadena, no una matriz.-replace0
es listo.Haskell , 42 bytes
Pruébalo en línea!
fuente
Pip , 10 bytes
Pruébalo en línea!
Explicación
fuente
Protón ,
4037 bytesPruébalo en línea!
fuente
Carbón de leña , 10 bytes
Pruébalo en línea! El enlace es a la versión detallada del código. Explicación:
fuente
Brachylog , 8 bytes
Pruébalo en línea!
Explicación
fuente
Bash + coreutils,
3832 bytes¡Gracias a @Cowsquack por jugar golf en 6 bytes!
Pruébalo en línea!
fuente
seq -f2o%fp $*|dc|tr -cd 1|wc -c
K (ngn / k) ,
1913 bytesPruébalo en línea!
{
}
es una función con argumentosx
yy
!1+y
es la lista 0 1 ... yx_
deja caer los primeros x elementos2\
codifica cada int como una lista de dígitos binarios de la misma longitud (esto es específico de ngn / k)+/
suma+//
suma hasta la convergencia; en este caso suma de la suma de todas las listas de dígitos binariosfuente
Perl 6 ,
3230 bytes-1 bytes gracias a Brad Gillbert
Pruébalo en línea!
Explicación:
fuente
[...](@_)
lugar de($^a..$^b)
J ,
16, 1514 bytes¡1 byte guardado gracias a FrownyFrog!
Pruébalo en línea!
Explicación:
Un verbo diádico, el argumento izquierdo es el límite inferior
m
del rango, el derecho, el superiorn
.fuente
}.
pero siempre en un tenedor y no en un gancho. ¡Gracias!QBasic,
95938382 bytes@DLosc me salvó
algunauna gran cantidad de bytes!¡Ahorré otro byte usando esta técnica !
Idioma del mes FTW!
Explicación
El último caso de prueba de 1000 a 2000 realmente funciona, en QBasic 4.5 que se ejecuta en Dosbox:
fuente