summary refs log tree commit diff stats
path: root/lingo.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'lingo.cpp')
-rw-r--r--lingo.cpp123
1 files changed, 107 insertions, 16 deletions
diff --git a/lingo.cpp b/lingo.cpp index e13bb53..b549804 100644 --- a/lingo.cpp +++ b/lingo.cpp
@@ -26,6 +26,7 @@ enum Colour {
26 kBlue, 26 kBlue,
27 kPurple, 27 kPurple,
28 kBrown, 28 kBrown,
29 kYellow,
29 kColourCount 30 kColourCount
30}; 31};
31 32
@@ -35,7 +36,8 @@ const std::string COLOUR_EMOJIS[kColourCount] = {
35 "🟥", 36 "🟥",
36 "🟦", 37 "🟦",
37 "🟪", 38 "🟪",
38 "🟫" 39 "🟫",
40 "🟨"
39}; 41};
40 42
41int main(int argc, char** argv) 43int main(int argc, char** argv)
@@ -60,14 +62,23 @@ int main(int argc, char** argv)
60 mastodonpp::Connection connection{instance};*/ 62 mastodonpp::Connection connection{instance};*/
61 63
62 std::set<std::tuple<Height, Colour>> filters = { 64 std::set<std::tuple<Height, Colour>> filters = {
63 {kBottom, kWhite},
64 {kBottom, kBlack},
65 {kTop, kPurple}, 65 {kTop, kPurple},
66 {kTop, kWhite}, 66 {kTop, kWhite},
67 {kTop, kYellow},
68 {kTop, kRed},
69 {kTop, kBlue},
70 {kMiddle, kYellow},
71 {kMiddle, kRed},
72 {kMiddle, kBlue},
73 {kMiddle, kPurple},
74 {kBottom, kWhite},
75 {kBottom, kBlack},
67 {kBottom, kRed}, 76 {kBottom, kRed},
68 {kBottom, kBlue}, 77 {kBottom, kBlue},
69 }; 78 };
70 79
80 verbly::filter wordFilter = (verbly::form::proper == false);
81
71 verbly::filter cleanFilter = 82 verbly::filter cleanFilter =
72 !(verbly::word::usageDomains %= (verbly::notion::wnid == 106718862)) // ethnic slurs 83 !(verbly::word::usageDomains %= (verbly::notion::wnid == 106718862)) // ethnic slurs
73 && !(verbly::notion::wnid == 110630093); // "spastic" 84 && !(verbly::notion::wnid == 110630093); // "spastic"
@@ -77,7 +88,7 @@ int main(int argc, char** argv)
77 bool puzzleEmpty = true; 88 bool puzzleEmpty = true;
78 std::array<std::optional<Colour>, kHeightCount> parts; 89 std::array<std::optional<Colour>, kHeightCount> parts;
79 for (int height = 0; height < static_cast<int>(kHeightCount); height++) { 90 for (int height = 0; height < static_cast<int>(kHeightCount); height++) {
80 if (std::bernoulli_distribution(0.4)(rng)) { 91 if (std::bernoulli_distribution(0.5)(rng)) {
81 int colour = std::uniform_int_distribution<int>(0, static_cast<int>(kColourCount)-1)(rng); 92 int colour = std::uniform_int_distribution<int>(0, static_cast<int>(kColourCount)-1)(rng);
82 if (filters.count({static_cast<Height>(height), static_cast<Colour>(colour)})) { 93 if (filters.count({static_cast<Height>(height), static_cast<Colour>(colour)})) {
83 parts[static_cast<Height>(height)] = static_cast<Colour>(colour); 94 parts[static_cast<Height>(height)] = static_cast<Colour>(colour);
@@ -101,16 +112,16 @@ int main(int argc, char** argv)
101 case kWhite: { 112 case kWhite: {
102 switch (height) { 113 switch (height) {
103 case kBottom: { 114 case kBottom: {
104 forwardFilter &= (verbly::word::synonyms); 115 forwardFilter &= (verbly::word::synonyms %= wordFilter);
105 break; 116 break;
106 } 117 }
107 case kTop: { 118 case kTop: {
108 forwardFilter &= (verbly::form::pronunciations %= 119 forwardFilter &= (verbly::form::pronunciations %=
109 verbly::filter("homophones", false, 120 verbly::filter("homophones", false,
110 (verbly::pronunciation::forms %= verbly::filter( 121 (verbly::pronunciation::forms %= (wordFilter && verbly::filter(
111 verbly::form::id, 122 verbly::form::id,
112 verbly::filter::comparison::field_does_not_equal, 123 verbly::filter::comparison::field_does_not_equal,
113 verbly::form::id)))); 124 verbly::form::id)))));
114 break; 125 break;
115 } 126 }
116 default: break; // Not supposed yet. 127 default: break; // Not supposed yet.
@@ -120,7 +131,7 @@ int main(int argc, char** argv)
120 case kBlack: { 131 case kBlack: {
121 switch (height) { 132 switch (height) {
122 case kBottom: { 133 case kBottom: {
123 forwardFilter &= (verbly::word::antonyms); 134 forwardFilter &= (verbly::word::antonyms %= wordFilter);
124 break; 135 break;
125 } 136 }
126 default: break; // Not supposed yet. 137 default: break; // Not supposed yet.
@@ -130,7 +141,7 @@ int main(int argc, char** argv)
130 case kBrown: { 141 case kBrown: {
131 switch (height) { 142 switch (height) {
132 case kBottom: { 143 case kBottom: {
133 forwardFilter &= (verbly::notion::causes); 144 forwardFilter &= (verbly::notion::causes %= wordFilter);
134 break; 145 break;
135 } 146 }
136 default: break; // Not supposed yet. 147 default: break; // Not supposed yet.
@@ -139,8 +150,16 @@ int main(int argc, char** argv)
139 } 150 }
140 case kRed: { 151 case kRed: {
141 switch (height) { 152 switch (height) {
153 case kTop: {
154 forwardFilter &= (verbly::pronunciation::holophones %= wordFilter);
155 break;
156 }
157 case kMiddle: {
158 forwardFilter &= (verbly::form::holographs %= wordFilter);
159 break;
160 }
142 case kBottom: { 161 case kBottom: {
143 forwardFilter &= (verbly::notion::partMeronyms); 162 forwardFilter &= (verbly::notion::partMeronyms %= wordFilter);
144 break; 163 break;
145 } 164 }
146 default: break; // Not supposed yet. 165 default: break; // Not supposed yet.
@@ -149,8 +168,16 @@ int main(int argc, char** argv)
149 } 168 }
150 case kBlue: { 169 case kBlue: {
151 switch (height) { 170 switch (height) {
171 case kTop: {
172 forwardFilter &= (verbly::pronunciation::merophones %= wordFilter);
173 break;
174 }
175 case kMiddle: {
176 forwardFilter &= (verbly::form::merographs %= wordFilter);
177 break;
178 }
152 case kBottom: { 179 case kBottom: {
153 forwardFilter &= (verbly::notion::partHolonyms); 180 forwardFilter &= (verbly::notion::partHolonyms %= wordFilter);
154 break; 181 break;
155 } 182 }
156 default: break; // Not supposed yet. 183 default: break; // Not supposed yet.
@@ -159,8 +186,32 @@ int main(int argc, char** argv)
159 } 186 }
160 case kPurple: { 187 case kPurple: {
161 switch (height) { 188 switch (height) {
189 case kMiddle: {
190 forwardFilter &= (verbly::form::merographs %= (verbly::form::length >= 4 && (verbly::form::holographs %= wordFilter)));
191 break;
192 }
162 case kTop: { 193 case kTop: {
163 forwardFilter &= (verbly::pronunciation::rhymes); 194 forwardFilter &= (verbly::pronunciation::rhymes %= wordFilter);
195 break;
196 }
197 default: break; // Not supposed yet.
198 }
199 break;
200 }
201 case kYellow: {
202 switch (height) {
203 case kTop: {
204 forwardFilter &= (verbly::pronunciation::anaphones %= (wordFilter && verbly::filter(
205 verbly::pronunciation::id,
206 verbly::filter::comparison::field_does_not_equal,
207 verbly::pronunciation::id)));
208 break;
209 }
210 case kMiddle: {
211 forwardFilter &= (verbly::form::anagrams %= (wordFilter && verbly::filter(
212 verbly::form::id,
213 verbly::filter::comparison::field_does_not_equal,
214 verbly::form::id)));
164 break; 215 break;
165 } 216 }
166 default: break; // Not supposed yet. 217 default: break; // Not supposed yet.
@@ -171,7 +222,7 @@ int main(int argc, char** argv)
171 } 222 }
172 } 223 }
173 224
174 verbly::word solution = database.words(forwardFilter).first(); 225 verbly::form solution = database.forms(forwardFilter).first();
175 226
176 for (int i=0; i<static_cast<int>(kHeightCount); i++) { 227 for (int i=0; i<static_cast<int>(kHeightCount); i++) {
177 Height height = static_cast<Height>(i); 228 Height height = static_cast<Height>(i);
@@ -220,6 +271,14 @@ int main(int argc, char** argv)
220 } 271 }
221 case kBlue: { 272 case kBlue: {
222 switch (height) { 273 switch (height) {
274 case kTop: {
275 questionFilter = (verbly::pronunciation::holophones %= solution);
276 break;
277 }
278 case kMiddle: {
279 questionFilter = (verbly::form::holographs %= solution);
280 break;
281 }
223 case kBottom: { 282 case kBottom: {
224 /*questionFilter = ((verbly::notion::fullMemberHolonyms %= solution) 283 /*questionFilter = ((verbly::notion::fullMemberHolonyms %= solution)
225 || (verbly::notion::fullPartHolonyms %= solution) 284 || (verbly::notion::fullPartHolonyms %= solution)
@@ -234,6 +293,14 @@ int main(int argc, char** argv)
234 } 293 }
235 case kRed: { 294 case kRed: {
236 switch (height) { 295 switch (height) {
296 case kTop: {
297 questionFilter = (verbly::pronunciation::merophones %= solution);
298 break;
299 }
300 case kMiddle: {
301 questionFilter = (verbly::form::merographs %= solution);
302 break;
303 }
237 case kBottom: { 304 case kBottom: {
238 /*questionFilter = ((verbly::notion::fullMemberMeronyms %= solution) 305 /*questionFilter = ((verbly::notion::fullMemberMeronyms %= solution)
239 || (verbly::notion::fullPartMeronyms %= solution) 306 || (verbly::notion::fullPartMeronyms %= solution)
@@ -252,19 +319,43 @@ int main(int argc, char** argv)
252 questionFilter = (verbly::pronunciation::rhymes %= solution); 319 questionFilter = (verbly::pronunciation::rhymes %= solution);
253 break; 320 break;
254 } 321 }
322 case kMiddle: {
323 questionFilter = (verbly::form::merographs %= (verbly::form::length >= 4 && (verbly::form::holographs %= solution)));
324 break;
325 }
326 default: break; // Not supposed yet.
327 }
328 break;
329 }
330 case kYellow: {
331 switch (height) {
332 case kTop: {
333 questionFilter = (verbly::pronunciation::anaphones %= ((verbly::filter)solution && verbly::filter(
334 verbly::pronunciation::id,
335 verbly::filter::comparison::field_does_not_equal,
336 verbly::pronunciation::id)));
337 break;
338 }
339 case kMiddle: {
340 questionFilter = (verbly::form::anagrams %= ((verbly::filter)solution && verbly::filter(
341 verbly::form::id,
342 verbly::filter::comparison::field_does_not_equal,
343 verbly::form::id)));
344 break;
345 }
255 default: break; // Not supposed yet. 346 default: break; // Not supposed yet.
256 } 347 }
257 break; 348 break;
258 } 349 }
259 default: break; // Not supposed yet. 350 default: break; // Not supposed yet.
260 } 351 }
261 verbly::word questionPart = database.words(questionFilter && cleanFilter && (verbly::form::proper == false)).first(); 352 verbly::form questionPart = database.forms(questionFilter && cleanFilter).first();
262 std::cout << COLOUR_EMOJIS[*colour] << " " << questionPart.getBaseForm().getText() << std::endl; 353 std::cout << COLOUR_EMOJIS[*colour] << " " << questionPart.getText() << std::endl;
263 } else { 354 } else {
264 std::cout << "▪️" << std::endl; 355 std::cout << "▪️" << std::endl;
265 } 356 }
266 } 357 }
267 std::cout << "(" << solution.getBaseForm().getText().size() << ")" << std::endl << std::endl << solution.getBaseForm().getText() << std::endl; 358 std::cout << "(" << solution.getText().size() << ")" << std::endl << std::endl << solution.getText() << std::endl;
268 359
269 360
270 // We can poll the timeline at most once every five minutes. 361 // We can poll the timeline at most once every five minutes.