Sha256: 11b76286e97382b610e4e24c3beb61cc9ebf0333466e91fb044cc29d8a5d49a8

Contents?: true

Size: 1.58 KB

Versions: 71

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

71 entries across 71 versions & 1 rubygems

Version Path
trackler-2.0.6.15 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.14 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.13 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.12 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.11 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.10 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.9 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.8 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.7 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.6 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.5 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.4 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.3 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.2 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.1 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.6.0 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.5.18 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.5.17 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.5.16 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift
trackler-2.0.5.15 tracks/swift/exercises/kindergarten-garden/KindergartenGardenExample.swift