Duplikat Rekam


14

Urutan Rekaman didefinisikan sebagai berikut:

Sebuahn={0jika n = 0Sebuahn-1-njika Sebuahn-1-n>0 dan belum dalam urutan,Sebuahn-1+njika tidak

atau dalam pseudo-code:

a(0) = 0,
if (a(n - 1) - n) > 0 and it is not 
   already included in the sequence,
     a(n) = a(n - 1) - n 
else 
     a(n) = a(n - 1) + n. 

Angka pertama adalah ( OEIS A005132 ):

0, 1, 3, 6, 2, 7, 13, 20, 12, 21, 11, 22, 10, 23, 9, 24, 8, 25, 43, 62, 42, 63, 41, 18, 42

Jika Anda mempelajari urutan ini, Anda akan melihat bahwa ada duplikat, misalnya a(20) = a(24) = 42(diindeks 0). Kami akan memanggil nomor duplikat jika setidaknya ada satu nomor yang sama di depannya secara berurutan.


Tantangan:

Ambil input integer k , dan hasilkan k nomor duplikat k pertama dalam urutan mereka ditemukan sebagai duplikat dalam Urutan Recamán, atau hanya nomor k '.

Nomor duplikat pertama ini adalah:

42, 43, 78, 79, 153, 154, 155, 156, 157, 152, 265, 261, 262, 135, 136, 269, 453, 454, 257, 258, 259, 260, 261, 262

Beberapa hal yang perlu diperhatikan:

  • a (n) tidak dihitung sebagai duplikat jika tidak ada angka identik dalam (0) ... a (n-1) , bahkan jika a (n + m) == a (n) .
  • 42 akan sebelum 43, karena duplikatnya terjadi sebelum duplikat 43
  • Urutannya tidak diurutkan
  • Ada elemen duplikat dalam urutan ini juga. Misalnya nomor 12 dan 23 keduanya 262 (0-diindeks).

Kasus uji (0-diindeks)

k      Output
    0      42
    9     152
   12     262
   23     262
  944    5197
  945   10023
10000   62114

Ini adalah , jadi kode terpendek di setiap bahasa menang!

Penjelasan didorong!



Mengapa bukan 43output sebelumnya 42? Itu muncul pertama kali dalam urutan Recamán. Apakah yang Anda maksudkan adalah output yang pertama kali ditemukan merupakan duplikat?
Luis Mendo

1
43424243

Saya juga, melihat pertanyaan matematika populer. SE baru-baru ini: P
orlp

@ Atau ya? Bisakah Anda menautkannya? Saya belum melihatnya ...
Stewie Griffin

Jawaban:


5

Bahasa Wolfram (Mathematica) , 88 85 76 byte

(For[i=k=j=p=0,k<#,i~FreeQ~p||k++,i=i|p;p+=If[p>++j&&FreeQ[i,p-j],-j,j]];p)&

Cobalah online!

1-diindeks.

Penjelasan

For[

For lingkaran.

i=k=j=p=0

i={Sebuah1,Sebuah2,...}kj=np=Sebuahn-1

k<#

Ulangi sementara kkurang dari input.

i=i|p

Append puntuk imenggunakan kepala Alternatives(versi Golfier dari Listdalam kasus ini).

p+=If[p>++j&&FreeQ[i,p-j],-j,j]

jpjSebuahn-1>np-jiSebuahn-1-np-jpj

i~FreeQ~p||k++

Setiap iterasi, kenaikan kjika ptidak di i(dalam ||(= or) sirkuit pendek sebaliknya).

... ;p

Kembali p.




2

Pyth , 34 33 byte

J]0@LJ.f}K+=G-eJZ*yZ|}GJ<G0~+JKQ1

Cobalah online!

Menghasilkan nduplikat pertama.

* menunggu Jelly atau salah satu dari tumpukan bahasa baru untuk masuk *


2

JavaScript (ES6), 66 59 byte

Mengembalikan istilah N-th , 0-diindeks.

i=>(g=x=>!g[x+=x>n&!g[x-n]?-n:n]||i--?g(g[n++,x]=x):x)(n=0)

Cobalah online!

Bagaimana?

Kami menggunakan g () sebagai fungsi rekursif utama kami dan sebagai objek untuk melacak duplikat.

i => (                    // given i
  g = x =>                // g = recursive function and generic object
    !g[x +=               // update x:
      x > n & !g[x - n] ? //   if x is greater than n and x - n was not visited so far:
        -n                //     subtract n from x
      :                   //   else:
        n                 //     add n to x
    ]                     // if x is not a duplicate
    || i-- ?              // or x is a duplicate but not the one we're looking for:
      g(g[n++, x] = x)    //   increment n, mark x as visited and do a recursive call
    :                     // else:
      x                   //   stop recursion and return x
)(n = 0)                  // initial call to g() with n = x = 0

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.