Одним из возможных решений, которое проходит все тесты, является использование NSCountedSet
для хранения слов в заметке и журнале и сравнение количества каждого слова в note
со счетом этого слова в magazine
и, если они есть, ниже в magazine
, делая ранний возврат и печатая No
.
Я бы также предложил изменить сигнатуру функции, чтобы она возвращала значение Bool
, хотя прототип функции, сгенерированный хакерским рангом, возвращает Void
. Лучше сделать checkMagazine
чистой функцией и не выполнять в ней никаких операций ввода-вывода.
func checkMagazine(magazine: [String], note: [String]) -> Bool {
let magazineWords = NSCountedSet(array: magazine)
let noteWords = NSCountedSet(array: note)
for noteWord in noteWords {
if magazineWords.count(for: noteWord) < noteWords.count(for: noteWord) {
return false
}
}
return true
}
Тогда вам просто нужно изменить конец сгенерированного кода следующим образом:
let magazineWorks = checkMagazine(magazine: magazine, note: note)
if magazineWorks {
print("Yes")
} else {
print("No")
}