3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ChatGPTにライブラリを作ってもらう(Part1)

Posted at

自己紹介

こんにちは、初めまして。
エンジニアのおはなといいます。
エンジニア経験も2年ほどになりまして、アウトプットがてら何かできればと思い作成しております。
GPTに作らせるのは一見何の力にもならないように見えますが、個人的には、エンジニアはプログラムを覚える必要はないと感じていて、
コードを理解し、観たことあるなあを増やし、自分の使いたいように整形することで成長すると考えています。
ライブラリを作ったことはないので、助言とかあればください!

投げかけた質問

鶴亀算のプログラムを作成してください

GPTの回答

了解しました。鶴亀算とは、鶴と亀の足の数と頭の数を合わせて、合計の数を求める問題ですね。以下に、鶴亀算の問題を解くPHPプログラムの例を示します。

<?php

function solveTsuruKame($totalLegs, $totalHeads) {
    // 鶴の数を1から順に増やしながら調べる
    for ($cranes = 0; $cranes <= $totalHeads; $cranes++) {
        $turtles = $totalHeads - $cranes; // 亀の数を計算
        
        $legs = ($cranes * 2) + ($turtles * 4); // 足の総数を計算
        
        if ($legs == $totalLegs) {
            return [
                'cranes' => $cranes,
                'turtles' => $turtles
            ];
        }
    }
    
    // 解が見つからなかった場合
    return null;
}

// テスト用の引数
$totalLegs = 32; // 足の総数
$totalHeads = 10; // 頭の総数

// 鶴亀算を解く
$result = solveTsuruKame($totalLegs, $totalHeads);

// 結果を表示
if ($result) {
    echo "鶴の数: " . $result['cranes'] . "羽\n";
    echo "亀の数: " . $result['turtles'] . "匹\n";
} else {
    echo "解が見つかりませんでした。\n";
}

?>

上記のプログラムでは、solveTsuruKameという関数を定義しています。この関数は引数として足の総数と頭の総数を受け取り、鶴亀算の問題を解きます。鶴の数を1から順に増やしながら、亀の数を計算し、足の総数を比較して解を見つけます。
テスト用の引数として32個の足の総数と10個の頭の総数が設定されていますが、必要に応じてこれらの値を変更することができます。
このプログラムを実行すると、以下のような結果が表示されます。

鶴の数: 6羽
亀の数: 4匹

上記の例では、足の総数が32個、頭の総数が10個の場合に、6羽の鶴と4匹の亀という解が見つかりました。

編集

さすがやGPTくん。
鶴は羽で、亀は匹になっているのもさすがですね。

引数

本ライブラリでは、下記のような使い方をしたいので、

<?php
// 名前はクラスによって変更されます。
use Math\Instance;

echo (new Instance)->set($some_arguments)->getInstance();

↓このように編集します。

<?php
class Tsurukame{
    private $result;
    public function set(int $legs, int $heads){
        
        // ここも、比較演算子は === に修正します。
        if ($legs === $legs) {
            $this->result = [
                0 => $cranes,
                1 => $turtles
            ];
            break;
        }
        // あとで、getInstanceにするので、$thisを返します
        return $this;
    }
}

オプション引数の追加

鶴の足2本・亀の足4本で計算していますが、これをより汎用的にします。
例えば、50円貨幣+100円貨幣のような組み合わせでも対応できるようにします。
そうするとまあこうなります。

public function set(int $legs, int $heads, array $options = [2, 4])

第三引数のoptionは通常の鶴亀算をしたい場合は設定不要で、それ以外の時は本数とか貨幣の金額とかを設定します。
また途中で$legsという変数が出てきてしまうので、これを$totalに変えておきます。

出力テスト

<?php
namespace Test;
require __DIR__ . "/../vendor/autoload.php";

use Math\Tsurukame;

$z = (new Tsurukame)->set(32,10);

print_r($z->getTsurukame());
echo "\n";

結果

$ php Test/test.php

Array
(
    [0] => 4
    [1] => 6
)

同じ結果になりましたね。

今回のプログラム

こちらに公開しました。
https://github.com/ohanaengineer/math/commit/54345a8cfb529b1528fa61b320ed9ec6b1446fc6

3
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?