Elixir에서 트리보나치 수열 문제를 풀어 보았습니다 (제한 시간 10 분)

9078 단어 Elixir

소개



  • @ Keisuke_ 간식 님의 Ruby에서 트리보나치 수열 문제를 풀어 보았습니다 (제한 시간 10 분)을 보았습니다.

  • ElixirElixir 1.10.3 (compiled with Erlang/OTP 23) 를 사용했습니다

  • 하이라이트



    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을 설치합시다.
  • 앞에 된장입니다만 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 의 코멘트 부분은 설치 라고 하는 것으로 테스트를 할 수 있습니다
  • $ mix test
    
  • mix new 그때 원래부터 만들어졌습니다.
  • hello/0test/tribonacci_test.exs 함수 테스트가 있으므로 hello/0 함수를 지우면 지워지고 걱정하지 마십시오.

    50번째(인덱스 49)를 구합시다.


    $ iex -S mix
    
    iex> Tribonacci.number(49)
    
  • 내 컴퓨터에서 계산하는 데 시간이 걸리고 기다릴 수 없습니다.
  • hello/0를 두 번 눌러 강제 종료하십시오.

    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
    


  • Ctl+CIEx 로 끝내자

  • Wrapping Up


  • 원하는 언어로 트리보나치 시퀀스를 즐길 수 있습니다
  • Enjoy!
  • 좋은 웹페이지 즐겨찾기