Sha256: 8ee7392e4e56f47d71ffa253f411ca9cd0ed92a9b151a89874551f67da372107

Contents?: true

Size: 1.36 KB

Versions: 111

Compression:

Stored size: 1.36 KB

Contents

struct Say {

    private static let smallNumbers = [
        "zero", "one", "two", "three", "four", "five",
        "six", "seven", "eight", "nine", "ten",
        "eleven", "twelve", "thirteen", "fourteen", "fifteen",
        "sixteen", "seventeen", "eighteen", "nineteen"
    ]

    private static let decades = [
        "twenty", "thirty", "forty", "fifty",
        "sixty", "seventy", "eighty", "ninety"
    ]

    private static let largeGroups: [(name: String, amount: Int)] = [
        ("billion", 1_000_000_000), ("million", 1_000_000), ("thousand", 1_000), ("hundred", 100)
    ]

    static func say(_ number: Int) -> String? {
        guard number >= 0 && number < 1_000_000_000_000 else {
            return nil
        }

        if number < 20 {
            return smallNumbers[number]
        }

        for group in largeGroups where number >= group.amount {
            let result = "\(say(number / group.amount)!) " + group.name
            let remainder = number % group.amount

            if remainder == 0 {
                return result
            } else {
                return result + " \(say(remainder)!)"
            }
        }

        let decade = number / 10
        let decadeName = decades[decade - 2]

        if number % 10 == 0 {
            return decadeName
        } else {
            return decadeName + "-" + say(number % 10)!
        }
    }
}

Version data entries

111 entries across 111 versions & 1 rubygems

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