【自由研究】話題の生成系AIのChatGPTに【HelloWorldをなるべく複雑に出力してください】と頼んでみた結果

## 全然使ってもらえないので少し宣伝させてください。

OpenAI APIを使ってAI占いサービスの「占い気分」というWebアプリをリリースしました🎉パチパチ
完全無料&登録不要で使えるので良ければ占ってみてください🔮

https://fortune.suugge.com/

## この記事について

この記事は本来なら`puts 'HelloWorld'`で済むはずのHelloWorldと表示するだけの
プログラムをChatGPTさんにとにかく複雑に出力してもらうだけの記事です。

## なぜそんなことをしたのか

ただの興味本位です。

## やってみよう！！

### 一般エンジニアの`HelloWorld`を表示するだけのソースコード

```ruby
puts 'HelloWorld'

#実行結果
ruby main.rb
=> HelloWorld
```
わかる。
というよりもこれ以外書いたことがない。

### ChatGPTから出力された`HelloWorld`を表示するだけのソースコード
```ruby
class Encryptor
  def initialize(key)
    @key = key
  end

  def encrypt_character(c)
    (c.ord + @key).chr
  end

  def decrypt_character(c)
    (c.ord - @key).chr
  end
end

class HelloWorldGenerator
  def initialize(encryptor)
    @encryptor = encryptor
  end

  def generate_from_char_codes(encrypted_codes, idx = 0)
    return "" if idx >= encrypted_codes.length
    decrypted_char = @encryptor.decrypt_character(encrypted_codes[idx].chr)
    decrypted_char + generate_from_char_codes(encrypted_codes, idx + 1)
  end
end

key = 3
encryptor = Encryptor.new(key)

hello_world_codes = [72, 101, 108, 108, 111, 87, 111, 114, 108, 100]
encrypted_hello_world_codes = hello_world_codes.map { |code| code + key }

hello_world_generator = HelloWorldGenerator.new(encryptor)
puts hello_world_generator.generate_from_char_codes(encrypted_hello_world_codes)

#実行結果
ruby main.rb
=> HelloWorld
```

？！！！？？？？！
暗号化だと？
### ソースコードの解説

```
このRubyプログラムは、複雑な方法で"HelloWorld"を表示するものです。コードの各部分について説明します。

1. `Encryptor`クラス:

- このクラスは、与えられたキーに基づいて個別の文字を暗号化および復号化する機能を提供します。
- `initialize`メソッドは、Encryptorオブジェクトを作成する際に、暗号化/復号化のキーを設定します。
- `encrypt_character`メソッドは、与えられた文字をキーを使用して暗号化します。
- `decrypt_character`メソッドは、与えられた文字をキーを使用して復号化します。

2. `HelloWorldGenerator`クラス:

- このクラスは、`Encryptor`オブジェクトと暗号化された文字コードの配列を使用して、"HelloWorld"を生成します。
- `initialize`メソッドは、`HelloWorldGenerator`オブジェクトを作成する際に、`Encryptor`オブジェクトを設定します。
- `generate_from_char_codes`メソッドは、再帰的に呼び出され、暗号化された文字コードの配列を受け取り、復号化して元のテキストを表示します。

3. キーの設定と`Encryptor`オブジェクトの作成:

- `key`変数に、暗号化/復号化のキー（この場合は3）を設定します。
- `encryptor`変数に、キーを引数にして`Encryptor`クラスの新しいインスタンスを作成します。

4. 暗号化された"HelloWorld"の文字コードの配列の作成:

- `hello_world_codes`変数に、"HelloWorld"の文字コードの配列を設定します。
- `encrypted_hello_world_codes`変数に、`hello_world_codes`配列の各文字コードにキーを追加して暗号化された文字コードの配列を作成します。

5. "HelloWorld"の生成と表示:

- `hello_world_generator`変数に、`encryptor`を引数にして`HelloWorldGenerator`クラスの新しいインスタンスを作成します。
- `puts`を使用して、`hello_world_generator.generate_from_char_codes`メソッドを呼び出し、暗号化された文字コードの配列を復号化して"HelloWorld"を表示します。

このプログラムは、"HelloWorld"という文字列を直接使用せず、暗号化された文字コードの配列を復号化して結果を表示しています。また、再帰処理を使用しているため、プログラムの実行フローが複雑になっています。
```
まぁ要約すると、暗号化と複合化を行う`Encryptorクラス`と、暗号化された文字コードの配列から"HelloWorld"を生成する`HelloWorldGeneratorクラス`を使用しています。
Rubyにはmapなどのループ関数がありますが、再帰処理を使用し、暗号化された文字コードの配列を復号化して表示しています。

## 感想
そんな依頼は見たことがないですが「ターミナルに`HelloWorld`と表示してください。」という依頼があったとして先ほどのようなソースコードをプルリクで出せばたぶんレビュアーさんに殴られると思います。

まぁこの記事で伝えたかったことはChatGPTはすごいということですね。

ChatGPTなどの生成系AIの登場でエンジニアという職業は不要になるのではないか？！など私自身も不安感がありましたが、無くなることはないと思っています。仮に職業として無くなったとしても私はプログラミングをします。

ただ、**AIはエンジニアの仕事は奪わないと思いますが、AIをプログラミングに取り入れられるエンジニアは他のエンジニアの仕事を奪う**のではないかなと思います。
少しカッコつけましたが、使えるものはとにかくフル活用して皆んなで素晴らしいアプリケーションを開発しましょう:laughing: