Problema
El patrón adapter permite que el código que espera una interfaz funcione con objetos que proporcionan otra. Aquí, un panel solo entiende grados Celsius, pero los sensores informan en distintas unidades.
Cada lectura es una letra de unidad, dos puntos y un valor:
C:<value>: ya está en Celsius.F:<value>: Fahrenheit, convertido con (F − 32) × 5 / 9.K:<value>: Kelvin, convertido con K − 273.15.
Implementa sensor_adapter(readings).
Entrada
readings: Las lecturas brutas de los sensores.
Salida
Devuelve cada lectura en Celsius, en orden. Se aceptan respuestas dentro de 1e-6.
Restricciones
1 ≤ número de lecturas ≤ 1,000
−1,000 ≤ valor ≤ 1,000
Ejemplos
Entrada:
readings = ["C:21.5", "F:212", "K:273.15"]
Salida esperada:
expected = [21.5, 100.0, 0.0]
Entrada:
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};
Salida esperada:
std::vector<double> expected = {21.5, 100.0, 0.0};
Entrada:
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};
Salida esperada:
double[] expected = new double[] {21.5, 100.0, 0.0};
Explicación
21.5 °C se queda igual; 212 °F son (212 − 32) × 5 / 9 = 100 °C; 273.15 K son 0 °C.
Entrada:
readings = ["F:-40"]
Salida esperada:
expected = [-40.0]
Entrada:
std::vector<std::string> readings = {"F:-40"};
Salida esperada:
std::vector<double> expected = {-40.0};
Entrada:
string[] readings = new string[] {"F:-40"};
Salida esperada:
double[] expected = new double[] {-40.0};
Explicación
−40 es igual en ambas escalas: (−40 − 32) × 5 / 9 = −40.
Cómo abordarlo
Inténtalo primero por tu cuenta y luego abre las pistas una a una.
Pista 1
La letra antes de los dos puntos indica la unidad.
Pista 2
Convierte cada lectura a Celsius con su propia fórmula.
Pista 3
Lee el número tras los dos puntos como decimal, incluidos los negativos.
Complejidad esperada
tiempo O(número de lecturas), espacio extra O(número de lecturas)
Referencias
Este reto está adaptado para CodeUtility. Sigue el enunciado y las restricciones indicadas arriba.