AtCoder競技プログラミング用のHaskellプロジェクトテンプレートです。
cabal
(Haskell build tool)oj
(online-judge-tools)acc
(atcoder-cli)
# テンプレートをaccのconfig-dirに配置
cp -r atcoder-haskell `acc config-dir`/
# default-templateに設定 (お好みで)
acc config default-template atcoder-haskell
# 依存関係のインストール
make deps
# テスト実行
make test
# 提出
make submit
.
├── my-contest.cabal # Cabalプロジェクト設定
├── cabal.project # Cabal設定(最適化等)
├── Makefile # ビルド・テスト・提出の自動化
├── app/
│ ├── Main.hs # メインプログラム
│ ├── Lib.hs # 共通ライブラリ
│ └── Types.hs # 型定義
└── test/ # ojで取得したテストケース
├── sample-1.in
├── sample-1.out
└── ...
コマンド | 説明 |
---|---|
make build |
プロジェクトのビルド(最適化有効) |
make deps |
依存関係のインストール |
make clean |
ビルド成果物のクリーンアップ |
コマンド | 説明 |
---|---|
make test |
サンプルケースでのテスト実行 |
コマンド | 説明 |
---|---|
make submit |
テスト後にaccで提出(推奨) |
make submit-oj |
ojコマンドで提出 |
ojまたはaccで問題を取得してください:
# ojを使用
oj dl https://atcoder.jp/contests/abc300/tasks/abc300_a
# accを使用
acc new abc300
cd abc300/a
app/Main.hs
を編集してソリューションを実装:
{-# LANGUAGE OverloadedStrings #-}
import Lib
import Types
import qualified Data.ByteString.Char8 as BS
main :: IO ()
main = do
input <- BS.getLine
let result = solve input
print result
サンプルケースでテスト:
make test
テストが通ったら提出:
make submit
my-contest.cabal
でライブラリの依存関係を管理:
build-depends: base ^>=4.17
, vector ^>=0.13
, containers ^>=0.6.7
, bytestring ^>=0.11.4.0
, text ^>=2.0
cabal.project
で最適化オプションを設定:
optimization: 2
executable-stripping: True
# 手動でテスト
cabal run main < test/sample-1.in
# ojで提出
make submit-oj
# 依存関係の再インストール
make clean
make deps
make build