擦られに擦られたChatGPTで遊んだ話。

何か月か前から皆さんお馴染みついったらんどで、ChatGPTというAIチャットが一部界隈で人気です。

https://chat.openai.com/chat

ここからできます。やり方はググればいっぱい出てきます。

というわけでワタクシにお馴染みのprocessingのコードをAI君に書いてもらおうと思います。

聞いてみたところ

そして、

以下がコード。

Plant plant;
void setup() {
    size(800, 600);
    plant = new Plant(width/2, height, 10, 2, 100, 50);
}
void draw() {
    background(255);
    plant.display();
}
class Plant {
  int leafNum;
  float stemX, stemY;
  float stemWidth, stemHeight;
  float leafSize;

  Plant(float x, float y, int numLeaves, float stemWidth, float stemHeight, float leafSize) {
    this.stemX = x;
    this.stemY = y;
    this.leafNum = numLeaves;
    this.stemWidth = stemWidth;
    this.stemHeight = stemHeight;
    this.leafSize = leafSize;
  }

  void display() {
    // Draw the stem
    strokeWeight(stemWidth);
    stroke(153, 102, 51);
    bezier(stemX, stemY, stemX - 50, stemY - 100, stemX + 50, stemY - 100, stemX, stemY - 200);
    // Draw the leaves
    for (int i = 0; i < leafNum; i++) {
      pushMatrix();
      float angle = TWO_PI / leafNum * i;
      translate(stemX, stemY - 200);
      rotate(angle);
      fill(0, 255, 0);
      noStroke();
      ellipse(0, 0, leafSize, leafSize * 2);
      popMatrix();
    }
  }
}

では、実行してみよう!!

ん...?
ん......? だめじゃないか!!!!!

AIを使う人の腕が試されるってコト

と、こんな感じで雑に使うとこうなります。

要件定義ちゃんとすれば良いプログラムを返してくれます。

競技プログラミングとかどうなるんだろ。調べてないからわからないけど。

例えば、

void setup() {
  size(400, 400);
  colorMode(HSB, 360, 100, 100);
  noStroke();
}

void draw() {
  background(0);
  for (int i = 0; i < width; i++) {
    fill(i % 360, 100, 100);
    rect(i, 0, i + 1, height);
  }
}

void mousePressed() {
  redraw();
}

実行結果

と、ある程度希望に沿ったものを作ってくれます。

曖昧な、答えが一意に定まらないような要件定義だとダメな気がしますね。

エラトステネスの篩

こういう典型問題は正確に答えてくれますね(?)自分の環境で実行してないのでわかりませんが。*1

エラー吐いた時にエラー内容をコピペして教えてくれるのでそこは重宝ですね。

こんな感じで答えてくれる

そして遊んだ次の日、ちょうどTwitterでこんなのが流れてきました。

ChatGPTは1聞いたら100答えてくれるので、プログラミング学習の強い味方かもしれない。

他にも、このプログラムの動作説明してくださいという回答もしてくれるのでぜひ試してみてください。

では、この辺で。

*1:しろよって話