Definieren wir eine Folge positiver Ganzzahlen. Wir werden die Reihenfolge auf geraden Zahlen so definieren, dass sie das Doppelte des vorherigen Terms beträgt. Die ungeraden Indizes der Sequenz sind kleinste positive ganze Zahlen, die noch nicht in der Sequenz vorkommen.
Hier sind die ersten paar Begriffe.
1,2,3,6,4,8,5,10,7,14,9,18,11,22,12,24,13,26,15,30
Sie können sich dies auch als die Liste der verketteten Paare (n, 2n) vorstellen, wobei n die bisher am wenigsten verwendete positive Ganzzahl ist.
Aufgabe
Berechnen Sie bei einer Zahl n als Eingabe den n- ten Term in dieser Reihenfolge.
Dies ist Codegolf, daher sollten Sie versuchen, die Größe Ihres Quellcodes in Byte zu minimieren.
(n,2n)
und jede Zahl nur einmal vorkommt. Jedes Paar wird so gewählt, dass es das kleinstmögliche ist, während die letztgenannte Einschränkung eingehalten wird.Antworten:
Haskell, 40 Bytes
Nullbasiert.
l
Erstellt die Sequenz inkrementell aus einer verzögerten Liste verbleibender Ganzzahlen.quelle
JavaScript (ES6),
9282696765 BytesWie?
Wir verfolgen:
Intern verwenden wir einen 0-basierten Index i . Gerade und ungerade Verhaltensweisen werden daher invertiert:
Bei ungeraden Positionen ist der nächste Wert einfach
2 * b
.An geraden Positionen verwenden wir die rekursive Funktion g () und die Nachschlagetabelle a , um den kleinsten Übereinstimmungswert zu identifizieren:
Um ein paar Bytes zu sparen, wird i auf
{}
anstatt initialisiert0
. Dies zwingt uns zu verwenden:i^n
i mit n zu vergleichen, weil({}) ^ n === n
während({}) - n
auswertetNaN
.-~i
um i zu erhöhen , weil({}) + 1
eine Zeichenfolge generiert würde.Demo
Code-Snippet anzeigen
quelle
Python 3 ,
807269 Bytes-7 Bytes dank Mr. Xcoder !
Probieren Sie es online!
quelle
set(...)
mit `{* ...} für 78 Bytes{*...}
stattset(...)
.{...for...in...}
es mehr Byes geben würde.True
für 1 verwendet)Gelee , 15 Bytes
Probieren Sie es online!
quelle
Mathematik ,
5653 Bytes-3 Bytes danke JungHwan Min !
Probieren Sie es online!
Basierend auf dem Mathematica-Ausdruck im OEIS-Link.
quelle
Nest[k=0;If[#~FreeQ~++k,#~Join~{k,2k},#]&,{},#][[#]]&
PHP , 64 Bytes
Probieren Sie es online!
PHP , 77 Bytes
Probieren Sie es online!
PHP , 78 Bytes
Probieren Sie es online!
quelle
PHP, 56 Bytes
PHP,
7572 BytesProbieren Sie es online aus
quelle
05AB1E ,
161514 Bytes1-indiziert.
Verwendet die Tatsache, dass die binäre Darstellung von Elementen an ungeraden Indizes in der Sequenz mit einer geraden Anzahl von Nullen endet: A003159 .
Probieren Sie es online!
Erläuterung
quelle
Python 2 ,
595149 BytesProbieren Sie es online!
Hintergrund
Jede positive ganze Zahl n kann eindeutig ausgedrückt werden als n = 2 o (n) c (n) , wobei c (n) ungerade ist.
Lassen Sie ⟨a n ⟩ n> 0 die Sequenz aus der Herausforderung spec sein.
Wir behaupten, dass für alle positiven ganzen Zahlen n , o (a 2n-1 ) gerade ist. Da o (a 2n ) = o (2a 2n-1 ) = o (a 2n-1 ) + 1 ist, entspricht dies der Behauptung, dass o (a 2n ) immer ungerade ist.
Angenommen, die Behauptung ist falsch und 2m-1 sei der erste ungerade Index der Folge, so dass o (a 2m-1 ) ungerade ist. Beachten Sie, dass 2m der erste gerade Index der Sequenz ist, sodass o (a 2m-1 ) gerade ist.
o (a 2m-1 ) ist ungerade und 0 ist gerade, also ist a 2m-1 durch 2 teilbar . Per Definition ist eine 2m-1 die kleinste positive Ganzzahl, die noch nicht in der Sequenz vorkommt , was bedeutet, dass zuvor eine 2m-1 /2 vorgekommen sein muss. Sei k der (erste) Index von a 2m-1 /2 in a .
Da o (a k ) = o (a 2m-1 /2) = o (a 2m-1 ) - 1 gerade ist, impliziert die Minimalität von n , dass k ungerade ist. Dies bedeutet wiederum, dass a k + 1 = 2a k = a 2m-1 ist , was der Definition von a 2m-1 widerspricht .
Wie es funktioniert
noch kommen
quelle
R ,
706965 BytesProbieren Sie es online!
Eine anonyme Funktion mit einem Argument.
F
Der Standardwert istFALSE
oder,0
damit der Algorithmus korrekt einschätzt, dass sich noch keine positiven ganzen Zahlen in der Sequenz befinden.Der Algorithmus erzeugt die Paare in einer
for
Schleife in der folgenden Weise (woi
aus geht2
zu2n
durch2
):quelle
Haskell , 63 Bytes
Probieren Sie es online!
Dieser missbraucht Haskells faule Einschätzung in vollem Umfang.
quelle
Perl 6 , 50 Bytes
Probieren Sie es online!
1, { ... } ... *
ist eine träge erzeugte unendliche Folge, bei der jeder Ausdruck nach dem ersten durch den durch geschweifte Klammern getrennten Codeblock bereitgestellt wird. Da der Block auf die@_
Array , empfängt er die gesamte aktuelle Sequenz in diesem Array.@_ % 2
), sind wir ein noch indiziertes Element zu erzeugen, so dass das nächste Element Doppel das letzte Element ist , haben wir so weit:2 * @_[*-1]
.first * ∉ @_, 1..*
.$_
ist das Argument für die äußere Funktion. Es indiziert in die unendliche Folge und gibt den Rückgabewert der Funktion an.quelle
Mathematica, 82 Bytes
Probieren Sie es online!
quelle
k , 27 Bytes
1-indiziert. Probieren Sie es online!
Verwenden
(!y)^x
statt&^x?!y
auch arbeiten.quelle
C # (Visual C # Interactive Compiler) , 82 Byte
Probieren Sie es online!
-6 Bytes dank @ASCIIOnly!
quelle
:
s benötigt werden, da dies die größte Zahl in der Liste ist2.0
=>2f
Clojure, 102 Bytes
Durchläuft
n
die Sequenz, um sie aufzubauen, und gibt das ersten
Element mit einem Index zurück.quelle
Ruby, 60 Bytes
0-indiziert. Wir schleifen
n/2+1
Zeiten, generieren jedes Mal zwei Werte und speichern sie, indem wir ein Array an ihren Indizes auffüllen.v+v*n%2
gibt die Ausgabe entwederv
oderv*2
abhängig von der Parität vonn
.quelle
Rubin , 49 Bytes
Beginnen Sie mit [0], fügen Sie dem Array Paare hinzu, bis wir mindestens n + 1 Elemente haben, und nehmen Sie dann das n + 1te (1-basiert).
Probieren Sie es online!
quelle
JavaScript (ES6), 60 bis
65ByteEine iterative Lösung.
Weniger golfen
Prüfung
quelle
Jelly ,
131210 BytesDies nutzt die Beobachtung von meiner Python-Antwort .
Probieren Sie es online!
Wie es funktioniert
quelle