chatGPTに色々相談してみた

# はじめに
ChatGPTは技術分野で非常に注目されてますが日常生活でも役立ちます！っていうお遊びとエンジニアとして真面目に活躍してみますかという二本立てでお送りします。

# 昔遊んだあのゲーム

```
昔遊んだファミコンのゲーム名がわかりません。一緒に考えてくれませんか？

ChatGPT
もちろんです！ゲームの内容や特徴を教えていただけますか？それに基づいて一緒に考えてみましょう。


User
横スクロールの格闘系だったと思います。
回転蹴りがあったと思います。

ChatGPT
回転蹴りがある横スクロールの格闘ゲームですね。それだけでは特定が難しいですが、有名なゲームであれば思い出すかもしれません。他にゲーム内で使えるキャラクターや舞台の特徴など、詳細な情報があれば教えていただけますか？


User
キャラはバンダナ？を巻いていた気がします。
後クリアは簡単でした

ChatGPT
横スクロールの格闘ゲームで、回転蹴りがあるキャラクターがバンダナを巻いていたという情報ですね。また、クリアが比較的簡単だったとのこと。これらの情報から、おそらく「ストリートファイター」シリーズの一作ではないでしょうか？例えば「ストリートファイターII」などが該当する可能性があります。確かめてみてください。


User
格闘ゲームというよりはアクションでした

ChatGPT
アクション寄りの横スクロールゲームですね。バンダナを巻いたキャラクターで、クリアが比較的簡単だったという特徴から考えると、「ファイナルファイト」や「ストリートスマート」などが候補として挙がります。これらでしょうか？


User
画像を見てみましたがちょっと異なりました。
2人プレイができた記憶があります

ChatGPT
2人プレイができたアクション寄りの横スクロールゲームで、バンダナを巻いたキャラクターがいたという情報ですね。それならば、「ダブルドラゴン」や「リバーシティラン」などが候補に挙がります。これらでしょうか？


User
ダブルドラゴン2でした！ありがとうございます！

ChatGPT
よかったです！「ダブルドラゴン2」が正解だったんですね。楽しい思い出がよみがえりましたね。何か他に質問やお話したいことがあればお気軽にどうぞ！

```


おぉー素晴らしい！ガチで知りたかったのですっきりしました！

# 汎用関数作って！

良くありそうなものは拾ってくると思いますが聞いてみたら簡単かなと。

```

User
typescriptでnull、undefined、length0のオブジェクト及び配列が引数として与えられたらtrueを返す関数を作って下さい。また適切と思われる関数名をつけてください

ChatGPT
以下は、TypeScriptでnull、undefined、length 0のオブジェクトおよび配列が引数として与えられた場合にtrueを返す関数です。関数名はisEmptyとしました。

typescript
Copy code
function isEmpty(value: any): boolean {
  if (value === null || value === undefined) {
    return true;
  }

  if (Array.isArray(value) || typeof value === 'object') {
    return Object.keys(value).length === 0;
  }

  return false;
}
この関数を使用すると、例えば以下のように空のオブジェクトや配列に対してtrueが返されます。

typescript
Copy code
console.log(isEmpty(null));          // true
console.log(isEmpty(undefined));     // true
console.log(isEmpty({}));            // true
console.log(isEmpty([]));            // true
console.log(isEmpty({ key: 'value' })); // false
console.log(isEmpty([1, 2, 3]));         // false



User
次にobjectをurlパラメータの文字列に直す関数を作って下さい。

ChatGPT
以下は、オブジェクトをURLパラメータの文字列に変換する関数です。関数名はobjectToQueryStringとしました。

typescript
Copy code
function objectToQueryString(obj: Record<string, any>): string {
  const queryString = Object.keys(obj)
    .map((key) => encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]))
    .join('&');

  return queryString;
}
この関数を使用すると、オブジェクトをURLパラメータの文字列に変換できます。例えば:

typescript
Copy code
const params = {
  name: 'John',
  age: 25,
  city: 'Example City'
};

const queryString = objectToQueryString(params);
console.log(queryString);
// 結果: "name=John&age=25&city=Example%20City"
このように、オブジェクトの各プロパティがURLエンコードされ、&で連結された文字列が得られます。




User
最後に全角カナを半角カナに変換する関数を作って下さい。一般的に考えられる長音の考慮もしてください。

ChatGPT
以下は、全角カナを半角カナに変換する関数です。また、長音（ー）についても変換を考慮しています。関数名はzenkakuToHankakuKanaとしました。

typescript
Copy code
function zenkakuToHankakuKana(str: string): string {
  return str
    .replace(/[ァ-ンー]/g, (match) => {
      const charCode = match.charCodeAt(0);
      return String.fromCharCode(charCode - 0x60);
    })
    .replace(/ー/g, '-');
}
この関数を使用すると、例えば以下のように変換できます。

typescript
Copy code
const fullwidthKana = 'アイウエオ カキクケコ サシスセソ ナニヌネノ ハヒフヘホ マミムメモ ヤユヨ ラリルレロ ワヲ ンー';
const halfwidthKana = zenkakuToHankakuKana(fullwidthKana);
console.log(halfwidthKana);
// 結果: "ｱｲｳｴｵ ｶｷｸｹｺ ｻｼｽｾｿ ﾅﾆﾇﾈﾉ ﾊﾋﾌﾍﾎ ﾏﾐﾑﾒﾓ ﾔﾕﾖ ﾗﾘﾙﾚﾛ ﾜｦ ﾝ-"
この関数は正規表現を使用して全角カナを半角カナに変換し、長音もハイフンに変換します。




User
いくつかの環境依存文字の長音もいれてもらえますか？

ChatGPT
もちろんです。以下は、いくつかの環境依存文字の長音も含めた全角カナを半角カナに変換する関数です。

typescript
Copy code
function zenkakuToHankakuKana(str: string): string {
  return str
    .replace(/[ァ-ヶーａ-ｚＡ-Ｚ０-９]/g, (match) => {
      const charCode = match.charCodeAt(0);
      // 全角カナ
      if (charCode >= 0x30A1 && charCode <= 0x30F6) {
        return String.fromCharCode(charCode - 0x60);
      }
      // 長音の変換
      if (charCode === 0x30FC || charCode === 0xFF0D) {
        return '-';
      }
      return match;
    });
}
この関数では、0x30FCが「ー」の全角長音に対応し、0xFF0Dが全角ハイフンに対応しています。また、英数字も半角に変換します。使用例は前回と同じく、適宜変換したい文字列を関数に渡してください。



```

おぉー！これもなかなか！
プログラマの仕事がなくなると言われても言い返せなさそうです。。。

# 終わりに

いかがでしたでしょうか？
あのゲームなんだっけ？は試してみる価値ありですよ！