#include #include #include //C++ #include #include #include #include #include //C++ typedef std::pair item_t; typedef std::vector 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 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 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& cmdline = CommandLine(); for(int i = 0; i < cmdline.GetCount(); i++) { } }