パーソナルブログメモリ

a = [1, 1]
for _ in "*" * 999: a += [sum(a[-2:])]
print(a)

Python3とC++の通信

2021-09-26 | Python

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()

 


最新の画像もっと見る

コメントを投稿

ブログ作成者から承認されるまでコメントは反映されません。