diff options
author | John Fultz <jfultz@wolfram.com> | 2015-08-20 04:59:36 -0500 |
---|---|---|
committer | John Fultz <jfultz@wolfram.com> | 2015-08-20 04:59:36 -0500 |
commit | 6613f3fd45b4ecf6821ee7bb07c95f86f43b0db2 (patch) | |
tree | 98eb783e05100250cceba7fc4c56ddfdaaf0aba1 /quackleio/dawgfactory.h | |
parent | 4ef5b33708a4ff0435d5c8254b860cd03a264c66 (diff) |
Move DAWG generation into quackleio.
Same thing I just did for the gaddag code I'm now doing
for the dawg code. While I was at it, I made some
improvements to the dawg code...
* Instead of adding multiple cross-checks for various
kinds of node metadata, there's now only one cross-
check...a hash applied to each node.
* Some useless variables/members have been excised.
* Add ability to do a word count (cryptohash coming soon).
* Make it possible to call generate() and writeIndex()
multiple times without corrupting the dictionary.
Diffstat (limited to 'quackleio/dawgfactory.h')
-rw-r--r-- | quackleio/dawgfactory.h | 79 |
1 files changed, 79 insertions, 0 deletions
diff --git a/quackleio/dawgfactory.h b/quackleio/dawgfactory.h new file mode 100644 index 0000000..b2cfb76 --- /dev/null +++ b/quackleio/dawgfactory.h @@ -0,0 +1,79 @@ +/* + * Quackle -- Crossword game artificial intelligence and analysis tool + * Copyright (C) 2005-2014 Jason Katz-Brown and John O'Laughlin. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation; either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see <http://www.gnu.org/licenses/>. + */ + +#ifndef QUACKLE_DAWGFACTORY_H +#define QUACKLE_DAWGFACTORY_H + +#include <vector> +#include "flexiblealphabet.h" + + +class DawgFactory { +public: + + DawgFactory(const QString& alphabetFile); + ~DawgFactory(); + + int wordCount() const { return root.wordCount(); }; + int nodeCount() const { return nodelist.size(); }; + int encodableWords() const { return m_encodableWords; }; + int unencodableWords() const { return m_unencodableWords; }; + + bool pushWord(const QString& word, bool inSmaller, int playability); + void generate(); + void writeIndex(const QString& fname); + +private: + class Node { + public: + void pushWord(const Quackle::LetterString& word, bool inSmaller, int pb); + void print(vector< Node* >& nodelist); + + int letterSum() const; + int wordCount() const; + bool equals(const Node &n) const; + + Quackle::Letter c; + bool t; + bool insmallerdict; + int playability; + + vector<Node> children; + int pointer; + int location; + + bool lastchild; + + mutable bool sumexplored; + mutable int sum; + + bool deleted; + Node* cloneof; + bool written; + }; + + int m_encodableWords; + int m_unencodableWords; + vector< Node* > nodelist; + Quackle::AlphabetParameters *alphas; + Node root; +}; + +#endif + + |