Szekeres dizisi


9

Tanım

  • a(1) = 1
  • a(2) = 2
  • a(n)içinde k>a(n-1)herhangi bir 3-dönemli aritmetik ilerlemeyi önleyen en küçük sayıdır a(1), a(2), ..., a(n-1), k.
  • Başka bir deyişle, orada olmayan , nerede ve olmayan a(n)en küçük sayıdır .k>a(n-1)xy0<x<y<na(y)-a(x) = k-a(y)

Çalışılan örnek

Şunun için n=5:

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

Eğer a(5)=6, o zaman 2, 4, 6aritmetik bir ilerleme oluşturun.

Eğer a(5)=7, o zaman 1, 4, 7aritmetik bir ilerleme oluşturun.

Eğer a(5)=8, o zaman 2, 5, 8aritmetik bir ilerleme oluşturun.

Eğer a(5)=9, o zaman 1, 5, 9aritmetik bir ilerleme oluşturun.

Eğer a(5)=10aritmetik bir ilerleme bulunamazsa.

Bu nedenle a(5)=10.

Görev

Verilen n, çıktı a(n).

gözlük

  • n pozitif bir tamsayı olacaktır.
  • 1 dizinli yerine 0 dizinli kullanabilirsiniz, bu durumda nolabilir 0. 0 dizinli kullanıyorsanız lütfen cevabınızda belirtin.

puanlama

3-dönemli aritmetik ilerlemeden kaçınmaya çalıştığımız ve 3 küçük bir sayı olduğu için, kodunuzun bayt sayısı açısından mümkün olduğunca küçük (yani kısa) olması gerekir.

testcases

Test senaryoları 1 endekslidir. 0 dizinli kullanabilirsiniz, ancak bunu yaparsanız lütfen cevabınızda belirtin.

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

Referanslar



@MartinEnder Zorluğumu doğru anladın.
— Leaky Nun

Yanıtlar:



6

Haskell, 37 36 32 bayt

OEIS girişinde verilen formülü kullanarak, 0 tabanlı endeksleri kullanarak. @Nimi için 4 bayt teşekkürler!

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

3

Python 3, 28 bayt

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

Bağımsız değişken üzerinden girdi alan ve sonucu döndüren anonim bir işlev. Bu sıfır indekslidir.

Nasıl çalışır

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

Ideone üzerinde deneyin


2

Python 3, 113 bayt

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]

Boşver!


2

Yakut, 28 24 bayt

0 tabanlı dizinlerle Dennis ile aynı yöntemi kullanarak:

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

Test senaryolarını repl.it'te çalıştırın: https://repl.it/Cif8/1



0

Java 8, 52 46 bayt

0 endekslendi.

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

İhtiyacınız yok returnama daha sonra noktalı virgül kullanmanız gerekiyor
— Leaky Nun

Noktalı virgül sayılmayan bu cevap sayılmaz; Her iki şekilde de değiştirebilirim, ancak noktalı virgül sayımı fikir birliği midir?
— Justin

Eh, bana böyle söylediler. Fikir birliğinin böyle olup olmadığını bilmiyorum.
— Leaky Nun

Tamam, dönüşü yok artı noktalı virgül zaten eskisinden daha kısa :)
— Justin
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.