From c643265c78744b43bb4f3ea5842e60d6e05bc459 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jean-S=C3=A9bastien=20Gonsette?= Date: Thu, 16 May 2019 22:04:53 +0200 Subject: [PATCH] Correct behavior with void boxes. Add a test script in Python --- Pictures/Crosswords.png | Bin 80184 -> 81184 bytes README.md | 23 ++++- Sources/Grid/Grid.cpp | 63 +++++++++++++- Sources/Grid/Grid.h | 4 + Sources/Solvers/SolverDynamic.cpp | 44 ++-------- Sources/Solvers/SolverStatic.cpp | 45 +--------- Wrappers/Python/libWizium.py | 50 ++++++----- Wrappers/Python/testWizium.py | 139 ++++++++++++++++++++++++++++++ 8 files changed, 266 insertions(+), 102 deletions(-) create mode 100644 Wrappers/Python/testWizium.py diff --git a/Pictures/Crosswords.png b/Pictures/Crosswords.png index 1c677f5a3d3c40c7759779516038fbf4657796e5..d04ccc5e287534fbc992f5615267dce77831853a 100644 GIT binary patch delta 67113 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

x# zEo&!EA<*17u&p|XM(cHbw6O^X(N9>F}&kgO_1b)p_*^F$x~A z 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 delta 66132 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 diff --git a/README.md b/README.md index 38f1bbe..f307a20 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,14 @@ Assuming CMake and Visual Studio are installed on your machine, * Run the command ```cmake --build . --config Release --target install``` * The DLL should be created in the ```./Binaries/Windows``` directory. +### Compile with CMake on Linux + +Assuming CMake in installed on your machine, + +* Step in ```cmake``` directory +* Run the command ```cmake ..\Sources\``` +* Run the command ```cmake --build .``` + ## Wrappers @@ -40,4 +48,17 @@ Assuming CMake and Visual Studio are installed on your machine, This class provides the following API: -* **DIC_Clear:** Flush the dictionary content; \ No newline at end of file +* **dic_clear:** Flush the dictionary content; +* **dic_add_entries:** Add entries to the dictionary; +* **dic_find_random_entry:** Find a random entry in the dictionary, matching a mask; +* **dic_find_entry:** Find a random entry in the dictionary, matching a mask; +* **dic_gen_num_words:** Return the number of words in the dictionary; +* **grid_erase:** Erase the grid content; +* **grid_set_size:** Set the grid size. Content can be lost when shrinking; +* **grid_set_box:** Set the type of box at a given grid coordinate; +* **grid_write:** Write a word on the grid; +* **grid_read:** Read the whole content of the grid; +* **solver_start:** Start the grid generation process; +* **solver_step:** Move a few steps in the grid generation process; +* **solver_stop:** Stop the grid generation process; + diff --git a/Sources/Grid/Grid.cpp b/Sources/Grid/Grid.cpp index 1b46b39..05919e8 100644 --- a/Sources/Grid/Grid.cpp +++ b/Sources/Grid/Grid.cpp @@ -110,6 +110,7 @@ void Grid::Erase () { int i, j; numBlackCases = 0; + numVoidBoxes = 0; for (j = 0; j < mSy; j ++) { @@ -118,6 +119,62 @@ void Grid::Erase () Box* box = this->operator ()(i,j); box->MakeLetter (); if (box->IsBloc ()) numBlackCases ++; + if (box->IsVoid ()) numVoidBoxes ++; + } + } +} + + +// =========================================================================== +/// \brief Lock the current content of the grid +// =========================================================================== +void Grid::LockContent () +{ + int x, y; + int count = 0; + numBlackCases = 0; + numVoidBoxes = 0; + + for (y = 0; y < mSy; y ++) + { + for (x = 0; x < mSx; x ++) + { + Box* box = this->operator ()(x, y); + + // Lock box if it contains something + if (box->IsLetter () == false || box->GetLetter () != 0) + { + box->Lock (true); + if (box->IsBloc ()) numBlackCases ++; + if (box->IsVoid ()) numVoidBoxes ++; + } + + // Otherwise, put number of non locked previous boxes in the 'tag' field + else + { + box->Lock (false); + box->tag = count; + count ++; + } + } + } +} + + + +// =========================================================================== +/// \brief Unlock every box +// =========================================================================== +void Grid::Unlock () +{ + int x, y; + + for (y = 0; y < mSy; y ++) + { + for (x = 0; x < mSx; x ++) + { + Box* box = this->operator ()(x, y); + box->Lock (false); } } } @@ -593,21 +650,23 @@ Grid::Space Grid::GetSpace (int x, int y) const int Grid::GetFillRate () const { int notVoid = 0; + int numVoid = 0; for (int j = 0; j < mSy; j ++) { for (int i = 0; i < mSx; i ++) { if ( this->operator ()(i,j)->IsBloc ()) notVoid ++; - if ( this->operator ()(i,j)->IsLetter ()) + else if ( this->operator ()(i,j)->IsLetter ()) { uint8_t c = (this->operator ()(i,j))->GetLetter (); if (c != 0) notVoid ++; } + else numVoid ++; } } - return (int) (100 * notVoid / (mSx*mSy)); + return (int) (100 * notVoid / (mSx*mSy - numVoid)); } // End diff --git a/Sources/Grid/Grid.h b/Sources/Grid/Grid.h index 220826d..f72ae18 100644 --- a/Sources/Grid/Grid.h +++ b/Sources/Grid/Grid.h @@ -64,12 +64,15 @@ public : void Grow (uint8_t sx, uint8_t sy); void Draw (); void Erase (); + void LockContent (); + void Unlock (); uint8_t GetWidth () const {return static_cast(mSx);} uint8_t GetHeight () const { return static_cast(mSy); } void SetDensityMode (BlocDensityMode density) { this->densityMode = density; } int GetNumBlackCases () const {return numBlackCases;} + int GetNumVoidBoxes () const { return numVoidBoxes; } int GetFillRate () const; void AddBloc (uint8_t x, uint8_t y); @@ -89,6 +92,7 @@ private : enum BlocDensityMode densityMode; ///< Allowed bloc density int numBlackCases; ///< Total number of black boxes + int numVoidBoxes; ///< Total number of void boxes }; diff --git a/Sources/Solvers/SolverDynamic.cpp b/Sources/Solvers/SolverDynamic.cpp index d4a887f..788206a 100644 --- a/Sources/Solvers/SolverDynamic.cpp +++ b/Sources/Solvers/SolverDynamic.cpp @@ -69,7 +69,6 @@ SolverDynamic::~SolverDynamic () // =========================================================================== void SolverDynamic::Solve_Start (Grid &grid, const Dictionary &dico) { - int x, y; int count = 0; Box *box = nullptr; @@ -83,28 +82,7 @@ void SolverDynamic::Solve_Start (Grid &grid, const Dictionary &dico) this->pGrid->SetDensityMode (this->densityMode); // Lock non empty boxes - for (y = 0; y < mSy; y ++) - { - for (x = 0; x < mSx; x ++) - { - box = pGrid->operator ()(x, y); - - // Lock box if it contains something - if (box->IsLetter () == false || box->GetLetter () != 0) - box->Lock (true); - - // Otherwise, put number of non locked previous boxes in the 'tag' field - else - { - box->tag = count; - box->Lock (false); - count ++; - } - } - } - - // Reset grid, but locked boxes - pGrid->Erase (); + pGrid->LockContent (); // Get initial number of black boxes initialBlackCases = pGrid->GetNumBlackCases (); @@ -121,17 +99,7 @@ void SolverDynamic::Solve_Start (Grid &grid, const Dictionary &dico) void SolverDynamic::Solve_Stop () { // Unlock all grid boxes - if (pGrid != nullptr) - { - for (int y = 0; y < mSy; y ++) - { - for (int x = 0; x < mSx; x ++) - { - Box* box = pGrid->operator ()(x, y); - box->Lock (false); - } - } - } + if (pGrid != nullptr) pGrid->Unlock (); this->pDict = nullptr; this->pGrid = nullptr; @@ -226,6 +194,7 @@ Status SolverDynamic::Solve_Step (int32_t maxTimeMs, int32_t maxSteps) { FreeItems (); pDict = nullptr; + pGrid->Erase (); break; } @@ -622,7 +591,7 @@ Grid::Space SolverDynamic::CheckGridBlock (int x, int y) // Already a block ? Box *box = pGrid->operator ()(x, y); - if (box->IsBloc () == true) return space; + if (box->IsBloc () == true || box->IsVoid ()) return space; // A letter is already here, we can't put a block if (box->IsLetter () && box->GetLetter () != 0) @@ -812,7 +781,7 @@ bool SolverDynamic::CheckItemLength (const DynamicItem *pItem) // Also possible to push a black box if it already exists Box *box = pGrid->operator ()(x, y); - if (box->IsBloc () == true) return true; + if (box->IsBloc () == true || box->IsVoid ()) return true; // Fail if not possible to add a single black box if (maxBlackCases == 0) return false; @@ -834,7 +803,8 @@ bool SolverDynamic::CheckItemLength (const DynamicItem *pItem) int boxNumber = box->tag; // - Black boxes fill rate at this point, according to our curve - float fillrate = (float)boxNumber / (float)(mSx*mSy - 1 - initialBlackCases); + float fillrate = (float)boxNumber / + (float)(mSx*mSy - 1 - initialBlackCases - pGrid->GetNumVoidBoxes ()); fillrate = a * fillrate*fillrate + b * fillrate; // - Derive max number of black cases up to (x, y) diff --git a/Sources/Solvers/SolverStatic.cpp b/Sources/Solvers/SolverStatic.cpp index 1b9b401..d8f2f29 100644 --- a/Sources/Solvers/SolverStatic.cpp +++ b/Sources/Solvers/SolverStatic.cpp @@ -100,17 +100,7 @@ void SolverStatic::SetHeurestic (bool state, int backTreshold) void SolverStatic::Solve_Stop () { // Unlock all grid boxes - if (pGrid != nullptr) - { - for (int y = 0; y < mSy; y ++) - { - for (int x = 0; x < mSx; x ++) - { - Box* box = pGrid->operator ()(x, y); - box->Lock (false); - } - } - } + if (pGrid != nullptr) pGrid->Unlock (); this->pDict = nullptr; this->pGrid = nullptr; @@ -128,8 +118,6 @@ void SolverStatic::Solve_Stop () // =========================================================================== void SolverStatic::Solve_Start (Grid &grid, const Dictionary &dico) { - int x, y; - int count = 0; Box *box = nullptr; Solve_Stop (); @@ -144,28 +132,7 @@ void SolverStatic::Solve_Start (Grid &grid, const Dictionary &dico) this->pGrid->SetDensityMode (Grid::BlocDensityMode::NONE); // Lock non empty boxes - for (y = 0; y < mSy; y ++) - { - for (x = 0; x < mSx; x ++) - { - box = pGrid->operator ()(x,y); - - // Lock the box if not empty - if (box->IsLetter () == false || box->GetLetter() != 0) - box->Lock (true); - - // If empty, store the number of preceding unlocked boxes - else - { - box->tag = count; - box->Lock (false); - count ++; - } - } - } - - // Erase the grid, except the locked boxes (why ?) - pGrid->Erase (); + this->pGrid->LockContent (); // Establish a static ordered list of word slots for whose we must find a solution if (m_pItemList != nullptr) delete [] m_pItemList; @@ -206,13 +173,6 @@ Status SolverStatic::Solve_Step (int32_t maxTimeMs, int32_t maxSteps) // Main search loop, we have finished when we have found something for every slots in our list while (m_idxCurrentItem < m_numItems) { - // Skip slots tagged so - //if (m_pItemList [m_idxCurrentItem].dictStep == C_StaticItem2::Ce_Skip) - //{ - // m_idxCurrentItem ++; - // continue; - //} - // Get item to solve during this iteration StaticItem *pItem = &m_pItemList [m_idxCurrentItem]; @@ -238,6 +198,7 @@ Status SolverStatic::Solve_Step (int32_t maxTimeMs, int32_t maxSteps) if (m_idxCurrentItem < 0) { pDict = nullptr; + pGrid->Erase (); break; } diff --git a/Wrappers/Python/libWizium.py b/Wrappers/Python/libWizium.py index 1206217..14736d2 100644 --- a/Wrappers/Python/libWizium.py +++ b/Wrappers/Python/libWizium.py @@ -124,14 +124,14 @@ def __init__ (self, dll_path): # Init library once and create one PPMM instance if Wizium._init_done == False: - self.version = self._WIZ_Init () + self.version = self._wiz_init () print ("lPPMM library v{}.{}.{} loaded".format (self.version.major, self.version.minor, self.version.release)) if str (self.version.major) + '.' + str (self.version.minor) != __version__: print ("[WARNING] Wrapper version doesn't match loaded library") Wizium._init_done = True # Create an instance - self._WIZ_CreateInstance () + self._wiz_create_instance () if self._instance == 0: raise Exception ("lPPMM Library HANDLE could not be created") @@ -142,11 +142,11 @@ def __del__ (self): # ============================================================================ # Destroy PPMM instance - self._WIZ_DestroyInstance () + self._wiz_destroy_instance () # ============================================================================ - def DIC_Clear (self): + def dic_clear (self): """Flush the dictionary content""" # ============================================================================ @@ -157,7 +157,7 @@ def DIC_Clear (self): # ============================================================================ - def DIC_AddEntries (self, entries): + def dic_add_entries (self, entries): """Add entries to the dictionary entries: List of strings (must only contain ascii characters) @@ -187,7 +187,7 @@ def DIC_AddEntries (self, entries): # ============================================================================ - def DIC_FindRandomEntry (self, mask): + def dic_find_random_entry (self, mask): """Find a random entry in the dictionary, matching a mask mask: Mask to match. Each letter must either be in ['A'..'Z'] range @@ -216,7 +216,7 @@ def DIC_FindRandomEntry (self, mask): # ============================================================================ - def DIC_FindEntry (self, mask, start=None): + def dic_find_entry (self, mask, start=None): """Find a random entry in the dictionary, matching a mask mask: Mask to match. Each letter must either be in ['A'..'Z'] range @@ -252,7 +252,7 @@ def DIC_FindEntry (self, mask, start=None): # ============================================================================ - def DIC_GetNumWords (self): + def dic_gen_num_words (self): """Return the number of words in the dictionary""" # ============================================================================ @@ -262,7 +262,7 @@ def DIC_GetNumWords (self): # ============================================================================ - def GRID_Erase (self): + def grid_erase (self): """Erase the grid content""" # ============================================================================ @@ -272,7 +272,7 @@ def GRID_Erase (self): # ============================================================================ - def GRID_SetSize (self, width, height): + def grid_set_size (self, width, height): """Set the grid size. Content can be lost when shrinking.""" # ============================================================================ @@ -284,14 +284,24 @@ def GRID_SetSize (self, width, height): # ============================================================================ - def GRID_SetBox (self, x, y, type): + def grid_set_box (self, x, y, type): """Set the type of box at a given grid coordinate""" # ============================================================================ - return + + assert type in ('LETTER', 'VOID', 'BLACK') + + instance = ctypes.c_ulonglong (self._instance) + (api, proto) = self._api ["GRID_SetBox"] + + if type == 'LETTER': type_int = 0 + elif type == 'VOID': type_int = 1 + elif type == 'BLACK': type_int = 2 + + api (instance, x, y, type_int) # ============================================================================ - def GRID_Write (self, x, y, word, dir='H', add_block=False): + def grid_write (self, x, y, word, dir='H', add_block=False): """Write a word on the grid x, y Location of the first letter @@ -312,7 +322,7 @@ def GRID_Write (self, x, y, word, dir='H', add_block=False): # ============================================================================ - def GRID_Read (self): + def grid_read (self): """Read the whole content of the grid""" # ============================================================================ @@ -334,7 +344,7 @@ def GRID_Read (self): # ============================================================================ - def SOLVER_Start (self, seed=0, black_mode='DIAG', max_black=0, heuristic_level=-1): + def solver_start (self, seed=0, black_mode='DIAG', max_black=0, heuristic_level=-1): """Start the grid generation process seed Custom seed for the generation process @@ -368,7 +378,7 @@ def SOLVER_Start (self, seed=0, black_mode='DIAG', max_black=0, heuristic_level= # ============================================================================ - def SOLVER_Step (self, max_time_ms=-1, max_steps=-1): + def solver_step (self, max_time_ms=-1, max_steps=-1): """Move a few steps in the grid generation process""" # ============================================================================ @@ -382,7 +392,7 @@ def SOLVER_Step (self, max_time_ms=-1, max_steps=-1): # ============================================================================ - def SOLVER_Stop (self): + def solver_stop (self): """Stop the grid generation process""" # ============================================================================ @@ -398,7 +408,7 @@ def SOLVER_Stop (self): # ############################################################################ # ============================================================================ - def _WIZ_Init (self): + def _wiz_init (self): # ============================================================================ version = Wizium.Version () @@ -409,7 +419,7 @@ def _WIZ_Init (self): # ============================================================================ - def _WIZ_CreateInstance (self, alphabet_size=0, max_word_length=20): + def _wiz_create_instance (self, alphabet_size=0, max_word_length=20): # ============================================================================ config = Wizium.Config () @@ -425,7 +435,7 @@ def _WIZ_CreateInstance (self, alphabet_size=0, max_word_length=20): # ============================================================================ - def _WIZ_DestroyInstance (self): + def _wiz_destroy_instance (self): # ============================================================================ instance = ctypes.c_ulonglong (self._instance) diff --git a/Wrappers/Python/testWizium.py b/Wrappers/Python/testWizium.py new file mode 100644 index 0000000..8448e0e --- /dev/null +++ b/Wrappers/Python/testWizium.py @@ -0,0 +1,139 @@ +# ############################################################################ + +__license__ = \ + """This file is part of the Wizium distribution (https://github.com/jsgonsette/Wizium). + Copyright (c) 2019 Jean-Sebastien Gonsette. + + 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, version 3. + + 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 .""" + +__author__ = "Jean-Sebatien Gonsette" +__email__ = "jeansebastien.gonsette@gmail.com" + +# ############################################################################ + +import os +import re +from libWizium import Wizium + +# ############################################################################ + +# Update this path if needed ! +PATH = './../../Binaries/Windows/libWizium_x64.dll' +DICO_PATH = './../../Dictionaries/Fr_Simple.txt' + +# ============================================================================ +def draw (wiz): + """Draw the read content, with a very simple formating""" +# ============================================================================ + lines = wiz.grid_read () + for l in lines: + print (''.join ([s + ' ' for s in l])) + + +# ============================================================================ +def set_grid_1 (wiz): + """Set the grid skeleton with a pattern of black boxes""" +# ============================================================================ + + tx = [0, 2, 3] + + wiz.grid_set_size (11,11) + wiz.grid_set_box (5, 5, 'BLACK') + + for i in range (3): + wiz.grid_set_box (tx [i], 5-tx [i], 'BLACK') + wiz.grid_set_box (5+tx [i], tx [i], 'BLACK') + wiz.grid_set_box (10-tx [i], 5+tx [i], 'BLACK') + wiz.grid_set_box (5-tx [i], 10-tx [i], 'BLACK') + + +# ============================================================================ +def set_grid_2 (wiz): + """Set the grid as a rectangular area with a hole at the center""" +# ============================================================================ + + # Grid size + wiz.grid_set_size (17,15) + + # Hole + for i in range (5): + for j in range (5): + wiz.grid_set_box (6+i, 5+j, 'VOID') + + # Place some words on the grid + wiz.grid_write (0,0, 'CONSTRAINT', 'H', add_block=True) + wiz.grid_write (16,5, 'CONSTRAINT', 'V', add_block=True) + wiz.grid_set_box (16, 4, 'BLACK') + + +# ============================================================================ +def load_dictionary (wiz, dico_path): + """Load the dictionary content from a file""" +# ============================================================================ + + # Read file content + with open (dico_path, 'r') as f: + words = f.readlines () + + # Remove what is not a letter, if any + words = [re.sub('[^a-zA-Z]+', '', s) for s in words] + + # Load dictionary + wiz.dic_clear () + n = wiz.dic_add_entries (words) + + print ("Number of words: ") + print (" - in file: ", len (words)) + print (" - added: ", n) + print (" - final: ", wiz.dic_gen_num_words ()) + + +# ============================================================================ +def solve (wiz, max_black=0): +# ============================================================================ + + # Configure the solver + wiz.solver_start (seed=5, black_mode='DIAG', max_black=max_black, heuristic_level=2) + + # Solve with steps of 500ms max, in order to draw the grid content evolution + while True: + status = wiz.solver_step (max_time_ms=500) + + draw (wiz) + print (status) + + if status.fillRate == 100: break + if status.fillRate == 0: break + + # Ensure to release grid content + wiz.solver_stop () + + +# ============================================================================ +"""Main""" +# ============================================================================ + +# Create a Wizium instance +wiz = Wizium (os.path.join (os.getcwd (), PATH)) +# wiz = Wizium ('X:/GenId/6) Web/Github/jsgonsette/Wizium/Projects/VS2017/x64/Debug/libWizium.dll') + +# Load the dictionary +load_dictionary (wiz, DICO_PATH) + +# Set a static pattern +set_grid_2 (wiz) +draw (wiz) + +# Solve this grid +solve (wiz, 28) +draw (wiz)