Wczoraj podczas zabawy z moim dzieckiem zauważyłem numer w jego pociągu z zabawkami:
Mamy więc które można podzielić na lub
Tak proste wyzwanie: biorąc pod uwagę nieujemną liczbę jako dane wejściowe, zwracaj spójne wartości truey i falsey, które reprezentują, czy ciąg znaków reprezentujący liczbę (w podstawie 10 i bez zer wiodących) może być w jakiś sposób podzielony na liczby o sile 2 .
Przykłady:
4281 truthy (4-2-8-1)
164 truthy (16-4 or 1-64)
8192 truthy (the number itself is a power of 2)
81024 truthy (8-1024 or 8-1-02-4)
101 truthy (1-01)
0 falsey (0 cannot be represented as 2^x for any x)
1 truthy
3 falsey
234789 falsey
256323 falsey (we have 256 and 32 but then 3)
8132 truthy (8-1-32)
Tests for very large numbers (not really necessary to be handled by your code):
81024256641116 truthy (8-1024-256-64-1-1-16)
64512819237913 falsey
To jest kod-golf , więc może wygrać najkrótszy kod dla każdego języka!
code-golf
string
number
decision-problem
Charlie
źródło
źródło
int
typu (4 bajty), ale tak naprawdę nie mam nic przeciwko, jeśli twój kod nie obsługuje bardzo dużych liczb. Podaj w swojej odpowiedzi ograniczenia swojego kodu.101
(fałsz z powodu 0) ... czy to powinno być prawdą (1 - 01
)?101
sprawę z obecnymi odpowiedziami i wszystkie one powracajątrue
, ponieważ można je podzielić na1-01
dwie potęgi 2, więc uznam tę sprawę za prawdziwą.log2(n)
po przecinku nie zawiera cyfr dziesiętnych. 2) Sprawdź, czyn AND (n-1) == 0
. 3) Utwórz listę kwadratowych numerów i sprawdź, czyn
jest na tej liście.Odpowiedzi:
05AB1E ,
98 bajtów-1 bajt dzięki @Emigna przy użyciu
Z
(maks.) Dla listy zer i jedynek w celu naśladowaniaany
polecenia1
(prawda).Wypróbuj online lub sprawdź wszystkie przypadki testowe . (UWAGA: W
т
nagłówku jest100
tylko pierwsze 100 potęgi 2 liczb, zamiast pierwszej wejściowej ilości potęgi 2 liczb. Działa również z wejściową ilością potęgi 2, ale jest dość nieefektywna i może limit czasu w TIO, jeśli wejście jest wystarczająco duże).Wyjaśnienie:
źródło
.œ.²1%O0å
(również 9 bajtów). Mój0
jednak zawiódł ..²1%O0
jest również całkiem sprytny. Myślałem olog2
takim użyciu.²DïQ
, ale do zrobienia tego dla każdej liczby potrzebna byłaby mapa, a tak naprawdę nie działało to na marginesie0
.JavaScript (Node.js) , 54 bajty
Wypróbuj online!
źródło
JavaScript (Node.js) ,
696458 bajtówWypróbuj online!
Wpisz jako liczbę. Część logiczna jest dość skomplikowana, więc nie mam pojęcia, jak ją rozwiązać i się pozbyć
q
.-11 bajtów przez zagranie w golfa testu 2.
źródło
JavaScript (Node.js) ,
7569 bajtów-6 bajtów dzięki @Arnauld. Obsługa co najwyżej wersji 32-bitowej
Wypróbuj online!
Wprowadź jako ciąg.
źródło
Galaretka , 9 bajtów
Sprawdź pakiet testowy!
Alternatywny
Nie działa w przypadku dużych przypadków testowych z powodu problemów z precyzją.
Sprawdź pakiet testowy!
W jaki sposób?
Program I
Program II
źródło
Python 2 ,
7270 bajtówWypróbuj online!
źródło
JavaScript, 59 bajtów
Wypróbuj online!
Tworzy wyrażenie regularne
/^(1|0*2|0*4|0*8|0*16|0*32|…|0*1)+$/
o potęgach 2 i testuje jes
.Oczywiście działa tylko z dokładnością do liczb JavaScript: w końcu wyrazy w wyrażeniu regularnym będą wyglądać
1.2345678e30
(lubInf
). Ponieważ jednak potęgi 2 są łatwe do dokładnego przedstawienia w liczbach zmiennoprzecinkowych, nigdy nie będą złymi liczbami całkowitymi, co, moim zdaniem, byłoby bardziej dyskwalifikujące.@tsh zapisał 14 bajtów. Neato!
źródło
Python 2 , 85 bajtów
Wypróbuj online!
źródło
Perl 6 ,
282423 bajtów-4 bajty dzięki Jo Kingowi
Wypróbuj online!
Obsługuje moc do 2 31 .
źródło
0*
poza interpolowaną częśćAPL (NARS), 154 znaków, 308 bajtów
Funkcją ćwiczenia jest h. Algorytm nie wydaje się wykładniczy ani silni ... test:
źródło
Python 2 , 57 bajtów
Wypróbuj online!
źródło
Python 2 , 86 bajtów
Wypróbuj online!
źródło
Rubin , 55 bajtów
Wypróbuj online!
Dane wyjściowe są
0
prawdziwe, anil
jeśli fałszywe.źródło
Rubinowy , 49 bajtów
Wypróbuj online!
Działa tylko w teorii. Trwa wiecznie dla dużych wartości
n
źródło
PHP, 101 bajtów
Nie wydaje się, aby uzyskać to poniżej 100; ale mógłbym dostać go do 100, jeśli
101
był to przypadek fałszowania.wariacje:
PHP 5 lub starszy, 95 bajtów
źródło
Czerwony ,
212211 bajtówWypróbuj online!
Kolejne długie przesłanie, ale nie jestem całkowicie niezadowolony, ponieważ nie ma wbudowanej funkcji wyszukiwania wszystkich podciągów w kolorze czerwonym.
Bardziej czytelny:
źródło
Aksjomat, 198 bajtów
golf i test
źródło
Japt
-!
, 12 bajtówPobiera dane wejściowe jako ciąg.
Spróbuj
źródło
0
wyjściowetrue
spraw, a zatem przypadki takie jak1010
dane wyjściowetrue
.C # 157 bajtów
Możesz wypróbować online
źródło
APL (NARS), 70 znaków, 140 bajtów
test:
nie próbuję robić innych, większych liczb ... muszę zauważyć, że P nie jest normalną partycją, ale jest to jedna partycja, w której wszystkie elementy są podzbiorem, które mają członka wszystkie kolejne, na przykład
zauważ, że nie ma elementu ((ac) (b)) lub lepszego ,, ¨ („ac”) „b”
źródło
POSIX ERE, 91 bajtów
Jest to całkowicie oszustwo, oparte na tekście o dużych liczbach (tak naprawdę nie jest to konieczne do obsługi przez kod) w pytaniu; obsługuje wszystkie wartości w zakresie wielkości przykładów. Oczywiście można rozszerzyć do pełnego zakresu 32- lub 64-bitowych liczb całkowitych kosztem rozmiaru. Napisałem go głównie jako demonstrację tego, jak problem naturalnie pasuje do narzędzia. Zabawnym ćwiczeniem byłoby przepisanie go jako programu, który generuje ERE dla dowolnego zakresu, a następnie dopasowuje się do niego.
źródło
C (gcc) ,
-DA=asprintf(&c,
+ 108 = 124 bajtyWypróbuj online!
To buduje regex potęgi od 2 do 2 ** 32, a następnie dopasowuje ciąg wejściowy przeciwko niemu.
źródło
PowerShell, 56 bajtów
Skrypt testowy:
Wydajność:
Wyjaśnienie:
Tworzy wyrażenie regularne
^(0*1|0*2|0*4|0*8|0*16|0*32|…)+$
o potęgach 2 i testuje je na argumentach.źródło
JavaScript (Node.js) , 56 bajtów
Wypróbuj online!
źródło