Nomor Narayana-Zidek-Capell


17

Menghasilkan n th Narayana-Zidek-Capell jumlah diberi masukan n . Bytes paling sedikit menang.

f (1) = 1, f (n) adalah jumlah dari lantai sebelumnya (n / 2) istilah Narayana-Zidek-Capell.

Kasus uji:

f(1)=1

f(9)=42

f(14)=1308

f(15)=2605

f(23)=664299

12
Selamat Datang di Programming Puzzles & Code Golf! Ini adalah tantangan pertama yang bagus. Meskipun pada akhirnya terserah Anda, biasanya kami sarankan menunggu setidaknya seminggu untuk menerima jawaban. Memiliki jawaban yang diterima sejak dini dapat mengirim sinyal kepada pengguna lain bahwa tantangannya lebih atau kurang, yang membuat mereka enggan berpartisipasi.
Alex A.

Jawaban:


6

Jelly, 11 10 byte

HĊrµṖ߀Sȯ1

Cobalah online!

Dibawa nsebagai argumen dan mencetak hasilnya.

Penjelasan

H              divide input by 2
 Ċ             round up to get first n to recurse
  r            inclusive range from that to n
   µ           (chain separator)
    Ṗ          remove n itself from the range
     ߀        call self recursively on each value in the range
       S       sum results
        ȯ1     if sum was zero, return one

7

Ruby, 34 32 byte

Ini menggunakan rumus dari halaman OEIS untuk nomor Narayana-Zidek-Cappell .

Sunting: Singkirkan tanda kurung menggunakan prioritas operator dengan terima kasih kepada feersum dan Neil.

f=->x{x<4?1:2*f[x-1]-x%2*f[x/2]}

Tentunya Anda tidak membutuhkan tanda kurung x%2?
feersum

Ya, tidak jika Anda x%2*setidaknya menaruh .
Neil

@feersum dan Neil Terima kasih keduanya
Sherlock9

Suntingan pertanyaan sebelumnya menyarankan bahwa rumusnya adalah x<2?... ini membuatnya lebih jelas, terima kasih!
Neil

6

Python 2, 48 42 38 36 byte

Algoritma diambil dari halaman OEIS. n<3dapat diubah menjadi n<4tanpa efek. Mengembalikan angka nth, di mana nbilangan bulat positif.

a=lambda n:n<3or 2*a(n-1)-n%2*a(n/2)

Cobalah online


5

05AB1E, 16 byte

Solusi berulang karena 05AB1E tidak memiliki fungsi.

X¸sGDN>;ï£Os‚˜}¬

X¸               # initialize a list with 1
  sG          }  # input-1 number of times do
    D            # duplicate current list
     N>;ï£       # take n/2 elements from the list
          O      # sum those elements
           s‚˜   # add at the start of the list
               ¬ # get the first element and implicitly print

Cobalah online



4

Python 3, 67 byte

def f(n):
 x=1,
 for i in range(n):x+=sum(x[-i//2:]),
 print(x[-1])

Fungsi yang mengambil input melalui argumen dan mencetak ke STDOUT. Ini adalah implementasi langsung dari definisi tersebut.

Bagaimana itu bekerja

def f(n):               Function with input target term index n
 x=1,                   Initialise term list x as tuple (1)
 for i in range(n):...  For all term indices in [0,n-1]...
 x[-i//2:]              ..yield the previous floor(i/2) terms...
 x+=sum(...)            ...and append their sum to x
 print(x[-1])           Print the last term in x, which is the nth term

Cobalah di Ideone



3

Mathematica, 38 byte

If[#<4,1,2#0[#-1]-#~Mod~2#0[(#-1)/2]]&

Fungsi anonim. Mengambil 𝑛 sebagai input dan mengembalikan 𝑓 (𝑛) sebagai output. Didasarkan pada solusi Ruby.


Tidak ada bawaan?
Gila

@Insane Tidak, tidak ada built-in.
LegionMammal978

Sangat menakjubkan!
Gila

2

Haskell, 34 byte

f 1=1
f n=sum$f<$>[n-div n 2..n-1]

Contoh penggunaan: f 14-> 1308.

Implementasi langsung dari definisi.



1

Pergi, 63 byte

func f(i int) int{if(i<4){return 1};return 2*f(i-1)-i%2*f(i/2)}

Cukup banyak port langsung dari jawaban C.


0

PHP, 81 byte

Ini adalah program lengkap tanpa rekursi. Fungsi rekursif dapat didefinisikan dalam 52 byte (mungkin bisa mengalahkan itu) tapi itu hanya port yang cukup membosankan dari jawaban sherlock9 (dan kesalahan jika Anda meminta f (100) atau lebih) jadi saya memasang ini versi yang lebih panjang dan lebih menarik

<?php for($i=$argv[1];$j=$i;$i--)for(;--$j*2>=$i;)$a[$j]+=$a[$i]?:1;echo$a[1]?:1;

Menyebabkan banyak (O [n]) pemberitahuan tetapi tidak apa-apa.


O(n)pemberitahuan? Hah?
kucing

pemberitahuan adalah tipe kesalahan tidak kritis yang tidak menghentikan eksekusi dan biasanya dibungkam di lingkungan produksi. setiap kali Anda mencoba untuk mendapatkan nilai dari variabel yang tidak dideklarasikan atau offset yang tidak ditentukan dalam array, Anda akan mendapat pemberitahuan. Program ini mencoba untuk mendapatkan nilai offset yang tidak ditentukan O [n] (dan juga beberapa variabel yang tidak dideklarasikan) sehingga Anda mendapatkan pemberitahuan O [n].
user55641

0

R, 55 byte

x[1]=1;for(i in 2:10){x[i]=sum(x[i-1:floor(i/2)])};x[9]

Perubahan 10dalam forlingkaran dan x[9]untuk mendapatkan mana indeks pengguna ingin.


Berikut ini adalah versi rekursif yang panjangnya 54 byte: f=function(n)ifelse(n<4,1,2*f(n-1)-n%%2*f(floor(n/2)))
DSkoog

0

JavaScript, 54 52

f=n=>Math.round(n<3?1:2*f(n-1)-n%2*f(parseInt(n/2)))

Berdasarkan jawaban C.

  • Disimpan 2 byte dengan menggunakan parseIntbukanMath.floor

0

Maple, 46 44 byte

`if`(n<4,1,2*f(n-1)-(n mod 2)*f(floor(n/2)))

Pemakaian:

> f:=n->`if`(n<4,1,2*f(n-1)-(n mod 2)*f(floor(n/2)));
> seq( f(i), i = 1..10 );
  1, 1, 1, 2, 3, 6, 11, 22, 42, 84

0

R, 63 byte

f=function(n,a=0)if(n<2)1 else{for(i in n-1:(n%/%2))a=a+f(i);a}

a=0ditambahkan sebagai default karena itu menyelamatkan saya dua kurung keriting. Fungsi secara rekursif menyebut dirinya sesuai kebutuhan.

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.