Narayana-Zidek-Capell-Zahlen

17

Generiere die n- te Narayana-Zidek-Capell- Zahl bei einer Eingabe von n . Wenigste Bytes gewinnen.

f (1) = 1, f (n) ist die Summe der Narayana-Zidek-Capell-Terme des vorherigen Stockwerks (n / 2).

Testfälle:

f(1)=1

f(9)=42

f(14)=1308

f(15)=2605

f(23)=664299
Oliver Daugherty-Long
quelle
12
Willkommen bei Programming Puzzles & Code Golf! Dies ist eine schöne erste Herausforderung. Obwohl es letztendlich an Ihnen liegt, empfehlen wir, mindestens eine Woche zu warten, bis Sie eine Antwort erhalten. Eine frühzeitig akzeptierte Antwort kann anderen Benutzern signalisieren, dass die Herausforderung mehr oder weniger vorüber ist, was sie von der Teilnahme abhält.
Alex A.

Antworten:

6

Jelly, 11 bis 10 Bytes

HĊrµṖ߀Sȯ1

Probieren Sie es online!

Nimmt nals Argument und gibt das Ergebnis aus.

Erläuterung

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
PurkkaKoodari
quelle
7

Ruby, 34 32 Bytes

Dies verwendet eine Formel von der OEIS-Seite für die Narayana-Zidek-Cappell-Zahlen .

Edit: Dank Feersum und Neil wurden Klammern mit Operator-Priorität entfernt.

f=->x{x<4?1:2*f[x-1]-x%2*f[x/2]}
Sherlock9
quelle
Sicher brauchen Sie keine Klammern dafür x%2?
Feersum
Na ja, nicht wenn du es x%2*zumindest sagst.
Neil
@feersum und Neil Vielen Dank an beide
Sherlock9
Frühere Änderungen an Fragen deuteten darauf hin, dass die Formel x<2?... dies macht es viel klarer, danke!
Neil
6

Python 2, 48 42 38 36 Bytes

Algorithmus von der OEIS-Seite übernommen. n<3kann n<4ohne Wirkung geändert werden . Gibt die nth Zahl zurück, wobei nes sich um eine positive Ganzzahl handelt.

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

Probieren Sie es online aus

mbomb007
quelle
5

05AB1E, 16 Bytes

Eine iterative Lösung wie 05AB1E hat keine Funktionen.

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

Probieren Sie es online aus

Emigna
quelle
5

C 38

Eine Übersetzung des OEIS-Algorithmus. Es gibt hier einfach nicht genug C-Code!

f(n){return n<3?:2*f(n-1)-n%2*f(n/2);}
owacoder
quelle
Wie funktioniert n<3?:(...)Arbeit?
LegionMammal978
2
Es ist eine GCC-Erweiterung (scheint auch in Clang zu funktionieren), die als Bedingung selbst ausgewertet wird, wenn der mittlere Ausdruck fehlt. Weitere Informationen finden Sie auf der entsprechenden GCC-Seite und in dieser SO-Frage .
Owacoder
4

Python 3, 67 Bytes

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

Eine Funktion, die Eingaben über Argumente entgegennimmt und an STDOUT ausgibt. Dies ist eine direkte Implementierung der Definition.

Wie es funktioniert

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

Probieren Sie es auf Ideone

TheBikingViking
quelle
3

Mathematica, 38 Bytes

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

Anonyme Funktion. Nimmt 𝑛 als Eingabe und gibt 𝑓 (𝑛) als Ausgabe zurück. Basierend auf der Ruby-Lösung.

LegionMammal978
quelle
Es ist kein eingebautes?
Insane
@Insane Nein, es gibt kein eingebautes.
LegionMammal978
Einfach unglaublich!
Insane
2

Haskell, 34 Bytes

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

Anwendungsbeispiel: f 14-> 1308.

Eine direkte Umsetzung der Definition.

nimi
quelle
2

Java, 63 Bytes

int z(int n){return n<3?1:n%2>0?(2*z(n-1)-z(n/2)):(2*z(n-1));}
user902383
quelle
1

Los, 63 Bytes

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

So ziemlich ein direkter Port von der C-Antwort

Sefa
quelle
0

PHP, 81 Bytes

Dies ist ein vollständiges Programm ohne Rekursion. Eine rekursive Funktion kann in 52 Bytes definiert werden (das kann man vielleicht übertreffen), aber das ist nur eine ziemlich langweilige Antwort von sherlock9 (und es ist ein Fehler, wenn Sie nach f (100) oder mehr fragen) längere und interessantere Version

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

Verursacht viele (O [n]) Notizen, aber das ist in Ordnung.

user55641
quelle
O(n)Hinweise? Huh?
Katze
Hinweise sind ein nicht kritischer Fehlertyp, der die Ausführung nicht unterbricht und in Produktionsumgebungen häufig stummgeschaltet wird. Wenn Sie versuchen, den Wert einer nicht deklarierten Variablen oder einen nicht definierten Offset in einem Array abzurufen, erhalten Sie eine Benachrichtigung. Dieses Programm versucht, den Wert von O [n] undefinierten Offsets (und auch ein paar nicht deklarierten Variablen) abzurufen, sodass Sie O [n] -Benachrichtigungen erhalten.
user55641
0

R, 55 Bytes

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

Wechseln Sie 10in der forSchleife und x[9]holen Sie sich den gewünschten Index.

Nagesh
quelle
Hier ist eine rekursive Version, die 54 Byte lang ist: 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)))

Basierend auf der C- Antwort.

  • 2 Bytes mit parseIntanstelle von gespeichertMath.floor
user2428118
quelle
0

Ahorn, 46 44 Bytes

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

Verwendung:

> 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
DSkoog
quelle
0

R, 63 Bytes

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

a=0wird als Standard hinzugefügt, da ich zwei geschweifte Klammern speichere. Funktion ruft sich bei Bedarf rekursiv auf.

user5957401
quelle