Elixir에서 ABC161의 A, B, C 문제를 제기하십시오!

15992 단어 AtCoderElixir

소개



  • Elixir 에서 해 보았습니다

  • 문제


  • AtCoder Beginner Contest 161
  • A ~ C까지 풀어보십시오

  • 준비



  • Elixir 설치
  • 앞에 된장입니다만, 설치 등 참고로 해 주세요

  • 프로젝트를 만들어 둡니다
  • $ mix new at_coder
    $ cd at_coder
    

    문제 A - ABC Swap


  • 문제문은 링크처를 참조해 주세요

  • lib/abc_161_a.ex
    defmodule Abc161A do
      def main do
        [x, y, z] =
          IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    
        solve(x, y, z) |> IO.puts()
      end
    
      @doc ~S"""
      https://atcoder.jp/contests/abc161/tasks/abc161_a
    
      ## Examples
    
          iex> Abc161A.solve(1, 2, 3)
          "3 1 2"
          iex> Abc161A.solve(100, 100, 100)
          "100 100 100"
          iex> Abc161A.solve(41, 59, 31)
          "31 41 59"
    
      """
      def solve(x, y, z) do
        [z, x, y] |> Enum.join(" ")
      end
    end
    
  • ## Examples 에 쓰여진 것은 Doctests
  • 자세한 내용은 ExUnit.DocTest을 참조하십시오

  • 답의 키가되는 함수에 대해 문제에 쓰여진 입력 예제를 입력하여 출력 예제와 같이 출력되는지 확인합니다.
  • test/at_coder_test.exs 에 설정을 더해 둡시다

  • test/at_coder_test.exs
    defmodule AtCoderTest do
      use ExUnit.Case
      doctest Abc161A
    
    $ mix test
    ..........
    
    Finished in 0.2 seconds
    9 doctests, 1 test, 0 failures
    

  • 제출의 경우 모듈 이름은 Main이어야합니다


  • 이 음색에서 B 문제, C 문제를 해결합니다.

    문제 B - Popular Vote



    lib/abc_161_b.ex
    defmodule Abc161B do
      def main do
        [_n, m] =
          IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    
        IO.read(:line)
        |> String.trim()
        |> String.split(" ")
        |> Enum.map(&String.to_integer/1)
        |> solve(m)
        |> IO.puts()
      end
    
      @doc ~S"""
      https://atcoder.jp/contests/abc161/tasks/abc161_b
    
      ## Examples
    
          iex> Abc161B.solve([5, 4, 2, 1], 1)
          "Yes"
          iex> Abc161B.solve([380, 19, 1], 2)
          "No"
          iex> Abc161B.solve([4, 56, 78, 901, 2, 345, 67, 890, 123, 45, 6, 789], 3)
          "Yes"
    
      """
      def solve(list, m) do
        sum = Enum.sum(list)
    
        Enum.sort(list, :desc)
        |> Enum.take(m)
        |> Enum.all?(fn a ->
          a * 4 * m >= sum
        end)
        |> if(do: "Yes", else: "No")
      end
    end
    

  • 제출의 경우 모듈 이름은 Main이어야합니다
  • |> if(do: "Yes", else: "No")의 위치는 내 붐입니다.



  • 문제 C - Replacing Integer


  • 문제문은 링크처를 참조해 주세요

  • lib/abc_161_c.ex
    defmodule Abc161C do
      def main do
        [n, k] =
          IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
    
        solve(n, k)
        |> IO.puts()
      end
    
      @doc ~S"""
      https://atcoder.jp/contests/abc161/tasks/abc161_c
    
      ## Examples
    
          iex> Abc161C.solve(7, 4)
          1
          iex> Abc161C.solve(2, 6)
          2
          iex> Abc161C.solve(1000000000000000000, 1)
          0
    
      """
      def solve(n, k) when rem(n, k) == 0, do: 0
    
      def solve(n, k) do
        [abs(n), abs(n - div(n, k) * k), abs(n - div(n, k) * k - k)]
        |> Enum.min()
      end
    end
    

  • 제출의 경우 모듈 이름은 Main이어야합니다

  • Wrapping Up


  • 이번은 자력으로 갈 수 있었습니다!
  • B 문제는 판정에 =를 넣지 않아서 WA (Wrong Answer)
  • C 문제는 이전에 비슷한 문제를했을 때의 경험이 살았습니다.

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