La séquence de Szekeres

9

Définition

  • a(1) = 1
  • a(2) = 2
  • a(n)est le plus petit nombre k>a(n-1)qui évite toute progression arithmétique à 3 termes dans a(1), a(2), ..., a(n-1), k.
  • En d'autres termes, a(n)est le plus petit nombre k>a(n-1)tel qu'il n'existe pas x, y0<x<y<net a(y)-a(x) = k-a(y).

Exemple élaboré

Pour n=5:

On a a(1), a(2), a(3), a(4) = 1, 2, 4, 5

Si a(5)=6, alors 2, 4, 6formez une progression arithmétique.

Si a(5)=7, alors 1, 4, 7formez une progression arithmétique.

Si a(5)=8, alors 2, 5, 8formez une progression arithmétique.

Si a(5)=9, alors 1, 5, 9formez une progression arithmétique.

Si a(5)=10, aucune progression arithmétique ne peut être trouvée.

Par conséquent a(5)=10.

Tâche

Étant donné n, la sortie a(n).

Spécifications

  • n sera un entier positif.
  • Vous pouvez utiliser l'index 0 au lieu de l'index 1, auquel cas cela npeut l'être 0. Veuillez l'indiquer dans votre réponse si vous utilisez l'index 0.

Notation

Puisque nous essayons d'éviter la progression arithmétique à 3 termes, et 3 est un petit nombre, votre code devrait être aussi petit (c'est-à-dire court) que possible, en termes de nombre d'octets.

Cas de test

Les cas de test sont indexés 1. Vous pouvez utiliser l'index 0, mais veuillez le spécifier dans votre réponse si vous le faites.

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

Références

Leaky Nun
la source
2
En relation. (Si je comprends bien votre défi.)
Martin Ender
@MartinEnder Vous avez bien compris mon défi.
Leaky Nun

Réponses:

8

Gelée , 4 octets

Bḅ3‘

Essayez-le en ligne! ou vérifiez tous les cas de test .

Comment ça fonctionne

Cela utilise l'indexation basée sur 0 et la définition principale d' OEIS :

Séquence de Szekeres: a (n) -1 en ternaire = n-1 en binaire

Bḅ3‘  Main link. Argument: n

B     Convert n to binary.
 ḅ3   Convert from ternary to integer.
   ‘  Increment the result.
Dennis
la source
6

Haskell, 37 36 32 octets

En utilisant la formule donnée dans l'entrée OEIS, en utilisant des indices basés sur 0. Merci @nimi pour 4 octets!

a 0=1;a m=3*a(div m 2)-2+mod m 2
flawr
la source
3

Python 3, 28 octets

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

Une fonction anonyme qui prend l'entrée via un argument et renvoie le résultat. Ceci est indexé zéro.

Comment ça fonctionne

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

Essayez-le sur Ideone

TheBikingViking
la source
2

Python 3, 113 octets

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 it!

Leaky Nun
la source
2

Rubis, 28 24 octets

En utilisant la même méthode que Dennis, avec des index basés sur 0:

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

Exécutez les cas de test sur repl.it: https://repl.it/Cif8/1

Jordan
la source
2

Pyke, 5 octets

b2b3h

Essayez-le ici!

Indexation basée sur 0

Même formule que la réponse de gelée

Bleu
la source
0

Java 8, 52 46 octets

0 indexé.

i->Integer.valueOf(Integer.toString(i,2),3)+1;
Justin
la source
Vous n'avez pas besoin du returnmais vous avez besoin du point-virgule après
Leaky Nun
Cette réponse qui dit que les points-virgules ne sont pas comptés; Je pourrais le changer de toute façon, mais le fait de compter les points-virgules est-il le consensus?
Justin
Eh, c'est ce qu'ils m'ont dit. Je ne sais pas si le consensus est en tant que tel.
Leaky Nun
D'accord, pas de retour plus le point-virgule est plus court qu'avant de toute façon :)
Justin