Sha256: 91bfff9c037f508026ca1ad3a71fc6333d58901eb09409a722f898bdc8b6e29b

Contents?: true

Size: 1.39 KB

Versions: 105

Compression:

Stored size: 1.39 KB

Contents

enum ProteinTranslationError: Error {
    case invalidCodon
}

struct ProteinTranslation {

    private static func lookup(codon: String) -> String? {
        switch codon {
        case "AUG":
            return "Methionine"
        case "UUU", "UUC":
            return "Phenylalanine"
        case "UUA", "UUG":
            return "Leucine"
        case "UCU", "UCC", "UCA", "UCG":
            return "Serine"
        case "UAU", "UAC":
            return "Tyrosine"
        case "UGU", "UGC":
            return "Cysteine"
        case "UGG":
            return "Tryptophan"
        case "UAA", "UAG", "UGA":
            return "STOP"
        default:
            return nil
        }
    }

    static func translationOfCodon(_ codon: String) throws -> String {
        guard let protein = lookup(codon: codon) else {
            throw ProteinTranslationError.invalidCodon
        }

        return protein
    }

    static func translationOfRNA(_ strand: String) throws -> [String] {
        var strand = strand
        var result = [String]()

        while !strand.isEmpty {
            let codon = String(strand.characters.prefix(3))
            let translation = try translationOfCodon(codon)
            if translation == "STOP" {
                return result
            }
            result.append(translation)
            strand = String(strand.characters.dropFirst(3))
        }

        return result
    }
}

Version data entries

105 entries across 105 versions & 1 rubygems

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