Elixir에서 ABC160의 A, B, C 문제를 제어하십시오!
소개
Elixir 에서 해 보았습니다
문제
준비
Elixir 설치
$ mix new at_coder
$ cd at_coder
문제 A - Coffee
lib/abc_160_a.ex
defmodule Abc160A do
def main do
IO.read(:line)
|> String.trim()
|> solve()
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc160/tasks/abc160_a
## Examples
iex> Abc160A.solve("sippuu")
"Yes"
iex> Abc160A.solve("iphone")
"No"
iex> Abc160A.solve("coffee")
"Yes"
"""
def solve(s) do
String.codepoints(s) |> do_solve()
end
defp do_solve([_, _, f, f, e, e]), do: "Yes"
defp do_solve(_), do: "No"
end
## Examples
에 쓰여진 것은 Doctests"Yes"
를 표시해, 그렇지 않은 경우에는 "No"
를 돌려주는 if/2 로 쓸 수도 있습니다
do_solve/1
와 같이 리스트의 요소에 같은 변수명을 사용하는 것으로 3번째와 4번째가 같고 5번째와 6번째가 같다는 것을 표현하고 있습니다(이런 쓰는 방법 개미라는 것은 나에게 발견) test/at_coder_test.exs
에 설정을 더해 둡시다 test/at_coder_test.exs
defmodule AtCoderTest do
use ExUnit.Case
doctest Abc160A
$ mix test
..........
Finished in 0.2 seconds
9 doctests, 1 test, 0 failures
제출의 경우 모듈 이름은
Main
이어야합니다 문제 B - Golden Coins
lib/abc_160_b.exdefmodule Abc160B do
def main do
IO.read(:line)
|> String.trim()
|> String.to_integer()
|> solve()
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc160/tasks/abc160_b
## Examples
iex> Abc160B.solve(1024)
2020
iex> Abc160B.solve(0)
0
iex> Abc160B.solve(1000000000)
2000000000
"""
def solve(x) do
div(x, 500) * 1000 + div(rem(x, 500), 5) * 5
end
end
defmodule Abc160B do
def main do
IO.read(:line)
|> String.trim()
|> String.to_integer()
|> solve()
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc160/tasks/abc160_b
## Examples
iex> Abc160B.solve(1024)
2020
iex> Abc160B.solve(0)
0
iex> Abc160B.solve(1000000000)
2000000000
"""
def solve(x) do
div(x, 500) * 1000 + div(rem(x, 500), 5) * 5
end
end
제출의 경우 모듈 이름은
Main
이어야합니다 문제 C - Traveling Salesman around Lake
lib/abc_160_c.ex
defmodule Abc160C do
def main do
[k, _n] =
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(k)
|> IO.puts()
end
@doc ~S"""
https://atcoder.jp/contests/abc160/tasks/abc160_c
## Examples
iex> Abc160C.solve([5, 10, 15], 20)
10
iex> Abc160C.solve([0, 5, 15], 20)
10
"""
def solve(list, k) do
first = hd(list)
list
|> Kernel.++([first + k])
|> Enum.chunk_every(2, 1, :discard)
|> Enum.reduce(0, fn [small, big], acc ->
diff = big - small
if diff > acc, do: diff, else: acc
end)
|> Kernel.-(k)
|> Kernel.*(-1)
end
end
Enum.chunk_every/4 가 대활약입니다!
제출의 경우 모듈 이름은
Main
이어야합니다 Wrapping Up
Reference
이 문제에 관하여(Elixir에서 ABC160의 A, B, C 문제를 제어하십시오!), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/torifukukaiou/items/41b06055d8ac5fb7bb94텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)