From 6613f3fd45b4ecf6821ee7bb07c95f86f43b0db2 Mon Sep 17 00:00:00 2001 From: John Fultz Date: Thu, 20 Aug 2015 04:59:36 -0500 Subject: 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. --- quackleio/dawgfactory.h | 79 +++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 79 insertions(+) create mode 100644 quackleio/dawgfactory.h (limited to 'quackleio/dawgfactory.h') 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 . + */ + +#ifndef QUACKLE_DAWGFACTORY_H +#define QUACKLE_DAWGFACTORY_H + +#include +#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 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 + + -- cgit v1.2.3