高尔夫自定义斐波那契数列


25

斐波那契序列是一个相当众所周知的事情在这里。哎呀,它甚至有自己的标签。但是,尽管如此,我们肯定会坚持我们的根源1, 1, ...(或者是它0, 1, ...?我们可能永远不会知道...)。在此挑战中,规则是相同的,但是您无需获得n斐波那契序列中的第一个项目,而是获得n以Fibonacci式序列中的第一个项目x, y, ...

输入项

三个整数,按您想要的任何顺序。n是输出序列中术语的索引(0或1索引)。xy在当前的程序运行的斐波那契序列中的前两个项目。

输出量

n斐波那契数列中的第个词,以x,开头y

测试用例

(0索引)

n   x     y     out
5   0     0     0
6   0     1     8
6   1     1     13
2   5     5     10
10  2     2     178
3   3     10    23
13  2308  4261  1325165
0   0     1     0
1   0     1     1

(1索引)

n   x     y     out
6   0     0     0
7   0     1     8
7   1     1     13
3   5     5     10
11  2     2     178
4   3     10    23
14  2308  4261  1325165
1   0     1     0
2   0     1     1

注意事项

假设0 <= x <= y

请注意您的输入顺序(必须恒定)。


我们可以接受清单作为输入吗?
Business Cat

@BusinessCat您的意思是[1, 2, 3]?是。无论您需要接受3个整数。
斯蒂芬

@StephenS如何将输入作为n,[x,y]哪里n的一个号码,x并且y是数字在列表中?不过,这可能有点太灵活了;)
汤姆(Tom

1
@ CAD97我会添加它们,我已经忘了它们:)
Stephen

Answers:


15

果冻,3个字节

+¡ạ

按此顺序将xyn(0索引)作为单独的命令行参数。

在线尝试!

怎么运行的

+¡ạ  Main link. Left argument: x. Right argument: y. Third argument: n

  ạ  Yield abs(x - y) = y - x, the (-1)-th value of the Lucas sequence.
+¡   Add the quicklink's left and right argument (initially x and y-x), replacing
     the right argument with the left one and the left argument with the result.
     Do this n times and return the final value of the left argument.

11

CJam14 9字节

l~{_@+}*;

在线尝试!

输入格式为“ xy n”。我还是这个菜鸟,所以我100%肯定有更好的方法可以做到这一点,但是请不要告诉我“这样做”,而只是给我提示,以便我自己找到答案并得到更好。谢谢!


1
ririri可以缩短为2个字节。fI可以缩短为1个字节。
丹尼斯,

6
欢迎来到PPCG!
Martin Ender

@丹尼斯改进了!谢谢!并感谢您的欢迎。
FrodCube


9

JavaScript(ES6),27 26字节

这里没什么好想的,只是删除了初始值0和1的标准JS Fibonacci函数。

n=>g=(x,y)=>n--?g(y,x+y):x

试试吧

f=
n=>g=(x,y)=>n--?g(y,x+y):x
o.value=f(i.value=13)(j.value=2308,k.value=4261)
oninput=_=>o.value=f(+i.value)(+j.value,+k.value)
*{font-family:sans-serif;}
input{margin:0 5px 0 0;width:50px;}
#o{width:75px;}
<label for=i>n: </label><input id=i type=number><label for=j>x: </label><input id=j type=number><label for=k>y: </label><input id=k type=number><label for=o>= </label><input id=o>



5

Haskell,30个字节

x#y=(f!!)where f=x:scanl(+)y f

在线尝试!0索引。用于(x#y)n,例如(0#1)5用于原始序列的第五个元素。

在Haskell中获得斐波那契数列的最可能的最短方法是f=0:scanl(+)1f,它定义了f=[0,1,1,2,3,5,8,...]包含该序列的无限列表。用参数替换0和并生成自定义序列。然后是一个函数,返回的第n个元素。1xy(f!!)f




4

Brain-Flak,38个字节

{({}[()]<(({}<>)<>{}<(<>{}<>)>)>)}{}{}

在线尝试!

{({}[()]<                      >)}     # For n .. 0
         (({}<>)<>            )        # Copy TOS to the other stack and add it to...
                  {}                   # The second value
                    <(<>{}<>)>         # Copy what was TOS back
                                  {}{} # Pop the counter and the n+1th result


3

果冻,6个字节

;SḊµ¡I

在线尝试!

说明

   µ¡  - repeat n times (computes the n+1th and n+2th element):
 S     -  take the sum of the elements of the previous iteration (starting at (x,y))
;      -  append to the end of the previous iteration
  Ḋ    -  remove the first element
     I - Take the difference of the n+1th and n+2th to get the n-th.

3

TAESGL,4个字节

ēB)Ė

1索引

口译员

说明

输入为 n,[x,y]

 ēB)Ė
