У карты есть 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
}