タイムキーパー


この演習は主に時間の長さを扱いますが、時刻全般を扱う演習としても使えます。

ストーリー

サラはタイムキーパーです。実は、右に出る者はいないほど優秀です。子どもたちにタイムキーパーの仕事は何かと聞かれると、白い砂でいっぱいの瓶を見せるのが大好きです。「ほらね」と彼女は言います。「私は時間を守っているんです!」

実際の仕事はそれほどロマンチックではありませんが、それでも彼女にとってとても面白く、やりがいのある仕事です。計測機器でいっぱいのバッグを携えて世界中のスポーツイベントへ飛び回り、すべての選手のタイムを計測します。

この演習では、サラに頼まれて作る新しい計測ソフトウェアのために、いくつかの関数を書きます。間違いは許されません。もし後からソフトウェアのバグが見つかれば、次の世界記録が無効になってしまうかもしれません。その責任を負う覚悟はできていますか?

メモ

計測ハードウェアから送られてくるデータは、通常タイムスタンプ(時刻、日時、あるいはタイムゾーン付きの場合もあります)です。その精度は非常に高く、通常は1ミリ秒、時には100マイクロ秒にまで及びます。各ハードウェアデバイスには内部クロックがあり、それを他のすべてのデバイスと同期させる必要があります。

タスク

タイムキーパーの演習に合うタスクの例を挙げます。

  • スタート時刻とフィニッシュ時刻の差を取り、時間の長さを求めます。
  • ある計測デバイスは別のタイムゾーンにあります。異なるタイムゾーンの2つの時刻の差を計算します。
  • ある計測デバイスにはインターネット接続がありません。最初の10人のランナーについては、記録されたタイムをヘルパーが電話で読み上げます。それらは"10h5m19.234s"という形式で入力され、これを解析する必要があります。
  • 早すぎるスタートが、バックアップ用のビデオカメラに記録されていました。誤ったスタート時刻から指定された時間の長さを引いて、新しいスタート時刻を計算し直します。
  • イベント中には、たくさんの迷子のタイムが検出されます。そうした「不要な」タイムをすべて無視できるようにするため、タイムキーパーは、ある計測デバイスからのタイムをスタート後の一定の時間枠内だけ受け付けることができます。たとえば、スタートから10分後から30分後の間です。start time(タイムスタンプ)、fromとto(時間の長さ)、detection(タイムスタンプ)を入力とするフィルター関数を作ります。
  • リーダーボード上の時間の長さの出力を"1h5m19.234s +4.843"という形式に整えます。ここで+4.843は、先頭(1位の選手)との差です。

実装

  • まだありません

関連