Sha256: 9ccdbb67c05fa6a4eac4c6496dee2968e59dcf1a2719c26edc3874fda7617432

Contents?: true

Size: 1.58 KB

Versions: 145

Compression:

Stored size: 1.58 KB

Contents

import Foundation

enum Plant: String {
    case grass = "G"
    case clover = "C"
    case radishes = "R"
    case violets = "V"
}

struct Garden {
    static private let defaultChildren = ["Alice", "Bob", "Charlie", "David", "Eve", "Fred", "Ginny", "Harriet", "Ileana", "Joseph", "Kincaid", "Larry"]

    private let pots: [String : [Plant]]

    init(_ diagram: String, children: [String] = defaultChildren) {
        self.pots = Garden.parse(diagram, children: children)
    }

    func plantsForChild(_ child: String) -> [Plant] {
        guard let plants = pots[child] else {
            return []
        }
        return plants
    }

    private static func parse(_ diagram: String, children: [String]) -> [String : [Plant]] {
        let sortedChildren = children.sorted(by: <)
        let lines = diagram.components(separatedBy: CharacterSet.newlines)
        var result = [String: [Plant]]()
        var line1 = lines[0].characters.map { String($0) }
        var line2 = lines[1].characters.map { String($0) }

        var index = 0

        for child in sortedChildren {
            guard index < line1.count else {
                break
            }

            var pots = [Plant]()

            if let plant1 = Plant(rawValue: line1[index]),
                let plant2 = Plant(rawValue: line1[index + 1]),
                let plant3 = Plant(rawValue: line2[index]),
                let plant4 = Plant(rawValue: line2[index + 1]) {
                pots = [plant1, plant2, plant3, plant4]
            }

            result[child] = pots

            index += 2
        }

        return result
    }
}

Version data entries

145 entries across 145 versions & 1 rubygems

Version Path
trackler-2.2.1.60 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.59 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.58 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.57 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.56 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.55 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.54 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.53 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.52 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.51 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.50 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.49 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.48 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.47 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.46 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.45 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.44 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.43 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.42 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift
trackler-2.2.1.41 tracks/swift/exercises/kindergarten-garden/Sources/KindergartenGardenExample.swift