Skip to content

Instantly share code, notes, and snippets.

@DiegoSalazar
Created March 13, 2015 18:24
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save DiegoSalazar/b6c69d3bf3c1191b93ea to your computer and use it in GitHub Desktop.
Save DiegoSalazar/b6c69d3bf3c1191b93ea to your computer and use it in GitHub Desktop.
Temperature conversion, naive solution
def convertTemp(temp, fs, ts)
@conversions ||= {
'C' => {
'C' => ->(t) { t },
'F' => ->(t) { t * 9 / 5 + 32 },
'K' => ->(t) { t + 273.15 },
'R' => ->(t) { (t + 273.15) * 9 / 5 },
'De' => ->(t) { (100 - t) * 3 / 2 },
'N' => ->(t) { t * 33 / 100 },
'Re' => ->(t) { t * 4 / 5},
'Ro' => ->(t) { t * 21 / 40 + 7.5 }
},
'F' => {
'C' => ->(t) { (t - 32) * 5 / 9 },
'F' => ->(t) { t },
'K' => ->(t) { (t + 459.67) * 5 / 9 },
'R' => ->(t) { t + 459.67 },
'De' => ->(t) { (212 - t) * 5 / 6 },
'N' => ->(t) { (t - 32) * 11 / 60 },
'Re' => ->(t) { (t - 32) * 4 / 9 },
'Ro' => ->(t) { (t - 32) * 7 / 24 + 7.5 }
},
'K' => {
'C' => ->(t) { t - 273.15 },
'F' => ->(t) { t * 9 / 5 - 459.67 },
'K' => ->(t) { t },
'R' => ->(t) { t * 9 / 5 },
'De' => ->(t) { (373.15 - t) * 3 / 2 },
'N' => ->(t) { (t - 273.15) * 33 / 100 },
'Re' => ->(t) { (t - 273.15) * 4 / 5 },
'Ro' => ->(t) { (t - 273.15) * 21 / 40 + 7.5 }
},
'R' => {
'C' => ->(t) { (t - 491.67) * 5 / 9 },
'F' => ->(t) { t - 459.67 },
'K' => ->(t) { t * 5 / 9 },
'R' => ->(t) { t },
'De' => ->(t) { (671.67 - t) * 5 / 6 },
'N' => ->(t) { (t - 491.67) * 11 / 60 },
'Re' => ->(t) { (t - 491.67) * 4 / 9 },
'Ro' => ->(t) { (t - 491.67) * 7 / 24 + 7.5 }
},
'De' => {
'C' => ->(t) { 100 - t * 2 / 3 },
'F' => ->(t) { 212 - t * 6 / 5 },
'K' => ->(t) { 373.15 - t * 2 / 3 },
'R' => ->(t) { 671.67 - t * 6 / 5 },
'De' => ->(t) { t },
'N' => ->(t) { 33 - t * 11 / 50 },
'Re' => ->(t) { 80 - t * 8 / 15 },
'Ro' => ->(t) { 60 - t * 7 / 20 }
},
'N' => {
'C' => ->(t) { t * 100 / 33 },
'F' => ->(t) { t * 60 / 11 + 32 },
'K' => ->(t) { t * 100 / 33 + 273.15 },
'R' => ->(t) { t * 60 / 11 + 491.67 },
'De' => ->(t) { (33 - t) * 50 / 11 },
'N' => ->(t) { t },
'Re' => ->(t) { t * 80 / 33 },
'Ro' => ->(t) { t * 35 / 22 + 7.5 }
},
'Re' => {
'C' => ->(t) { t * 5 / 4 },
'F' => ->(t) { t * 9 / 4 + 32 },
'K' => ->(t) { t * 5 / 4 + 273.15 },
'R' => ->(t) { t * 9 / 4 + 491.67 },
'De' => ->(t) { (80 - t) * 15 / 8 },
'N' => ->(t) { t * 33 / 80 },
'Re' => ->(t) { t },
'Ro' => ->(t) { t * 21 / 32 + 7.5 }
},
'Ro' => {
'C' => ->(t) { (t - 7.5) * 40 / 21 },
'F' => ->(t) { (t - 7.5) * 24 / 7 + 32 },
'K' => ->(t) { (t - 7.5) * 40 / 21 + 273.15 },
'R' => ->(t) { (t - 7.5) * 24 / 7 + 491.67 },
'De' => ->(t) { (60 - t) * 20 / 7 },
'N' => ->(t) { (t - 7.5) * 22 / 35 },
'Re' => ->(t) { (t - 7.5) * 32 / 21 },
'Ro' => ->(t) { t }
}
}
converted = @conversions[fs][ts].call(temp).floor
# Don't know why these two conversions are off by one.
converted += 1 if fs == 'C' && ts == 'Ro' || fs == 'R' && ts == 'C'
converted
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment