LoginSignup
3
0

More than 3 years have passed since last update.

はじめに

What is AtCoder?

  • 世界最高峰の競技プログラミングサイトです
  • だいたい毎週土曜や日曜の21時すぎにコンテストが行われているようです
  • 出題された問題の答えを出力するプログラムを書いて提出することで自動的に採点されます
  • 実行時間が長かったり、メモリの使用量が多いとパスできません
  • 競技プログラミングというもの自体に私は馴染みがなかったのですが、最近はじめました

はじめての方は

  • ElixirAtCoderにはじめて取り組まれる方は、手前味噌ですが、「AtCoderをElixirでやってみる」をご参照ください
    • インプットの読み取り方などのTipsを書いています
  • Elixir自体がはじめての方はまずインストールしましょう :bangbang::bangbang::bangbang:

便利なツール

プロジェクト作成

$ mkdir awesome_at_coder
$ cd awesome_at_coder
$ asdf local elixir 1.10.2-otp-22
$ mix new .
mix.exs
  defp deps do
    [
      # {:dep_from_hexpm, "~> 0.3.0"},
      # {:dep_from_git, git: "https://github.com/elixir-lang/my_dep.git", tag: "0.1.0"}
      {:ex_at_coder, ">0.0.0"}
    ]
  end
$ mix deps.get

ABC114C

$ mix atcoder.open abc114 c
  • 問題文のページがブラウザで開かれます :rocket:
  • 問題をご確認ください
$ mix atcoder.new abc114
  • 問題文のページからテストケースや回答モジュールの雛形が作られます

ソースコードを書く

  • 自分を信じてがんばって解きましょう
lib/abc114/c.ex
defmodule Abc114.C.Main do
  def main() do
    n = IO.read(:line) |> String.trim() |> String.to_integer()
    digits = Integer.to_string(n) |> String.codepoints() |> Enum.count()

    numbers(digits)
    |> Enum.filter(&(&1 <= n))
    |> Enum.count()
    |> IO.puts()
  end

  defp numbers(digits) do
    1..digits
    |> Enum.reduce([[]], fn _, list_of_lists ->
      Enum.reduce(list_of_lists, [], fn list, acc ->
        [[3 | list], [5 | list], [7 | list], list | acc]
      end)
    end)
    |> Enum.filter(fn list ->
      Enum.any?(list, &(&1 == 3)) and Enum.any?(list, &(&1 == 5)) and Enum.any?(list, &(&1 == 7))
    end)
    |> Enum.map(fn list ->
      Enum.join(list) |> String.to_integer()
    end)
    |> MapSet.new()
  end
end

テストする

$ mix atcoder.test abc114 c

スクリーンショット 2021-02-21 20.38.28.png

:tada::tada::tada:

自信をもって提出しましょう。
提出の際にはモジュール名をMainにして提出します。


Wrapping Up 🎍🎍🎍🎍🎍

3
0
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
3
0