Created
May 12, 2019 09:40
-
-
Save madeindjs/2b0ff02784c7315b1dca50a1ea875718 to your computer and use it in GitHub Desktop.
Juste quelques améliorations au niveau des nommages
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
# Il vaut mieux définir des constantes (aka des variables qui ne changerons jamais) | |
# en dehors de la méthode. Les constantes sont juste nomées en majuscule | |
# | |
# La syntaxe avec le `%w[]` permet simplement de définir des tableaux en mode un peu plus sexy | |
NUMBER_TRANSLATIONS = %w[one two three four five six seven eight nine].freeze | |
DOZEN_TRANSLATIONS = %w[ten twenty thirty forty fifty sixty seventy eighty ninety].freeze | |
TEENAGERS = %w[eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen].freeze | |
# Convert a number to a beautiful string | |
# @param [Integer] as a number | |
# @return [String] as a pretty formated number | |
def english_number(number) | |
return 'Please enter a number that isn\'t negative.' if number < 0 # No negative numbers. | |
return 'zero' if number == 0 | |
# The string we will return. | |
num_string = '' | |
# how much of the number we still have left to write out. | |
rest_number = number | |
# How many hundreds left to write out? | |
number_of_hundred = rest_number / 100 | |
# Subtract off those hundreds. | |
rest_number -= number_of_hundred * 100 | |
if number_of_hundred > 0 | |
# Now here's a really sly trick: | |
hundreds = english_number number_of_hundred | |
num_string = num_string + hundreds + ' hundred' | |
# That's called "recursion". So what did I just do? | |
# I told this method to call itself, but with "write" instead of | |
# "number". Remember that "write" is (at the moment) the number of | |
# hundreds we have to write out. After we add "hundreds" to | |
# "num_string", we add the string ' hundred' after it. | |
# So, for example, if we originally called english_number with | |
# 1999 (so "number" = 1999), then at this point "write" would | |
# be 19, and "left" would be 99. The laziest thing to do at this | |
# point is to have english_number write out the 'nineteen' for us, | |
# then we write out ' hundred', and then the rest of | |
# english_number writes out 'ninety-nine'. | |
if rest_number > 0 | |
# So we don't write 'two hundredfifty-one'... | |
num_string += ' ' | |
end | |
end | |
number_of_tens = rest_number / 10 # How many tens left to write out? | |
rest_number -= number_of_tens * 10 # Subtract off those tens. | |
if number_of_tens > 0 | |
if (number_of_tens == 1) && (rest_number > 0) | |
# Since we can't write "tenty-two" instead of "twelve", | |
# we have to make a special exception for these. | |
num_string += TEENAGERS[rest_number - 1] | |
# The "-1" is because TEENAGERS[3] is 'fourteen', not 'thirteen'. | |
# Since we took care of the digit in the ones place already, | |
# we have nothing left to write. | |
rest_number = 0 | |
else | |
num_string += DOZEN_TRANSLATIONS[number_of_tens - 1] | |
# The "-1" is because DOZEN_TRANSLATIONS[3] is 'forty', not 'thirty'. | |
end | |
if rest_number > 0 | |
# So we don't write 'sixtyfour'... | |
num_string += '-' | |
end | |
end | |
if rest_number > 0 | |
num_string += NUMBER_TRANSLATIONS[rest_number - 1] | |
# The "-1" is because NUMBER_TRANSLATIONS[3] is 'four', not 'three'. | |
end | |
# Now we just return "num_string"... | |
num_string | |
end | |
puts 'Plz enter a number' | |
user_input = gets.to_i | |
puts english_number user_input |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment