generated from mwc/problemset_numberwords
I did a bunch wihout using the dictionary and just using if statements and returning the variables,
but it seemed like it was taking too long / too many lines so then I switched to using a dicitionary of place values. I think it turned out okay, I was finally able to get at all of the spaces and ands (at least, the test ran OK, I suppose there could be more oversights that weren't revealed in the tests).
This commit is contained in:
parent
7c5907d640
commit
2a8a1c29b8
113
numberwords.py
113
numberwords.py
|
@ -15,19 +15,116 @@ TENS_NAMES = [
|
|||
]
|
||||
|
||||
def int_under_1000000_to_str(number):
|
||||
return "umm..."
|
||||
|
||||
number_by_places = {"100k": "", "10k": "", "1k": "", "100": "", "10": "", "1": ""}
|
||||
quotient100000, remainder10000 = divide_with_remainder(number, 100000) #123456 = 1, 23456
|
||||
quotient10000, remainder1000 = divide_with_remainder(remainder10000, 10000) #23456 = 2, 3456
|
||||
quotient1000, remainder100 = divide_with_remainder(remainder1000, 1000) #3456 = 3, 456
|
||||
quotient100, remainder10 = divide_with_remainder(remainder100, 100) #456 = 4, 56
|
||||
quotient10, remainder1 = divide_with_remainder(remainder10, 10) #56 = 5, 6
|
||||
if number < 1000:
|
||||
int_under_1000_to_str(number)
|
||||
return int_under_1000_to_str(number)
|
||||
if number >= 1000:
|
||||
#100000s place
|
||||
if quotient100000 != 0:
|
||||
number_by_places["100k"] = DIGIT_NAMES[quotient100000] + " hundred"
|
||||
#10000s place
|
||||
if quotient10000 == 1:
|
||||
if quotient100000 != 0:
|
||||
number_by_places["10k"] = " and " + TWEEN_AND_TEEN_NAMES[quotient1000] + " thousand"
|
||||
if quotient100000 == 0:
|
||||
number_by_places["10k"] = TWEEN_AND_TEEN_NAMES[quotient1000] + " thousand"
|
||||
if quotient10000 != 1:
|
||||
if quotient10000 != 0:
|
||||
if quotient100000 != 0:
|
||||
number_by_places["10k"] = " and " + TENS_NAMES[quotient10000+1]
|
||||
if quotient100000 == 0:
|
||||
number_by_places["10k"] = TENS_NAMES[quotient10000+1]
|
||||
#1000s place
|
||||
if quotient1000 != 0:
|
||||
if quotient100 == 0 and quotient10 == 0:
|
||||
if quotient10000 == 0:
|
||||
number_by_places["1k"] = DIGIT_NAMES[quotient1000]+" thousand"
|
||||
if quotient10000 != 0:
|
||||
number_by_places["1k"] = "-" + DIGIT_NAMES[quotient1000]+" thousand"
|
||||
if quotient100 != 0:
|
||||
if quotient10000 == 0:
|
||||
number_by_places["1k"] = DIGIT_NAMES[quotient1000]+" thousand "
|
||||
if quotient10000 != 0:
|
||||
number_by_places["1k"] = "-" + DIGIT_NAMES[quotient1000]+" thousand "
|
||||
if quotient10 != 0:
|
||||
if quotient10000 == 0:
|
||||
number_by_places["1k"] = DIGIT_NAMES[quotient1000]+" thousand "
|
||||
if quotient10000 != 0:
|
||||
number_by_places["1k"] = "-" + DIGIT_NAMES[quotient1000]+" thousand "
|
||||
if remainder1 != 0:
|
||||
if quotient10000 == 0:
|
||||
number_by_places["1k"] = DIGIT_NAMES[quotient1000]+" thousand "
|
||||
if quotient10000 != 0:
|
||||
number_by_places["1k"] = "-" + DIGIT_NAMES[quotient1000]+" thousand "
|
||||
#hundreds place
|
||||
if quotient100 != 0:
|
||||
number_by_places["100"] = DIGIT_NAMES[quotient100] + " hundred"
|
||||
#tens place
|
||||
if quotient10 == 1:
|
||||
number_by_places["10"] = " and " + TWEEN_AND_TEEN_NAMES[remainder1]
|
||||
if quotient10 > 1:
|
||||
number_by_places["10"] = " and " + TENS_NAMES[quotient10]
|
||||
#ones place
|
||||
if remainder1 != 0:
|
||||
if quotient10 > 1:
|
||||
number_by_places["1"] = "-" + DIGIT_NAMES[remainder1]
|
||||
if quotient10 == 1:
|
||||
number_by_places["1"] = ""
|
||||
if quotient10 == 0:
|
||||
number_by_places["1"] = DIGIT_NAMES[remainder1]
|
||||
return number_by_places["100k"]+number_by_places["10k"]+number_by_places["1k"]+number_by_places["100"]+number_by_places["10"]+number_by_places["1"]
|
||||
|
||||
def int_under_1000_to_str(number):
|
||||
return "umm..."
|
||||
number_by_places = {"100k": "", "10k": "", "1k": "", "100": "", "10": "", "1": ""}
|
||||
quotient100, remainder10 = divide_with_remainder(number, 100) #456 = 4, 56
|
||||
quotient10, remainder1 = divide_with_remainder(remainder10, 10) #56 = 5, 6
|
||||
if number >= 100:
|
||||
if quotient100 != 0:
|
||||
number_by_places["100"] = DIGIT_NAMES[quotient100] + " hundred"
|
||||
if quotient10 == 1:
|
||||
number_by_places["10"] = " and " + TWEEN_AND_TEEN_NAMES[remainder1]
|
||||
if quotient10 > 1:
|
||||
number_by_places["10"] = " and " + TENS_NAMES[quotient10]
|
||||
if remainder1 != 0 and quotient10 != 1:
|
||||
number_by_places["1"] = "-" + DIGIT_NAMES[remainder1]
|
||||
return number_by_places["100k"]+number_by_places["10k"]+number_by_places["1k"]+number_by_places["100"]+number_by_places["10"]+number_by_places["1"]
|
||||
if number < 100:
|
||||
int_under_100_to_str(number)
|
||||
return int_under_100_to_str(number)
|
||||
|
||||
def int_under_100_to_str(number):
|
||||
return "umm..."
|
||||
|
||||
number_by_places = {"100k": "", "10k": "", "1k": "", "100": "", "10": "", "1": ""}
|
||||
quotient10, remainder1 = divide_with_remainder(number, 10) #56 = 5, 6
|
||||
if number >= 20:
|
||||
if quotient10 > 0 and quotient10 != 1:
|
||||
number_by_places["10"] = TENS_NAMES[quotient10]
|
||||
if remainder1 != 0 and quotient10 != 1:
|
||||
number_by_places["1"] = "-" + DIGIT_NAMES[remainder1]
|
||||
return number_by_places["100k"]+number_by_places["10k"]+number_by_places["1k"]+number_by_places["100"]+number_by_places["10"]+number_by_places["1"]
|
||||
if number < 20:
|
||||
int_under_20_to_str(number)
|
||||
return int_under_20_to_str(number)
|
||||
|
||||
def int_under_20_to_str(number):
|
||||
return "umm..."
|
||||
number_by_places = {"100k": "", "10k": "", "1k": "", "100": "", "10": "", "1": ""}
|
||||
quotient10, remainder1 = divide_with_remainder(number, 10)
|
||||
if number >= 10:
|
||||
number_by_places["10"] = TWEEN_AND_TEEN_NAMES[remainder1]
|
||||
return number_by_places["100k"]+number_by_places["10k"]+number_by_places["1k"]+number_by_places["100"]+number_by_places["10"]+number_by_places["1"]
|
||||
if number < 10:
|
||||
number_by_places["1"] = DIGIT_NAMES[number]
|
||||
return number_by_places["100k"]+number_by_places["10k"]+number_by_places["1k"]+number_by_places["100"]+number_by_places["10"]+number_by_places["1"]
|
||||
|
||||
def int_under_10_to_str(number):
|
||||
return "umm..."
|
||||
number_by_places = {"100k": "", "10k": "", "1k": "", "100": "", "10": "", "1": ""}
|
||||
number_by_places["1"] = DIGIT_NAMES[number]
|
||||
return number_by_places["100k"]+number_by_places["10k"]+number_by_places["1k"]+number_by_places["100"]+number_by_places["10"]+number_by_places["1"]
|
||||
|
||||
def divide_with_remainder(dividend, divisor):
|
||||
"""Divides one number by another, using whole-number division.
|
||||
|
@ -36,3 +133,5 @@ def divide_with_remainder(dividend, divisor):
|
|||
quotient = dividend // divisor
|
||||
remainder = dividend % divisor
|
||||
return quotient, remainder
|
||||
|
||||
int_under_1000000_to_str(10000)
|
19
planning.md
19
planning.md
|
@ -37,19 +37,32 @@ 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!)
|
||||
make a dictionary with 100k, 10k, 1k, 100, 10, 1 places
|
||||
add names to 1s, 10s place in dictionary
|
||||
|
||||
## Integers under 100
|
||||
|
||||
if number < 20:
|
||||
integers under 20
|
||||
if number >= 20:
|
||||
add names to 1s, 10s places in dictionary
|
||||
|
||||
## Integers under 1000
|
||||
|
||||
if number < 100:
|
||||
integers under 100
|
||||
if number >= 100:
|
||||
add names to 1s, 10s, 100s places in dictionary
|
||||
|
||||
## Integers under 1000000
|
||||
|
||||
if number < 1000:
|
||||
integers under 1000
|
||||
if number >= 1000:
|
||||
add names to 1s, 10s, 100s, 1k, 10k, 100k place in dictionary
|
||||
|
||||
## 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?
|
||||
|
||||
if number < 0:
|
||||
add "negative" to dictionary (add a sign entry to the front)
|
||||
|
||||
|
|
Loading…
Reference in New Issue