Sha256: 0e6e3026dd3b827db73d4495c7cd0429467ac51ba7e0fbc87d7e7b4af64006e5

Contents?: true

Size: 1.95 KB

Versions: 59

Compression:

Stored size: 1.95 KB

Contents

import Foundation

private extension String {
    func substringFromIndexInt(_ indx: Int) -> String {
        let index = self.characters.index(self.startIndex, offsetBy: indx)
        return self.substring(from: index)
    }

    func substringWithRangeInt(_ intRange: Range<Int>) -> String {
        let start = self.characters.index(self.startIndex, offsetBy: intRange.lowerBound)
        let end = self.characters.index(self.startIndex, offsetBy: intRange.upperBound)
        return self.substring(with: start..<end)
    }
}

struct PigLatin {

    static func translate (_ word: String) -> String {
        return word.components(separatedBy: " ").map {self.translateWord($0)}.joined(separator: " ")
    }

    static func translateWord(_ word: String) -> String {

        func wordStartsWithPrefixes(_ word: String, prefixes: [String]) -> Bool {
            return 0 < prefixes.filter {word.hasPrefix($0)}.count
        }

        func wordStartsWithVowelLike(_ word: String) -> Bool {
            return wordStartsWithPrefixes(word, prefixes: ["xr", "yt", "a", "e", "i", "o", "u" ])
        }

        func wordStartsWithConsonantAndQu(_ word: String) -> Bool {
            let index = word.characters.index(word.startIndex, offsetBy: 1)
            return word.substring(from: index).hasPrefix("qu")
        }

        if wordStartsWithVowelLike(word) {return word + "ay"}
        if wordStartsWithPrefixes(word, prefixes: ["thr", "sch"]) {
            return (word.substringFromIndexInt(3) + word.substringWithRangeInt(0..<3) + "ay") }

        if wordStartsWithPrefixes(word, prefixes: ["ch", "qu", "th"]) {
            return word.substringFromIndexInt(2) +
                word.substringWithRangeInt(0..<2) + "ay" }
        if wordStartsWithConsonantAndQu(word) {
            return word.substringFromIndexInt(3) +
                word.substringWithRangeInt(0..<1) + "quay"}

        return word.substringFromIndexInt(1) +
            word.substringWithRangeInt(0..<1) + "ay"

    }

}

Version data entries

59 entries across 59 versions & 1 rubygems

Version Path
trackler-2.0.8.30 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.29 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.28 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.27 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.26 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.24 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.23 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.22 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.21 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.20 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.19 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.18 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.17 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.16 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.15 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.14 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.13 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.12 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.11 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift
trackler-2.0.8.10 tracks/swift/exercises/pig-latin/Sources/PigLatinExample.swift