Zdefiniujmy sekwencję dodatnich liczb całkowitych. Zdefiniujemy sekwencję na liczbach parzystych, aby była podwójna w stosunku do poprzedniego terminu. Dziwne wskaźniki sekwencji będą najmniejszą dodatnią liczbą całkowitą, która nie pojawia się jeszcze w sekwencji.
Oto kilka pierwszych warunków.
1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30
Można to również traktować jako listę połączonych par (n, 2n), gdzie n jest jak dotąd najmniej niewykorzystaną liczbą całkowitą dodatnią.
Zadanie
Biorąc pod uwagę liczbę n jako dane wejściowe, obliczyć n- ty składnik w tej sekwencji.
To jest golf golfowy, więc powinieneś dążyć do zminimalizowania rozmiaru kodu źródłowego mierzonego w bajtach.
(n,2n)
a każda liczba pojawia się tylko raz. Każda para jest wybrana tak, aby była możliwie najmniejsza, przy jednoczesnym przestrzeganiu tego ostatniego ograniczenia.Odpowiedzi:
Haskell, 40 bajtów
Zero.
l
przyrostowo buduje sekwencję z leniwej listy pozostałych liczb całkowitych.źródło
JavaScript (ES6),
9282696765 bajtówW jaki sposób?
Śledzimy:
Wewnętrznie używamy indeksu 0 opartego I . Dziwne, a nawet zachowania są odwrócone:
W nieparzystych pozycjach następna wartość jest po prostu
2 * b
.W pozycjach parzystych używamy funkcji rekurencyjnej g () i tabeli odnośników a, aby zidentyfikować najmniejszą pasującą wartość:
Aby zaoszczędzić kilka bajtów, i jest inicjowany
{}
zamiast0
. Zmusza nas to do korzystania z:i^n
porównać I z n ponieważ({}) ^ n === n
natomiast({}) - n
ma wartośćNaN
.-~i
zwiększyć i , ponieważ({}) + 1
wygenerowałoby ciąg.Próbny
Pokaż fragment kodu
źródło
Python 3 ,
807269 bajtów-7 bajtów dzięki Mr. Xcoder !
Wypróbuj online!
źródło
set(...)
„{* ...} dla 78 bajtów{*...}
set(...)
{...for...in...}
będzie więcej pożegnań.True
przez 1)Galaretka , 15 bajtów
Wypróbuj online!
źródło
Matematyka ,
5653 bajtów-3 bajty dzięki JungHwan Min !
Wypróbuj online!
Na podstawie wyrażenia Mathematica podanego w łączu OEIS.
źródło
Nest[k=0;If[#~FreeQ~++k,#~Join~{k,2k},#]&,{},#][[#]]&
PHP , 64 bajty
Wypróbuj online!
PHP , 77 bajtów
Wypróbuj online!
PHP , 78 bajtów
Wypróbuj online!
źródło
PHP, 56 bajtów
PHP,
7572 bajtówWypróbuj online
źródło
05AB1E ,
161514 bajtów1-indeksowany.
Wykorzystuje fakt, że binarna reprezentacja elementów o nieparzystych indeksach w sekwencji kończy się parzystą liczbą zer: A003159 .
Wypróbuj online!
Wyjaśnienie
źródło
Python 2 ,
595149 bajtówWypróbuj online!
tło
Każda dodatnia liczba całkowita n może być wyrażona jednoznacznie jako n = 2 o (n) c (n) , gdzie c (n) jest nieparzyste.
Niech ⟨a n ⟩ n> 0 mieć sekwencję spec prowokacji.
Twierdzimy, że dla wszystkich liczb całkowitych dodatnich n , o (a 2n-1 ) jest parzyste. Ponieważ o (a 2n ) = o (2a 2n-1 ) = o (a 2n-1 ) + 1 , jest to równoważne z twierdzeniem, że o (a 2n ) jest zawsze nieparzyste.
Załóżmy, że twierdzenie jest fałszywe i niech 2m-1 będzie pierwszym nieparzystym indeksem sekwencji, tak że o (a 2m-1 ) jest nieparzyste. Zauważ, że dzięki temu 2m jest pierwszym parzystym indeksem sekwencji, tak że o (a 2m-1 ) jest parzyste.
O (a 2m-1 ) jest nieparzyste i 0 nawet tak 2m-1 jest podzielna przez 2 . Z definicji, 2m-1 jest najmniejsza dodatnia jeszcze nie pojawia się w sekwencji , co oznacza, że 2m-1 /2 muszą pojawiły się wcześniej. Niech k będzie (pierwszy) indeks na 2m-1 /2 w .
Ponieważ o (a k ) = o (a 2m-1 /2) = o (a 2m-1 ) - 1 jest parzyste, minimalna liczba n oznacza, że k jest nieparzyste. To z kolei oznacza, że k + 1 = 2 a k = a 2 M 1 , w sprzeczności z definicją w 2m-1 .
Jak to działa
jeszcze przed nami
źródło
R ,
706965 bajtówWypróbuj online!
Anonimowa funkcja, która bierze jeden argument. przyjmuje wartość
F
domyślnąFALSE
lub0
taką, że algorytm poprawnie ocenia, że w sekwencji nie ma jeszcze dodatnich liczb całkowitych.Algorytm generuje pary w
for
pętli w następujący sposób (gdziei
przechodzi od2
do2n
przez2
):źródło
Haskell , 63 bajty
Wypróbuj online!
Ten w największym stopniu narusza leniwą ocenę Haskella.
źródło
Perl 6 , 50 bajtów
Wypróbuj online!
1, { ... } ... *
jest leniwie generowaną nieskończoną sekwencją, w której każdy termin po pierwszym jest dostarczany przez blok kodu rozdzielany nawiasami klamrowymi. Ponieważ blok odwołuje się do@_
tablicy, otrzymuje całą bieżącą sekwencję w tej tablicy.@_ % 2
), mamy do generowania nawet indeksowane elementu, więc następnym elementem jest podwójna ostatni element mamy do tej pory:2 * @_[*-1]
.first * ∉ @_, 1..*
.$_
jest argumentem funkcji zewnętrznej. Indeksuje się w nieskończonej sekwencji, podając wartość zwracaną przez funkcję.źródło
Mathematica, 82 bajty
Wypróbuj online!
źródło
k , 27 bajtów
1-indeksowany. Wypróbuj online!
Używanie
(!y)^x
zamiast&^x?!y
działa też.źródło
C # (interaktywny kompilator Visual C #) , 82 bajty
Wypróbuj online!
-6 bajtów dzięki @ASCIIOnly!
źródło
:
są potrzebne, ponieważ będzie to największa liczba na liście2.0
=>2f
Clojure, 102 bajty
Iteruje
n
razy, aby zbudować sekwencję i zwraca tenn
element, 1-indeksowany.źródło
Rubinowy, 60 bajtów
0-indeksowane. Pętlujemy
n/2+1
czasy, generując za każdym razem dwie wartości i przechowując je, wypełniając tablicę przy ich indeksach.v+v*n%2
daje wyjście, albov
czyv*2
w zależności od parytetun
.źródło
Ruby , 49 bajtów
Zacznij od [0], dodawaj pary do tablicy, aż będziemy mieli co najmniej n + 1 elementów, a następnie weź n + 1 (na podstawie 1)
Wypróbuj online!
źródło
JavaScript (ES6), 60
65bajtówIteracyjne rozwiązanie.
Mniej golfa
Test
źródło
Galaretka ,
131210 bajtówWykorzystuje to obserwację z mojej odpowiedzi w języku Python .
Wypróbuj online!
Jak to działa
źródło