Otrzymasz numer x
, gdzie 0 <= x <= 2^32 - 1
.
Powinieneś wypisać listę liczb dziesiętnych po rekurencyjnym podziale w formacie binarnym.
Przykłady:
Przykład 1:
255 -> 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
Obecna lista jest po prostu 255
.
Binarna reprezentacja 255
to 1111 1111
. Rozdzielając go, otrzymujemy 1111
i 1111
, które w systemie dziesiętnym są 15
i 15
.
Dodajemy je do listy, więc będziemy mieć 255 15 15
.
Teraz liczby 15
i 15
będą służyć jako dane wejściowe i liczby te zostaną podzielone.
Robi to ponownie, mamy ( 3 3
z obu 15
s) 255 15 15 3 3 3 3
.
Kontynuując logikę, ostateczna lista będzie 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1
. A ponieważ 1
nie można go już podzielić, wyjście zatrzymuje się.
Przykład 2:
225 -> 225 14 1 3 2 1 1 1 0
Lista początkowa to 225
.
Binarna reprezentacja 225
to 1110 0001
. Rozdzielając go, otrzymujemy 1110
i 0001
, które w systemie dziesiętnym są 14
i 1
.
Dodając je do listy, otrzymujemy 225 14 1
.
Teraz liczby 14
i 1
będą służyć jako dane wejściowe i liczby te zostaną podzielone.
Ponieważ 1
nie można go podzielić, wynik będzie 225 14 1 3 2
.
Przykład 3:
32 -> 32 4 0 1 0
Warunki :
- Jeśli liczba cyfr binarnych jest nieparzysta, pierwsza liczba będzie miała jedną cyfrę binarną mniejszą niż następna. Przykład
20 (10100)
zostanie podzielony jako10
i100
, przy czym wyjście dziesiętne to2
i4
. - Obowiązują standardowe zasady dotyczące luk.
0
si1
nie rozprzestrzeniają się dalej.- Awaria programu przy próbie wyświetlenia zbyt wielu liczb jest prawidłowym warunkiem wyjścia.
źródło
0
s, gdy długość jest nieparzysta?0
s.Odpowiedzi:
Pyth, 18 bajtów
Zestaw testowy
Ten kod robi coś bardzo skomplikowanego i sprytnego z
u
operatorem punktu stałego Pytha.Ciało funkcji, które jest wszystkim innym niż
u
, jest dość proste:Ten kod usuwa zera i jedynki, dzieli każdą liczbę i dodaje dane wejściowe z przodu.
u
uruchomi tę funkcję na podstawie wcześniejszego wyniku funkcji, aż wynik przestanie się zmieniać.Jaka jest wartość początkowa
u
? To sprytna część: kod nie określa, jakiej wartości użyć, więc domyślnie jest to wejście. Ale dane wejściowe nie są listą liczb - to liczba. Pyth niejawnie wymusza liczbę w czasie pierwszej pięści przez pętlę do zakresu liczby -[0, 1, ..., Q-1]
. To nie przypomina niczego, co chcemy uzyskać. Na szczęścieu
znajdzie poprawny wynik niezależnie od tego, jakie jest początkowe wejście - pożądane wyjście jest jedynym stałym punktem funkcji, a powtarzająca się aplikacja zawsze go osiągnie.Spójrzmy na wartości pośrednie programu z danymi wejściowymi
7
. Podkreśliłem prefiks wyniku, który z pewnością jest poprawny, bez względu na początkowe dane wejściowe:7
(Niejawnie[0, 1, 2, 3, 4, 5, 6]
)[7,
1, 0, 1, 1, 1, 0, 1, 1, 1, 2]
[7, 1, 3,
1, 0]
[7, 1, 3, 1, 1]
Który jest wynikiem.
Pakiety Pyth, 16 bajtów
Zauważ, że ponieważ Pyth używa tylko zakresu 0-127 ASCII, można go skompresować przy użyciu kodowania 7-bitowego zamiast 8-bitowego. Tak więc powyższy program można spakować do 16 bajtów. Wynikowy program to:
zrzut heksowy:
Tłumacz znajduje się tutaj . Podaj dane wejściowe jako argument wiersza poleceń.
Strona kodowa tego języka (Packed Pyth) to zakres ASCII 0-127, a każdy znak jest reprezentowany przez 7 bitów, wypełnionych na końcu. Tak więc powyższy nieczytelny zrzut heksowy reprezentuje:
Ale w 16 bajtach.
źródło
05AB1E ,
21201817 bajtówWypróbuj online!
Wyjaśnienie
źródło
ʒ
- Ta nowa strona kodowa ... Od kiedy to 05AB1E Jelly? Ja lubić.JavaScript (ES6), 99 bajtów
To wygląda trochę za długo. Może być lepszy sposób na uzyskanie prawidłowej kolejności.
Próbny
Pokaż fragment kodu
źródło
Galaretka ,
2120 bajtów-1 bajt poprzez usunięcie łańcucha monadycznego, a następnie radzenie sobie z konsekwencją konwersji pustej listy z binarnego zwracania 0 później.
Łącze monadyczne pobierające numer i zwracające określoną listę.
Wypróbuj online!
W jaki sposób?
źródło
Java 7, 541 bajtów
Utrzymanie oryginalnego porządku doprowadziło mnie do szału, w przeciwnym razie byłaby to prosta pętla i zasada rekurencyjnego wywoływania. Mimo to fajne wyzwanie, aby dowiedzieć się, zachowując porządek.
Wyjaśnienie:
Kod testowy:
Wypróbuj tutaj.
Wynik:
źródło
Python 2 , 110 bajtów
Wypróbuj online!
źródło
Siatkówka , 142 bajty
Wypróbuj online!
źródło
PHP, 132 bajtów
Wypróbuj online!
źródło
Array( [0] => 225 [1] => 14 [2] => 1 [3] => 3 [4] => 2 [5] => 1 [6] => 1 [7] => 1 [8] => 0 )
gdy tak nie jest = 255 15 15 3 3 3 3 1 1 1 1 1 1 1 1$argn
Ta zmienna jest dostępna, jeśli używasz PHP z wiersza poleceń z-R
opcją. Oto przykład danych wejściowych 255 Wypróbuj online!Rubin , 102 bajty
Wypróbuj online!
źródło
Rubinowy , 98 bajtów
Wypróbuj online!
Po prostu podstawowa optymalizacja odpowiedzi Value Ink : użyj flat_map zamiast map ... spłaszcz i użyj
a==[]?a
zamiasta==[]?[]
źródło