Dodatnia liczba całkowita N to rzadka K, jeśli w jej reprezentacji binarnej występują co najmniej K 0 między dowolnymi dwoma kolejnymi 1.
Tak więc liczba 1010101 jest 1-rzadka, podczas gdy 101101 nie.
Twoim zadaniem jest znalezienie następnego 1-rzadkiego numeru dla podanego numeru wejściowego. Na przykład, jeśli wejście to 12 ( 0b1100
), wyjście powinno wynosić 16 ( 0b10000
), a jeśli wejście to 18 ( 0b10010
), wyjście powinno wynosić 20 ( 0b10100
).
Najmniejszy program lub funkcja (w bajtach) wygrywa! Standardowe luki zabronione.
code-golf
number
arithmetic
base-conversion
binary
articuno
źródło
źródło
Odpowiedzi:
Pyth, 9 bajtów
x & (x*2) != 0
algorytmu od @alephalphaMoja pierwsza próba w Pyth:
Wypróbuj tutaj
źródło
CJam,
1411 bajtów3 bajty zapisane dzięki DigitalTrauma.
Sprawdź to tutaj.
Wyjaśnienie
Pozostawia to ostatnią liczbę na stosie, która jest drukowana automatycznie na końcu programu.
źródło
Python 2, 44 bajty
Jest to kompletny program pythonowy, który czyta in, i drukuje odpowiedź. Myślę, że radzi sobie całkiem nieźle w konkursie na czytelność.
Wyniki testu:
źródło
Pyth,
1211 bajtówWypróbuj online: Pyth Compiler / Executor .
źródło
"11"
w`11
.Mathematica,
4130 bajtówZaoszczędzono 11 bajtów dzięki Martinowi Büttnerowi.
źródło
Perl, 31
Lub z wiersza poleceń:
źródło
APL, 18 bajtów
To ocenia na funkcję monadyczną. Wypróbuj tutaj. Stosowanie:
Wyjaśnienie
źródło
J, 20 znaków
Czasownik monadyczny. Naprawiono, aby przestrzegać zasad.
Wyjaśnienie
Po pierwsze, jest to czasownik ze spacjami, a następnie trochę mniej golfowy:
Czytać:
Zasadniczo obliczam, jeśli
1 1
występuje w reprezentacji wejścia base-2. Jeśli tak, zwiększam dane wejściowe. Jest to objęte limitem mocy, co oznacza, że jest stosowane, dopóki wynik się nie zmieni.źródło
{⍵+∨/2∧/⍵⊤⍨⍵⍴2}⍣=
.JavaScript,
2519Korzystając z faktu, że dla 1-rzadkiej liczby binarnej
x&2*x == 0
:źródło
JavaScript (ES6), 39
43Bez wyrażeń regularnych, bez ciągów, rekurencyjne:
Wersja iteracyjna:
To bardzo proste, wystarczy użyć prawego klawisza Shift, aby znaleźć sekwencję 11. Kiedy ją znajdę, przejdź do następnej liczby. Wersja rekurencyjna pochodzi bezpośrednio z wersji iteracyjnej.
Bez golfa i bardziej oczywiste. Aby zagrać w golfa, najtrudniejszą częścią jest połączenie wewnętrznej i zewnętrznej pętli (początkowe uruchomienie x do 3)
źródło
%4>2
wygląda na magię z teorii liczb, czy możesz wyjaśnić || podać link?Python 2, 37 bajtów
Zastosowano logikę
x & 2*x == 0
dla liczby 1-rzadkiej.Dzięki @Nick i @CarpetPython.
źródło
JavaScript,
756662 bajtówDzięki Martin Büttner za oszczędność 9 bajtów i Pietu1998 za 4 bajty!
Jak to działa: uruchamia
for
pętlę, zaczynając oda + 1
tak długo, jak długo bieżący numer nie jest 1-rzadki, a jeśli tak, pętla jest przerywana i zwraca bieżącą liczbę. Aby sprawdzić, czy liczba jest 1-rzadka, konwertuje ją na binarną i sprawdza, czy nie zawiera11
.Kod bez golfa:
źródło
Julia, 40 bajtów
Tworzy to anonimową funkcję, która przyjmuje jedną liczbę całkowitą jako dane wejściowe i zwraca następną najwyższą liczbę całkowitą 1-rzadką. Aby to nazwać, nadaj mu nazwę, np.
f=n->...
I zróbf(12)
.Niegolfowane + wyjaśnienie:
Przykłady:
Sugestie i / lub pytania są jak zawsze mile widziane!
źródło
> <> (Ryba) , 31 + 3 = 34 bajty
Stosowanie:
Dodano 3 bajty dla
-v
flagi.źródło
JavaScript (ECMAScript 6), 40
Według rekurencji:
JavaScript, 56
To samo bez funkcji strzałek.
źródło
Scala, 65 bajtów
(jeśli wymagana jest funkcja o nazwie, rozwiązanie będzie 69 bajtów)
źródło
Python,
3933 bajtyWypróbuj tutaj: http://repl.it/gpu/2
W formie lambda (dzięki xnor do gry w golfa):
Standardowa składnia funkcji
okazała się raz krótsza niż lambda!źródło
f=lambda x:1+x&x/2and f(x+1)or-~x
. Okazuje się, że z przesunięciem bitowym w prawo zamiast w lewo, możesz użyćx/2
zamiast,(x+1)/2
ponieważ różnica jest zawsze w zerowych bitachx+1
. Specyfikacja prosi jednak o program.Java, 33 bajty.
Używa metody z tej odpowiedzi
TIO
źródło
Ruby, 44
Całkiem proste. Lambda z nieskończoną pętlą i wyrażeniem regularnym do testowania reprezentacji binarnej. Życzę, aby
loop
uzyskany i numer indeksu.źródło
Matlab (
7774 bajtów)Uwagi:
m+1
do2*m
, gdziem
jest wejście.~any(x)
jest,true
jeślix
zawiera wszystkie zera lub jeślix
jest pustyźródło
C (32 bajty)
Rekurencyjna implementacja tego samego algorytmu, jak wielu innych odpowiedzi.
źródło
Perl, 16 bajtów
Łącząc
x&2*x
różne odpowiedzi (myślę, że Nick jest pierwszy) z wynikami nutkiredo
:Testowany w Truskawce 5.26.
źródło
Japt, 8 bajtów
Uruchom to online.
źródło
Galaretka , 7 bajtów
Pełny program akceptujący jedną, nieujemną liczbę całkowitą, która wypisuje dodatnią liczbę całkowitą (jako łącze monadyczne daje listę zawierającą jedną dodatnią liczbę całkowitą).
Wypróbuj online!
W jaki sposób?
Zaczynając od
v=n+1
i zwiększając, dwukrotnie,v
aby przesunąć każdy bit w górę o jedno miejsce i bitowo ORAZ za pomocą,v
a następnie wykonać logiczne NIE, aby sprawdzić, czyv
jest 1-rzadki, dopóki nie zostanie znaleziona jedna taka liczba.źródło
Stax , 5 bajtów
Uruchom i debuguj
Działa przy użyciu tej procedury. Dane wejściowe zaczynają się na szczycie stosu.
źródło