9月23日 天下一 Game Battle Contest 2021 Autumnに参加していました。
結果は71位 焦りまくって、後で見返すとドキュメントを読めてませんでした。
一秒間隔の実装はおろか、認識してませんでした。(サンプルの一秒待ちを勝手に縮めてます)
一秒間隔対策のコーディングは、けっこうおもしろそうな課題だっただけに残念です。
この間隔は言語間の速度の優位性も少し補填してくれそうです。
あとでツイッターで他の方の実装内容を読んだりして、楽しいコンテストでした。
C++のサンプルコードはサーバー間の通信はPython3でやりとりして、さらにPython3からC++を起動して通信しています。
おもしろそうだったのでPython3 C++間の処理を簡易版にしてコアの部分を勉強してみました。
ソースリストイメージ
プログラムはC++とPython3のソースをおなじフォルダーに入れ、C++をコンパイルしたあとでPython3を下記のコマンドで実行すると
C++の実行ファイルを起動して簡易なやりとりをします。
Python側でC++に"test"という文字列を送信、C++側は受け取った文字列と"Python"を返します。
C++側では10回送受信を1秒間隔でおこなった後、終了します。Python3側の受信がなくなると終了します。
参考ソース
https://github.com/KLab/tenka1-2021-autumn
ソースリスト
#include
#include
#include
#include
using namespace std;
int count = 10;
struct Test {
void solve() {
for (;;) {
string str;
cin >> str;
cout << str << endl;
cout << "python" << endl;
this_thread::sleep_for(chrono::milliseconds(1000));
count --;
if (count <= 0){
break;
}
}
}
};
int main() {
Test test;
test.solve();
}
import subprocess
import sys
p = subprocess.Popen(sys.argv[1:], stdin=subprocess.PIPE, stdout=subprocess.PIPE)
def send_cpp(msg):
p.stdin.write((msg+"\n").encode())
p.stdin.flush()
def get_cpp():
return p.stdout.readline().decode().rstrip()
def main():
print("start")
while True:
send_cpp("test")
line = get_cpp()
if not line:
break
if line == "python":
print("get c++")
else:
print(line)
print("end")
main()