自己紹介
こんにちは、初めまして。
エンジニアのおはなといいます。
エンジニア経験も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