Problema
O padrão adapter permite que código que espera uma interface funcione com objetos que fornecem outra. Aqui, um painel só entende graus Celsius, mas os sensores reportam em unidades diferentes.
Cada leitura é uma letra de unidade, dois pontos e um valor:
C:<value>: já está em Celsius.F:<value>: Fahrenheit, convertido com (F − 32) × 5 / 9.K:<value>: Kelvin, convertido com K − 273.15.
Implemente sensor_adapter(readings).
Input
readings: As leituras brutas dos sensores.
Output
Retorne cada leitura em Celsius, na mesma ordem. Respostas dentro de 1e-6 são aceitas.
Restrições
1 ≤ número de leituras ≤ 1,000
−1,000 ≤ valor ≤ 1,000
Exemplos
Entrada:
readings = ["C:21.5", "F:212", "K:273.15"]
Saída esperada:
expected = [21.5, 100.0, 0.0]
Entrada:
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};
Saída esperada:
std::vector<double> expected = {21.5, 100.0, 0.0};
Entrada:
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};
Saída esperada:
double[] expected = new double[] {21.5, 100.0, 0.0};
Explicação
21.5 °C continua igual; 212 °F são (212 − 32) × 5 / 9 = 100 °C; 273.15 K são 0 °C.
Entrada:
readings = ["F:-40"]
Saída esperada:
expected = [-40.0]
Entrada:
std::vector<std::string> readings = {"F:-40"};
Saída esperada:
std::vector<double> expected = {-40.0};
Entrada:
string[] readings = new string[] {"F:-40"};
Saída esperada:
double[] expected = new double[] {-40.0};
Explicação
−40 é igual nas duas escalas: (−40 − 32) × 5 / 9 = −40.
Como abordar
Tente sozinho primeiro e depois abra uma dica de cada vez.
Dica 1
A letra antes dos dois-pontos indica a unidade.
Dica 2
Converta cada leitura para Celsius com a fórmula dela.
Dica 3
Leia o número depois dos dois-pontos como decimal, incluindo valores negativos.
Complexidade esperada
tempo O(número de leituras), espaço extra O(número de leituras)
Referências
Este desafio foi adaptado para o CodeUtility. Siga o enunciado e as restrições acima.