問題
今回は会社の先輩から頭の体操として教えてもらった、あるアルゴリズムの問題を解く。問題の内容は、
時計の長針と短針の間の角度(小さい方)を計算しなさい。
というもの。使用した言語はいつも通りPHP
ですわ。
実装
考えるべきことは以下。
- 長針・短針共に0を基とする
- 短針の0時からの角度
- 長針の0分からの角度
- 短針の速度
- 長針と短針の差分により、引くほうを決定
こんなところか。以上のことが分かれば解ける。
実際に組んだプログラムはこちら。
PHP
// 長針・短針の設定
$short = 23;
$long = 59;
// 24時間表示 → 12時間表示
$hour = $short <= 12 ? $short : $short - 12;
$minute = $long;
// 短針の角度取得
$rShort = ($hour * (360 / 12)) + $minute * 1/2;
// 長針の角度取得
$rLong = $minute * (360 / 60);
// 角度取得
$ang = abs($rLong - $rShort);
// 角度が小さいほうを表示
echo min($ang, (360 - $ang));
こうした方が良いよ!というご意見ございましたら、是非コメントいただけると助かります。
よろしくお願い致しますm(_ _)m