Haskellで競技プログラミングをするための環境構築
はじめに
最近、社内でHaskellを学ぶ熱意が高まっており、私も競技プログラミングでHaskellを使いたいと考え、環境構築を行いました。この記事では、Haskellの実行環境の構築から、Visual Studio Code上でのプログラミング環境の設定、そしてAtCoderへの提出までの手順を紹介しています。
なお、本記事ではHaskell自体の解説は行っておらず、実行環境はMacOSを想定しています。
GHCupのインストール
GHCup
https://www.haskell.org/ghcup/
GHCupは、HaskellのコンパイラであるGHCをインストールするためのツールです。複数のバージョンをインストール・切り替えをするために使用します。
公式のトップページに記載されている以下のコマンドを実行します。
curl --proto '=https' --tlsv1.2 -sSf https://get-ghcup.haskell.org | sh
GHCupコマンドの確認
以下のようなコマンドを実行して、問題がないか確認できます。
# オプションの一覧が表示される
$ ghcup
# インストール状況が表示される
$ ghcup list
# TUIが起動する
$ ghcup tui
Visual Studio Codeの設定
以下のコマンドで、Haskell Language Serverをインストールします。
$ ghcup install hls
Visual Studio Code上では、「Haskell」拡張をインストールします。
https://marketplace.visualstudio.com/items?itemName=haskell.haskell
管理方法は「Automatically via GHCup」を選択します。
AtCoderにコードを提出する
最初に書くコードとして、AtCoderの練習用問題を利用します。
A - Welcome to AtCoder
https://atcoder.jp/contests/practice/tasks/practice_1
Haskellのコード例が記載されているので、Visual Studio Code上で写経します。
https://atcoder.jp/contests/practice/tasks/practice_1#Haskell
import Control.Applicative
main :: IO ()
main = do
-- 整数の入力
a <- readLn
-- スペース区切り整数の入力
[b, c] <- map read . words <$> getLine
-- 文字列の入力
s <- getLine
-- 出力
putStrLn $ show (a + b + c) ++ " " ++ s
前述の設定がうまくいっているかどうかを確認するために、シンタックスハイライトされることを確認します。
ファイルを保存し、以下のコマンドでコードを実行します(hello.hsという名前で保存した場合)。
$ runghc hello.hs
標準入力を受け付けるプログラムなので、サンプル入力をコピペします。
1
2 3
test
$ runghc hello.hs
1
2 3
test
6 test
最後の行に、6 test
が出力されれば、想定どおりの処理です。
プログラムが正しく動作することを確認した後、AtCoderに提出します。書いたプログラムをフォームにコピー&ペーストし、言語として Haskell (GHC 8.8.3) を選択します。
https://atcoder.jp/contests/practice/submit?taskScreenName=practice_1
「選択」ボタンを押下して、提出します。
自分の提出ページに移動して、実行結果が AC
となれば、OKです。
以上で、HaskellでAtCoderに参加するための環境構築が完了しました。
参考
- https://zenn.dev/mod_poppo/articles/haskell-setup-2023
- https://blog.miz-ar.info/2019/05/atcoder-with-haskell/