これは何?
を読んで、課題を思いついたので書く。
私も書いては見たものの、そんなに追い込んでない。ruby だし。
課題
まあ普通にフィボナッチ関数がある。引数は非負の整数のみを考えればよい。
\begin{eqnarray}
f(n) &=& n & \quad if \: n≦1 \\
f(n) &=& f(n-1) + f(n-2) & \quad if \: 1<n \\
\end{eqnarray}
コマンドライン引数などで与えられた数 b, c に対して、1秒ぐらいで(厳密でなくて良い)出せる範囲で
f(b^{0}+c),\, f(b^{1}+c),\, f(b^{2}+c),\, f(b^{3}+c), ...
を順に出力せよ。
ただし。全部出すと大変なので、値が 5桁までならそのまま出すけど 6桁以上の場合は途中を省略し、先頭二桁、省略した桁数、末尾の2桁 という形式で出すこと。
実行例は下記の通り。いずれも 1秒弱で実行を終えることができた。
実行例
$ ruby fibo.rb 12 12
f(13)=233
f(24)=46368
f(156)=17(ommit 29 digits)92
f(1740)=19(ommit 360 digits)80
f(20748)=53(ommit 4332 digits)76
f(248844)=93(ommit 52001 digits)08
f(2985996)=80(ommit 624032 digits)72
$ ruby fibo.rb 34 25
f(26)=12(ommit 2 digits)93
f(59)=95(ommit 8 digits)41
f(1181)=29(ommit 243 digits)81
f(39329)=84(ommit 8215 digits)29
f(1336361)=38(ommit 279279 digits)61
$ ruby fibo.rb 99 99
f(100)=35(ommit 17 digits)75
f(198)=10(ommit 38 digits)24
f(9900)=42(ommit 2065 digits)00
f(970398)=68(ommit 202797 digits)24
$ ruby fibo.rb 2 0
f(1)=1
f(2)=1
f(4)=3
︙
中略
︙
f(4194304)=22(ommit 876554 digits)03
f(8388608)=11(ommit 1753112 digits)21
※ 2≦b<100, 0≦c<100 で、いずれも整数。一応上限書いたけど気にしなくても。
※ 不正な入力は来ないものとしてよい。
※ 1秒の測定をどこからにするかは実装者の好みで適当に。
※ 1秒を超えたときの処理も適当で。
実装したら、コメント欄にリンクを書いてくれるとみんな探しやすくて楽しいと思う。