Urutan Szekeres


9

Definisi

  • a(1) = 1
  • a(2) = 2
  • a(n)adalah angka terkecil k>a(n-1)yang menghindari perkembangan aritmatika 3-term dalam a(1), a(2), ..., a(n-1), k.
  • Dengan kata lain, a(n)adalah angka terkecil k>a(n-1)sehingga tidak ada x, di ymana 0<x<y<ndan a(y)-a(x) = k-a(y).

Contoh berhasil

Untuk n=5:

Kita punya a(1), a(2), a(3), a(4) = 1, 2, 4, 5

Jika a(5)=6, maka 2, 4, 6bentuk perkembangan aritmatika.

Jika a(5)=7, maka 1, 4, 7bentuk perkembangan aritmatika.

Jika a(5)=8, maka 2, 5, 8bentuk perkembangan aritmatika.

Jika a(5)=9, maka 1, 5, 9bentuk perkembangan aritmatika.

Jika a(5)=10, ada deret aritmetika dapat ditemukan.

Oleh karena itu a(5)=10.

Tugas

Diberikan n, output a(n).

Spesifikasi

  • n akan menjadi bilangan bulat positif.
  • Anda dapat menggunakan 0-diindeks daripada 1-diindeks, dalam hal nini bisa 0. Silakan sebutkan dalam jawaban Anda jika Anda menggunakan 0-diindeks.

Mencetak gol

Karena kami mencoba untuk menghindari perkembangan aritmatika 3-istilah, dan 3 adalah angka kecil, kode Anda harus sekecil (mis. Sependek) mungkin, dalam hal byte-count.

Testcases

Testcases diindeks 1. Anda dapat menggunakan 0-diindeks, tetapi harap tentukan dalam jawaban Anda jika Anda melakukannya.

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

Referensi


2
Terkait (Jika saya memahami tantangan Anda dengan benar.)
Martin Ender

@ MartinEnder Anda memang memahami tantangan saya dengan benar.
Leaky Nun

Jawaban:


8

Jelly , 4 byte

Bḅ3‘

Cobalah online! atau verifikasi semua kasus uji .

Bagaimana itu bekerja

Ini menggunakan pengindeksan berbasis 0 dan definisi utama dari OEIS :

Urutan Szekeres: a (n) -1 dalam ternary = n-1 dalam biner

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

Menggunakan rumus yang diberikan dalam entri OEIS, menggunakan indeks berbasis 0. Terima kasih @nimi untuk 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

Fungsi anonim yang mengambil input melalui argumen dan mengembalikan hasilnya. Ini adalah indeks-nol.

Bagaimana itu bekerja

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

Cobalah di 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]

Ide itu!


2

Rubi, 28 24 byte

Menggunakan metode yang sama seperti Dennis, dengan indeks berbasis 0:

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

Jalankan test case di repl.it: https://repl.it/Cif8/1



0

Java 8, 52 46 byte

0 diindeks.

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

Anda tidak perlu returntetapi Anda perlu titik koma setelah itu
Leaky Nun

Jawaban ini yang mengatakan titik koma tidak dihitung; Saya bisa mengubahnya, tetapi apakah menghitung titik koma adalah konsensus?
Justin

Eh, itu yang mereka bilang. Saya tidak tahu apakah konsensusnya demikian.
Leaky Nun

Alrighty, tidak ada pengembalian plus semi-colon lebih pendek dari sebelumnya :)
Justin
Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.