Xinqi Bao's Git
3 * A solution for Wordscapes, an app in appstore game
19 letter() :word(false), next(nullptr) {};
25 for (int i
= 0; i
< 26; i
++)
29 for (int i
= 0; i
< 26; i
++) {
30 if (ltr
[i
]->next
!= nullptr)
36 void insert(const char* w
) {
38 if (w
[0] >= 97 && w
[0] <= 122)
40 else if (w
[0] >= 65 && w
[0] <= 90)
45 ltr
[index
]->word
= true;
47 if (ltr
[index
]->next
== nullptr)
48 ltr
[index
]->next
= new lset
;
49 ltr
[index
]->next
->insert(w
+ 1);
52 bool find(const char* w
) {
54 if (w
[0] >= 97 && w
[0] <= 122)
56 else if (w
[0] >= 65 && w
[0] <= 90)
61 return ltr
[index
]->word
;
63 if (ltr
[index
]->next
== nullptr)
66 return ltr
[index
]->next
->find(w
+ 1);
69 bool prefix(const char* w
) {
71 if (w
[0] >= 97 && w
[0] <= 122)
73 else if (w
[0] >= 65 && w
[0] <= 90)
77 if (ltr
[index
]->next
== nullptr)
82 return ltr
[index
]->next
->prefix(w
+ 1);
87 void loadDictionary(lset
*dic
, string filename
) {
88 cout
<< "Loading dictionary..." << endl
;
94 cout
<< "Load completed!" << endl
;
102 vector
<char> letters
;
104 cout
<< "Find words: blank as '*' || exit: 0 \n->";
110 vector
<bool> lstat(letters
.size(), false);
111 for(int i
= 0; i
< str
.length(); i
++){
116 if(str
[i
] >= 'a' && str
[i
] <= 'z')
118 else if(str
[i
] >= 'A' && str
[i
] <= 'Z')
120 for(int k
= 0; k
< letters
.size(); k
++){
121 if(letters
[k
] == ch
&& lstat
[k
] == false){
129 int sizeW
= word
.size();
130 finding(word
, lstat
, 0, sizeW
, "");
133 void finding(vector
<char> w
, vector
<bool> lst
, int pos
, int ws
, string str
){
135 if(dic
.find(&(str
+'\0')[0]))
139 if(pos
!= 0 && !dic
.prefix(&(str
+'\0')[0]))
142 for(int i
= 0; i
< lst
.size(); i
++){
144 string st
= str
+letters
[i
];//cout <<'-'<<st<<endl;
145 vector
<bool> lst_(lst
);
147 finding(w
, lst_
, pos
+1, ws
, st
);
153 finding(w
, lst
, pos
+1, ws
, str
);
157 scape(lset
& dic
): dic(dic
){
158 cout
<< "add letters || To exit: 0 \n->";
163 for(int i
= 0; i
< str
.length(); i
++){
164 if(str
[i
] >= 'a' && str
[i
] <= 'z')
165 letters
.push_back(str
[i
]);
166 else if(str
[i
] >= 'A' && str
[i
] <= 'Z')
167 letters
.push_back(str
[i
]-'A'+'a');
169 numLetters
= letters
.size();
170 while(findWords() == 0);
177 loadDictionary(&dic
, "words_alpha.txt");
179 cout
<< "Dictionary loaded!" << endl
;
182 cout
<< "Command: New scape: 1 || exit: 0 \n->";
191 cout
<< "Releasing memory for dictionary..." << endl
;