Решение на Първа задача - температура и химични елементи от Александър Ойнаков

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

Към профила на Александър Ойнаков

Резултати

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

Код

def convert_between_temperature_units(degrees, from, to)
temperature_converting_formulas = {
'C' => {
'F' => ((degrees * (9.0 / 5.0)) + 32),
'C' => degrees,
'K' => (degrees + 273.15)
},
'F' => {
'F' => degrees,
'C' => (degrees - 32) * (5.0 / 9.0),
'K' => ((degrees - 32) * (5.0 / 9.0) + 273.15)
},
'K' => {
'F' => ((degrees - 273.15) * (9.0 / 5.0) + 32),
'C' => (degrees - 273.15),
'K' => degrees
}
}
temperature_converting_formulas[from][to]
end
def melting_point_of_substance(substance, temperature_units)
converted_to_sym_substance = :"#{substance}"
melting_points = {
water: 0,
ethanol: -114,
gold: 1064,
silver: 961.8,
copper: 1085
}
degrees = melting_points[converted_to_sym_substance]

Ако хеша ти изглежда така:

melting_points = {"water" => {melting_point: 0}, "ethanol" => {melting_point: -114}}

има смисъл. Иначе за какво ти е да конвертираш нещото към символ като имаш възможността в Руби да използваш стрингове направо - излишно е. Следвай KISS приниципа - "Keep it Short and Simple" или "Keep it simple, stupid" (https://en.wikipedia.org/wiki/KISS_principle)

temperature_converting_formulas = {
'C' => degrees,
'F' => ((degrees * (9.0 / 5.0)) + 32),
'K' => (degrees + 273.15)
}
temperature_converting_formulas[temperature_units]
end
def boiling_point_of_substance(substance, temperature_units)
converted_to_sym_substance = :"#{substance}"
boiling_points = {
water: 100,
ethanol: 78.38,
gold: 2700,
silver: 2162,
copper: 2567
}
degrees = boiling_points[converted_to_sym_substance]
temperature_converting_formulas = {
'C' => degrees,
'F' => ((degrees * (9.0 / 5.0)) + 32),
'K' => (degrees + 273.15)
}
temperature_converting_formulas[temperature_units]
end

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

.............F...

Failures:

  1) #boiling_point_of_substance knows the boiling point of ethanol
     Failure/Error: expect(boiling_point_of_substance(substance, units)).to be_within(0.01).of(expected_degrees)
       expected 173.084 to be within 0.01 of 173.066
     # /tmp/d20161018-13513-g3ulcr/spec.rb:129:in `expect_boiling_point_of'
     # /tmp/d20161018-13513-g3ulcr/spec.rb:107:in `block (2 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (3 levels) in <top (required)>'
     # ./lib/language/ruby/run_with_timeout.rb:7:in `block (2 levels) in <top (required)>'

Finished in 0.00822 seconds
17 examples, 1 failure

Failed examples:

rspec /tmp/d20161018-13513-g3ulcr/spec.rb:104 # #boiling_point_of_substance knows the boiling point of ethanol

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

Александър обнови решението на 16.10.2016 16:43 (преди над 7 години)

+def convert_between_temperature_units(degree, from, to)
+ formulas = {
+ 'C' => { 'F' => ((degree * (9.0 / 5.0)) + 32), 'C' => degree, 'K' => (degree + 273.15) },
+ 'F' => { 'F' => degree, 'C' => (degree - 32) * (5.0 / 9.0), 'K' => ((degree - 32) * (5.0 / 9.0) + 273.15) },
+ 'K' => { 'F' => ((degree - 273.15) * (9.0 / 5.0) + 32), 'C' => (degree - 273.15), 'K' => degree }
+ }
+
+ formulas[from][to]
+end
+
+def melting_point_of_substance(material, key_formulas)

