8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Elixirでトリボナッチ数列の問題を解いてみた(制限時間10分)

Last updated at Posted at 2020-06-21

はじめに

ハイライト

lib/tribonacci.ex
defmodule Tribonacci do
  def number(n), do: do_number(n, {1, 3, 7})

  defp do_number(n, {n_3, _, _}) when n <= 0, do: n_3

  defp do_number(n, {n_3, n_2, n_1}) do
    do_number(n - 1, {n_2, n_1, n_3 + n_2 + n_1})
  end
end

0. インストールとプロジェクトの作成

  • まずはElixirをインストールしましょう
  • インストールができましたら以下のコマンドでプロジェクトを作ります
$ mix new tribonacci
$ cd tribonacci

1. ソースコードを書く (その1)

lib/tribonacci.ex
defmodule Tribonacci do
  @doc """
  Tribonacci number.

  ## Examples

      iex> Tribonacci.number(0)
      1
      iex> Tribonacci.number(1)
      3
      iex> Tribonacci.number(2)
      7
      iex> Tribonacci.number(3)
      11
      iex> Tribonacci.number(4)
      21

  """
  def number(0), do: 1
  def number(1), do: 3
  def number(2), do: 7
  def number(n), do: number(n - 3) + number(n - 2) + number(n - 1)
end
  • ## Examplesのコメント部分はDoctestと呼ばれるものでテストができます
$ mix test
  • mix newしたときに元からできているhello/0関数はこの記事では消していますが、そのまま残していてもかまいません
  • test/tribonacci_test.exshello/0関数のテストがありますので、hello/0関数を消した場合には消すなり、気にしないことにするなりしてください

50番目(インデックス49)を求めてみましょう

$ iex -S mix

iex> Tribonacci.number(49)
  • 私のパソコンでは計算に時間がかかって待ちきれませんでした
  • Ctl+Cを2回押して強制終了しましょう

2. ソースコードを書く (その2)

lib/tribonacci.ex
defmodule Tribonacci do
  @doc """
  Tribonacci number.

  ## Examples

      iex> Tribonacci.number(0)
      1
      iex> Tribonacci.number(1)
      3
      iex> Tribonacci.number(2)
      7
      iex> Tribonacci.number(3)
      11
      iex> Tribonacci.number(4)
      21

  """
  def number(n), do: do_number(n, {1, 3, 7})

  defp do_number(n, {n_3, _, _}) when n <= 0, do: n_3

  defp do_number(n, {n_3, n_2, n_1}) do
    do_number(n - 1, {n_2, n_1, n_3 + n_2 + n_1})
  end
end
  • テストがあるので修正が正しいことを確かめられます
$ mix test
  • Doctestの部分がパスしていることでしょう

あらためて50番目(インデックス49)を求めてみましょう

$ iex -S mix

iex> Tribonacci.number(49)
17079382868243

:tada::tada::tada:

  • IExSystem.haltで終わらせましょう

Wrapping Up

  • お好みの言語でトリボナッチ数列をお楽しみください
  • Enjoy!
8
2
4

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
8
2

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?