Codegolf - Номера Нараяны-Зидека-Капелла

  • Автор темы Effobbell
  • Обновлено
  • 21, Oct 2024
  • #1

Создайте нй Нараяна-Зидек-Капель число, заданное входными данными н. Выигрывает наименьшее количество байтов.

f(1)=1, f(n) — сумма членов предыдущего этажа (n/2) Нараяны-Зидека-Капелла.

Тестовые случаи:

 f(1)=1

f(9)=42

f(14)=1308

f(15)=2605

f(23)=664299
 

#код-гольф #математика #последовательность

Effobbell


Рег
05 Mar, 2014

Тем
69

Постов
167

Баллов
512
  • 26, Oct 2024
  • #2

Рубин, 34 32 байта

Здесь используется формула со страницы OEIS для Числа Нараяны-Зидека-Каппеля.

Редактировать: Избавился от круглых скобок, используя приоритет операторов, благодаря feersum и Neil.

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 a=0 
||answer||

Желе, 11 10 байт

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

Попробуйте онлайн!

Берет > 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 as argument and prints the result.

Объяснение

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

Python 2, 48 42 38 36 байт

Алгоритм взят со страницы OEIS. Math.floor may be changed to parseInt без эффекта. Возвращает f=n=>Math.round(n<3?1:2*f(n-1)-n%2*f(parseInt(n/2))) th number, where x[9] является положительным целым числом.

for

Попробуйте онлайн

 

Kabakas


Рег
11 Aug, 2010

Тем
75

Постов
201

Баллов
576
  • 26, Oct 2024
  • #3

05AB1E, 16 байт

Итеративное решение, такое как 05AB1E, не имеет функций.

10

Попробуйте онлайн

 

Dandyforum


Рег
24 Jul, 2006

Тем
63

Постов
204

Баллов
559
  • 26, Oct 2024
  • #4

С, 38

Перевод алгоритма OEIS. Здесь просто не хватает кода C!

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

Питон 3, 67 байт

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

Функция, которая принимает входные данные через аргумент и выводит их в STDOUT. Это прямая реализация определения.

Как это работает

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

Попробуйте на Ideone

 

Alish


Рег
29 Apr, 2020

Тем
69

Постов
188

Баллов
543
  • 26, Oct 2024
  • #6

Математика, 38 байт

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

Анонимная функция. Берёт ??? в качестве входных данных и возвращает ???(???) в качестве выходных данных. На основе решения Ruby.

 

Freehab


Рег
08 Feb, 2014

Тем
69

Постов
173

Баллов
528
  • 26, Oct 2024
  • #7

Хаскель, 34 байта

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

Пример использования: n -> y(n) .

Прямая реализация определения.

 

Olaola


Рег
02 Jun, 2020

Тем
85

Постов
172

Баллов
607
  • 26, Oct 2024
  • #8

Java, 63 байта

L|syM>/b2Ub1 ||answer||

Давай, 63 байта

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

Практически прямой порт из ответа C

 

Leo_need


Рег
27 Jan, 2011

Тем
73

Постов
159

Баллов
544
  • 26, Oct 2024
  • #9

PHP, 81 байт

Это полноценная программа без рекурсии. Рекурсивная функция может быть определена в 52 байтах (возможно, это можно превзойти), но это просто довольно скучный порт ответа sherlock9 (и он выдает ошибку, если вы запрашиваете f(100) или больше), поэтому я выкладываю это более длинная и интересная версия

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

Вызывает много (O[n]) уведомлений, но это нормально.

 

Дмитрий19890


Рег
19 Jan, 2017

Тем
71

Постов
218

Баллов
603
  • 26, Oct 2024
  • #10

Р, 55 байт

f(n){return n<3?:2*f(n-1)-n%2*f(n/2);}

Изменять 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 in the a=lambda n:n<3or 2*a(n-1)-n%2*a(n/2) петля и n to get whichever index the user wants.

 

RakFlooky


Рег
24 Jan, 2011

Тем
67

Постов
209

Баллов
574
  • 26, Oct 2024
  • #11

JavaScript, 54 52

n

На основании ответа C.

  • Сэкономлено 2 байта с помощью n<4 instead of n<3
 

Ivanchenko


Рег
24 Dec, 2010

Тем
71

Постов
211

Баллов
576
  • 26, Oct 2024
  • #12

Клен, 46 44 байта

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

Использование:

n ||answer||

Р, 63 байта

HĊrµṖ߀Sȯ1

f=->x{x<4?1:2*f[x-1]-x%2*f[x/2]} is added as a default because it saves me two curly brackets. Function recursively calls itself as needed.

 

Leo:3


Рег
19 Nov, 2015

Тем
69

Постов
216

Баллов
581
Тем
403,760
Комментарии
400,028
Опыт
2,418,908

Интересно