AēB)     get implicit input "A" Fibonacci numbers where "B" is [x,y]
    Ė    pop the last item in the array



2

Braingolf,15个字节

VR<2-M[R!+v]R_;

_; 最新版本的Braingolf不再需要此功能,但是截止到5分钟前,因此将是非竞争性的。



2

MATL,7个字节

:"wy+]x

输出从0开始。

MATL在线上尝试一下

说明

让输入表示为n(索引)ab(初始项)。

:"     % Implicitly input n. Do this n times
       %   At this point in each iteration, the stack contains the two most
       %   recently computed terms of the sequence, say s, t. In the first
       %   iteration the stack is empty, but a, b will be implicitly input
       %   by the next statement
  w    %   Swap. The stack contains t, s
  y    %   Duplicate from below. The stack contains t, s, t
  +    %   Add. The stack contains t, s+t. These are now the new two most
       %   recently comnputed terms
]      % End
x      % Delete (we have computed one term too many). Implicitly display

2

R,39个字节

f=function(x,y,n)'if'(n,f(y,x+y,n-1),x)

一个简单的递归函数。有趣的是,这比常规的斐波那契数列(没有内置)所能提供的任何内容都短,因为这不必同时分配1xy = P

计算n+1序列号,包括初始值。每次递归都使用计算,n-1并在时停止n==0。然后,返回两个数字中的最低者,并返回n-th值。



2

PHP> = 7.1,55字节

for([,$n,$x,$y]=$argv;$n--;$x=$y,$y=$t)$t=$x+$y;echo$x;

在线版本

PHP> = 7.1,73字节

for([,$n,$x,$y]=$argv,$r=[$x,$y];$i<$n;)$r[]=$r[+$i]+$r[++$i];echo$r[$n];

在线版本


1
利用奇怪的PHP的评估顺序:$y=+$x+$x=$y。另外,您可以使用$n--代替$i++<$n
user63956 '17

2

通用Lisp,49字节,0索引

(defun fib(n x y)(if(= 0 n)x(fib(1- n)y(+ x y))))

我是Lisp菜鸟,所以任何提示都会感激;)

说明:

(defun fib(n x y)                                  | Define a function taking 3 arguments
                 (if(= 0 n)x                       | If n = 0, return x
                            (fib(1- n)y(+ x y))))  | Otherwise, call fib with n-1, y, and x+y


2

br ** nfuck,39岁 29字节

感谢@JoKing -10!

,<,<,[>[>+>+<<-]<[>+<-]>-]>>.

TIO对此(或对于涉及数字的问题的任何BF解决方案)将不能很好地工作。我强烈建议@Timwi EsotericIDE(或自己实施BF)。

需要x的话y,那么n。0索引。假定无限制或缠绕的磁带。

说明

,<,<,            Take inputs. Tape: [n, y, x]
[                While n:
  > [->+>+<<]      Add y to x, copying it to the next cell along as well. Tape: [n, 0, x+y, y]
  < [>+<-]         Move n over. Tape: [0, n, x+y, y]
  >-               Decrement n.
] >>.            End loop. Print cell 2 to the right (x for n == 0).

当您只可以移动n时,为什么还要麻烦移动x和y?在线尝试
Jo King

@JoKing考虑到了这一点(但要靠我自己更长),但是除非OP允许“ -1-indexing” ,否则它不会完全起作用。
Khuldraeseth na'Barya

哦,只需>在末尾添加a 或交换x和y顺序
Jo King

@JoKing我的手掌刚好碰到我的脸。谢谢!
Khuldraeseth na'Barya

为什么您要检查“大脑”而不检查编程语言名称中的第二个单词?
MilkyWay90


1

05AB1E,9个字节

`©GDŠ+}®@

在线尝试!

说明

`           # split inputs as separate to stack
 ©          # store n in register
  G         # n-1 times do
   D        # duplicate top of stack
    Š       # move down 2 places on stack
     +      # add top 2 values of stack
      }     # end loop
       ®@   # get the value nth value from the bottom of stack



1

公理,88 57字节

f(k,x,y)==(repeat(k<=0=>break;c:=y;y:=x+y;x:=c;k:=k-1);x)

这将通过建议的测试(索引为0)

(14) -> f(5,0,0)
   (14)  0
                                                 Type: NonNegativeInteger
(15) -> f(6,0,1)
   (15)  8
                                                    Type: PositiveInteger
(16) -> f(2,5,5)
   (16)  10
                                                    Type: PositiveInteger
(17) -> f(10,2,2)
   (17)  178
                                                    Type: PositiveInteger
(18) -> f(3,3,10)
   (18)  23
                                                    Type: PositiveInteger
(19) -> f(13,2308,4261)
   (19)  1325165
                                                    Type: PositiveInteger


1

TI基本(32字节)

Prompt N,X,Y
While N
X+Y➡Z
Y➡X
Z➡Y
DS<(N,0
End
X
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.