はじめに
この記事では私がAtCoderをやる上で使用している環境を提示いたします。MacBookProとWindowsのデスクトップPCを所持しているため,どちらのPCであっても同じようにできるようにしています。
Editorはcursorを使用しています。こちらのEditorはVSCodeフォークなので,VSCodeでも同様にできるかと思います。また,コンテナにアタッチできるEditor/IDEであれば他のものでも私と同様にできるかと思います。
また,使用言語はC++とPython3,PyPy3を想定しています。RustやNimなどの言語を使用される方は適宜変更を加えていただけると良いかと思います。
結論
基本はDockerコンテナにattachして行なってます。Dockerfileは次のとおりです。コピーしていただければ使用できるかと思います。
FROM ubuntu:latest as dev
CMD ["/bin/bash", "-b"]
ARG DEBIAN_FRONTEND=noninteractive
ENV TZ=Asia/Tokyo
RUN apt-get update && apt-get upgrade -y && \
apt-get autoremove -y && \
apt-get clean
RUN apt install -y build-essential procps curl file git time tzdata tree vim software-properties-common
RUN add-apt-repository ppa:ubuntu-toolchain-r/ppa -y
RUN apt-get update
RUN add-apt-repository ppa:deadsnakes/ppa -y
RUN apt-get update
RUN apt install -y gcc-12 g++-12 clang python3.11 python3-pip
RUN apt install -y pypy3 nodejs npm
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 30 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 30 && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.11 30 && \
update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 30 && \
update-alternatives --install /usr/bin/pypy pypy /usr/bin/pypy3 30 && \
update-alternatives --install /usr/bin/node node /usr/bin/nodejs 30
RUN pip install -U pip && \
pip install numpy scipy scikit-learn numba networkx
RUN git clone https://github.com/atcoder/ac-library.git /lib/ac-library
ENV CPLUS_INCLUDE_PATH /lib/ac-library
RUN pip install git+https://github.com/hinamimi/ac-library-python && \
pip install git+https://github.com/hinamimi/python-sortedcontainers
RUN pip install online-judge-tools
RUN npm install -g atcoder-cli
COPY . /root/src
WORKDIR /root/src
詳細解説
先頭から数行は省略いたします。
RUN add-apt-repository ppa:ubuntu-toolchain-r/ppa -y
RUN apt-get update
RUN add-apt-repository ppa:deadsnakes/ppa -y
RUN apt-get update
RUN apt install -y gcc-12 g++-12 clang python3.11 python3-pip
RUN apt install -y pypy3 nodejs npm
C++とPythonをaptでインストールするためapt-get-repositoryに追加しています。その後,C++とPythonをインストールしています。また,後述のatcoder-cliをインストールするためにnodejsとnpmをインストールしています。atcoder-cliを使用しない場合は省略しても構わないかと思います。
RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-12 30 && \
update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-12 30 && \
update-alternatives --install /usr/bin/python python /usr/bin/python3.11 30 && \
update-alternatives --install /usr/bin/pip pip /usr/bin/pip3 30 && \
update-alternatives --install /usr/bin/pypy pypy /usr/bin/pypy3 30 && \
update-alternatives --install /usr/bin/node node /usr/bin/nodejs 30
インストールされたgcc, g++, Python, pip, PyPy, nodeの優先度を30に設定しています。先ほどインストールしたC++やPythonを使用する際にそちらを優先的に使用するよう変更しています。
RUN pip install -U pip && \
pip install numpy scipy scikit-learn numba networkx
RUN git clone https://github.com/atcoder/ac-library.git /lib/ac-library
ENV CPLUS_INCLUDE_PATH /lib/ac-library
RUN pip install git+https://github.com/hinamimi/ac-library-python && \
pip install git+https://github.com/hinamimi/python-sortedcontainers
AtCoderで使用できるライブラリをインストールしています。ACLの詳細についてはこちらをご覧いただくと良いかと思います。
RUN pip install online-judge-tools
RUN npm install -g atcoder-cli
AtCoderをやる上で便利なツールになります。詳細は公式GitHubのREADMEをご覧いただくと良いかと思います。
online-judge-tools
atcoder-cli
終わりに
他にもTaskfileやsettings.jsonなどもありますが,単純に環境を作ると言う観点ですと,こちらで十分かと思います。参考にしていただけると嬉しいです。