Desafio:
Conte o número de unidades 1
na representação binária de todos os números entre um intervalo.
Entrada :
Dois inteiros positivos não decimais
Saída:
A soma de todos os 1
s no intervalo entre os dois números.
Exemplo:
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
Eu expliquei apenas o primeiro exemplo, caso contrário, ele ocuparia uma quantidade enorme de espaço se tentasse explicar para todos eles.
Nota :
- Os números podem ser separados em mais de 1000
- Toda entrada será válida.
- A saída mínima será uma.
- Você pode aceitar o número como uma matriz de dois elementos.
- Você pode escolher como os números são ordenados.
Critérios de vitória:
Este é o código-golfe, pelo que o código mais curto em bytes para cada idioma vence.
IntRange
no Kotlin,Range
no Ruby)?1000 - 2000
produz 5938, mas abaixar o caso em 1000, o resultado também cai em 1000:0-1000 = 4938
. ProvaRespostas:
JavaScript (ES6), 38 bytes
Recebe entrada na sintaxe de currying
(a)(b)
.Experimente online!
Comentado
fonte
Python 2 , 47 bytes
Experimente online!
fonte
>=
...Java (JDK 10) , 55 bytes
Experimente online!
fonte
IntStream.range(a,b+1).map(Integer::bitCount).sum()
a->b->java.util.stream.IntStream.range(a,b+1).map(Integer::bitCount).sum()
, são 74 bytes inteiros. Mesmo se a importação não era obrigatória, os parâmetros são, por isso, teria que escrevera->b->IntStream.range(a,b+1).map(Integer::bitCount).sum()
, que conta como 57 bytesa->b->IntStream.range(a,b+1).map(Long::bitCount).sum()
uma melhoria de 1 byte. Marginal, mas ainda assim.a->b->java.util.stream.IntStream.range(a,b+1).map(Long::bitCount).sum()
(71 bytes).05AB1E , 4 bytes
Experimente online!
fonte
Python 2 , 45 bytes
Experimente online!
fonte
MATL ,
54 bytesExperimente online!
Obrigado a Luis Mendo por salvar um byte!
fonte
R ,
4134 bytesExperimente online!
Fortemente inspirado pela outra solução R da ngm . Isso usa uma abordagem diferente após a conversão em bits. Muito obrigado a Giuseppe por sugerir uma solução possível de 34 bytes.
fonte
sum
criei ), mas há uma conversão mais complicada em um vetor mable - postarei se você / ngm não conseguir encontrá-lo.sd
evar
coagiram tudo o que podiam para dobrar.pryr::f
para salvar 4 bytes: tio.run/##K/qfZvu/…Gelatina , 4 bytes
Experimente online!
Explicação
fonte
Pitão ,
87 bytes1 byte graças ao Sr. Xcoder.
Experimente online!
fonte
APL (Dyalog Unicode) , 16 bytes
Experimente online!
-1 graças a H.PWiz .
Argumento esquerdo = min
Argumento direito = max
fonte
Python 3 ,
565452 bytesIsso pode ser jogado mais imo.-2 bytes graças ao Mr.Xcoder -2 bytes adicional graças ao MI WrightExperimente online!
fonte
Stax , 6 bytes
Execute e depure
fonte
Bash + utilitários comuns, 50
Experimente online!
Converter números inteiros em seqüências binárias é sempre um pouco trabalhoso. A abordagem aqui é um pouco diferente - converta os números inteiros em octal e substitua cada dígito octal pelo número de 1s binários que ele contém. Então podemos somar todos os dígitos convertidos
fonte
APL + WIN,
3326 bytesSolicita o vetor de números inteiros:
Experimente online! Cortesia de Dalog Classic
Explicação:
fonte
R ,
44 4037 bytesExperimente online!
Anteriormente:
fonte
Oitava com caixa de ferramentas Comunicação, 21 bytes
Experimente online!
O código deve ser bastante óbvio. Número de elementos diferentes de zero na representação binária de cada um dos números no intervalo.
Isso seria
@(a,b)nnz(dec2bin(a:b)-48)
sem a caixa de ferramentas de comunicação.fonte
Casca , 4 bytes
Experimente online!
Explicação
fonte
Ruby , 38 bytes
Experimente online!
fonte
PHP, 97 bytes
(com certeza isso pode ser reduzido, mas você deseja usar as funções)
Experimente online
Código
Explicação
fonte
$argv[0]
é o nome do programa ou "-"; Você deve trabalhar com$argv[1]
e$argv[2]
. E você pode usar emjoin
vez deimplode
reduzi-lo para 68 bytes:<?=substr_count(join(array_map(decbin,range($argv[1],$argv[2]))),1);
PowerShell , 72 bytes
Experimente online!
Longo por causa da conversão para binário
[convert]::ToString($_,2)
e se livrar dos zeros-replace0
. Caso contrário, apenas pegamos os números de entrada, fazemos um intervalo$x..$y
e, para cada número no intervalo, o convertemos em binário, removemos os zeros, pegamos o.length
mesmo (ou seja, o número restante) e o adicionamos ao nosso$o
resultado.fonte
count
insteadlength
:)count
will always be1
because we're counting thelength
of a string, not an array.-replace0
é inteligente.Haskell , 42 bytes
Experimente online!
fonte
Pip , 10 bytes
Experimente online!
Explicação
fonte
Próton ,
4037 bytesExperimente online!
fonte
Carvão , 10 bytes
Experimente online! Link é a versão detalhada do código. Explicação:
fonte
Brachylog, 8 bytes
Try it online!
Explanation
fonte
Bash + coreutils,
3832 bytesThanks to @Cowsquack for golfing off 6 bytes!
Try it online!
fonte
seq -f2o%fp $*|dc|tr -cd 1|wc -c
K (ngn/k),
1913 bytesTry it online!
{
}
is a function with argumentsx
andy
!1+y
is the list 0 1 ... yx_
drops the first x elements2\
encodes each int as a list of binary digits of the same length (this is specific to ngn/k)+/
sum+//
sum until convergence; in this case sum of the sum of all binary digit listsfonte
Perl 6,
3230 bytes-1 bytes thanks to Brad Gillbert
Try it online!
Explanation:
fonte
[...](@_)
instead of($^a..$^b)
J,
16, 1514 bytes1 byte saved thanks to FrownyFrog!
Try it online!
Explanation:
A dyadic verb, the left argument is the lower bound
m
of the range, the right one - the uppern
.fonte
}.
but always in a fork and not in a hook. Thanks!QBasic,
95938382 bytes@DLosc saved me
somea lot of bytes!Saved another byte using this technique!
Language of the Month FTW!
Explanation
Last testcase of 1000 to 2000 actually works, in QBasic 4.5 running on Dosbox:
fonte