[M1 Mac, Monterey 12.6.3, clang 13.0.0, SDL 2.26.2, ChatGPT Plus, NO IDE]
テトリス画面にベストスコア5つを表示するためのxmlファイル作成関数をChatGPTに書かせました。
いともあっさり書いてくれました。検証はしていませんが以下の通りです。おそらく新データは何位であろうと5番目になるはずなので、後で降順ソートが必要でしょう。
ChatGPT Plusは現在月額20ドルですが、今後DAZNのようにハイペースで値上げさせないためにも競合AIの頑張りに期待したいところです。
Q: xmlファイルのentryデータは5個まででscoreが5つの最小値を上回った場合はデータを入れ替える、というコードを書いてください
以下は5つ以下のエントリーがある場合のコードです。
void AddDataToXML(string fileName, string score, string date, string playTime) { // ファイルをパースする pugi::xml_document doc; pugi::xml_parse_result result = doc.load_file(fileName.c_str()); if (!result) { std::cerr << "XMLの読み込みに失敗しました。" << std::endl; return; } // エントリーを格納するノードを取得する pugi::xml_node entryNode = doc.child("data").child("entry"); // 新しいエントリーを作成する pugi::xml_node newEntryNode = doc.append_child("entry"); newEntryNode.append_child("score").text() = score.c_str(); newEntryNode.append_child("date").text() = date.c_str(); newEntryNode.append_child("playtime").text() = playTime.c_str(); // エントリー数をカウントする int entryCount = 0; for (pugi::xml_node node = entryNode; node; node = node.next_sibling("entry")) { entryCount++; } // エントリーが5個未満の場合は新しいエントリーを追加する if (entryCount < 5) { return; } // スコアが5つの最小値を上回っている場合は新しいエントリーを追加し、古いエントリーを削除する pugi::xml_node minScoreNode = entryNode; int minScore = std::atoi(entryNode.child_value("score")); for (pugi::xml_node node = entryNode.next_sibling("entry"); node; node = node.next_sibling("entry")) { int scoreVal = std::atoi(node.child_value("score")); if (scoreVal < minScore) { minScoreNode = node; minScore = scoreVal; } } if (std::atoi(score.c_str()) > minScore) { doc.remove_child(minScoreNode); doc.append_child(newEntryNode); } doc.save_file(fileName.c_str()); }