Problema
Il pattern adapter permette al codice che si aspetta una certa interfaccia di funzionare con oggetti che ne forniscono un’altra. Qui, una dashboard capisce solo i gradi Celsius, ma i sensori riportano valori in unità diverse.
Ogni lettura è una lettera di unità, due punti e un valore:
C:<value>: già in Celsius.F:<value>: Fahrenheit, convertito con (F − 32) × 5 / 9.K:<value>: Kelvin, convertito con K − 273.15.
Implementa sensor_adapter(readings).
Input
readings: Le letture grezze dei sensori.
Output
Restituisci ogni lettura in Celsius, nell’ordine. Sono accettati risultati entro 1e-6.
Vincoli
1 ≤ numero di letture ≤ 1,000
−1,000 ≤ valore ≤ 1,000
Esempi
Input:
readings = ["C:21.5", "F:212", "K:273.15"]
Output atteso:
expected = [21.5, 100.0, 0.0]
Input:
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};
Output atteso:
std::vector<double> expected = {21.5, 100.0, 0.0};
Input:
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};
Output atteso:
double[] expected = new double[] {21.5, 100.0, 0.0};
Spiegazione
21.5 °C resta tale; 212 °F è (212 − 32) × 5 / 9 = 100 °C; 273.15 K è 0 °C.
Input:
readings = ["F:-40"]
Output atteso:
expected = [-40.0]
Input:
std::vector<std::string> readings = {"F:-40"};
Output atteso:
std::vector<double> expected = {-40.0};
Input:
string[] readings = new string[] {"F:-40"};
Output atteso:
double[] expected = new double[] {-40.0};
Spiegazione
−40 è lo stesso in entrambe le scale: (−40 − 32) × 5 / 9 = −40.
Come affrontarlo
Prova prima da solo, poi apri un suggerimento alla volta.
Suggerimento 1
La lettera prima dei due punti indica l'unità.
Suggerimento 2
Converti ogni lettura in Celsius con la sua formula.
Suggerimento 3
Leggi il numero dopo i due punti come decimale, compresi i valori negativi.
Complessità attesa
tempo O(numero di letture), spazio aggiuntivo O(numero di letture)
Riferimenti
Questa sfida è adattata per CodeUtility. Segui la traccia e i vincoli sopra.