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.