はじめに
- Elixirでやってみました
問題
- AtCoder Beginner Contest 162
- A〜Cまで解いてみます
- 今回はDoctestsを書いていません
準備
$ mix new at_coder
$ cd at_coder
問題A - Lucky 7
- 問題文はリンク先をご参照くださいませ
defmodule Main do
def main do
IO.read(:line) |> String.trim() |> String.contains?("7") |> if(do: "Yes", else: "No") |> IO.puts
end
end
-
提出の際にはモジュール名は
Main
にしておいてください -
- この調子で以下、B問題、C問題を解いていきます
問題B - FizzBuzz Sum
defmodule Main do
def main do
n = IO.read(:line) |> String.trim() |> String.to_integer()
1..n |> Enum.reduce(0, fn i, acc -> if rem(i,3) == 0 or rem(i,5) == 0, do: acc, else: acc + i end) |> IO.puts()
end
end
-
提出の際にはモジュール名は
Main
にしておいてください -
問題C - Sum of gcd of Tuples (Easy)
- 問題文はリンク先をご参照くださいませ
defmodule Main do
def main do
k = IO.read(:line) |> String.trim() |> String.to_integer()
list = for i <- 1..k, j <- 1..k, do: Integer.gcd(i, j)
1..k |> Enum.flat_map(fn i -> Enum.map(list, & Integer.gcd(&1, i)) end) |> Enum.sum |> IO.puts
end
end
-
提出の際にはモジュール名は
Main
にしておいてください - タイムアウトになるかなあと心配しましたがセーフ(1689 ms)でした
- Integer.gcd/2は最大公約数(The greatest common divisor)を計算してくれます