O desafio
Dada uma entrada inteira em x
que 1 <= x <= 255
, retorne os resultados de potências de dois que, quando somadas, dão x
.
Exemplos
Dada a entrada:
86
Seu programa deve gerar:
64 16 4 2
Entrada:
240
Saída:
128 64 32 16
Entrada:
1
Saída:
1
Entrada:
64
Saída:
64
A saída pode conter zeros se a potência de dois não estiver presente na soma.
Por exemplo, a entrada 65
pode ser emitida 0 64 0 0 0 0 0 1
.
Pontuação
Isso é código-golfe , então a resposta mais curta em cada idioma vence.
code-golf
binary
code-golf
sequence
integer
chess
code-golf
number
arithmetic
matrix
code-golf
code-golf
combinatorics
grid
set-partitions
code-golf
array-manipulation
graph-theory
code-golf
number
code-golf
string
decision-problem
code-golf
matrix
cellular-automata
3d
code-challenge
restricted-source
printable-ascii
code-golf
board-game
code-golf
geometry
grid
code-golf
word-puzzle
code-golf
matrix
sorting
code-golf
code-golf
string
decision-problem
code-golf
matrix
cellular-automata
code-golf
decision-problem
code-golf
math
number
arithmetic
restricted-source
code-golf
code-golf
number
integer
matrix
code-golf
date
code-golf
matrix
code-golf
sequence
combinatorics
chemistry
code-golf
array-manipulation
popularity-contest
code-golf
code-golf
natural-language
code-golf
number
integer
sorting
substitution
code-golf
string
number
date
encode
code-golf
decision-problem
code-golf
string
subsequence
code-golf
string
alphabet
code-golf
SpookyGengar
fonte
fonte
Respostas:
JavaScript (ES6), 28 bytes
Experimente online!
fonte
f=n=>n&&f(n&~-n)+[,n&-n]
.Pure Bash , 20
Experimente online!
Explicação
fonte
Gelatina , 4 bytes
-2, pois podemos gerar zeros no lugar de potências não utilizadas de 2 :)
Experimente online!
Quão?
fonte
Gelatina , 6 bytes
Experimente online!
Explicação
MAS aqui está uma explicação (nota: eu assumi que só podemos produzir os poderes de 2 e nada mais):
"Prova" de que funciona corretamente. A representação padrão de um número inteiroX na base 2 é uma lista {x1,x2,x3,⋯,xn} , em que xi∈{0,1},∀i∈1,n¯¯¯¯¯¯¯¯ , de modo que:
X= ∑i = 1nxEu⋅ 2n - i
Os índicesEu modo quexEu= 0 obviamente não têm contribuição, portanto, estamos interessados apenas em encontrar aqueles quexEu= 1 . Como subtrairEu den não é conveniente (todos os poderes de dois têm expoentes da forman - i , ondeEu é qualquer índice de um1 ), em vez de encontrar os índices verdadeiros nesta lista, nós o revertemos e depois os encontramos "para trás" com 2 para esses poderes.
UT
. Agora que encontramos os índices corretos, tudo o que precisamos fazer é aumentarfonte
’
lá ...BUT2*H
que funcionaria embora.Python , 35 bytes
Little-endian com zeros com potências não utilizadas de 2.
Experimente online!
fonte
APL (Dyalog Extended) , 7 bytes SBCS
Função de prefixo tácito anônimo. Requer indexação baseada em 0 (
⎕IO←0
).Experimente online!
2
dois*
elevado à potência de⍸
os Ɩ ndices onde a verdadeira⍢
enquanto⌽
invertida da representação binária⍤
⊤
fonte
Marreta 0.2, 3 bytes
Descomprime em
{intLiteral[2],call[NumberExpand,2]}
.O Sledgehammer é um compressor para o código da Wolfram Language usando o Braille como uma página de código. O tamanho real das opções acima é de 2,75 bytes, mas devido às regras atuais da meta, o preenchimento do byte mais próximo é contado no tamanho do código.
fonte
05AB1E , 3 bytes
Porto de @JonathanAllan resposta Jelly , por isso não deixe de votar nele!
Contém zeros (incluindo cargas de zeros à direita).
Experimente online ou verifique todos os casos de teste .
Explicação:
fonte
bitwise and
usado em osabie. Agradável.&
. XD Eu usei o Bitwise-XOR algumas vezes, como aqui ou aqui e o Bitwise-NOT uma vez aqui (que depois removi novamente depois de jogar mais ..). Eu uso Bitwise-AND, XOR, OR, NOT, SHIFT, etc. com bastante frequência em Java, mas em 05AB1E não tanto. :)Catholicon , 3 bytes
Experimente online!
Explicação:
fonte
Wolfram Language (Mathematica) , 17 bytes
Experimente online!
O Mathematica ataca novamente.
fonte
R ,
2723 bytesExperimente online!
Código desenrolado e explicação:
fonte
C # (compilador interativo do Visual C #) , 29 bytes
Contém 5 caracteres não imprimíveis.
Explicação
Experimente online!
fonte
n=>new int[8].Select((j,i)=>1<<i&n).Where(i=>i!=0)
A parte anteriorWhere
é cinco bytes mais curta btwThe output may contain zeros
n=>new int[8].Select((j,i)=>1<<i&n)
tem 35 bytes e não precisaremos de sinalizadores e codificações de texto adicionais.n=>"INSERT ASCII HERE".Select(a=>1<<a&n)
mas eu estou em um dispositivo móvel que não pode exibir ou digitar não imprimíveis, então terei que esperar até chegar em casa para atualizar a respostaC # (compilador interativo do Visual C #) , 38 bytes
Experimente online!
fonte
1
,2
,4
,8
,16
, etc (ox>y
deve serx>=y
em vez disso)./u:System.Linq.Enumerable
e tentar fazer isso por 31 bytes/u:System.Linq.Enumerable
": PC (gcc) , 39 bytes
Experimente online!
fonte
05AB1E, 7 bytes
explicação:
Experimente online!
fonte
Haskell , 29 bytes
Experimente online!
fonte
Ruby , 25 bytes
Experimente online!
fonte
C (clang) ,
1331106358 bytesSolução de 58 bytes graças a @ceilingcat .
Experimente online!
fonte
main(){}
e o tipo de retorno assume como padrão int. O mesmo para variáveis no escopo global. Além disso, pelo menos em implementações normais como clang, printf e scanf funcionam sem protótipos. Você recebe avisos, é claro, mas ainda é válido o C89 (talvez) ou pelo menos o K&R C para que eles sejam declarados implicitamente. Os tipos dos objetos C que você passa como args definem como eles são passados, portanto, achar*
eint*
funcionará apenas sem truncar ponteiros para 32 bits no x86-64 ou algo assim. (As promoções de argumento padrão acontecem, o mesmo que para as funções variáveis que são de qualquer maneira.)&
a bit para verificar se um pouco está definido. Likey&(1<<x)&&printf("%d ",1<<x);
. Ou para não pular zeros, apenasprintf("%d ", y&(1<<x))
. Ou, em vez de contar as posições dos bits, usex=256
ex>>=1
para mudar a máscara.main(y){int x=256;for(scanf("%d",&y);x>>=1;)printf("%d ",y&x);}
63 bytes Experimente online! clang até compilar isso com-std=c11
MATL , 5 bytes
Experimente online!
Explicação
Considere a entrada
86
como um exemplo.fonte
Perl 6 ,
1612 bytes-4 bytes graças a Jonathan Allan
Experimente online!
Retorna uma junção total com 8 elementos. Esta é uma maneira bastante não-padrão de retornar, mas geralmente, as junções podem atuar como listas ordenadas (pelo menos até a implementação do autotreading) e é possível extrair os valores de uma.
Explicação:
fonte
Japonês,
85 bytesTente
Alternativo
Sugerido por Oliver para evitar os
0
s na saída usando a-mf
flag.Tente
fonte
N&2pU
com-mf
para evitar o0
s05AB1E , 9 bytes
Experimente online!
Isso também é correto para 6 bytes, mas não é concluído a tempo no TIO para 86:
05AB1E , 6 bytes
Experimente online!
fonte
15
, em vez de[1,2,4,8]
2**0
, boa captura.Ý
acabouL
.L
vez deÝ
primeiro na minha resposta.Julia 0.6 , 13 bytes
Experimente online!
fonte
CJam , 12 bytes
Experimente online!
fonte
K (oK) ,
1916 bytes-3 bytes graças a ngn!
Experimente online!
oK não tem
power
operador, por isso preciso de uma função auxiliar{*/x#2}
(copie 2x
vezes e reduza a lista resultante por multiplicação)fonte
{
x}
Alquimista , 125 bytes
Experimente online! ou Teste todas as entradas!
Explicação
fonte
PHP ,
4139 bytesExperimente online!
Ou 38 sem
>>=
operador divertido e PHP 5.6+:Ou 36 com saída little-endian ("0 2 4 0 16 0 64 0"):
Na verdade, eu só queria usar o
>>=
operador, então estou aderindo ao 39 .Testes:
fonte
TSQL,
4339 bytesNão é possível encontrar uma solução mais curta, então aqui está um loop padrão. -4 bytes graças a MickyT e KirillL
Experimente
fonte
,@ int=128s:print @y&@ set @/=2IF @>0GOTO s
. Isso é sugerido por @KirillL para a resposta RPython 2 ,
4340 bytesExperimente online!
fonte
C # (compilador interativo do Visual C #), 33 bytes
Porta da resposta JavaScript (ES6) de @Arnauld , por isso, certifique-se de que o vota!
Experimente online.
Explicação:
fonte