generated from mwc/problemset_numberwords
All functions were given proper if/then statements
to write out the full wording for any number typed up all the way to one million. This particular lab certainly made more sense than others as it truly felt like every step built upon the other and provided the necessary foundation to succeed in writing remaining code. When some of the answers were provided, the rest began to fall in line.
This commit is contained in:
parent
5af4ee0a29
commit
04055e67dc
|
@ -11,43 +11,47 @@ TWEEN_AND_TEEN_NAMES = [
|
|||
"ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"
|
||||
]
|
||||
TENS_NAMES = [
|
||||
"ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
|
||||
"", "ten", "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
|
||||
]
|
||||
|
||||
def int_under_1000000_to_str(number):
|
||||
"Returns a textual representation of the number."
|
||||
check_number_in_range(abs(number), 0, MAXIMUM)
|
||||
if number < 1000:
|
||||
return int_under_1000_to_str(number)
|
||||
else:
|
||||
thousands, hundreds = divide_with_remainder(number, 1000)
|
||||
thousands_text = int_under_1000_to_str(thousands)
|
||||
hundreds_text = int_under_1000_to_str(hundreds)
|
||||
return thousands_text + " thousand " + hundreds_text
|
||||
thousands, hundreds_tens_ones = divide_with_remainder(number, 1000)
|
||||
if hundreds_tens_ones == 0:
|
||||
return int_under_1000_to_str(thousands) + " thousand"
|
||||
else:
|
||||
return int_under_1000_to_str(thousands) + " thousand " + int_under_1000_to_str(hundreds_tens_ones)
|
||||
|
||||
def int_under_1000_to_str(number):
|
||||
"Returns a textual representation of the number"
|
||||
check_number_in_range(number, 0, 1000)
|
||||
if number < 100:
|
||||
return int_under_100_to_str(number)
|
||||
else:
|
||||
hundreds, tens = divide_with_remainder(number, 100)
|
||||
hundreds_text = int_under_10_to_str(hundreds)
|
||||
tens_text = int_under_100_to_str(tens)
|
||||
return hundreds_text + " hundred and " + tens_text
|
||||
hundreds, tens_and_ones = divide_with_remainder(number, 100)
|
||||
if tens_and_ones == 0:
|
||||
return int_under_10_to_str(hundreds) + " hundred"
|
||||
else:
|
||||
return int_under_10_to_str(hundreds) + " hundred and " + int_under_100_to_str(tens_and_ones)
|
||||
|
||||
|
||||
def int_under_100_to_str(number):
|
||||
check_number_in_range(number, 0, 100)
|
||||
tens, ones = divide_with_remainder(number, 10)
|
||||
if tens == 0:
|
||||
return int_under_10_to_str(number)
|
||||
elif tens == 1:
|
||||
return TWEEN_AND_TEEN_NAMES[ones]
|
||||
if number < 20:
|
||||
return int_under_20_to_str(number)
|
||||
else:
|
||||
return TENS_NAMES[tens] + '-' + int_under_10_to_str(ones)
|
||||
tens, ones = divide_with_remainder(number, 10)
|
||||
if ones == 0:
|
||||
return TENS_NAMES[tens]
|
||||
else:
|
||||
return TENS_NAMES[tens] + "-" + int_under_10_to_str(ones)
|
||||
|
||||
def int_under_20_to_str(number):
|
||||
if number < 10:
|
||||
return int_under_10_to_str(number)
|
||||
else:
|
||||
return TWEEN_AND_TEEN_NAMES[number-10]
|
||||
|
||||
def int_under_10_to_str(number):
|
||||
check_number_in_range(number, 0, 10)
|
||||
return DIGIT_NAMES[number]
|
||||
|
||||
def check_number_in_range(number, minimum, maximum):
|
||||
|
|
17
planning.md
17
planning.md
|
@ -35,21 +35,22 @@ return digit_names[number]
|
|||
```
|
||||
|
||||
## Integers under 20
|
||||
If the integer is under 10, then use the procedure described above.
|
||||
Otherwise, ... (this is where you take over!)
|
||||
If integer < 10, then return digit_names[number]
|
||||
Else return digit_names between 10 and 19
|
||||
|
||||
## Integers under 100
|
||||
|
||||
If integer < 20, return "Integers under 20"
|
||||
Else return integer between 20 and 99 with proper "and"
|
||||
|
||||
## Integers under 1000
|
||||
|
||||
If integer < 100, return "Integers under 100"
|
||||
Else return integer between 100 and 999 with proper "and"
|
||||
|
||||
## Integers under 1000000
|
||||
|
||||
If integer < 1000, return "Integers under 1000"
|
||||
Else return integer between 1000 and 999999 with proper "and"
|
||||
|
||||
## Negative integers down to -1 million
|
||||
We won't deal with negative integers in this problem set,
|
||||
but how would you deal with a negative integer, using the
|
||||
functions above?
|
||||
Use the above integers but add a negative symbol to all integers and reverse less than to greater than
|
||||
|
||||
|
||||
|
|
|
@ -12,17 +12,17 @@ test_cases = [
|
|||
[11, 'eleven'],
|
||||
[15, 'fifteen'],
|
||||
[18, 'eighteen'],
|
||||
[43, 'fifty-three'],
|
||||
[60, 'seventy-zero'],
|
||||
[89, 'ninety-nine'],
|
||||
[100, 'one hundred and zero'],
|
||||
[43, 'forty-three'],
|
||||
[60, 'sixty'],
|
||||
[89, 'eighty-nine'],
|
||||
[100, 'one hundred'],
|
||||
[212, 'two hundred and twelve'],
|
||||
[755, 'seven hundred and sixty-five'],
|
||||
[1000, 'one thousand zero'],
|
||||
[1001, 'one thousand one'],
|
||||
[755, 'seven hundred and fifty-five'],
|
||||
[1000, 'one thousand'],
|
||||
[1001, 'one thousand and one'],
|
||||
[1672, 'one thousand six hundred and eighty-two'],
|
||||
[10000, 'ten thousand zero'],
|
||||
[588567, 'five hundred and ninety-eight thousand five hundred and seventy-seven'],
|
||||
[10000, 'ten thousand'],
|
||||
[588567, 'five hundred and eighty-eight thousand five hundred and sixty-seven'],
|
||||
]
|
||||
|
||||
for int_input, expected_output in test_cases:
|
||||
|
|
Loading…
Reference in New Issue