Дарин обнови решението на 16.10.2016 06:22 (преди около 8 години)
+
+# Temperature Converter
+
+def convert_between_temperature_units(degree, first_unit, second_unit)
+ if first_unit == 'C' && second_unit == 'K'
Много е къдраво, не трудно е например да намериш къде се превръща от F към C.
- Няма нужда да присвояваш на degree
- Този Rational е излишен (1.8 :?)
- Винаги правиш сравнение на едни и същи неща. Тоест по-добре ще стане с case или с hash + един gaurd за когато са равни.
+ degree += 273.15
+ elsif first_unit == 'C' && second_unit == 'F'
+ degree = degree * Rational(9, 5) + 32
+ elsif first_unit == 'K' && second_unit == 'C'
+ degree -= 273.15
+ elsif first_unit == 'K' && second_unit == 'F'
+ degree = ( degree - 273.15 ) * Rational(9, 5) + 32
+ elsif first_unit == 'F' && second_unit == 'C'
+ degree = ( degree - 32 ) * Rational(5, 9)
+ elsif first_unit == 'F' && second_unit == 'K'
+ degree = ( degree - 32 ) * Rational(5, 9) + 273.15
+ elsif first_unit == second_unit
+ degree
+ end
+end
+
+# Melting Temperature
+
+def melting_point_of_substance(substance_name, unit)
+ table = {
+ 'water' => 0,
+ 'ethanol' => -114,
+ 'gold' => 1_064,
+ 'silver' => 961.8,
+ 'copper' => 1_085
+ }
+ convert_between_temperature_units(table[substance_name], 'C', unit)
+end
+
+# Boiling Temperature
+
+def boiling_point_of_substance(substance_name, unit)
+ table = {
Ако държиш всички данни за всяко вещество в една константа ще е по-добре. Сега hash-овете са разпокъсани.
+ 'water' => 100,
+ 'ethanol' => 78.37,
+ 'gold' => 2_700,
+ 'silver' => 2_162,
+ 'copper' => 2_567
+ }
+ convert_between_temperature_units(table[substance_name], 'C', unit)
+end