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


2
En relation. (Si je comprends bien votre défi.)
Martin Ender

@MartinEnder Vous avez bien compris mon défi.
Leaky Nun

Réponses:



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

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


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!


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



0

Java 8, 52 46 octets

0 indexé.

i->Integer.valueOf(Integer.toString(i,2),3)+1;

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
En utilisant notre site, vous reconnaissez avoir lu et compris notre politique liée aux cookies et notre politique de confidentialité.
Licensed under cc by-sa 3.0 with attribution required.