LoginSignup
5
2

More than 3 years have passed since last update.

Enjoy Elixir #008 AtCoderを解いてみる

Last updated at Posted at 2020-07-20
1 / 10

はじめに

  • KFIEという近畿大学産業理工学部の情報系コミュニティがあります
  • 最近は、毎週火曜日にLT会をやっているそうです
  • 私が学生だったのはもうずいぶん昔のことなのですが、参加させてもらっています
  • 毎週、5分間時間をもらって、Elixirいいよ! を伝えていきたいとおもいます
  • 今日は以下を学びます
    • AtCorderを解いてみます
    • いろいろな問題を解いてみるといろいろと文法を覚えたり、公式ドキュメントの確認に抵抗がなくなっていくとおもいます
  • A journey of a thousand miles begins with a single step.
  • この記事はElixirを触るのがはじめてという方に向けて書いています
  • elixir 1.10.4-otp-23
  • erlang 23.0.1

もくじ

001 mix new, iex -S mix, mix format
|> 002 型
|> 003 Pattern matching
|> 004 Modules and functions
|> 005 Pipe operator and Enum module
|> 006 HTTP GET!
|> 007 Flow
|> 008 AtCoderを解いてみる
|> 999 Where to go next


準備

$ mix new hello_at_coder
$ cd hello_at_coder

A - Payment

  • 問題文はリンク先をご確認ください
lib/main.ex
defmodule Main do
  def main do
    IO.gets("")
    |> String.trim()
    |> String.to_integer()
    |> solve()
    |> IO.puts()
  end

  @doc ~S"""
  Solve

  ## Examples

      iex> Main.solve(1900)
      100
      iex> Main.solve(3000)
      0

  """
  def solve(n) do
    1..10
    |> Enum.reduce_while(0, fn _, payment ->
      if payment < n, do: {:cont, payment + 1000}, else: {:halt, payment}
    end)
    |> Kernel.-(n)
  end
end

test/hello_at_coder_test.exs
defmodule HelloAtCoderTest do
  use ExUnit.Case
  doctest HelloAtCoder
  doctest Main # add

  • 愚直にn円以上となるように千円札を集めて、その合計金額からn円を引くという方法で解きました
  • Main.solve/1のコメントはDoctestと呼ばれるテストになっています :rocket::rocket::rocket:
    • 解答のキモの部分だけテストを作って、その前後で入力と出力を|>でつなぐとよいでしょう
  • エントリーポイントと言えばいいですかね、AtCoderElixirで解きたい場合にはMain.main/0から実行されます

実行

$ mix test
...

Finished in 0.07 seconds
2 doctests, 1 test, 0 failures

Randomized with seed 687098

提出 :tada::tada::tada:

提出 #15335013
スクリーンショット 2020-07-20 22.19.12.png


Wrapping Up

  • 今日のポイントは、Doctestです
  • AtCoderを解く時にはMain.main/0を用意します
    • ちなみに私は何の自慢にもなりませんが、このA問題を解くのはそれほど時間はかかりませんでしたが、C問題あたりからはめちゃくちゃ時間がかかっています :sweat:
  • 次回は、何にしようかな(ネタ検討中)
    • 来週を待ちきれない方は、リソースやコミュニティの情報を Where to go next にまとめていますのでダイブしてください!
  • Enjoy!!!
5
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
5
2