Wyzwanie
Biorąc pod uwagę liczbę całkowitą, w x
której 1 <= x <= 255
zwracane są wyniki potęg dwóch, które po zsumowaniu dają x
.
Przykłady
Biorąc pod uwagę wkład:
86
Twój program powinien wypisać:
64 16 4 2
Wkład:
240
Wydajność:
128 64 32 16
Wkład:
1
Wydajność:
1
Wkład:
64
Wydajność:
64
Dane wyjściowe mogą zawierać zera, jeśli pewna potęga dwóch nie jest obecna w sumie.
Na przykład dane wejściowe 65
mogą być generowane 0 64 0 0 0 0 0 1
.
Punktacja
To jest golf golfowy , więc wygrywa najkrótsza odpowiedź w każdym języku.
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
źródło
źródło
Odpowiedzi:
JavaScript (ES6), 28 bajtów
Wypróbuj online!
źródło
f=n=>n&&f(n&~-n)+[,n&-n]
.Pure Bash , 20
Wypróbuj online!
Wyjaśnienie
źródło
Galaretka , 4 bajty
-2, ponieważ możemy wyświetlać zera zamiast niewykorzystanych mocy 2 :)
Wypróbuj online!
W jaki sposób?
źródło
Galaretka , 6 bajtów
Wypróbuj online!
Wyjaśnienie
ALE tutaj jest wyjaśnienie (uwaga: założyłem, że możemy wydać moce samych 2 i nic więcej):
„Dowód”, że działa poprawnie. Standardowa reprezentacja liczby całkowitej w bazie 2 to lista , gdzie , tak, że: Wskaźniki takie, że oczywiście nie mają wpływu, więc interesujemy się tylko znajdowanie takich, że . Ponieważ odejmowanie od nie jest wygodne (wszystkie potęgi dwóch mają wykładniki postaci , gdzie jest dowolnym indeksemX {x1,x2,x3,⋯,xn} xi∈{0,1},∀i∈1,n¯¯¯¯¯¯¯¯ X=∑i=1nxi⋅2n−i i xi=0 xi=1 i n n−i i 1 ), zamiast znajdować prawdziwe wskaźniki na tej liście, odwracamy ją, a następnie znajdujemy za pomocą „wstecz” . Teraz, gdy znaleźliśmy prawidłowe wskaźniki, musimy tylko podnieść do tych mocy.22
UT
źródło
’
tam ...BUT2*H
zadziałałoby.Python , 35 bajtów
Little-endian z zerami przy niewykorzystanej mocy 2.
Wypróbuj online!
źródło
APL (Dyalog Extended) , 7 bajtów SBCS
Anonimowa ukryta funkcja prefiksu. Wymaga indeksowania opartego na 0 (
⎕IO←0
).Wypróbuj online!
2
dwa*
podniesione do potęgi⍸
z ɩ ndices gdzie prawda⍢
podczas⌽
odwróconej⍤
od⊤
reprezentacji binarnejźródło
Młot młotkowy 0,2, 3 bajty
Dekompresuje się na
{intLiteral[2],call[NumberExpand,2]}
.Sledgehammer to kompresor kodu języka Wolfram używającego brajla jako strony kodowej. Rzeczywisty rozmiar powyższego wynosi 2,75 bajtów, ale ze względu na obecne reguły dotyczące meta dopełnianie do najbliższego bajtu jest liczone jako rozmiar kodu.
źródło
05AB1E , 3 bajty
Port odpowiedzi galaretki @JonathanAllan , więc upewnij się, że go głosujesz!
Zawiera zera (w tym -loads-końcowe zera).
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
bitwise and
używanego w osabie. Niezłe.&
. XD Użyłem Bitwise-XOR kilka razy, jak tutaj lub tutaj, a Bitwise-NIE raz tutaj (którą później usunąłem po dalszym golfie ...). Używam Bitwise-AND, XOR, OR, NOT, SHIFT itp. Dość często w Javie, ale w 05AB1E nie bardzo. :)Catholicon , 3 bajty
Wypróbuj online!
Wyjaśnienie:
źródło
Wolfram Language (Mathematica) , 17 bajtów
Wypróbuj online!
Mathematica uderza ponownie.
źródło
R ,
2723 bajtówWypróbuj online!
Kod i objaśnienie:
źródło
C # (interaktywny kompilator Visual C #) , 29 bajtów
Zawiera 5 niedrukowalnych znaków.
Wyjaśnienie
Wypróbuj online!
źródło
n=>new int[8].Select((j,i)=>1<<i&n).Where(i=>i!=0)
poprzednia częśćWhere
jest o pięć bajtów krótsza btwThe output may contain zeros
n=>new int[8].Select((j,i)=>1<<i&n)
ma 35 bajtów i nie będziemy potrzebować dodatkowych flag i kodowania tekstu.n=>"INSERT ASCII HERE".Select(a=>1<<a&n)
Ale jestem na urządzeniu mobilnym, które nie może wyświetlać ani pisać druków, więc będę musiał poczekać, aż wrócę do domu, aby zaktualizować odpowiedźC # (interaktywny kompilator Visual C #) , 38 bajtów
Wypróbuj online!
źródło
1
,2
,4
,8
,16
, itd. (Thex>y
powinno byćx>=y
zamiast)./u:System.Linq.Enumerable
i wypróbować to przez 31 bajtów/u:System.Linq.Enumerable
”: PC (gcc) , 39 bajtów
Wypróbuj online!
źródło
05AB1E, 7 bajtów
wyjaśnienie:
Wypróbuj online!
źródło
Haskell , 29 bajtów
Wypróbuj online!
źródło
Ruby , 25 bajtów
Wypróbuj online!
źródło
C (brzęk) ,
1331106358 bajtów58-bajtowe rozwiązanie dzięki @ceilingcat .
Wypróbuj online!
źródło
main(){}
a domyślnym typem zwrotu jest int. To samo dotyczy zmiennych o zasięgu globalnym. Ponadto, przynajmniej w normalnych implementacjach, takich jak clang, printf i scanf, działają bez prototypów. Oczywiście otrzymujesz ostrzeżenia, ale nadal obowiązuje C89 (może) lub przynajmniej K&R C, aby można je było domyślnie zadeklarować. Typy obiektów C, które przekazujesz jako argumenty, określają sposób ich przekazywania, więcchar*
aint*
będzie działać bez obcinania wskaźników do 32-bitów na x86-64 lub cokolwiek innego. (Zdarzają się domyślne promocje argumentów, tak samo jak w przypadku funkcji variadic, którymi są i tak.)&
aby sprawdzić, czy bit jest ustawiony. Jaky&(1<<x)&&printf("%d ",1<<x);
. Lub, aby nie pomijać zer, po prostuprintf("%d ", y&(1<<x))
. Lub zamiast zliczać pozycje bitów, użyjx=256
i,x>>=1
aby przesunąć maskę.main(y){int x=256;for(scanf("%d",&y);x>>=1;)printf("%d ",y&x);}
63 bajty Wypróbuj online! clang nawet to skompiluje z-std=c11
MATL , 5 bajtów
Wypróbuj online!
Wyjaśnienie
Rozważ dane wejściowe
86
jako przykład.źródło
Perl 6 ,
1612 bajtów-4 bajty dzięki Jonathanowi Allanowi
Wypróbuj online!
Zwraca All Junction z 8 elementami. Jest to raczej niestandardowy sposób zwracania, ale generalnie Połączenia mogą działać zgodnie z kolejnością (przynajmniej do momentu wdrożenia automatycznego odczytu) list i możliwe jest wyodrębnienie z nich wartości.
Wyjaśnienie:
źródło
Japt,
85 bajtówSpróbuj
Alternatywny
Sugerowany przez Olivera, aby uniknąć
0
s na wyjściu za pomocą-mf
flagi.Spróbuj
źródło
N&2pU
z-mf
uniknąć0
s05AB1E , 9 bajtów
Wypróbuj online!
Jest to również poprawne w przypadku 6 bajtów, ale nie kończy się w czasie na TIO dla 86:
05AB1E , 6 bajtów
Wypróbuj online!
źródło
15
zamiast[1,2,4,8]
2**0
, niezły chwyt.Ý
ponadL
.L
zamiastÝ
na początku w mojej odpowiedzi.Julia 0.6 , 13 bajtów
Wypróbuj online!
źródło
CJam , 12 bajtów
Wypróbuj online!
źródło
K (oK) ,
1916 bajtów-3 bajty dzięki ngn!
Wypróbuj online!
OK nie ma
power
operatora, dlatego potrzebuję funkcji pomocnika{*/x#2}
(skopiuj 2x
razy i zmniejsz wynikową listę przez pomnożenie)źródło
{
x}
Alchemik , 125 bajtów
Wypróbuj online! lub Przetestuj każde wejście!
Wyjaśnienie
źródło
PHP ,
4139 bajtówWypróbuj online!
Lub 38 bez zabawnego
>>=
operatora i PHP 5.6+:Lub 36 z wyjściem little-endian („0 2 4 0 16 0 64 0”):
Naprawdę chciałem po prostu użyć
>>=
operatora, więc trzymam się 39 .Testy:
źródło
TSQL,
4339 bajtówNie mogę znaleźć krótszego fantazyjnego rozwiązania, więc oto standardowa pętla. -4 bajty dzięki MickyT i KirillL
Wypróbuj to
źródło
,@ int=128s:print @y&@ set @/=2IF @>0GOTO s
. Wskazuje na to @KirillL dla odpowiedzi RPython 2 ,
4340 bajtówWypróbuj online!
źródło
C # (interaktywny kompilator Visual C #), 33 bajty
Port odpowiedzi JavaScript (ES6) na @Arnauld, więc upewnij się, że go głosujesz!
Wypróbuj online.
Wyjaśnienie:
źródło