Xinqi Bao's Git
b622a73cd13ff960bdef524dc40e35140cea1c03
3 * A solution for Wordscapes, an app in appstore game
20 letter() :word(false), next(nullptr) {};
26 for (int i
= 0; i
< 26; i
++)
30 for (int i
= 0; i
< 26; i
++) {
31 if (ltr
[i
]->next
!= nullptr)
37 void insert(const char* w
) {
39 if (w
[0] >= 97 && w
[0] <= 122)
41 else if (w
[0] >= 65 && w
[0] <= 90)
46 ltr
[index
]->word
= true;
48 if (ltr
[index
]->next
== nullptr)
49 ltr
[index
]->next
= new lset
;
50 ltr
[index
]->next
->insert(w
+ 1);
53 bool find(const char* w
) {
55 if (w
[0] >= 97 && w
[0] <= 122)
57 else if (w
[0] >= 65 && w
[0] <= 90)
62 return ltr
[index
]->word
;
64 if (ltr
[index
]->next
== nullptr)
67 return ltr
[index
]->next
->find(w
+ 1);
70 bool prefix(const char* w
) {
72 if (w
[0] >= 97 && w
[0] <= 122)
74 else if (w
[0] >= 65 && w
[0] <= 90)
78 if (ltr
[index
]->next
== nullptr)
83 return ltr
[index
]->next
->prefix(w
+ 1);
88 void loadDictionary(lset
*dic
, string filename
) {
89 cout
<< "Loading dictionary..." << endl
;
95 cout
<< "Load completed!" << endl
;
103 vector
<char> letters
;
105 cout
<< "Find words: blank as '*' || back new scape: 0 \n->";
111 vector
<bool> lstat(letters
.size(), false);
112 for(int i
= 0; i
< str
.length(); i
++){
117 if(str
[i
] >= 'a' && str
[i
] <= 'z')
119 else if(str
[i
] >= 'A' && str
[i
] <= 'Z')
121 for(int k
= 0; k
< letters
.size(); k
++){
122 if(letters
[k
] == ch
&& lstat
[k
] == false){
130 int sizeW
= word
.size();
132 finding(word
, lstat
, 0, sizeW
, "", ans
);
137 void finding(vector
<char> w
, vector
<bool> lst
, int pos
, int ws
, string str
, set
<string
>& ans
){
139 if(dic
.find(&(str
)[0]))
140 //cout << str << endl;
144 if(pos
!= 0 && !dic
.prefix(&(str
+'\0')[0]))
147 for(int i
= 0; i
< lst
.size(); i
++){
149 string st
= str
+letters
[i
];//cout <<'-'<<st<<endl;
150 vector
<bool> lst_(lst
);
152 finding(w
, lst_
, pos
+1, ws
, st
, ans
);
158 finding(w
, lst
, pos
+1, ws
, str
, ans
);
162 scape(lset
& dic
): dic(dic
){
163 cout
<< "add letters || back new scape: 0 \n->";
168 for(int i
= 0; i
< str
.length(); i
++){
169 if(str
[i
] >= 'a' && str
[i
] <= 'z')
170 letters
.push_back(str
[i
]);
171 else if(str
[i
] >= 'A' && str
[i
] <= 'Z')
172 letters
.push_back(str
[i
]-'A'+'a');
174 numLetters
= letters
.size();
175 while(findWords() == 0);
182 loadDictionary(&dic
, "words_alpha.txt");
184 cout
<< "Dictionary loaded!" << endl
;
187 cout
<< "Command: New scape: 1 || exit: 0 \n->";
196 cout
<< "Releasing memory for dictionary..." << endl
;