Петко обнови решението на 11.10.2016 10:26 (преди около 8 години)
+TEMPERATURE_CONVERSION_CHART = {
+ 'C' => { 'C' => [1, 0], 'F' => [1.8, 32], 'K' => [1, 273.15] },
+ 'F' => { 'C' => [0.55555, -17.77], 'F' => [1, 0], 'K' => [0.55555, 255.37] },
+ 'K' => { 'C' => [1, -273.15], 'F' => [1.8, -459.67], 'K' => [1, 0] },
+}
+
+MELTING_AND_BOILING_POINTS_IN_CELSIUS = {
+ 'water' => [0, 100],
+ 'ethanol' => [-114, 78.37],
+ 'gold' => [1064, 2700],
+ 'silver' => [961.8, 2162],
+ 'copper' => [1085, 2567],
+}
+
+def convert_between_temperature_units(degrees, input_unit, output_unit)
+ slope, intercept = TEMPERATURE_CONVERSION_CHART[input_unit][output_unit]
+ (degrees * slope + intercept).round(2)
+end
+
+def melting_point_of_substance(substance, unit)
+ melting_point_in_celsius = MELTING_AND_BOILING_POINTS_IN_CELSIUS[substance][0]
+ convert_between_temperature_units(melting_point_in_celsius, 'C', unit)
+end
+
+def boiling_point_of_substance(substance, unit)
+ boiling_point_in_celsius = MELTING_AND_BOILING_POINTS_IN_CELSIUS[substance][1]
+ convert_between_temperature_units(boiling_point_in_celsius, 'C', unit)
+end
Доста интересно решение на проблема с умножението и събирането.
Не ми допада особено използването на масиви за целта, но пък така е по-компактна таблицата, така че съм склонен да се съглася.