Powiedzmy, że podciąg to dowolna ciągła sekcja oryginalnego łańcucha. Na przykład cat
jest podciąg concatenate
. Powiemy, że poprawny podciąg to podciąg, który nie jest równy oryginalnemu ciągowi. Na przykład concatenate
jest podciągiem, concatenate
ale nie jest właściwym podciągiem. (ciągi jednoznakowe nie mają odpowiednich podciągów)
Teraz zdefiniujemy sekwencję na podstawie tych terminów. N p terminu w tej sekwencji będzie najmniejsza ilość tak, że nie jest to właściwy podciąg jego binarną, która nie jest podłańcuchem wcześniejszej terminu w sekwencji. Pierwszy termin to 10
.
Jako ćwiczenie pozwala wygenerować pierwsze 5 haseł. Będę pracował w trybie binarnym, aby ułatwić.
Pierwszy termin to 10
. Ponieważ 11
kolejna najmniejsza liczba ma tylko jeden właściwy podciąg, 1
który jest również podłańcuchem 10
, 11
nie ma go w sekwencji. 100
zawiera jednak odpowiednie podciągi, 00
które nie są podciągami, 10
więc 100
nasz następny termin. Dalej jest ten, 101
który zawiera unikalny właściwy podciąg 01
dodający go do sekwencji, a następnie 110
zawiera właściwy podciąg, 11
który jest nowy, dodając go do sekwencji.
Teraz mamy
10, 100, 101, 110
111
jest następny, ale zawiera tylko podciągi 1
i 11
dlatego nie jest terminem. 1000
zawiera jednak 000
dodanie go do sekwencji.
Oto kilka pierwszych wyrażeń dziesiętnych
2, 4, 5, 6, 8, 9, 10, 11, 14, 16, 17, 18, 19, 20, 21, 22, 23, 24, 26, 30, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 50, 54, 56, 58
Zadanie
Zarówno
Weź n jako dane wejściowe i wygeneruj n- ty termin w tej sekwencji (0 lub 1 indeksowany)
Ciągłe wyprowadzanie terminów sekwencji
To jest odpowiedź na golfa kodowanego w bajtach, przy czym mniej bajtów jest lepszych.
n
)?a(36)
wynosi 47 (1 indeksowany).Odpowiedzi:
Python 3 ,
88807875 bajtów-6 bajtów dzięki Wheat Wizard
-2 bajty dzięki RootTwo
-3 bajtów dzięki notjagan
Wypróbuj online!
źródło
bin(n)[2:]
jef"{n:b}"
.Galaretka , 22 bajty
Wypróbuj online!
źródło
Mathematica,
116110 bajtówNieskończenie wyświetla parametry sekwencji.
Wyjaśnienie
x
to lista terminów do tej pory.f
jestFunction
liczbą całkowitą i zwraca całąSubsequences
jej podstawową2
reprezentację (w tym pustą listę{}
i pełną listęIntegerDigits
samych siebie).Oszacuj
...
wartośćn
od2
do∞
.Jeśli
...
takFalse
, to drugi argument funkcjiAnd
(&&
) nigdy nie jest oceniany. Jeśli...
takTrue
, toEcho@n
drukuje i zwracan
, a następnieAppendTo
listęx
.Chcemy sprawdzić, czy niektóre poprawne podłańcuchy
n
nie są podciągami jakiegokolwiek poprzedniego terminu w sekwencji.Most@f@n
lista odpowiednich podciągi on
, my wtedy sprawdzić, czy istnieją jakieś podciągis_
który jestMemberQ
z tej listy, tak że listaf/@x
wykazów podciągi poprzednich pod względem sekwencji jestFreeQ
zs
na poziomie2
.źródło
Mathematica,
10994 bajtówCiągłe wyprowadzanie terminów sekwencji
Specjalne podziękowania dla @ngenisis za -15 bajtów
Mathematica, 123 bajty
Weź n jako dane wejściowe i wygeneruj n-ty termin w tej sekwencji (1 indeksowany)
Wejście
wynik
źródło
15
bajty, które mogą przejść:SubsetQ
jest krótszy niż i równoważnyContainsAll
, możesz użyćAnd
zamiast niegoIf
,Union
jest niepotrzebny iDo
prawie zawsze jest krótszy niżFor
:s={};Do[!SubsetQ[s,(t=Subsequences@IntegerDigits[i,2])[[2;;-2]]]&&(s=s~Join~t;Echo@i),{i,∞}]
3
więcej bajtów przy użyciuMost
:s={};Do[!SubsetQ[s,Most[t=Subsequences@IntegerDigits[i,2]]]&&(s=s~Join~t;Echo@i),{i,2,∞}]
Pyth , 20 bajtów
Spowoduje to wydrukowanie sekwencji w nieskończoność. W związku z tym można go używać tylko offline.
Objaśnienie (spacja jest znakiem nowej linii):
źródło
Pyth , 20 bajtów
Wypróbuj online!
źródło
Haskell,
172 bajtyWypróbuj online.
Wyjaśnienie
Kod generuje sekwencję w sposób ciągły.
b
zwraca binarną reprezentacjęInt
jako jakoString
s
zwraca wszystkie podciągi ciągup
zwraca wszystkie poprawne podłańcuchy łańcuchan
jest funkcją, która jest stosowana iteracyjnie i zwraca krotkę zawierającą:scanl
jest używany do wywoływanian
w kółko, a jego wynik jest filtrowany, aby zawierał tylko elementy większe niż 1Oto nieco bardziej czytelna wersja przed golfem:
źródło
JavaScript, 57 bajtów
Pokaż fragment kodu
Napiszmy podaną liczbę nw postaci binarnej, a następnie:
10
, n musi w sekwencji:1
, pozostały ciąg binarny nie może być widoczny, ponieważ n jest najmniejszą liczbą, która może zawierać taki ciąg11
:1
z niego, pozostały ciąg binarny (przekażmy go, jak1x
trzeba zobaczyć, ponieważ:1x
jest w sekwencji, lub1x0
jest w sekwencji, ponieważ zawiera unikatowy ciąg podrzędny1x
Wniosek:
binarna postać liczby zaczyna się od
10
lub kończy,1
po której następuje liczba nieparzysta0
. Lub opisz w regex: x match/^10|10(00)*$/
.źródło