Паттерн adapter позволяет коду, ожидающему один интерфейс, работать с объектами, которые дают другой. Здесь панель понимает только градусы Цельсия, а датчики сообщают в разных единицах.
Каждое показание — это буква единицы, двоеточие и значение:
C:<value>: уже по Цельсию.F:<value>: по Фаренгейту, переводится как (F − 32) × 5 / 9.K:<value>: в кельвинах, переводится как K − 273.15.
Реализуйте sensor_adapter(readings).
Входные данные
readings: исходные показания датчиков.
Выходные данные
Верните каждое показание в градусах Цельсия, по порядку. Ответы с погрешностью до 1e-6 принимаются.
Ограничения
1 ≤ число показаний ≤ 1,000
−1,000 ≤ значение ≤ 1,000
Примеры
Ввод:
readings = ["C:21.5", "F:212", "K:273.15"]
Ожидаемый вывод:
expected = [21.5, 100.0, 0.0]
Ввод:
std::vector<std::string> readings = {"C:21.5", "F:212", "K:273.15"};
Ожидаемый вывод:
std::vector<double> expected = {21.5, 100.0, 0.0};
Ввод:
string[] readings = new string[] {"C:21.5", "F:212", "K:273.15"};
Ожидаемый вывод:
double[] expected = new double[] {21.5, 100.0, 0.0};
Пояснение
21.5 °C остаётся; 212 °F — это (212 − 32) × 5 / 9 = 100 °C; 273.15 K — это 0 °C.
Ввод:
readings = ["F:-40"]
Ожидаемый вывод:
expected = [-40.0]
Ввод:
std::vector<std::string> readings = {"F:-40"};
Ожидаемый вывод:
std::vector<double> expected = {-40.0};
Ввод:
string[] readings = new string[] {"F:-40"};
Ожидаемый вывод:
double[] expected = new double[] {-40.0};
Пояснение
−40 одинаково в обеих шкалах: (−40 − 32) × 5 / 9 = −40.
Как подступиться
Сначала попробуйте сами, затем открывайте подсказки по одной.
Подсказка 1
Буква перед двоеточием обозначает единицу.
Подсказка 2
Переведите каждое показание в Цельсий своей формулой.
Подсказка 3
Читайте число после двоеточия как дробное, включая отрицательные.
Ожидаемая сложность
время O(число показаний), доп. память O(число показаний)
Ссылки
Это задание адаптировано для CodeUtility. Следуйте условию и ограничениям выше.