103 lines
2.3 KiB
Plaintext
103 lines
2.3 KiB
Plaintext
#include <Core/Core.h>
|
|
#include <stdio.h>
|
|
#include <ctype.h>
|
|
//C++
|
|
#include <iostream>
|
|
#include <vector>
|
|
#include <string>
|
|
#include <set>
|
|
#include <cctype>
|
|
|
|
|
|
//C++
|
|
typedef std::pair<char,char> item_t;
|
|
typedef std::vector<item_t> list_t;
|
|
|
|
|
|
//C
|
|
using namespace Upp;
|
|
|
|
int can_make_words(char **b, char *word)
|
|
{
|
|
int i, ret = 0, c = toupper(*word);
|
|
|
|
if (!c) return 1;
|
|
if (!b[0]) return 0;
|
|
|
|
for (i = 0; b[i] && !ret; i++) {
|
|
if (b[i][0] != c && b[i][1] != c) continue;
|
|
Swap(b[i], b[0]); // It needs to be Swap and not SWAP
|
|
ret = can_make_words(b + 1, word + 1);
|
|
Swap(b[i], b[0]); // It needs to be Swap instead of SWAP
|
|
}
|
|
return ret;
|
|
}
|
|
|
|
|
|
//C++
|
|
|
|
bool can_create_word(const std::string& w, const list_t& vals) {
|
|
std::set<uint32_t> used;
|
|
while (used.size() < w.size()) {
|
|
const char c = toupper(w[used.size()]);
|
|
uint32_t x = used.size();
|
|
for (uint32_t i = 0, ii = vals.size(); i < ii; ++i) {
|
|
if (used.find(i) == used.end()) {
|
|
if (toupper(vals[i].first) == c || toupper(vals[i].second) == c) {
|
|
used.insert(i);
|
|
break;
|
|
}
|
|
}
|
|
}
|
|
if (x == used.size()) break;
|
|
}
|
|
return used.size() == w.size();
|
|
}
|
|
|
|
|
|
// U++
|
|
CONSOLE_APP_MAIN
|
|
{
|
|
// C
|
|
char* blocks[] =
|
|
{
|
|
(char*)"BO", (char*)"XK", (char*)"DQ", (char*)"CP",
|
|
(char*)"NA", (char*)"GT", (char*)"RE", (char*)"TG",
|
|
(char*)"QD", (char*)"FS", (char*)"JW", (char*)"HU",
|
|
(char*)"VI", (char*)"AN", (char*)"OB", (char*)"ER",
|
|
(char*)"FS", (char*)"LY", (char*)"PC", (char*)"ZM", 0
|
|
};
|
|
|
|
char *words[] =
|
|
{
|
|
(char*)"", (char*)"A", (char*)"BARK", (char*)"BOOK",
|
|
(char*)"TREAT", (char*)"COMMON", (char*)"SQUAD", (char*)"Confuse", 0
|
|
};
|
|
|
|
char **w;
|
|
for (w = words; *w; w++)
|
|
printf("%s\t%d\n", *w, can_make_words(blocks, *w));
|
|
|
|
printf("\n");
|
|
|
|
// C++
|
|
list_t vals{ {'B', 'O'}, {'X', 'K'}, {'D', 'Q'}, {'C', 'P'},
|
|
{'N', 'A'}, {'G', 'T'}, {'R', 'E'}, {'T', 'G'}, {'Q', 'D'},
|
|
{'F', 'S'}, {'J', 'W'}, {'H', 'U'}, {'V', 'I'}, {'A', 'N'},
|
|
{'O', 'B'}, {'E', 'R'}, {'F', 'S'}, {'L', 'Y'}, {'P', 'C'},
|
|
{'Z', 'M'}
|
|
};
|
|
std::vector<std::string> wordsb{"A", "BARK", "BOOK", "TREAT", "COMMON", "SQUAD", "Confuse"};
|
|
for (const std::string& w : wordsb) {
|
|
std::cout << w << ": " << std::boolalpha << can_create_word(w, vals) << ".\n";
|
|
}
|
|
std::cout << "\n";
|
|
|
|
|
|
|
|
const Vector<String>& cmdline = CommandLine();
|
|
for(int i = 0; i < cmdline.GetCount(); i++) {
|
|
}
|
|
|
|
}
|