Retour aux défis
Facile 0 résolus 0 % de réussite

Adaptateur de capteurs de température

Adaptez des relevés de capteurs en Fahrenheit, Kelvin et Celsius vers une seule interface Celsius.

Ce que vous allez apprendre

  • Envelopper des formats différents derrière une seule interface
  • Convertir Fahrenheit et Kelvin en Celsius
  • Lire un préfixe d'unité et une valeur

Problème

Le patron adapter permet à un code qui s’attend à une interface de fonctionner avec des objets qui en fournissent une autre. Ici, un tableau de bord ne comprend que les degrés Celsius, mais les capteurs rapportent des unités différentes.

Chaque relevé est une lettre d’unité, un deux-points et une valeur :

  • C:<value> : déjà en Celsius.
  • F:<value> : Fahrenheit, converti avec (F − 32) × 5 / 9.
  • K:<value> : Kelvin, converti avec K − 273.15.

Implémentez sensor_adapter(readings).

Entrée

readings: Les relevés bruts du capteur.

Sortie

Retournez chaque relevé en Celsius, dans l’ordre. Les réponses à 1e-6 près sont acceptées.

Contraintes

1 ≤ nombre de relevés ≤ 1,000

−1,000 ≤ valeur ≤ 1,000

Exemples

Exemple 1
Entrée :
readings = ["C:21.5", "F:212", "K:273.15"]

Sortie attendue :
expected = [21.5, 100.0, 0.0]
Entrée :
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};

Sortie attendue :
std::vector<double> expected = {21.5, 100.0, 0.0};
Entrée :
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};

Sortie attendue :
double[] expected = new double[] {21.5, 100.0, 0.0};

Explication

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

Exemple 2
Entrée :
readings = ["F:-40"]

Sortie attendue :
expected = [-40.0]
Entrée :
std::vector<std::string> readings = {"F:-40"};

Sortie attendue :
std::vector<double> expected = {-40.0};
Entrée :
string[] readings = new string[] {"F:-40"};

Sortie attendue :
double[] expected = new double[] {-40.0};

Explication

−40 est la même valeur dans les deux échelles : (−40 − 32) × 5 / 9 = −40.

Comment l'aborder

Essayez d'abord seul, puis ouvrez les indices un par un.

Indice 1

La lettre avant les deux-points indique l'unité.

Indice 2

Convertissez chaque relevé en Celsius avec sa propre formule.

Indice 3

Lisez le nombre après les deux-points comme un décimal, valeurs négatives comprises.

Complexité attendue

temps O(nombre de relevés), espace supplémentaire O(nombre de relevés)

Références

Ce défi a été adapté pour CodeUtility. Suivez l'énoncé et les contraintes ci-dessus.

Apprenez des autres

Solutions de la communauté

Aucune solution publiée pour l'instant. Résolvez ce défi pour partager la première.