Voltar para os desafios
Fácil 0 resolvidos 0% de aceitação

Adaptador de sensores de temperatura

Adapte leituras de sensores Fahrenheit, Kelvin e Celsius para uma única interface em Celsius.

O que você vai aprender

  • Envolver formatos diferentes atrás de uma interface
  • Converter Fahrenheit e Kelvin para Celsius
  • Ler um prefixo de unidade e um valor

Problema

Ver original (inglês)

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

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

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

Aprenda com outros

Soluções da comunidade

Ainda não há soluções publicadas. Resolva este desafio para compartilhar a primeira.