Back to challenges
Easy 0 solved 0% acceptance

Temperature Sensor Adapter

Adapt readings from Fahrenheit, Kelvin and Celsius sensors to one Celsius interface.

What you'll learn

  • Wrap different formats behind one interface
  • Convert Fahrenheit and Kelvin to Celsius
  • Parse a unit prefix and a value

Problem

The adapter pattern lets code that expects one interface work with objects that provide another. Here, a dashboard only understands degrees Celsius, but the sensors report in different units.

Each reading is a unit letter, a colon and a value:

  • C:<value>: already Celsius.
  • F:<value>: Fahrenheit, converted with (F − 32) × 5 / 9.
  • K:<value>: Kelvin, converted with K − 273.15.

Implement sensor_adapter(readings).

Input

readings: The raw sensor readings.

Output

Return every reading in Celsius, in order. Answers within 1e-6 are accepted.

Constraints

1 ≤ number of readings ≤ 1,000

−1,000 ≤ value ≤ 1,000

Examples

Example 1
Input:
readings = ["C:21.5", "F:212", "K:273.15"]

Expected output:
expected = [21.5, 100.0, 0.0]
Input:
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};

Expected output:
std::vector<double> expected = {21.5, 100.0, 0.0};
Input:
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};

Expected output:
double[] expected = new double[] {21.5, 100.0, 0.0};

Explanation

21.5 °C stays; 212 °F is (212 − 32) × 5 / 9 = 100 °C; 273.15 K is 0 °C.

Example 2
Input:
readings = ["F:-40"]

Expected output:
expected = [-40.0]
Input:
std::vector<std::string> readings = {"F:-40"};

Expected output:
std::vector<double> expected = {-40.0};
Input:
string[] readings = new string[] {"F:-40"};

Expected output:
double[] expected = new double[] {-40.0};

Explanation

−40 is the same in both scales: (−40 − 32) × 5 / 9 = −40.

How to approach it

Try on your own first, then open one hint at a time.

Hint 1

The letter before the colon tells you the unit.

Hint 2

Convert every reading to Celsius with its own formula.

Hint 3

Parse the number after the colon as a decimal, including negative values.

Expected complexity

O(number of readings) time, O(number of readings) extra space

References

This challenge is adapted for CodeUtility. Follow the statement and constraints above.

Learn from others

Community solutions

No published solutions yet. Solve this challenge to share the first one.