Skip to content

A Cargo package template for AtCoder competitions / AtCoder競技向けのCargoパッケージテンプレート

License

Notifications You must be signed in to change notification settings

rust-lang-ja/atcoder-rust-base

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

39 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

AtCoder Rust Base (ja)

このリポジトリにはAtCoderコンテスト(競技プログラミング)にRustで参加するためのCargoパッケージテンプレートが用意されています。 パッケージはcargo-generateで作成します。

このREADME.mdではjaテンプレートの内容について説明します。 他のテンプレートについてはこちらをご覧ください。

jaテンプレートの内容

  • AtCoder 2019年言語アップデート後の環境向け
  • Rust 1.42.0
    • rustupでインストールされていることを前提にしている

TODO もう少し詳しく書く

使いかた

準備:cargo-generateのインストール

以下のコマンドでcargo-generateをインストールします。

Linux (Ubuntu 18.04)

$ sudo apt install libssl-dev pkg-config
$ cargo install cargo-generate

Windows 10 MSVC

$ cargo install cargo-generate

macOS Mojave 10.14

cargo-generateが依存しているopenss-sysクレートは、macOSに元から入っているOpenSSLライブラリのバージョンに対応していません。 (OpenSSLのバージョンが低すぎる)  そのOpenSSLライブラリを使おうとすると以下のようなエラーになります。

error failed to run custom build command for `openssl-sys v0.9.47`
...

It looks like you're compiling on macOS, where the system contains a version of
OpenSSL 0.9.8. This crate no longer supports OpenSSL 0.9.8.

As a consumer of this crate, you can fix this error by using Homebrew to
install the `openssl` package, ...

エラーメッセージのおすすめにしたがって、Homebrewで新しいバージョンのOpenSSLライブラリをインストールします。

$ brew install openssl

cargo-generateをインストールします。

$ cargo install cargo-generate

パッケージの生成

cargo generateコマンドでパッケージを生成します。

$ cargo generate --name abc086c \
    --git https://github.com/rust-lang-ja/atcoder-rust-base \
    --branch ja
  • --name: これから作成するパッケージの名前。好きな名前が付けられる。例:abc086c
  • --branch: このテンプレートリポジトリのブランチ名。jaテンプレートを使うならjaを指定する

解答となるプログラムの作成

  1. 使用するクレートの選択

    • Cargo.tomlファイルを開き[dependencies]セクションに書かれているクレートのなかで必要なものがあればコメントを外します。
    • 注意:AtCoderの環境では、これら以外のクレートは使用できません。またバージョンも固定されています。
  2. 使用するクレートのドキュメントの生成

    • 必須ではありませんが、以下のコマンドで依存クレートのドキュメントをビルドし、Webブラウザで開いておくと便利でしょう。

      $ cargo doc --open   # ドキュメントのビルドし、ビルドできたらWebブラウザで開く
      # または
      $ cargo doc          # ドキュメントのビルドのみ行う
  3. テストケースの作成

    • tests/sample_inputs.rsファイルには、ひな型となるテストケースが用意されています。
    • AtCoderの問題文に書かれているサンプル入出力をこのファイルに書き写します。 これによりcargo testでプログラムの動作が確認できるようになります(後述)。
  4. プログラムの作成

    • src/main.rsに解答となるプログラムを書きます。
  5. テストケースの実行

    • 以下のコマンドでテストケースを実行し、テストにパスすることを確認します。

      $ cargo test -j 1

      実行例

      $ cargo test -j 1
          ...
          Finished dev [unoptimized + debuginfo] target(s) in 25.31s
           Running target/debug/deps/main-aae3efe8c7e14c29
      
      running 0 tests
      
      test result: ok. 0 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
      
           Running target/debug/deps/sample_inputs-946c74199de6e6a4
      
      running 3 tests
      No
      test sample2 ... ok
      Yes
      test sample1 ... ok
      No
      test sample3 ... ok
      
      test result: ok. 3 passed; 0 failed; 0 ignored; 0 measured; 0 filtered out
    • -jオプションはテストケース実行の並列数を指定し、デフォルト値はCPUの論理コア数です。 -j 1を指定すると、テストケースが複数あるときに、それらを1つずつ順番に実行するようになります。

    • 上の例ではNoYesのようにプログラムからの標準出力を表示しています。 もしテストケースが並列に実行されると複数のテストケースからの標準出力が混ざって分かりにくくなります。 -j 1の指定は、このようなときに便利です。

  6. プログラムの提出

    • プログラムが完成したらsrc/main.rsの内容をAtCoderに提出します。 ACを目指して頑張ってください。

使用可能なクレート

AtCoderの環境では、Cargo.tomlにあらかじめ書かれているクレートのみが使用できます。 それら以外のクレートを追加すると、手元ではコンパイルできてもAtCoderの環境ではコンパイルエラーになりますので注意してください。 またクレートのバージョンも固定されており、変更できません。

ライセンス / License

本リポジトリの内容は MITライセンス のもとで公開されています。 詳しくはLICENSEファイルを参照してください。

About

A Cargo package template for AtCoder competitions / AtCoder競技向けのCargoパッケージテンプレート

Resources

License

Stars

Watchers

Forks

Packages

No packages published

Contributors 3

  •  
  •  
  •  
pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy