AI Programmerを試してみる
2022/10/4、こんなニュースを見ました。
https://www.itmedia.co.jp/news/articles/2210/04/news134.html
以前からGithub CopilotなどAIでソースを書くサービスは知ってましたが、へぇ〜な感じ(あんまりGithub使ってないので…)でした。
サイトを見たところパッと試せそうだったので、少し遊んでみます。
経路検索するプログラムを作成させてみる
本業の絡みですね。
- AI Programmerにアクセス
- 言語は「C++」
- 処理内容は「出発地点と到着地点を指定したら、与えられたネットワークデータからその2点間のパスをグラフ探索するプログラム」
- 「コードを生成」をクリック!
出てきたコードがこちらです。
#include <iostream>
#include <vector>
#include <queue>
using namespace std;
int main() {
int n;
cin >> n;
vector<vector<int>> G(n);
for (int i = 0; i < n; i++) {
int u, k;
cin >> u >> k;
G[u].push_back(k);
}
int s, t;
cin >> s >> t;
queue<int> que;
vector<bool> used(n);
vector<int> prev(n);
que.push(s);
used[s] = true;
while (!que.empty()) {
int u = que.front();
que.pop();
for (int i = 0; i < G[u].size(); i++) {
int v = G[u][i];
if (!used[v]) {
used[v] = true;
prev[v] = u;
que.push(v);
}
}
}
if (used[t]) {
vector<int> path;
int cur = t;
while (cur != s) {
path.push_back(cur);
cur = prev[cur];
}
path.push_back(s);
reverse(path.begin(), path.end());
for (int i = 0; i < path.size(); i++) {
cout << path[i] << " ";
}
cout << endl;
} else {
cout << "No path" << endl;
}
return 0;
}
ざっと読んだ限りでは与えられたグラフから経路を探索できそうです。
実際に動かしてみる!
下記のネットワークを与えます。
Linuxでビルドします。
Reverse()はエラーになったので削除。取得したパスを始点からに並び替えるだけでグラフ探索本体には影響しません。
g++ graph.cpp -std=C++0x -o graph
./graph
14 //辺の数を入力
1 //辺1from
2 //辺2to
1
3
2
3
2
4
3
5
4
5
4
7
5
6
5
7
6
7
7
8
7
9
8
10
9 //辺14from
10 //辺14to
1 //始点
8 //終点
8 7 4 2 1 //結果
cinへの入力のガイドがなくわかりづらいので注釈を入れました。
Reverse()を削除しているので終点からの経路表示になっていますが、ちゃんとネットワークを辿った結果が出ています。
多分私がこのレベルのグラフ探索のプログラム(既存の探索ライブラリなし、アルゴリズムからソースに起こす)をゼロから書いたら、30分以上はかかります。
それがものの1分も経たずに出てきました。
思っていた以上にすごかったです。