La sequenza di Szekeres


9

Definizione

  • a(1) = 1
  • a(2) = 2
  • a(n)è il numero più piccolo k>a(n-1)che evita qualsiasi progressione aritmetica a 3 termini in a(1), a(2), ..., a(n-1), k.
  • In altre parole, a(n)il numero più piccolo è k>a(n-1)tale che non esiste x, ydove 0<x<y<ne a(y)-a(x) = k-a(y).

Esempio risolto

Per n=5:

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

Se a(5)=6, quindi 2, 4, 6forma una progressione aritmetica.

Se a(5)=7, quindi 1, 4, 7forma una progressione aritmetica.

Se a(5)=8, quindi 2, 5, 8forma una progressione aritmetica.

Se a(5)=9, quindi 1, 5, 9forma una progressione aritmetica.

Se a(5)=10non è possibile trovare alcuna progressione aritmetica.

Pertanto a(5)=10.

Compito

Dato n, output a(n).

Specifiche

  • n sarà un numero intero positivo.
  • È possibile utilizzare 0 indicizzato anziché 1 indicizzato, nel qual caso npuò essere 0. Si prega di indicarlo nella risposta se si utilizza 0-indicizzato.

punteggio

Poiché stiamo cercando di evitare la progressione aritmetica a 3 termini e 3 è un numero piccolo, il tuo codice dovrebbe essere il più piccolo (cioè breve) possibile, in termini di conteggio dei byte.

Casi test

I casi di test sono 1 indicizzati. Puoi usare 0-indexed, ma per favore specificalo nella tua risposta se lo fai.

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

Riferimenti


2
Relazionato. (Se capisco correttamente la tua sfida.)
Martin Ender il

@MartinEnder Hai compreso correttamente la mia sfida.
Leaky Nun,

Risposte:


8

Gelatina , 4 byte

Bḅ3‘

Provalo online! o verifica tutti i casi di test .

Come funziona

Questo utilizza l'indicizzazione basata su 0 e la definizione primaria da OEIS :

La sequenza di Szekeres: a (n) -1 in ternario = n-1 in binario

Bḅ3‘  Main link. Argument: n

B     Convert n to binary.
 ḅ3   Convert from ternary to integer.
   ‘  Increment the result.

6

Haskell, 37 36 32 byte

Utilizzando la formula indicata nella voce OEIS, utilizzando indici basati su 0. Grazie @nimi per 4 byte!

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

3

Python 3, 28 byte

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

Una funzione anonima che accetta input tramite argomento e restituisce il risultato. Questo è a zero.

Come funziona

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

Provalo su Ideone


2

Python 3, 113 byte

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



2

Pyke, 5 byte

b2b3h

Provalo qui!

Indicizzazione basata su 0

Stessa formula della risposta gelatina


0

Java 8, 52 46 byte

0 indicizzato.

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

Non ti serve returnma dopo hai bisogno del punto e virgola
Leaky Nun,

Questa risposta dice che i punti e virgola non vengono conteggiati; Potrei cambiarlo in entrambi i modi, ma contare i punti e virgola è il consenso?
Giustino,

Eh, è quello che mi hanno detto. Non so se il consenso sia tale.
Leaky Nun,

Va bene, nessun ritorno più il punto e virgola è più breve di prima comunque :)
Justin
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.