#26 利用 UITextChecker 玩 WORDLE (3)
Published in
Mar 10, 2022
解決之前發現搜尋組合很花時間的問題
解決方法就是,我先把 A~Z 開頭的字都先搜集起來,要用的時候從裡面搜集就不用把所有的組合都搜尋一遍了
使用的方法跟 Wordle 的操作方式很像,比較不一樣的事,可以點擊輸入過的字母更換顏色,顏色代表的狀態跟 Wordle 也一樣,分成
- 綠色:字母正確,位置也正確
- 黃色:字母正確,但位置錯誤
- 灰色:字母錯誤
把搜集好的字串在一開始就全部放到 CoreData ,要搜尋的時候就去跟 CoreData 搜尋
CoreData alphabet0~4
分別紀錄一個字的第1~5的字母
搜尋方法可以參考底下的網頁,這樣尋找的時間就大大地縮短了!
主要用到的有
“alphabetX == %@”
用來過濾字母正確且位置正確的條件(X代表第幾個字母)“NOT (alphabetX IN %@)”
用來過濾字母正確但位置錯誤,和字母錯誤的條件
最後 CoreData 拿到的結果拿來和字母正確但位置錯誤的集合做 isSubset 的過濾,這樣只要條件足夠,就可以找到很接近的答案了。
因為有多個條件加再一起,所以我是把所有 NSPredicate 都放到一個 Array,再放到 NSCompoundPredicate
let predicate = NSCompoundPredicate(type: .and, subpredicates: correctCond)
程式碼
前情提要