Материал или вещество? Има я думата и в името на самия метод. (: key_formulas говори повече за някакви имплементационни детайли, отколкото какво всъщност представлява въпросната променлива. Става въпрос за някакъв вид мерни единици.

+ melting_points = {
+ 'ethanol' => -114,
+ 'gold' => 1064,
+ 'silver' => 961.8,
+ 'copper' => 1085
+ }
+
+ degree = melting_points[material]
+
+ formulas = { 'C' => degree, 'F' => ((degree * (9.0 / 5.0)) + 32), 'K' => (degree + 273.15) }
+
+ formulas[key_formulas]
+end
+
+def boiling_point_of_substance(material, key_formulas)
+ boiling_points = {
+ 'water' => 100,
+ 'ethanol' => 78.38,
+ 'gold' => 2700,
+ 'silver' => 2162,
+ 'copper' => 2567
+ }
+ degree = boiling_points[material]
+
+ formulas = { 'C' => degree, 'F' => ((degree * (9.0 / 5.0)) + 32), 'K' => (degree + 273.15) }
+
+ formulas[key_formulas]
+end

Александър обнови решението на 16.10.2016 22:59 (преди над 7 години)

-def convert_between_temperature_units(degree, from, to)
- formulas = {
- 'C' => { 'F' => ((degree * (9.0 / 5.0)) + 32), 'C' => degree, 'K' => (degree + 273.15) },
- 'F' => { 'F' => degree, 'C' => (degree - 32) * (5.0 / 9.0), 'K' => ((degree - 32) * (5.0 / 9.0) + 273.15) },
- 'K' => { 'F' => ((degree - 273.15) * (9.0 / 5.0) + 32), 'C' => (degree - 273.15), 'K' => degree }
- }
+def convert_between_temperature_units(degrees, from, to)
+ temperature_converting_formulas = {
+ 'C' => {
+ 'F' => ((degrees * (9.0 / 5.0)) + 32),
+ 'C' => degrees,
+ 'K' => (degrees + 273.15)
+ },
+ 'F' => {
+ 'F' => degrees,
+ 'C' => (degrees - 32) * (5.0 / 9.0),
+ 'K' => ((degrees - 32) * (5.0 / 9.0) + 273.15)
+ },
+ 'K' => {
+ 'F' => ((degrees - 273.15) * (9.0 / 5.0) + 32),
+ 'C' => (degrees - 273.15),
+ 'K' => degrees
+ }
+ }
- formulas[from][to]
+ temperature_converting_formulas[from][to]
end
-def melting_point_of_substance(material, key_formulas)
+def melting_point_of_substance(substance, temperature_units)
+ converted_to_sym_substance = :"#{substance}"
+
melting_points = {
- 'water' => 0,
- 'ethanol' => -114,
- 'gold' => 1064,
- 'silver' => 961.8,
- 'copper' => 1085
+ water: 0,
+ ethanol: -114,
+ gold: 1064,
+ silver: 961.8,
+ copper: 1085
}
- degree = melting_points[material]
+ degrees = melting_points[converted_to_sym_substance]

Ако хеша ти изглежда така:

melting_points = {"water" => {melting_point: 0}, "ethanol" => {melting_point: -114}}

има смисъл. Иначе за какво ти е да конвертираш нещото към символ като имаш възможността в Руби да използваш стрингове направо - излишно е. Следвай KISS приниципа - "Keep it Short and Simple" или "Keep it simple, stupid" (https://en.wikipedia.org/wiki/KISS_principle)

- formulas = { 'C' => degree, 'F' => ((degree * (9.0 / 5.0)) + 32), 'K' => (degree + 273.15) }
+ temperature_converting_formulas = {
+ 'C' => degrees,
+ 'F' => ((degrees * (9.0 / 5.0)) + 32),
+ 'K' => (degrees + 273.15)
+ }
- formulas[key_formulas]
+ temperature_converting_formulas[temperature_units]
end
-def boiling_point_of_substance(material, key_formulas)
+def boiling_point_of_substance(substance, temperature_units)
+ converted_to_sym_substance = :"#{substance}"
+
boiling_points = {
- 'water' => 100,
- 'ethanol' => 78.38,
- 'gold' => 2700,
- 'silver' => 2162,
- 'copper' => 2567
+ water: 100,
+ ethanol: 78.38,
+ gold: 2700,
+ silver: 2162,
+ copper: 2567
}
- degree = boiling_points[material]
+ degrees = boiling_points[converted_to_sym_substance]
- formulas = { 'C' => degree, 'F' => ((degree * (9.0 / 5.0)) + 32), 'K' => (degree + 273.15) }
+ temperature_converting_formulas = {
+ 'C' => degrees,
+ 'F' => ((degrees * (9.0 / 5.0)) + 32),
+ 'K' => (degrees + 273.15)
+ }
- formulas[key_formulas]
+ temperature_converting_formulas[temperature_units]
end