この解答例はChatGPTによって生成されています,正しいかは自己判断で。

BFE.devでのAI解答例 - JavaScript コーディング問題
132. 時計の短針と長針の角度

function angle(time) {
  const [hour, minute] = time.split(':').map(Number);
  const hourAngle = (hour % 12) * 30 + minute * 0.5;
  const minuteAngle = minute * 6;
  const diff = Math.abs(hourAngle - minuteAngle);
  return Math.min(diff, 360 - diff);
}

angle関数は、時計の短針と長針の角度(小さい方)を四捨五入して返します。まず、HH:mm形式の文字列を:で分割し、hourminuteに変換します。ここでhourは0から23の値ですが、12以上の場合は12を引いたものが実際の針の位置を表します。例えば、13時の場合は1時と同じ位置になります。

その後、短針と長針が時計盤上で表す角度を計算します。短針の角度は、1時間あたり30度移動するため、hour % 12で1から12までの値を取得し、そこに30を掛けた後、分数の部分も加えます(時針が1時間で30度進むとすると、1分ごとに0.5度進むため)。長針の角度は、1分あたり6度進むため、minuteに6を掛けます。

最後に、短針と長針の角度差を計算し、360度を超える場合でも正しい答えを返せるようにします。

例えば、angle('12:00')の場合、短針は12時(0度)、長針は12分(72度)を指すため、短針と長針の角度差は72度(小さい方)。同様に、angle('23:30')の場合は、短針は11時半(172.5度)、長針は180度を指すため、短針と長針の角度差は7.5度(小さい方)となります。