Sha256: 8fa0303fd8c410ff19ddb084dd3724e38d9e0a8d7a0ab9854c375a6b81b3827b

Contents?: true

Size: 1.47 KB

Versions: 108

Compression:

Stored size: 1.47 KB

Contents

def say(number, recursive=False):
    small = dict(enumerate((
        'zero', 'one', 'two', 'three', 'four', 'five', 'six', 'seven', 'eight',
        'nine', 'ten', 'eleven', 'twelve', 'thirteen', 'fourteen', 'fifteen',
        'sixteen', 'seventeen', 'eighteen', 'nineteen', 'twenty')))

    tens = {20: 'twenty', 30: 'thirty', 40: 'forty', 50: 'fifty',
            60: 'sixty', 70: 'seventy', 80: 'eighty', 90: 'ninety'}

    k, m, b, t = 1e3, 1e6, 1e9, 1e12

    if number < 0:
        raise ValueError('number is negative')
    if number >= t:
        raise ValueError('number is too large: {}'.format(number))

    if number < 20:
        return small[number] if not recursive else 'and ' + small[number]

    if number < 100:
        if number % 10 == 0:
            return small[number]
        return tens[number // 10 * 10] + '-' + small[number % 10]

    if number < k:
        if number % 100 == 0:
            return small[number // 100] + ' hundred'
        return small[number // 100] + ' hundred and ' + say(number % 100)

    if number < m:
        if number % k == 0:
            return say(number // k) + ' thousand'
        return say(number // k) + ' thousand ' + say(number % k, True)

    if number < b:
        if number % m == 0:
            return say(number // m) + ' million'
        return say(number // m) + ' million ' + say(number % m, True)

    if number % b == 0:
        return say(number // b) + ' billion'
    return say(number // b) + ' billion ' + say(number % b, True)

Version data entries

108 entries across 108 versions & 1 rubygems

Version Path
trackler-2.2.1.180 tracks/python/exercises/say/example.py
trackler-2.2.1.179 tracks/python/exercises/say/example.py
trackler-2.2.1.178 tracks/python/exercises/say/example.py
trackler-2.2.1.177 tracks/python/exercises/say/example.py
trackler-2.2.1.176 tracks/python/exercises/say/example.py
trackler-2.2.1.175 tracks/python/exercises/say/example.py
trackler-2.2.1.174 tracks/python/exercises/say/example.py
trackler-2.2.1.173 tracks/python/exercises/say/example.py
trackler-2.2.1.172 tracks/python/exercises/say/example.py
trackler-2.2.1.171 tracks/python/exercises/say/example.py
trackler-2.2.1.170 tracks/python/exercises/say/example.py
trackler-2.2.1.169 tracks/python/exercises/say/example.py
trackler-2.2.1.167 tracks/python/exercises/say/example.py
trackler-2.2.1.166 tracks/python/exercises/say/example.py
trackler-2.2.1.165 tracks/python/exercises/say/example.py
trackler-2.2.1.164 tracks/python/exercises/say/example.py
trackler-2.2.1.163 tracks/python/exercises/say/example.py
trackler-2.2.1.162 tracks/python/exercises/say/example.py
trackler-2.2.1.161 tracks/python/exercises/say/example.py
trackler-2.2.1.160 tracks/python/exercises/say/example.py