import Foundation enum Color: Character, CustomStringConvertible { case r = "r" case g = "g" case u = "u" case w = "w" case b = "b" var description: String { return String(self.rawValue) } } func readInput(_ filePath: String) throws -> ([[Color]], [[Color]]) { let content = try String(contentsOfFile: filePath, encoding: .ascii) let lines = content.split(separator: "\n") let towels = lines[0].split(separator: ", ").map { $0.compactMap(Color.init) } let patterns = lines[1.. Bool { if pattern.count == 0 { return true } if let cached = cache[pattern] { return cached } for towel in towels { if pattern.starts(with: towel) { if canMatch(Array(pattern[towel.count..