チャレンジ一覧に戻る
簡単 0件解決済み 正答率0%

温度センサーのアダプター

Fahrenheit、Kelvin、Celsius のセンサー読み取り値を、ひとつの Celsius インターフェースに適合させる。

このチャレンジで学べること

  • 異なる形式を 1 つのインターフェイスの裏に包む
  • 華氏とケルビンを摂氏に変換する
  • 単位の接頭辞と値を読み取る

問題

原文(英語)を表示

adapter パターンは、あるインターフェースを期待するコードが、別のインターフェースを提供するオブジェクトでも動作できるようにします。ここでは、ダッシュボードは Celsius しか理解しませんが、センサーは異なる単位で報告します。

各読み取り値は、単位文字、コロン、値からなります。

  • C:<value>: すでに Celsius。
  • F:<value>: Fahrenheit。 (F − 32) × 5 / 9 で変換します。
  • K:<value>: Kelvin。K − 273.15 で変換します。

sensor_adapter(readings) を実装してください。

Input

readings: 生のセンサー読み取り値。

Output

各読み取り値を Celsius で、順番に返してください。1e-6 以内の誤差は स्वीकारされます。

制約

1 ≤ 測定値の数 ≤ 1,000

−1,000 ≤ 値 ≤ 1,000

例

例 1
入力:
readings = ["C:21.5", "F:212", "K:273.15"]

期待される出力:
expected = [21.5, 100.0, 0.0]
入力:
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};

期待される出力:
std::vector<double> expected = {21.5, 100.0, 0.0};
入力:
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};

期待される出力:
double[] expected = new double[] {21.5, 100.0, 0.0};

解説

21.5 °C はそのまま; 212 °F は (212 − 32) × 5 / 9 = 100 °C; 273.15 K は 0 °C。

例 2
入力:
readings = ["F:-40"]

期待される出力:
expected = [-40.0]
入力:
std::vector<std::string> readings = {"F:-40"};

期待される出力:
std::vector<double> expected = {-40.0};
入力:
string[] readings = new string[] {"F:-40"};

期待される出力:
double[] expected = new double[] {-40.0};

解説

−40 はどちらの尺度でも同じです: (−40 − 32) × 5 / 9 = −40。

解き方のヒント

まずは自分で考えてから、ヒントを 1 つずつ開いてみましょう。

ヒント 1

コロンの前の文字が単位を表します。

ヒント 2

測定値ごとに専用の公式で摂氏に変換します。

ヒント 3

コロンの後ろの数は負の値も含めて小数として読みます。

目安の計算量

時間 O(測定値の数)、追加メモリ O(測定値の数)

参考資料

この課題はCodeUtility用に調整されています。上記の説明と制約に従ってください。

他の人の解答から学ぶ

コミュニティの解答

まだ公開された解答がありません。この課題を解いて最初の解答を共有しましょう。