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