├── .gitignore ├── data ├── workspaces │ └── contests │ │ ├── abc169_a_python │ │ └── main.py │ │ ├── abc169_a_cpp │ │ └── main.cpp │ │ ├── abc169_a_java │ │ └── Main.java │ │ ├── contests.code-workspace │ │ └── abc169_a_rust │ │ └── main.rs └── docker-entrypoint.sh ├── doc └── assets │ ├── screenshot.png │ └── screenshot_cpp.png ├── README.md └── Dockerfile /.gitignore: -------------------------------------------------------------------------------- 1 | .vscode/ -------------------------------------------------------------------------------- /data/workspaces/contests/abc169_a_python/main.py: -------------------------------------------------------------------------------- 1 | (a, b) = map(int, input().split()) 2 | print(a * b) -------------------------------------------------------------------------------- /doc/assets/screenshot.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hiromi-Ayase/competitive-programming-env/HEAD/doc/assets/screenshot.png -------------------------------------------------------------------------------- /doc/assets/screenshot_cpp.png: -------------------------------------------------------------------------------- https://raw.githubusercontent.com/Hiromi-Ayase/competitive-programming-env/HEAD/doc/assets/screenshot_cpp.png -------------------------------------------------------------------------------- /data/workspaces/contests/abc169_a_cpp/main.cpp: -------------------------------------------------------------------------------- 1 | #include 2 | 3 | int main() { 4 | int a, b; 5 | scanf("%d%d", &a, &b); 6 | printf("%d\n", a * b); 7 | } -------------------------------------------------------------------------------- /data/docker-entrypoint.sh: -------------------------------------------------------------------------------- 1 | #!/bin/bash 2 | 3 | . $HOME/.bashrc 4 | 5 | $HOME/.local/bin/code-server \ 6 | --auth none \ 7 | --bind-addr 0.0.0.0:8080 \ 8 | $HOME/workspaces/contests/contests.code-workspace 9 | 10 | -------------------------------------------------------------------------------- /data/workspaces/contests/abc169_a_java/Main.java: -------------------------------------------------------------------------------- 1 | import java.util.Scanner; 2 | 3 | public class Main { 4 | public static void main(String[] args) { 5 | try (Scanner sc = new Scanner(System.in)) { 6 | System.out.println(sc.nextInt() * sc.nextInt()); 7 | } 8 | } 9 | } -------------------------------------------------------------------------------- /data/workspaces/contests/contests.code-workspace: -------------------------------------------------------------------------------- 1 | { 2 | "folders": [ 3 | { 4 | "path": "abc169_a_rust" 5 | }, 6 | { 7 | "path": "abc169_a_java" 8 | }, 9 | { 10 | "path": "abc169_a_python" 11 | }, 12 | { 13 | "path": "abc169_a_cpp" 14 | } 15 | ], 16 | "settings": { 17 | "C_Cpp.clang_format_fallbackStyle": "Google", 18 | "editor.formatOnSave": true, 19 | } 20 | } -------------------------------------------------------------------------------- /data/workspaces/contests/abc169_a_rust/main.rs: -------------------------------------------------------------------------------- 1 | use std::io::*; 2 | use std::str::*; 3 | 4 | fn read() -> T { 5 | let stdin = stdin(); 6 | let s = stdin 7 | .bytes() 8 | .map(|c| c.unwrap() as char) 9 | .skip_while(|c| c.is_whitespace()) 10 | .take_while(|c| !c.is_whitespace()) 11 | .collect::(); 12 | s.parse::().ok().unwrap() 13 | } 14 | 15 | fn main() { 16 | let a: i32 = read(); 17 | let b: i32 = read(); 18 | println!("{}", a * b); 19 | } 20 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Code-server container for Competitive Programming. 2 | 3 | 4 | 競技プログラミングの環境をコンテナにまとめたものです。 5 | 6 | ![Screenshot](./doc/assets/screenshot.png) 7 | 8 | 具体的には下記の言語のコンパイラ及び各種ツール一式がパックされており、ブラウザからコーディングできるようcode-serverを起動します。 9 | 10 | - C/C++ (GCC/Clang) 11 | - Python3 12 | - Rust 13 | - .NET 14 | - Java 15 | - Kotlin 16 | - Scala 17 | - [code-server](https://github.com/cdr/code-server) 18 | - [Online Judge Tools](https://github.com/online-judge-tools/oj) 19 | - [cargo-atcoder](https://github.com/tanakh/cargo-atcoder) 20 | 21 | 22 | ## 使い方 23 | 24 | ```bash 25 | docker run -d -p 8080:8080 hiromiayase/competitive-programming-env:0.1.0 26 | ``` 27 | 上記のコマンドを起動した後、ブラウザで http://localhost:8080 にアクセスする。 28 | 29 | ## C++ による提出 30 | 31 | (ABC169)[https://atcoder.jp/contests/abc169/tasks/abc169_a] のコードがサンプルとして abc196_a_cpp にあります。まず、Ctrl+Shift+@ により abc196_a_cpp でターミナルを開きます。 32 | 33 | ![Screenshot](./doc/assets/screenshot_cpp.png) 34 | 35 | 36 | ターミナルが開いたら Online Judge Tools でテストケースをダウンロードします。 37 | ```bash 38 | oj d https://atcoder.jp/contests/abc169/tasks/abc169_a 39 | ``` 40 | 41 | テストケースがダウンロードできたらコンパイルしテストしてみます。 42 | ```bash 43 | g++ main.cpp && oj t 44 | ``` 45 | [+] test success: 2 cases とでたら成功です。 46 | 47 | 48 | ## Java による提出 49 | 50 | (ABC169)[https://atcoder.jp/contests/abc169/tasks/abc169_a] のコードがサンプルとして abc196_a_java にあります。まず、Ctrl+Shift+@ により abc196_a_java でターミナルを開きます。 51 | 52 | 53 | ターミナルが開いたら Online Judge Tools でテストケースをダウンロードします。 54 | ```bash 55 | oj d https://atcoder.jp/contests/abc169/tasks/abc169_a 56 | ``` 57 | 58 | テストケースがダウンロードできたらコンパイルしテストしてみます。 59 | ```bash 60 | javac Main.java && oj t -c "java Main" 61 | ``` 62 | C++と異なり、-C オプションによる実行コマンドの指定が必要です。 63 | 64 | [+] test success: 2 cases とでたら成功です。 65 | 66 | 67 | # その他 68 | 69 | iPad Proはもってませんが、ブラウザ上で動くのでiPadで競プロが出来るようになるかもしれません。誰か試してください。 70 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:18.04 2 | 3 | RUN apt-get update 4 | RUN apt-get install -y git curl wget zip unzip make software-properties-common sudo 5 | 6 | # Add repositories. 7 | RUN add-apt-repository -y ppa:pypy/ppa 8 | RUN add-apt-repository -y ppa:deadsnakes/ppa 9 | RUN add-apt-repository -y ppa:ubuntu-toolchain-r/test 10 | RUN add-apt-repository -y universe 11 | RUN apt-get update 12 | 13 | # Install Python 3.8.1 14 | RUN apt-get install -y python3.8 python3.8-dev python3-pip 15 | RUN python3.8 -m pip install -U Cython numba numpy scipy scikit-learn networkx 16 | 17 | # Install gcc 9.2.1 18 | RUN apt-get install -y gcc-9 g++-9 gdc-9 19 | RUN update-alternatives --install /usr/bin/gcc gcc /usr/bin/gcc-9 10 20 | RUN update-alternatives --install /usr/bin/g++ g++ /usr/bin/g++-9 10 21 | RUN update-alternatives --install /usr/bin/gdc gdc /usr/bin/gdc-9 10 22 | 23 | # Install boost 1.72.0 24 | # RUN cd /tmp \ 25 | # && wget https://dl.bintray.com/boostorg/release/1.72.0/source/boost_1_72_0.tar.gz \ 26 | # && tar xfs boost_1_72_0.tar.gz \ 27 | # && cd boost_1_72_0 \ 28 | # && ./bootstrap.sh --with-toolset=gcc --without-libraries=mpi,graph_parallel --with-python=python3.8 \ 29 | # && ./b2 -j3 toolset=gcc variant=release link=static runtime-link=static cxxflags="-std=c++17" stage \ 30 | # && ./b2 -j3 toolset=gcc variant=release link=static runtime-link=static cxxflags="-std=c++17" --prefix=/opt/boost/gcc install 31 | 32 | # Install clang 9.0.0 33 | RUN apt-get install -y clang-9 clang++-9 libc++-9-dev libc++abi-9-dev 34 | RUN update-alternatives --install /usr/bin/clang clang /usr/bin/clang-9 10 35 | RUN update-alternatives --install /usr/bin/clang++ clang++ /usr/bin/clang++-9 10 36 | 37 | # Install PyPy 7.3 38 | RUN apt-get install -y pypy pypy3 39 | 40 | # Install C# 3.1.101 41 | RUN cd /tmp \ 42 | && wget -q https://packages.microsoft.com/config/ubuntu/18.04/packages-microsoft-prod.deb -O packages-microsoft-prod.deb\ 43 | && dpkg -i packages-microsoft-prod.deb 44 | RUN apt-get update 45 | RUN apt-get install apt-transport-https 46 | RUN apt-get install -y dotnet-sdk-3.1 dotnet-runtime-3.1 47 | 48 | # Add user "ubuntu" 49 | RUN useradd -m -u 1000 -s "/bin/bash" ubuntu 50 | RUN gpasswd -a ubuntu sudo 51 | RUN echo "ubuntu:ubuntu" | chpasswd 52 | USER ubuntu 53 | WORKDIR /home/ubuntu 54 | 55 | # Install Rust 1.42.0 / cargo-atcoder 56 | RUN curl https://sh.rustup.rs -sSf | sh -s -- -y 57 | RUN $HOME/.cargo/bin/rustup toolchain install 1.42.0 58 | RUN $HOME/.cargo/bin/rustup component add rls rust-analysis rust-src 59 | RUN $HOME/.cargo/bin/cargo install cargo-atcoder 60 | 61 | # Install Java 11.0.7/Kotlin 1.3.72/Scala 2.13.2 62 | RUN curl -s "https://get.sdkman.io" | bash 63 | RUN /bin/bash -l -c "source $HOME/.sdkman/bin/sdkman-init.sh; sdk install java 11.0.7.hs-adpt" 64 | RUN /bin/bash -l -c "source $HOME/.sdkman/bin/sdkman-init.sh; sdk install kotlin 1.3.72" 65 | RUN /bin/bash -l -c "source $HOME/.sdkman/bin/sdkman-init.sh; sdk install scala 2.13.2" 66 | 67 | # Install code-server 3.4.1 68 | RUN mkdir -p $HOME/.local/lib $HOME/.local/bin 69 | RUN curl -fL https://github.com/cdr/code-server/releases/download/v3.4.1/code-server-3.4.1-linux-amd64.tar.gz | tar -C $HOME/.local/lib -xz 70 | RUN mv $HOME/.local/lib/code-server-3.4.1-linux-amd64 $HOME/.local/lib/code-server-3.4.1 71 | RUN ln -s $HOME/.local/lib/code-server-3.4.1/bin/code-server $HOME/.local/bin/code-server 72 | 73 | # Install code-server-extensions 74 | RUN $HOME/.local/bin/code-server --install-extension MS-CEINTL.vscode-language-pack-ja 75 | RUN $HOME/.local/bin/code-server --install-extension vscjava.vscode-java-pack 76 | RUN $HOME/.local/bin/code-server --install-extension rust-lang.rust 77 | RUN $HOME/.local/bin/code-server --install-extension vadimcn.vscode-lldb 78 | RUN $HOME/.local/bin/code-server --install-extension ms-python.python 79 | RUN $HOME/.local/bin/code-server --install-extension ms-dotnettools.csharp 80 | RUN $HOME/.local/bin/code-server --install-extension ms-vscode.cpptools 81 | 82 | # Install online-judge-tools 83 | RUN pip3 install --user online-judge-tools 84 | 85 | # Make workspaces directory. 86 | COPY --chown=ubuntu:ubuntu data/ $HOME 87 | RUN chmod 0755 ./docker-entrypoint.sh 88 | 89 | # Modify shell. 90 | ENV USER=ubuntu 91 | ENV SHELL=/bin/bash 92 | ENV JAVA_HOME=/home/ubuntu/.sdkman/candidates/java/current 93 | ENV PATH=$PATH:/home/ubuntu/.local/bin:/home/ubuntu/.cargo/bin 94 | ENV RUST_BACKTRACE=1 95 | 96 | # Run code-server 97 | EXPOSE 8080 98 | 99 | CMD ["./docker-entrypoint.sh"] 100 | --------------------------------------------------------------------------------