Решение на Първа задача - температура и химични елементи от Виктор Маринов

Обратно към всички решения

Към профила на Виктор Маринов

Резултати

  • 6 точки от тестове
  • 0 бонус точки
  • 6 точки общо
  • 17 успешни тест(а)
  • 0 неуспешни тест(а)

Код

CONVERTER = {
'C' => {
'C' => -> (c) { c },
'F' => -> (c) { (c * 9.0 / 5) + 32 },
'K' => -> (c) { c + 273.15 }
},
'F' => {
'C' => -> (f) { (f - 32) * 5.0 / 9 }
},
'K' => {
'C' => -> (k) { k - 273.15 }
}
}
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)
if CONVERTER[from_unit].key?(to_unit)
CONVERTER[from_unit][to_unit].call(degrees)
else
degrees_in_celsius = CONVERTER[from_unit]['C'].call(degrees)
CONVERTER['C'][to_unit].call(degrees_in_celsius)
end
end
def melting_point_of_substance(substance, unit)
CONVERTER['C'][unit].call(MELTING_POINTS_CELSIUS[substance])
end
def boiling_point_of_substance(substance, unit)
CONVERTER['C'][unit].call(BOILING_POINTS_CELSIUS[substance])
end

Лог от изпълнението

.................

Finished in 0.00773 seconds
17 examples, 0 failures

История (2 версии и 3 коментара)

Виктор обнови решението на 15.10.2016 13:11 (преди около 8 години)

+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)
+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

Виктор обнови решението на 16.10.2016 23:19 (преди около 8 години)

CONVERTER = {
- C: {
- C: -> (c) { c },
- F: -> (c) { (c * 9.0 / 5) + 32 },
- K: -> (c) { c + 273.15 }
+ 'C' => {
+ '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 }
+ 'F' => {
+ 'C' => -> (f) { (f - 32) * 5.0 / 9 }
},
- K: {
- C: -> (k) { (k - 273.15) * 9.0 / 5 + 32 },
- F: -> (k) { k - 273.15 },
- K: -> (k) { k }
+ 'K' => {
+ 'C' => -> (k) { k - 273.15 }
}
}
MELTING_POINTS_CELSIUS = {
- water: 0,
- ethanol: -114,
- gold: 1_064,
- silver: 961.8,
- copper: 1_085
+ '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
+ '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)
+ if CONVERTER[from_unit].key?(to_unit)
+ CONVERTER[from_unit][to_unit].call(degrees)
+ else
+ degrees_in_celsius = CONVERTER[from_unit]['C'].call(degrees)
+ CONVERTER['C'][to_unit].call(degrees_in_celsius)
+ end
end
def melting_point_of_substance(substance, unit)
- CONVERTER[:C][unit.to_sym].call(MELTING_POINTS_CELSIUS[substance.to_sym])
+ CONVERTER['C'][unit].call(MELTING_POINTS_CELSIUS[substance])
end
def boiling_point_of_substance(substance, unit)
- CONVERTER[:C][unit.to_sym].call(BOILING_POINTS_CELSIUS[substance.to_sym])
+ CONVERTER['C'][unit].call(BOILING_POINTS_CELSIUS[substance])
end