야구의 볼 카운트(어떻게 쓰는)(Elixir)

14130 단어 Elixir

소개



  • Elixir 즐기십니까

  • @ 나베타 님의 「 오프라인 실시간 어떻게 쓰는 제3회 참고문제 」를 Elixir 로 해 보았습니다

  • @obelisk68의 "야구 볼 카운트 (어떻게 쓰는)"에서 문제의 존재를 알았습니다.


  • 준비



  • Elixir을 설치합시다
  • 앞에 된장이지만 설치 등을 참조하십시오

  • 잘못하면


  • 모든 것을 준비하는 것이 중요합니다
  • 여기가 제일 시시하지 않고, 수수께끼에 빠져 버리는 경우가 많습니다만, 노력해 주세요!
  • 잘 안 된다면, 과감하게 내 가슴에 뛰어들어오길 바란다 (by 나가시마 시게오 요미우리 자이언츠 종신 명예 감독)

  • elixirjp.slack.com slack workspace 또는 NervesJP workspace에 들어와서 @torifukukaiou에 문의하십시오.
  • 비록 내가 대답 할 수 없어도, 진짜 모두 친절하고 부드러운 사람이 많기 때문에 반드시 해결할 수 있습니다.


  • mix new


    $ mix new ball_count
    $ cd ball_count
    

    소스 코드 작성



    lib/ball_count.ex
    defmodule BallCount do
      @doc """
    
      ## Examples
    
          iex> BallCount.solve("s")
          "010"
    
          iex> BallCount.solve("sss")
          "010,020,100"
    
          iex> BallCount.solve("bbbb")
          "001,002,003,000"
    
          iex> BallCount.solve("ssbbbb")
          "010,020,021,022,023,000"
    
          iex> BallCount.solve("ssbbbb")
          "010,020,021,022,023,000"
    
          iex> BallCount.solve("hsbhfhbh")
          "000,010,011,000,010,000,001,000"
    
          iex> BallCount.solve("psbpfpbp")
          "100,110,111,200,210,000,001,100"
    
          iex> BallCount.solve("ppp")
          "100,200,000"
    
          iex> BallCount.solve("ffffs")
          "010,020,020,020,100"
    
          iex> BallCount.solve("ssspfffs")
          "010,020,100,200,210,220,220,000"
    
          iex> BallCount.solve("bbbsfbppp")
          "001,002,003,013,023,000,100,200,000"
    
          iex> BallCount.solve("sssbbbbsbhsbppp")
          "010,020,100,101,102,103,100,110,111,100,110,111,200,000,100"
    
          iex> BallCount.solve("ssffpffssp")
          "010,020,020,020,100,110,120,200,210,000"
      """
      def solve(input) do
        String.codepoints(input)
        |> Enum.reduce([{0, 0, 0}], fn c, [head | _] = acc ->
          [do_solve(c, head) | acc]
        end)
        |> Enum.reverse()
        |> tl()
        |> Enum.map(&Tuple.to_list/1)
        |> Enum.map(&Enum.join/1)
        |> Enum.join(",")
      end
    
      defp do_solve("s", {2, 2, _}), do: {0, 0, 0}
    
      defp do_solve("s", {out, 2, _}), do: {out + 1, 0, 0}
    
      defp do_solve("s", {out, strike, ball}), do: {out, strike + 1, ball}
    
      defp do_solve("b", {out, _, 3}), do: {out, 0, 0}
    
      defp do_solve("b", {out, strike, ball}), do: {out, strike, ball + 1}
    
      defp do_solve("h", {out, _, _}), do: {out, 0, 0}
    
      defp do_solve("f", {out, 2, ball}), do: {out, 2, ball}
    
      defp do_solve("f", {out, strike, ball}), do: {out, strike + 1, ball}
    
      defp do_solve("p", {2, _, _}), do: {0, 0, 0}
    
      defp do_solve("p", {out, _, _}), do: {out + 1, 0, 0}
    end
    

    Doctests


  • ## Examples 아래에있는 것은 Doctests이라는 것으로 테스트 할 수 있습니다
  • $ mix test
    ..............
    
    Finished in 0.07 seconds
    13 doctests, 1 test, 0 failures
    

    Wrapping Up 🎍🎍🎍🎍🎍


  • Pipe operator |> , 패턴 매칭 , Enum 모듈의 여러가지 함수, Doctests
  • 모두가 다르다 모두들 (가네코 미스즈)
  • 여러분도 좋아하는 프로그래밍 언어로 써 보세요!

  • Enjoy Elixir
  • 좋은 웹페이지 즐겨찾기