Elixir로 ABC174의 A, B, C 문제를 제압!
소개
@u2dayo 님의 【AtCoder 해설】Python으로 ABC174의 A, B, C 문제를 제압한다!을 쳐다 보았습니다.
문제
준비
AtCoder Beginner Contest 174 설치
$ mix new at_coder
$ cd at_coder
설치
lib/at_coder_174_a.ex
defmodule AtCoder174A do
def main do
IO.read(:line)
|> String.trim()
|> String.to_integer()
|> solve()
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc174/tasks/abc174_a
## Examples
iex> AtCoder174A.solve(25)
"No"
iex> AtCoder174A.solve(30)
"Yes"
iex> AtCoder174A.solve(-1)
"No"
"""
def solve(x) when x >= 30, do: "Yes"
def solve(_), do: "No"
end
solve/1
두 개의 함수를 작성했지만 위에서부터 순서대로 처음 일치하는 것이 실행됩니다.## Examples
에 쓰여진 것은 문제 A - Air Conditionertest/at_coder_test.exs
에 설정을 더해 둡시다 test/at_coder_test.exs
defmodule AtCoderTest do
use ExUnit.Case
doctest AtCoder174A
$ mix test
..........
Finished in 0.2 seconds
9 doctests, 1 test, 0 failures
ExUnit.DocTest의 경우 모듈 이름은
Main
이어야합니다 제출
lib/at_coder_174_b.exdefmodule AtCoder174B do
def main do
[n, d] =
IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
1..n
|> Enum.reduce([], fn _, acc ->
[
IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
| acc
]
end)
|> solve(d)
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc174/tasks/abc174_b
## Examples
iex> AtCoder174B.solve([[0, 5], [-2, 4], [3, 4], [4, -4]], 5)
3
"""
def solve(list_of_lists, d) do
square_of_d = d * d
list_of_lists
|> Enum.map(fn [x, y] -> x * x + y * y end)
|> Enum.filter(&(&1 <= square_of_d))
|> Enum.count()
end
end
defmodule AtCoder174B do
def main do
[n, d] =
IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
1..n
|> Enum.reduce([], fn _, acc ->
[
IO.read(:line) |> String.trim() |> String.split(" ") |> Enum.map(&String.to_integer/1)
| acc
]
end)
|> solve(d)
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc174/tasks/abc174_b
## Examples
iex> AtCoder174B.solve([[0, 5], [-2, 4], [3, 4], [4, -4]], 5)
3
"""
def solve(list_of_lists, d) do
square_of_d = d * d
list_of_lists
|> Enum.map(fn [x, y] -> x * x + y * y end)
|> Enum.filter(&(&1 <= square_of_d))
|> Enum.count()
end
end
문제 B - Distance의 경우 모듈 이름은
Main
이어야합니다 String.split(" ")
그리고 하지 않고 String.split()
와 pattern
를 지정하지 않고 호출하면 타임 아웃 해 버리는 일이있었습니다.제출
문제 C - Repsept 의 해설을 매우 참고로 했습니다!
lib/at_coder_174_c.ex
defmodule AtCoder174C do
def main do
IO.read(:line)
|> String.trim()
|> String.to_integer()
|> solve()
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc174/tasks/abc174_c
## Examples
iex> AtCoder174C.solve(101)
4
iex> AtCoder174C.solve(2)
-1
iex> AtCoder174C.solve(999983)
999982
"""
def solve(k) do
1..k
|> Enum.reduce_while({0, -1}, fn i, {a, _result} ->
a = a * 10 + 7
rem = rem(a, k)
if rem == 0, do: {:halt, {rem, i}}, else: {:cont, {rem, -1}}
end)
|> elem(1)
end
end
원래 기사의 경우 모듈 이름은
Main
이어야합니다 Wrapping Up
제출에서 입력을 공백으로 나눌 때 두 번째 인수
pattern
에 " "
를 지정합시다.Reference
이 문제에 관하여(Elixir로 ABC174의 A, B, C 문제를 제압!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/156f8da828c0fac58f11텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)