Created
December 29, 2020 07:38
-
-
Save kenkoooo/3647f6f73095eb2ced0cb3ba1feb03a3 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/bash | |
set -eu | |
# Topcoder MM の実行可能ファイルのパス | |
# 一時ファイルは /workdir に置くといいらしい | |
TEMP_PATH="/workdir/a.out" | |
rm -f submission.zip | |
cargo clean | |
# --target x86_64-unknown-linux-musl とすると、共有ライブラリに依存しない実行可能ファイルを作れる。 | |
# いろいろ制限はあるが、競プロ目的であれば気にする必要はない。 | |
cargo build --release --target x86_64-unknown-linux-musl | |
# 以下のようなPythonファイルを生成する。 | |
# やっていることは単純で、BINにBase64文字列として入っている実行可能ファイルを書き出して、 | |
# パーミッションを変更して、実行する。 | |
# | |
# import base64 | |
# import subprocess | |
# import os | |
# import stat | |
# BIN='${BINARY}' | |
# byte_array = base64.b64decode(BIN) | |
# with open('${TEMP_PATH}', mode='wb') as f: | |
# f.write(byte_array) | |
# st = os.stat('${TEMP_PATH}') | |
# os.chmod('${TEMP_PATH}', st.st_mode | stat.S_IEXEC) | |
# subprocess.call('${TEMP_PATH}') | |
BINARY=$(base64 -w 0 ./target/x86_64-unknown-linux-musl/release/super_minesweeper) | |
echo "import base64" > SuperMinesweeper.py | |
echo "import subprocess" >> SuperMinesweeper.py | |
echo "import os" >> SuperMinesweeper.py | |
echo "import stat" >> SuperMinesweeper.py | |
echo "BIN='${BINARY}'" >> SuperMinesweeper.py | |
echo "byte_array = base64.b64decode(BIN)" >> SuperMinesweeper.py | |
echo "with open('${TEMP_PATH}', mode='wb') as f:" >> SuperMinesweeper.py | |
echo " f.write(byte_array)" >> SuperMinesweeper.py | |
echo "st = os.stat('${TEMP_PATH}')" >> SuperMinesweeper.py | |
echo "os.chmod('${TEMP_PATH}', st.st_mode | stat.S_IEXEC)" >> SuperMinesweeper.py | |
echo "subprocess.call('${TEMP_PATH}')" >> SuperMinesweeper.py | |
# 提出用にzipする | |
zip -j submission.zip SuperMinesweeper.py |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment