Szekeres 'Sequenz

9

Definition

  • a(1) = 1
  • a(2) = 2
  • a(n)ist die kleinste Zahl k>a(n-1), die eine 3-Term-Arithmetik-Progression in vermeidet a(1), a(2), ..., a(n-1), k.
  • Mit anderen Worten, a(n)ist die kleinste Zahl, k>a(n-1)so dass es nicht existiert x, ywo 0<x<y<nund a(y)-a(x) = k-a(y).

Beispiel ausgearbeitet

Für n=5:

Wir haben a(1), a(2), a(3), a(4) = 1, 2, 4, 5

Wenn a(5)=6, dann 2, 4, 6bilden Sie eine arithmetische Folge.

Wenn a(5)=7, dann 1, 4, 7bilden Sie eine arithmetische Folge.

Wenn a(5)=8, dann 2, 5, 8bilden Sie eine arithmetische Folge.

Wenn a(5)=9, dann 1, 5, 9bilden Sie eine arithmetische Folge.

Wenn a(5)=10kein arithmetischer Verlauf gefunden werden kann.

Deshalb a(5)=10.

Aufgabe

Gegeben n, Ausgabe a(n).

Technische Daten

  • n wird eine positive ganze Zahl sein.
  • In diesem Fall nkönnen Sie 0-indiziert anstelle von 1-indiziert verwenden 0. Bitte geben Sie dies in Ihrer Antwort an, wenn Sie 0-indiziert verwenden.

Wertung

Da wir versuchen, eine 3-Term-Arithmetik-Progression zu vermeiden und 3 eine kleine Zahl ist, sollte Ihr Code in Bezug auf die Anzahl der Bytes so klein (dh kurz) wie möglich sein.

Testfälle

Die Testfälle sind 1-indiziert. Sie können 0-indiziert verwenden, geben Sie dies jedoch in Ihrer Antwort an, wenn Sie dies tun.

1     1
2     2
3     4
4     5
5     10
6     11
7     13
8     14
9     28
10    29
11    31
12    32
13    37
14    38
15    40
16    41
17    82
18    83
19    85
20    86
10000 1679657

Verweise

Undichte Nonne
quelle
2
Verbunden. (Wenn ich Ihre Herausforderung richtig verstehe.)
Martin Ender
@ MartinEnder Du hast meine Herausforderung richtig verstanden.
Undichte Nonne

Antworten:

6

Haskell, 37 36 32 Bytes

Verwenden der angegebenen Formel im OEIS-Eintrag unter Verwendung von 0-basierten Indizes. Danke @nimi für 4 Bytes!

a 0=1;a m=3*a(div m 2)-2+mod m 2
fehlerhaft
quelle
3

Python 3, 28 Bytes

lambda n:int(bin(n)[2:],3)+1

Eine anonyme Funktion, die Eingaben über Argumente entgegennimmt und das Ergebnis zurückgibt. Dies ist nullindiziert.

Wie es funktioniert

lambda n    Anonymous function with input zero-indexed term index n
bin(n)      Convert n to a binary string..
...[2:]     ...remove `0b` from beginning...
int(...,3)  ...convert from base-3 to decimal...
...+1       ...increment...
:...        and return

Probieren Sie es auf Ideone

TheBikingViking
quelle
2

Python 3, 113 Bytes

def f(n):
 i=1;a=[]
 for _ in range(n):
  while any(i+x in[y*2for y in a]for x in a):i+=1
  a+=[i]
 return a[n-1]

Ideone es!

Undichte Nonne
quelle
2

Rubin, 28 24 Bytes

Verwenden Sie dieselbe Methode wie Dennis mit 0-basierten Indizes:

->n{n.to_s(2).to_i(3)+1}

Führen Sie die Testfälle auf repl.it aus: https://repl.it/Cif8/1

Jordan
quelle
2

Pyke, 5 Bytes

b2b3h

Probieren Sie es hier aus!

0-basierte Indizierung

Gleiche Formel wie Gelee Antwort

Blau
quelle
0

Java 8, 52 46 Bytes

0 indiziert.

i->Integer.valueOf(Integer.toString(i,2),3)+1;
Justin
quelle
Sie brauchen das nicht, returnaber Sie brauchen das Semikolon danach
Leaky Nun
Diese Antwort , die besagt, dass Semikolons nicht gezählt werden; Ich könnte es so oder so ändern, aber ist das Zählen von Semikolons der Konsens?
Justin
Eh, das haben sie mir gesagt. Ich weiß nicht, ob der Konsens so ist.
Undichte Nonne
Okay, keine Rückkehr plus Semikolon ist sowieso kürzer als zuvor :)
Justin