Кузман обнови решението на 14.10.2016 17:41 (преди около 8 години)
+CONVERTER = {
+ 'K' => {
+ 'C' => -> (t) { t + 273.15 },
+ 'K' => -> (t) { t },
+ 'F' => -> (t) { (t + 459.67) * 5 / 9.0 }
+ },
+
+ 'F' => {
+ 'C' => -> (t) { t * 9 / 5.0 + 32 },
+ 'K' => -> (t) { t * 9 / 5.0 - 459.67 },
+ 'F' => -> (t) { t }
+ },
+
+ 'C' => {
+ 'C' => -> (t) { t },
+ 'K' => -> (t) { t - 273.15 },
+ 'F' => -> (t) { (t - 32) * 5 / 9.0 }
+ }
+}
+
+MELTING_POINT = {
+ 'water' => 0,
+ 'ethanol' => -114,
+ 'gold' => 1_064,
+ 'silver' => 961.8,
+ 'copper' => 1_085
+}
+
+BOILING_POINT = {
+ 'water' => 100,
+ 'ethanol' => 78.37,
+ 'gold' => 2_700,
+ 'silver' => 2_162,
+ 'copper' => 2_567
+}
+
+def convert_between_temperature_units(degrees, input, output)
Тук може да се казват малко по-добре мерните единици. Например input_unit
и output_unit
?
+ return degrees if input == output
+ CONVERTER[output][input].call(degrees)
+end
Интересен подход с ламбдите. Все пак би могъл да си спестиш няколко от тях ако конвертираш градусите на 2 стъпки, ползвайки междинна мерна единица. От една страна, така ще правим по 2 конвертирания, но от друга, спестяваме изреждане на няколко реципрочни формули.
+
+def melting_point_of_substance(substance, output)
+ convert_between_temperature_units(MELTING_POINT[substance], 'C', output)
+end
+
+def boiling_point_of_substance(substance, output)
+ convert_between_temperature_units(BOILING_POINT[substance], 'C', output)
+end
Интересен подход с ламбдите. Все пак би могъл да си спестиш няколко от тях ако конвертираш градусите на 2 стъпки, ползвайки междинна мерна единица. От една страна, така ще правим по 2 конвертирания, но от друга, спестяваме изреждане на няколко реципрочни формули.