Volver a los desafíos
Fácil 0 resueltos 0% de aceptación

Adaptador de sensores de temperatura

Adapta lecturas de sensores Fahrenheit, Kelvin y Celsius a una sola interfaz en Celsius.

Lo que aprenderás

  • Envolver formatos distintos detrás de una sola interfaz
  • Convertir Fahrenheit y Kelvin a Celsius
  • Leer un prefijo de unidad y un valor

Problema

Ver original (inglés)

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

Ejemplo 1
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.

Ejemplo 2
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.

Aprende de otros

Soluciones de la comunidad

Aún no hay soluciones publicadas. Resuelve este reto para compartir la primera.