Inspirowany czwartym problemem z BMO2 2009 .
Biorąc pod uwagę dodatnią liczbę całkowitą n jako dane wejściowe lub parametr, zwróć liczbę liczb całkowitych dodatnich, których reprezentacje binarne występują jako bloki w binarnym rozwinięciu n .
Na przykład 13 -> 6, ponieważ 13 w systemie binarnym to 1101 i ma podciągi 1101, 110, 101, 11, 10, 1
. Nie liczymy liczb binarnych rozpoczynających się od zera i nie liczymy samego zera.
Przypadki testowe
13 -> 6
2008 -> 39
63 -> 6
65 -> 7
850 -> 24
459 -> 23
716 -> 22
425 -> 20
327 -> 16
Możesz wziąć n jako jeden z poniższych:
- Liczba całkowita
- lista wartości prawda / fałsz dla reprezentacji binarnej
- ciąg reprezentacji binarnej
- ciąg podstawowy 10 (choć nie jestem pewien, dlaczego ktoś miałby to zrobić)
Ustaw swój kod tak krótko, jak to możliwe.
Odpowiedzi:
Python 3,
5450 bajtówPodziękowania dla Rod i Jonathan Allan za uratowanie czterech bajtów.
źródło
+1
z zakresu dobin(i)
n
się i są na zawsze wykluczyć0
z naszej liczyć możemy zamiast zawsze wykluczyćn
i zawsze liczyć0
(bin (N) zaczyna'0b...'
), stąd możemy usunąć1,
i+1
całkowicie i zostawićbin(i)
jak jest uratować cztery bajty Spróbuj online!Galaretka , 4 bajty
Wypróbuj online!
Pobiera dane wejściowe jako listę
0
s i1
s.Wypróbuj online z numerami!
Wyjaśnienie:
Dowód to działa:
Ten program pobiera numer wejścia, N . Pierwszą rzeczą, którą robi ten produkt, jest oczywiście pobranie podciągów N 2 ( N w bazie 2 ). Obejmuje to zduplikowane podciągi zaczynające się od 0 lub 1 .
Następnie po prostu bierzemy unikalne podciągi, zachowując tylko pierwsze wystąpienie każdej wartości na liście podciągów.
Następnie ten program sumuje pierwsze elementy list, następnie drugie elementy, a następnie trzeci, czwarty itd. I jeśli jedna z list nie ma takiego elementu,
0
zakłada się. Zadanie polega na tym, ile efektywnie Ile unikatowych podciągów zaczynających się od 1 ma ten numer w postaci binarnej? . Ponieważ każdy pierwszy element, który należy policzyć1
, możemy po prostu sumować zamiast filtrować pod kątem odpowiednich podciągów.Teraz pierwszy element wynikowej listy podsumowania opisanej powyżej zawiera liczbę pierwszych bitów podciągów, więc po prostu wstawiamy i ostatecznie zwracamy.
źródło
Oktawa ,
6261 bajtówWypróbuj online!
Wyjaśnienie
W przypadku danych wejściowych
n
kod sprawdza wszystkie liczby od,1
abyn
sprawdzić, czy ich reprezentacja binarna jest podciągiem binarnej reprezentacji danych wejściowych.źródło
05AB1E , 5 bajtów
Pobiera dane wejściowe jako ciąg binarny.
Nagłówek konwertuje liczbę całkowitą na binarną, co ułatwia testowanie.
Wypróbuj online!
Wyjaśnienie
źródło
bŒʒć}Ùg
ale nie, to lepiej.Perl 5 , 36 + 1 (
-p
) = 37 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciąg binarny.
źródło
PowerShell ,
1039282 bajtówWypróbuj online!
Pobiera dane wejściowe jako tablicę
1
i0
(truey i falsey w PowerShell). Pętle przechodzą przez$s
(tzn. Ile elementów w tablicy wejściowej). Wewnątrz pętli zapętlamy od bieżącego numeru (zapisanego jako$i
) do$s.count
. W każdej wewnętrznej pętli-join
tablica kroimy na ciąg. Następniesort
z-u
flagą nique (która jest krótsza niżselect
z-u
flagą nique i nie obchodzi nas, czy są posortowane, czy nie), bierzemy te, które nie zaczynają się od0
, i bierzemy całość.count
. Pozostaje to w potoku, a dane wyjściowe są niejawne.źródło
JavaScript (ES6), 55 bajtów
Pobiera dane wejściowe jako ciąg binarny.
Oto smutna próba zrobienia tego za pomocą liczb i funkcji rekurencyjnych:
Stare podejście, 74 bajty
Pobiera również dane wejściowe jako ciąg binarny.
źródło
Python 2 ,
11881 bajtówDzięki @Rod za oszczędność 37 bajtów!
Pobiera dane wejściowe jako ciąg binarny.
Wypróbuj online!
Python 2 , 81 bajtów
Dzięki @Rod!
Pobiera dane wejściowe jako ciąg binarny.
Wypróbuj online!
źródło
set(...)
z{...}
ixrange
zrange
+1
z zakresu na plasterek i przełączyć sięs.startswith
wint(s,2)
następujący sposóbGalaretka , 5 bajtów
Wypróbuj online!
Pobiera dane wejściowe jako listę 1 i 0. Stopka w łączu stosuje funkcję do każdego z przykładów w poście.
Jonathan Allan wskazał, że
ẆḄQTL
jest to 5-bajtowa alternatywa, która korzysta zT
atom, który znajduje wskaźniki wszystkich prawdziwych elementów.Wyjaśnienie
Weźmy jako przykład bin (13) = 1101. Dane wejściowe to
[1,1,0,1]
Wziął pomysł „prawda” (znak w tym przypadku) z odpowiedzi 05AB1E
źródło
T
, z:ẆḄQTL
R ,
8877 bajtówWypróbuj online!
Pobiera dane wejściowe jako ciąg binarny.
using
mapply
, generuje tablicę wszystkich podciągów danych wejściowych.strtoi
konwertuje je jako bazę2
liczby całkowite i biorę sumę logicznej konwersji (!!
) pozycji w wyniku.źródło
Retina ,
3729 bajtówWypróbuj online! Musiałem tylko wypróbować Retina 1.0
w
modyfikator . Edycja: Zapisano 8 bajtów dzięki @MartinEnder. Wyjaśnienie:Konwertuj z dziesiętnego na jednoargumentowy.
Konwertuj z jednoargumentowego na binarny, używając
#
for0
i_
for 1.Generowanie podciągi, które zaczynają się
1
, znaczy_
.w
Modyfikator następnie dopasowuje wszystkie podciągi, nie tylko najdłuższy jednym przy każdym rozruchu_
, natomiastp
modyfikujących deduplikuje mecze. Wreszcie, ponieważ jest to ostatni etap, domyślnie zwracana jest liczba dopasowań.źródło
q
(lubp
)w
. Nie musisz teżC
wyraźnie określać , ponieważ jest to domyślny typ sceny, jeśli pozostało tylko jedno źródło.M
bycia domyślnym typem sceny!C
to coM
kiedyś było. :)Pyth , 8 bajtów
Wypróbuj tutaj!
Pobiera dane wejściowe jako ciąg binarny.
.:
generuje wszystkie podciągi,vM
ocenia każdy (czyli konwertuje każdy z binarnego),{
deduplikuje,<space>#
filtruje według tożsamości il
otrzymuje długość.źródło
Wolfram Language (Mathematica) , 35 bajtów
Zliczanie unikatowych podsekwencji reprezentacji binarnej, które zaczynają się od jednej, chociaż nie jestem pewien, czy ten kod wymaga nawet wyjaśnienia.
Wypróbuj online!
źródło
___
zrobić?Perl 6 , 47 bajtów
Wypróbuj online!
źródło
Julia 0.6 , 37 bajtów
Wypróbuj online!
Juliafikacja odpowiedzi w języku Python autorstwa J843136028 przy użyciu
.
aplikacji funkcji elementu z rozgłaszaniem. ( link )źródło
Java, 232 bajty
Gdzie n jest wejściem, b jest reprezentacją binarną, a l jest listą wszystkich podciągów. Po raz pierwszy zamieszczając tutaj, zdecydowanie musisz poprawić i nie krępuj się wskazać ewentualne błędy! Nieznacznie zredagowano pod kątem czytelności.
źródło
String b=...,t
iint i=...,j,k
aby zapisać znaki dla powtarzających się deklaracji tego samego typu. Twój kod również nie kwalifikuje się jako pozycja, ponieważ jest to fragment kodu, ani pełny program, ani fragment funkcjonalny, musisz napisać funkcję lub owinąć kod w formie lambdaAttache , 35 bajtów
Wypróbuj online!
Równoważnie:
Wyjaśnienie
Wyjaśnię drugą wersję, ponieważ łatwiej jest ją śledzić (mówiąc wprost):
źródło
Ruby
41 3627 bajtówPobiera ciąg binarny jako dane wejściowe
Jest bardzo nieefektywny
Częściowo zainspirowany tą odpowiedzią na python 3
Wypróbuj online!
źródło
Java 8,
160159158 bajtówWprowadź jako ciąg binarny.
Musi być krótsza droga ..>.>
Wyjaśnienie:
Wypróbuj online.
źródło
C ++, 110 bajtów
To jest funkcja rekurencyjna. Używamy a
std::set
do zliczania wartości, ignorując duplikaty. Dwie rekurencyjne wywołania maskują bity od lewej (f(n&i)
) i od prawej (f(n/2)
), ostatecznie wytwarzając wszystkie podciągi jako liczby całkowite.Pamiętaj, że jeśli chcesz zadzwonić ponownie,
s
musisz wyczyścić między połączeniami.Program testowy
Wyniki
źródło
J , 34 bajty
Wypróbuj online!
źródło
J , 15 bajtów
Dane wejściowe to lista binarna. Wypróbuj online!
źródło
Perl 6 , 34 bajtów
Sprawdź to
Rozszerzony:
źródło