@pavelsazonov

Как более эффективно реализовать метод?

У карты есть 4 признака. Нужно сравнить 3 карты. Каждый признак должен либо полностью совпадать у трех карт, либо полностью различаться. Например, .color должен быть либо одинаковым у трех карт, либо у каждой карты свой
struct Card: Hashable {
    var symbolsCount = PropertyVariant.one
    var shape = PropertyVariant.one
    var color = PropertyVariant.one
    var filling =  PropertyVariant.one
    
    enum PropertyVariant: Int {
        case one = 1, two, three
    }
}

    func isSet() -> Bool {

        // let cardsForSet: [Card] = Array of 3 cards
        let comparisonValue = cardsForSet[0]
        let isPropertySet: ([Card]) -> Bool = { $0.count == 1 || $0.count == 3 }

        guard isPropertySet(cardsForSet.filter { $0.symbolsCount == comparisonValue.symbolsCount }) else {
            return false
        }
        guard isPropertySet(cardsForSet.filter { $0.shape == comparisonValue.shape }) else {
            return false
        }
        guard isPropertySet(cardsForSet.filter { $0.color == comparisonValue.color }) else {
            return false
        }
        guard isPropertySet(cardsForSet.filter { $0.filling == comparisonValue.filling }) else {
            return false
        }
        return true
    }
  • Вопрос задан
  • 76 просмотров
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы