Trochę unosi się z LSB do MSB za każdym razem przesuwając jedną pozycję, aż unosi się na górę kontenera:
0000
0001
0010
0100
1000
Gdy jeden bit unosi się na szczyt, kolejny bit rozpoczyna swoją podróż i zatrzymuje się, gdy napotyka inny bit:
1001
1010
1100
Dzieje się tak, dopóki pojemnik nie zostanie wypełniony bitami:
1101
1110
1111
Wyzwanie
Biorąc pod uwagę liczbę całkowitą, wypisz „ Bitową sekwencję zmienną ” dla kontenera o tej liczbie bitów.
- Każdy termin w sekwencji może być oddzielony dowolnym wybranym separatorem.
- Edycja : Sekwencja muszą być przedstawione w postaci liczb całkowitych dziesiętną, począwszy od pierwszego THERM
0
. - Rozmiar kontenera powinien być większy od zera i do liczby bitów największej liczby całkowitej obsługiwanej przez wybrany język. Możesz założyć, że dane wejściowe zawsze spełniają to wymaganie.
Przykłady
Wymagana jest tylko sekwencja numeryczna, reprezentacja binarna pokazana jest jako przykład:
Dla 1 :
0 1
0 -> 0 1 -> 1
Dla 3 :
0 1 2 4 5 6 7
000 -> 0 001 -> 1 010 -> 2 100 -> 4 101 -> 5 110 -> 6 111 -> 7
Dla 4 :
0 1 2 4 8 9 10 12 13 14 15
0000 -> 0 0001 -> 1 0010 -> 2 0100 -> 4 1000 -> 8 1001 -> 9 1010 -> 10 1100 -> 12 1101 -> 13 1110 -> 14 1111 -> 15
Dla 8 :
0 1 2 4 8 16 32 64 128 129 130 132 136 144 160 192 193 194 196 200 208 224 225 226 228 232 240 241 242 244 248 249 250 252 253 254 255
00000000 -> 0 00000001 -> 1 00000010 -> 2 00000100 -> 4 00001000 -> 8 … … … 11111000 -> 248 11111001 -> 249 11111010 -> 250 11111100 -> 252 11111101 -> 253 11111110 -> 254 11111111 -> 255
[0.0, 1.0]
0 -> [0, 1]
Odpowiedzi:
05AB1E , 10 bajtów
Wypróbuj online!
źródło
.0
domyślnie dopuszcza liczbę zmiennoprzecinkową dla liczb całkowitych, ale nie jestem pewien. Osobiście zwykle umieszczamï
stopkę w ładnym druku i nie uwzględniam jej w liczbie bajtów.Python 2 , 45 bajtów
Wypróbuj online!
Okazuje się, że krótsze jest generowanie
2**n
minus każdy termin w sekwencji do wprowadzenian
. Jeśli spojrzymy na ich rozwinięcie binarne, poniżejn=5
widzimy ładny wzór trójkątów 1 w rozwinięciach binarnych.Każda liczba jest uzyskiwana z poprzedniej liczby przez usunięcie skrajnej prawej cyfry w rozwinięciu binarnym, z wyjątkiem tego, że liczba 0, odejmujemy 1, tworząc nowy blok 1, który rozpoczyna nowy mniejszy trójkąt. Jest to zaimplementowane jako
y=y&y-1or~-y
, gdziey&y-1
jest trochę sztuczka, aby usunąć skrajnie prawą 1, ior~-y
dajey-1
zamiast tego, jeśli ta wartość wynosiła 0.Python 2 , 49 bajtów
Wypróbuj online!
Funkcja drukująca, kończąca się z błędem. Bardziej przyjemny program poniżej okazał się dłuższy.
51 bajtów
Wypróbuj online!
źródło
Galaretka ,
1110 bajtówPort odpowiedzi @ABrimy 05AB1E , więc pamiętaj, aby go zagłosować!
-1 bajt dzięki @Grimy .
Wypróbuj online.
Wyjaśnienie:
źródło
R_2
->Ḷ’
dla -1.Ḷ
to jedyny rozsądny zakres , naprawdę chciałbym, żeby 05AB1E miał dla niego jednobajtowy.Perl 5 (
-n
),4140 bajtów-1 bajtów dzięki Xcali
TIO
"{0,1}"x$_
: ciąg"{0,1}"
powtórzony n razy"0b".
: konkatenuje z"0b"
glob
: ekspansja globalna (produkt kartezjański)map{
...}
: dla każdego elementu/01.*1/||
: aby pominąć, gdy01
następuje coś wtedy1
say oct
: przekonwertować na dziesiętne i powiedziećźródło
JavaScript (ES6), 43 bajty
W razie wątpliwości użyj metody xnor .
Wypróbuj online!
JavaScript (ES6),
59 57 5552 bajtówWypróbuj online!
W jaki sposób?
Skomentował
źródło
Python 2 ,
9576 bajtówWypróbuj online!
źródło
Perl 6 , 43 bajtów
Wypróbuj online!
Anonimowy blok kodu, który pobiera liczbę i wyświetla sekwencję oddzieloną znakami nowej linii. Ten zaczynając od 0 powtarzane n razy następnie zastąpienie albo prace
01
z10
lub ostatni0
z1
aż liczba jest zaledwie nich.Lub 40 bajtów, używając podejście Nahuela Fouilleula
Wypróbuj online!
źródło
01
z10
lub ostatni0
z1
aż liczba jest tylko te ” To posunięcie geniusz!Python 2 , 60 bajtów
Wypróbuj online!
Python 3 , 76 bajtów
Wypróbuj online!
źródło
Python 2 , 67 bajtów
Wypróbuj online!
źródło
Python 3 , 62 bajty
Wypróbuj online!
Pomysł jest mniej więcej taki sam jak rozwiązanie @ Arnauld .
Kolejne 65-bajtowe rozwiązanie:
Wypróbuj online!
źródło
Galaretka , 12 bajtów
Wypróbuj online!
źródło
05AB1E ,
1312 bajtów-1 bajt dzięki @Grimy (zobacz także jego krótsze podejście tutaj).
Wypróbuj online lub sprawdź wszystkie przypadki testowe .
Wyjaśnienie:
źródło
oL<ʒbIj1Û1¢2‹
. Nie wygląda na to, żebym mógł obniżyć.oL<ʒbIj1ÛSO2‹
i próbowałem zobaczyć, gdzie był mój błąd. :) Ale cieszę się, że nie możesz znaleźć krótszej wersji dla jednej z moich odpowiedzi na zmianę. ; p (inb4 w końcu znajdziesz krótszy xD)SO2‹
może być jakoś 3 bajtami, ale nie widzę tego i też nie jestem do końca pewny .. Istnieje kilka alternatyw, takich jakSO1~
lubSÆ>d
, ale nie jestem w stanie znaleźć 3-bajtowego.SO!
. Jestem pewien, że mam kilka starych odpowiedzi,2‹
które również mogłyby z tego skorzystać.Siatkówka , 26 bajtów
Wypróbuj online!Wyjścia w formacie binarnym. Jeśli to nie do przyjęcia, to dla 39 bajtów:
Wypróbuj online!Wyjaśnienie:
Przekształć dane wejściowe w ciąg znaków
n
zer.Dopasuj wszystkie możliwe niepuste podciągi.
Dla każdego podłańcucha należy wyprowadzić: przedrostek
0
s zmieniono na1
s; sufiks; dopasowanie z początkową0
zmieniono na1
.Konwertuj z binarnego na dziesiętny.
źródło
Brachylog , 27 bajtów
Wypróbuj online!
Wyjścia są niesprawne i mają duplikaty. Jeśli to nie w porządku, przyczep
do
się do końca.źródło
Węgiel drzewny , 19 bajtów
Wypróbuj online! Link jest do pełnej wersji kodu. Wyjaśnienie:
źródło
Perl 5 , 40 bajtów
Wypróbuj online!
źródło
Siatkówka , 24 bajty
Wyjścia w formacie binarnym. Dane wejściowe powinny mieć końcowy znak nowej linii.
Próba wyjaśnienia:
Próbowałem ominąć
/0/
opcję wyrażenia regularnego o długości 3 bajtów, zmieniając opcje, ale nie mogłem.Wypróbuj online!
źródło
C (brzęk) , 73 bajty
Wypróbuj online!
źródło
k4,
2824 bajtów@ Podejście Grimy przeniesione na k4
edycja: -4 dzięki ngn!
źródło
!:'1+|!:
->|,\!:
xexp
|,\!:
wydaje się teraz tak oczywiste, jak to widzę!