Виктор обнови решението на 15.10.2016 13:11 (преди около 9 години)
+CONVERTER = {
+  C: {
Едно дребно и едно по-концпетуално нещо тук:
- Имената на ключовете в хешовете е по-добре да са в snake_case.
- Може да се замислиш за алтернативен подход в конвертирането, вместо да изреждаш формули от всяка мерна единица до всяка друга. Например да конвертираш на 2 стъпки, минавайки през избрана от теб междинна мерна единица. Например Kelvin. Така ще правиш едно смятане повече, но пък ще ти трябват само формули от трите до Келвин, както и от Келвин до трите. C -> F би се извеждало чрез C -> K -> F, вместо чрез собствена формула.
+    C: -> (c) { c },
+    F: -> (c) { (c * 9.0 / 5) + 32 },
+    K: -> (c) { c + 273.15 }
+  },
+  F: {
+    C: -> (f) { (f - 32) * 5.0 / 9 },
+    F: -> (f) { f },
+    K: -> (f) { (f - 32) * 5.0 / 6 + 273.15 }
+  },
+  K: {
+    C: -> (k) { (k - 273.15) * 9.0 / 5 + 32 },
+    F: -> (k) { k - 273.15 },
+    K: -> (k) { k }
+  }
+}
+
+MELTING_POINTS_CELSIUS = {
+  water: 0,
+  ethanol: -114,
+  gold: 1_064,
+  silver: 961.8,
+  copper: 1_085
+}
+
+BOILING_POINTS_CELSIUS = {
Супер имена, казват точно какво съдържат хешовете. Също е добре че са дефинирани като константи извън методите.
+  water: 100,
+  ethanol: 78.37,
+  gold: 2_700,
+  silver: 2_162,
+  copper: 2_567
+}
+
+def convert_between_temperature_units(degrees, from_unit, to_unit)
+  CONVERTER[from_unit.to_sym][to_unit.to_sym].call(degrees)
Може да ползваш стрингове за ключове на хешовете, за да си спестиш викането на to_sym всеки път. Не е фатално че ще се наложи да ползваш стария синтаксис с "ракетка" (=> вместо :).
+end
+
+def melting_point_of_substance(substance, unit)
+  CONVERTER[:C][unit.to_sym].call(MELTING_POINTS_CELSIUS[substance.to_sym])
+end
+
+def boiling_point_of_substance(substance, unit)
+  CONVERTER[:C][unit.to_sym].call(BOILING_POINTS_CELSIUS[substance.to_sym])
+end

Супер имена, казват точно какво съдържат хешовете. Също е добре че са дефинирани като константи извън методите.