|
| 1 | +=begin |
| 2 | +Write a method which take an integer and return the English version of it. |
| 3 | +=end |
| 4 | + |
| 5 | +def english_number number |
| 6 | + # No negative numbers. Range is 0 .. 9.999. |
| 7 | + if number < 0 |
| 8 | + return 'Please enter a number zero or greater.Range is 0 .. 9.999.' |
| 9 | + end |
| 10 | + if number > 9999 |
| 11 | + return 'Please enter a lower number. Range is 0 .. 9.999.' |
| 12 | + end |
| 13 | + if number == 0 |
| 14 | + return 'zero' |
| 15 | + end |
| 16 | + |
| 17 | + num_string = '' # this is the string we will return |
| 18 | + |
| 19 | + ones_place = ['one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight', 'nine'] |
| 20 | + tens_place = ['ten', 'twenty', 'thirty', 'forty', 'fifty', 'sixty', 'seventy', 'eighty', 'ninety'] |
| 21 | + teenagers = ['eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen', 'nineteen'] |
| 22 | + |
| 23 | + # "left" is how much of the number we still have left to write out. |
| 24 | + # "write" is the part we are writing now. |
| 25 | + |
| 26 | + left = number |
| 27 | + write = left/1000 # how many thousands left? |
| 28 | + left = left - write*1000 # subtract off those hundreds. |
| 29 | + |
| 30 | + if write > 0 |
| 31 | + thousands = english_number write |
| 32 | + if write == 1 |
| 33 | + num_string = num_string + thousands + ' thousand' |
| 34 | + else |
| 35 | + num_string = num_string + thousands + ' thousands' |
| 36 | + end |
| 37 | + if left > 0 |
| 38 | + num_string = num_string + ' ' # if we have tens, we need a space for them |
| 39 | + end |
| 40 | + end |
| 41 | + |
| 42 | + write = left/100 # how many hundreds left? |
| 43 | + left = left - write*100 # subtract off those hundreds. |
| 44 | + |
| 45 | + if write > 0 |
| 46 | + hundreds = english_number write |
| 47 | + if write == 1 |
| 48 | + num_string = num_string + hundreds + ' hundred' |
| 49 | + else |
| 50 | + num_string = num_string + hundreds + ' hundreds' |
| 51 | + end |
| 52 | + if left > 0 |
| 53 | + num_string = num_string + ' ' # if we have tens, we need a space for them |
| 54 | + end |
| 55 | + end |
| 56 | + |
| 57 | + |
| 58 | + write = left/10 # how many tens left? |
| 59 | + left = left - write*10 # subtract off those tens |
| 60 | + |
| 61 | + if write > 0 |
| 62 | + if write == 1 && left > 0 # special exception for teenagers |
| 63 | + num_string = num_string + teenagers[left-1] |
| 64 | + left = 0 |
| 65 | + else |
| 66 | + num_string = num_string + tens_place[write-1] |
| 67 | + end |
| 68 | + if left > 0 |
| 69 | + num_string = num_string + ' ' |
| 70 | + end |
| 71 | + end |
| 72 | + |
| 73 | + write = left # how many ones left to write out? |
| 74 | + left = 0 # subtract off those ones |
| 75 | + |
| 76 | + if write > 0 |
| 77 | + num_string = num_string + ones_place[write-1] |
| 78 | + end |
| 79 | + num_string # we return the string we created |
| 80 | +end |
| 81 | + |
| 82 | +puts english_number (0) |
| 83 | +puts english_number (9) |
| 84 | +puts english_number (10) |
| 85 | +puts english_number (11) |
| 86 | +puts english_number (17) |
| 87 | +puts english_number (32) |
| 88 | +puts english_number (88) |
| 89 | +puts english_number (99) |
| 90 | +puts english_number (100) |
| 91 | +puts english_number (101) |
| 92 | +puts english_number (234) |
| 93 | +puts english_number (3211) |
| 94 | +puts english_number (123123) |
0 commit comments