AIがコーディングするにあたって「可読性」は必要になるのか?
まずはベースになるコードを書いて、少し不完全なところを残しておいて「可読性の低いコード」に変換したうえで修正の指示を加えてみる、までやってみる
AIに「可読性の低い」コードを出力させてみた
↑で作ったコードをまずはGPT 4に解読させてみる
このコードは何をしているコードなのか説明してください(下にz関数の中身を追記)
このコードは、グリッドベースのマップ上で最短経路を見つけるための関数です。具体的には、A*(エースター)探索アルゴリズムを実装しています。以下、コードの主要な部分とその説明を示します:
関数定義とパラメータ:
export function z(grid: number[][], st: {x:number; y:number}, gl: {x:number; y:number}): any: この関数はzと名付けられ、grid, st(startの略で、開始位置を示す)、gl(goalの略で、目標位置を示す)という三つの引数を取ります。
初期設定:
let O = [{p:st, g:0, f:(Math.abs(st.x-gl.x)+Math.abs(st.y-gl.y)), ppp:undefined as any}]: 探索の開始点を含むオープンリストOを作成します。pは現在の位置、gは開始点からのコスト、fは推定コスト(gコストとヒューリスティックコストの合計)、pppは親ノードを示します。
メインループ:
while (O.length > 0): オープンリストが空になるまでループを続けます。
最小f値を持つノードを選択し、そのノードがゴールに等しいかを確認します。ゴールに到達した場合は、経路を逆順で再構築して返します。
隣接ノードの探索:
nn=(function hhhh(q:any,gg:number[][]){...})(cur,grid);: 現在のノードの隣接ノードを探索する関数を呼び出し、隣接ノードのリストを取得します。障害物(gridの値が1)がない場所を隣接ノードとしてリストアップします。
隣接ノードの処理:
隣接ノードごとに、それが既にクローズドリストXに含まれているかどうかを確認します。含まれていない場合、それがオープンリストに既に存在するかを確認し、存在しない場合は新たに追加します。既に存在する場合は、より低いコストで更新します。
このコードは、A*アルゴリズムの一般的な実装を示しており、パフォーマンスや効率を向上させるためにさまざまな最適化が施されている可能性があります。特に、最小f値を持つノードを探すための効率的なデータ構造(例えば、優先度付きキュー)の使用が考慮されるべきです。
Kurogoma4D.icon かしこい
今度はCopilot Editsで修正指示を加えてみる
https://gyazo.com/28e5d325e8cd886f5ddd184291974883
Kurogoma4D.icon かしこい
グッドニュース:コードに可読性がなくてもわりとなんとかなりそう
バッドニュース:逆にAIだけでメンテナンスされてきたコードをAIなしでメンテナンスしないといけない、みたいな状況になったときが一番怖いね(AIに解読させればいいのはそうだけど、正確性100%が保証されているわけじゃない)
シンプルな1ファイル・1アルゴリズムの解読だから簡単なだけだった説はある