Virtual catalog DLL

Programs which generate, solve, and analyze Sudoku puzzles

Virtual catalog DLL

Postby champagne » Thu Oct 24, 2024 9:36 pm

The DLL has reached the beta test status. All necessary files are available in a new repository

https://github.com/GPenet/Virtual-catalog-DLL

This DLL has an internal code working on the catalog of min lexical sudoku solution grids.

The code is based on a catalog builder where the first four rows are known through tables.
After the first rows, A solution grid can only be reached in sequential mode within the given four rows start, so the builder code is critical.

The DLL offers three main functionalities

Code: Select all
Given the rank find the solution grid
Given a solution grid find the rank
Get in sequential mode part of the catalog.


As the code uses four DLLs a program using the DLL has implicitly access to all entries of these four DLLs.
To have an easier access to these entries, a later release will include relay calls.
Anyway, all the DLL must be there at runtime.
One post per called DLL summarizes the entries, but the sources of these DLLsl are in another repository
https://github.com/GPenet/Virtual-calatog

The repository of the DLL contains
Code: Select all
The sources of the DLL
The DLLs and .lib files of the called DLLs
The DLL and the .lib file of the new DLL
He user files for all the DLLs
And a small test program sktvcat.exe with the source and the project file (visual studio) to show how to use the virtual catalog

champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Process summary

Postby champagne » Thu Oct 24, 2024 9:38 pm

Let’s call
NED = 5472730538 the number of solution grids in min lexical morph,
NFR4 = 652408 the number of possible first four rows giving solution grids.

NED and NFR4 are known for long by all people having the full data base of min lexical solution grids.

Working directly on the full data base is not easy.

The virtual catalog wants to offer a quick and easy access to a solution grid by the rank 1-NED and reverse.
The virtual catalog wants also to offer the possibility to work on a small area of the field.

In this release, the “small area” is defined as all solution grids attached to on or more first band, but the code is nearly ready to accept smaller areas.

Summary of the process

To define a solution grid, the builder starts with the first four bands filled and the number of solution grids having a lower min lexical morph known.

Then, the builder fills the missing five rows in the following way:

Rows 4/5 (the band 2) are filled cell by cell using filters to start the backtracking when the band2 appear to have an index < “band 1 index”.
For band 3, the code searches the gangster index and uses the potential fills of this gangster. This saves time in two ways

The list of possible fills is ready
The band Id is known

The number of solution grids can reach 63000 for one “four rows” startbut falls sharply when the index of the first band grows.

For a sequential processing, all the solution grids attached to a “four rows” start are first stored, then supplied to the GetNext() calls.
champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Band Mapping DLL

Postby champagne » Thu Oct 24, 2024 9:43 pm

This process is called by other DLLs;
The basic functionality is to identify the min lexical morph of the band and to give the mapping to switch from the given to the minimal, but the DLL has also tables describing all auto morphs for the bands and the minimal set of Unavoidable sets of each band.

The permutation is described in the file skb_permband.h
Hidden Text: Show
Code: Select all
#pragma once

struct BANDPERM {
   int i416;
   int rows[3], cols[9], map[9];
   void InitBase(int i16 = 0) ;
   void Morph(int* s, int* d) ;
   void MorphOrdered(int* s, int* d) ;
   void BuilCellsMap( int* d);
   int MorphCompare(int* s, int* t) ;
   void Chain(BANDPERM& p1, BANDPERM& p2);// in skgrid_minlex_cpp
#ifdef SK0FDEBUGGINGBAND
   int CheckValid();
   void Dump();
#endif
};


The DLL entries are described in the file skbminlex_user.h
Hidden Text: Show
Code: Select all
//skbminlex_user.h - band mapping and UAs list
#pragma once

#include "skb_permband.h"


/*
// ======  morphing a band
void SkbGetMappingChar(   const char * a, BANDPERM *  b);
 const char * a  the given band (char b[27])
 BANDPERM *  b pointer to the return values
   1+3+9+9 int values (see the BANDPERM struct)
_____________
void SkbGetMappingInt(   int* a, &BANDPERM * b);
 same as above, the given is int a[27] filled withe the appropriate integers 0 to 9

 //============ getting from the table auto morphs  of a band
int SkbGetAutoMorphs(int bandid, BANDPERM* tpermret);
 send back the pointer to the appropriate sub table of auto morphs
 return value is the number of automorphs
 return =0 with a pointer to the top part of the table if no response
 
int bandid index 0-415 of the band
 BANDPERM** tpermret where the pointer to the first automorph must be sent

// ======== Getting a band and  UAs of a band
extern "C" __declspec(dllexport) void SkbGetBandChar(int bandid, char* bchar27);
 extract in a char b [27] the band correspondding to the index 0-415 bandid
 return 12345678945 if id is not valid
______________________
extern "C" __declspec(dllexport) int SkbGetUas(int bandid, int** tuas_ret);
   send back the pointer to the appropriate sub table of uas
   return value is the number of uas of the band
    return =0 with a pointer to the top part of the table if no response

   int bandid index 0-415 of the band
    int ** tuas_ret where the pointer to the first ua must be sent


*/
// ======  morphing a band
extern "C" __declspec(dllimport) void SkbGetMappingChar(   const char * a, BANDPERM *  b);
extern "C" __declspec(dllimport) void SkbGetMappingInt(   int* a, BANDPERM * b);

// ======= getting auto morphs
extern "C" __declspec(dllimport) int SkbGetAutoMorphs(int bandid, BANDPERM** tpermret);

// ======== Getting a band and  UAs of a band
extern "C" __declspec(dllimport) void SkbGetBandChar(int bandid, char* bchar27);
extern "C" __declspec(dllimport) int SkbGetUas(int bandid, int** tuas_ret);


champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Band mapping variant for the virtual catalog

Postby champagne » Thu Oct 24, 2024 9:45 pm

This variant is specific to the virtual catalog context. It gives a quick exit in many cases (as soon as the band index can not be equal to the band index of the first band) and the mapping is needed only when the new band has the same index as the old one.

Here is the file skbvcminlex_user.h
Hidden Text: Show
Code: Select all
//skbvcminlex_user.h - band mapping for the virtual catalog
#pragma once

#include "skb_permband.h"

/*
// ======  morphing a band
int GcatGetBandIndex(int* b0, int band1_index);

This is the special morphing of a band used in the virtual catalog;

The band index is of interest only if it is the same as the current band 1 index.
If it is lower, the branch is dead, all fills to come would not be minimal
If it is higher, all fills to come must be checked, but the mapping is not needed.

The band 1 index is the parameter "band1_index"
The return code is -1;0;+1
-1 he band index is lower than "band1_index"
0 the band index is equal to "band1_inde". 
               The mapping is available in the BMINLEX structure
1 the band index is higher than "band1_index"

Note : a dummy "band1_inde" equal to the expected band index
   is used in tests to force the mapping

//===== getting the mapping and using it
If the mapping is done (band index equal to "band1_inde",
  it is available in a permanent BANPERM struct.
The BANDPERM pointer is given (usually called once) through

BANDPERM * GcatGetMappingPointer(); 

The user must use the file Banperm.h or any equvalent code to map the band is necessary.

*/

// ======  morphing a band
extern "C" __declspec(dllimport) int GcatGetBandIndex(int* b0, int band1_index);
// Get mapping pointer
extern "C" __declspec(dllimport) BANDPERM* GcatGetMappingPointer();
champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Gangster mapping

Postby champagne » Thu Oct 24, 2024 9:46 pm

This DLL plays a key role in the process.
As soon as we have a new band 2, the gangster for the third band is known.
The Dll recognize the gangster, setup the mapping and delivers the list of possible fills out of predefined table.

Here is the file skgminlex_user.h
Hidden Text: Show
Code: Select all
//skgminlex_user.h - gand mapping and gang fills
#pragma once


/*
//=============== find the ganster id
int SkgGetGang(int* g27);
the gangster is defined in a 27 table of values 0-8
In fact, it is 9 triplets, one for each column, each triplet sorted in increasing value of the three digits.
eg 123 456 789 if the first box for the gangster gangster is

147
258
369

the value returned is the index 0-43 of the gangster

//================ get the table of fills for a gangster
int SkgGetFills(int igang, const char** tfill);
Once the gangster id known (0-43)
Get access to the table of fills
const char** tfill) get the pointer to the first item of the gangster
the return vamue is the number of items

// ======  select  valid fills for a given band 1, morph and sort
int SkgBuildMorphedTableSortedOver(int ib1)

designed for the virtual catalog
where fills with a band index lower than the band 1 index can be ignored,
but giving a band index <=0 delivers the full table of fills, morphed and sorted.
This must follow a call to SkgGetGang (using the results of the mapping)
The table is stored in the DLL, the return value is the numver of fills valid.
Access to the table is through Skg_GetMorphedOrdered

As all parameters have been defined in the SkgGetGang call,
the only parameter of this call is the band 1 index (0-415)


 //============ getting one item of the valid fills.
 int* Skg_GetMorphedOrdered(int i,int * bandid)

 Acess to one valid fills has 2 results:
 the pointer to the int [27] band (digits 0-8)
 the band index

 i is the item index in the DLL table
 bandid is the pointer to the band id sent back
 and the return value is the pointer to the int [27]


*/
extern "C" __declspec(dllimport) int SkgGetGang(int* g27);
extern "C" __declspec(dllimport) int SkgGetFills(int igang, const char*** tfill);
extern "C" __declspec(dllimport) int SkgBuildMorphedTableSortedOver(int ib1);
extern "C" __declspec(dllimport) int* Skg_GetMorphedOrdered(int i, int* bandid);
champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Grid minlexing

Postby champagne » Thu Oct 24, 2024 9:49 pm

This DLL has good chances to be of interest for other reasons.

If we want to go from a given solution grid to the rank, we must get the min lexical morph of the grid.
It happens during the minlexing process that we find all band indexes and all auto morphs of the grid.
So as much as possible of this is sent back to the caller.

All this is of higher interest in a direct call to the DLL, but if in the virtual catalog the rank is searched for a non minimal solution grid, the min lexical solution is part of the results.

Here the skgrid_minlex_user.h file
Hidden Text: Show
Code: Select all
#pragma once
//skgrid_minlex_user.h - find minlex and auto morphs of a solution gris (no validity check)


/*
this DLL uses the Band mapping DLL skbminlex

The main entry receives a valid solution grid and send back the minlex morph of the entry.
The entry can be a 81 character field
or a int x[81] where each digit is an integer 0-8 replacing the characters 1-9

If the user is interested in getting back the auto morphs permutations of the solution grid,
a first call (valid for the full run) gives the pointer to a "struct" containing
  the table of permutation giving the minlex out of the entry
  receiving the number of auto morphs
  the number of valid items
  (first is neutral if the entry is already  minlex)
Are also sent back the main component of the analysis
  bands and stacks indexes
  vertical (band wap and horizontal (first band auto morphs )count of auto morphs
   
  To get it, it must be seen as the following structure 
 
  struct TPGC { char t[648][19]; int nt,bs_id[6],nv,nh; }*p_tpgc;
 
  and the call will return the value for the pointer p_tpgc
 
//================ First call to get auto morphs
extern "C" __declspec(dllimport) TPGC * SkbsSetModeWithAutos();
 
TPGC *        return value for the pointer to the table

struct TPGC { char t[648][19]; int nt;BANDPERM* tpe[3];}*p_tpgc;
p_tpgc=SkbsSetModeWithAutos();

//=============== find the min lexical
2 calls differing by the given solution grid
(not verified, unpredictable behaviour if it's not a valid entry )
   given is a classical char [81]
   given is a int[81] where each cell has a value 0-8
The min lexical morph is returned as a int [81]

char zc[81];
int zint [81],zret[81];

SkbsGetMinChar(zc, zret); or
SkbsGetMinChar(zint, zret);


*/
struct TPGC { char t[648][19]; int nt, bs_id[6], nv, nh;BANDPERM* tpe[3];};

extern "C" __declspec(dllimport) void SkbsGetMin(int* g81s, int* g81min);
extern "C" __declspec(dllimport) void SkbsGetMinChar(char* g81sc, int* g81min);
extern "C" __declspec(dllimport) TPGC * SkbsSetModeWithAutos();
extern "C" __declspec(dllimport) int SkbsGetMinIsNotMin(int* g);

/* to come later use of the table of auto morphs
*/

champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Virtual catalog DLL user file

Postby champagne » Thu Oct 24, 2024 9:54 pm

Last here, the DLL user file for the virtual catalog. u05skvcar_user.h
This file will be enriched in two ways in the near future:

More entries will be offered to process narrower parts of the catalog.
Currently a range of bands,
Planned
First band plus a mini row in row 4
One start four rows (maxi 63000 solution grids
If necessary, a range of ranks
Relay for calls to other DLLs.
With Visual Studio, access to several DLLs requires a relatively complex project file.
One Way to make it simpler it to have a relay call in the virtual catalog DLL


Hidden Text: Show
Code: Select all
#pragma once
//skvcat_user.h - use virtual catalog and included DLLLs


/*
this DLL uses  other DLLs
corresponding entries are described in the files

skbminlex_user.h
skbvcminlex_user.h
skgminlex_user.h
skgrid_minlex_user.h

The virtual catalog offers three main functionalities :

find the solution grid knowing the rank 1-5472730538
find the rank of a given solution grid
process a chunk of solution grids of the catalog

No check is done on the validity of the solution grid although the results are unpredictable if a false solution grid is entered.
A special call is available to check the validity of a given before the call to the relevant process.

An exchange structure is used to send back information in several cases.
The pointer to the strucutre must be first obtained. this is done in a first call telling which funtionality will be used.

In most cases, a return code tells if something wrong occured.
If the return is the rank of a solution grid, a return 0 is then used as wrong return.

The current  entries are

//========= check validity
int skvcatIsVali81(char* z);
char * z is the pointer to the 81 field assumed to be a valid solution grid
return is 1 if it is ok, 0 if it is not
//========  define the process and get the pointer to the exchange area
This must be the first call. All other entries will usuall be cancelles if this call is not doen, 

int  SkvcatSetModeGetVCDESK(int mode, VCDESC** pe);

mode must be 0/1/2
   0 sequential process on a virtual file
   1 rank => solution grid
   2 solution grid to rank
VCDESC** pe to get back the value of VCDESC * p

return value is -1 if the mode is not one of the expected values, o if the call is ok

________________
int  SkvcatSetChangeMode(int mode);

Although some call do it directly, this is an entry to chnage the mode if needed.
It can be so if the calling program works first in rank => sol mode and then wants to swtch to a virtual file process.

//==================== mode 0 virtual file
in this first release, a virtual file is made of a chunk of first bands;
Later smalle chunks of ranks will be available. are planned
. first band plus first mini row in row 4
. first four rows
. a range of ranks.
the VCDESC exchange struct is designed fo such uses
Current entries are
___________________

int SkvOpennBands(int ib1, int ib2);
defines the chunk
ib1 first band index (0-415)
ib2 last band index
the return value is -1 if something wrong happens
 missing first call or current mode not 0
 not valid ib1/ib2
__________________

int SkvGetNext();
to catch the next solution grid.
the return value is in the exchange area
the return code is -1 if
 the end of virtual file has been reached
 anything wrong happened (as a missing mode or open)
 
//==================== mode 1 rank => solution grid
Here nothing special expected

int SkvcatFinSolForRank(uint64_t rank);
 The rank is given
 the solution grid comes back in the exchange area
 
 the return code is -1 is something wrong happened
   missing mode 1
   invalid rank
   
//==========================mode 2 solution grid => rank
In fact we have here only one process if we start from a solution grid in min lexical morp.
To make it simpler for the user, the given can be   
char [81] with digits 1-9
int [81   with values 0-8

Again, no check is done with unpredictable results if the entry is not valid.
It is the responsability of the caller to use the minimal entry is the given is really a minimal morph
_______________________________

uint64_t SkvcatGetRankFromSolMin(int * sgiven);
uint64_t SkvcatGetRankFromSolCharMin(char* sgiven);

the return value is the rank 1-5472730538, 0 is something wrong happened

_________________________________________________

But the DLL accepts also given not minimal. Then, the min lexical morph is first searched and sent back as a int[81]

uint64_t SkvcatGetRankFromSolNotMin(int* sgiven, int* sback);
uint64_t SkvcatGetRankFromSolCharNotMin(char* sgiven, int* sback);

Same as above, but the int * sback is the pointer to the caller area receiving the min lexicla morph.

*/
struct VCDESC {
   uint64_t rank;
   int i416, i9992, i660k1, ir1, i660k2, ir2;
   struct G { char b1[27], r4[9], rx[45]; }g;
   
} * pvcdesc;

extern "C" __declspec(dllimport) int  SkvcatSetModeGetVCDESK(int mode, VCDESC** pe);
extern "C" __declspec(dllimport) int  SkvcatSetChangeMode(int mode);

extern "C" __declspec(dllimport) int SkvcatFinSolForRank(uint64_t rank);
extern "C" __declspec(dllimport) uint64_t SkvcatGetRankFromSolMin(int * sgiven);

extern "C" __declspec(dllimport) uint64_t SkvcatGetRankFromSolNotMin(int* sgiven, int* sback);
extern "C" __declspec(dllimport) uint64_t SkvcatGetRankFromSolCharMin(char* sgiven);
extern "C" __declspec(dllimport) uint64_t SkvcatGetRankFromSolCharNotMin(char* sgiven, int* sback);

extern "C" __declspec(dllimport) int SkvOpennBands(int ib1, int ib2);
extern "C" __declspec(dllimport) int SkvGetNext();

extern "C" __declspec(dllimport) int skvcatIsVali81(char* z);
champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Test program accessing the virtual catalog DLL

Postby champagne » Thu Oct 24, 2024 10:02 pm

I have a small program testing the validity of the DLL frame.
This is done using my standard start of the command line, but the code specific to the program can be seen ignoring the context.

This program has four small processes
Code: Select all
A One shot:  give the rank, get the solution grid
The same with a file with one rank per line
A reverse process with a file containing solution grids where the rank is searched (assuming a non minimal given)
A virtual file process.
  The minimal output is the list of ranks found
  In option, the solution grid is printed;

Here is the corresponding code file sktestvcat.cpp
The four process are he functions C0(); C1(); C10(); C11()


Hidden Text: Show
Code: Select all
/*
My standard start using maingp as command line analyser
contains the entry G0() called by main
*/
#define _CRT_SECURE_NO_DEPRECATE
#define _CRT_SECURE_NO_WARNINGS
#define INCLUDE_DEBUGGING_CODE
#include <stdlib.h>
#include <sys/timeb.h>
using namespace std;
// nothing to do here
#include "maingp_cpp.h"
#include "dllusers\u05skvcar_user.h"

void C0() { // virtual sequential mode
   char ws[82]; ws[81] = 0;
   cout << " C0_ virtual file bands -v0-  -v1- print if -v2-" << endl;
   if (SkvcatSetModeGetVCDESK(1, &pvcdesc))
      cout << " set mode failed" << endl;
   if (SkvOpennBands(sgo.vx[0], sgo.vx[1])) {
      cout << "could not open bands range "<< sgo.vx[0] <<" "<< sgo.vx[1] << endl;
      return;
   }
   else cout <<"open "<< sgo.vx[0] << " " << sgo.vx[1] <<" done " << endl;
   while (!SkvGetNext()) {
      if (sgo.vx[2]) {
         char ws[82]; ws[81] = 0;
         memcpy(ws, pvcdesc->g.b1, 81);
         cout << ws << " sol " ;
      }
      cout << pvcdesc->rank << " __ " << endl;
   }


}

void C1() {
   char ws[82]; ws[81] = 0;
   cout << " C1_ find sol from rank -v0-" << endl;
   if(  SkvcatSetModeGetVCDESK(1, &pvcdesc))
      cout <<" set mode failed"<<endl;
   if (SkvcatFinSolForRank(sgo.vx64[0]))
      cout << "find failed" << endl;
   else {
      memcpy(ws, pvcdesc->g.b1,81);
      cout <<ws<<" sol"<<endl;
   }
}

void C10() {
   char ws[82]; ws[81] = 0;
   cout << " C10_ find sol from rank file of ranks " << endl;
   char* ze = finput.ze;
   if (SkvcatSetModeGetVCDESK(1, &pvcdesc)) {
      cout << " set mode failed" << endl;
      return;
   }
   while (finput.GetLigne()) {
      if (strlen(ze) < 1)continue;// no empty line
      cout << ze << " rank to find sol" << endl;
      if (strlen(ze) >10)ze[10]=0;// no blank
      int64_t v= strtoll(ze, 0, 10);
      if (SkvcatFinSolForRank(v))
         cout << "find failed" << endl;
      else {
         memcpy(ws, pvcdesc->g.b1, 81);
         cout << ws << " sol" << endl;
      }
   }
   cout << "end of file   "  << endl;

}
void C11() {
   cout << " C11_ find rank for a file of solution grids " << endl;
   char* ze = finput.ze;
   int smin[81];
   if (SkvcatSetModeGetVCDESK(2, &pvcdesc)) {
      cout << " set mode failed" << endl;
      return;
   }
   while (finput.GetLigne()) {
      if (strlen(ze) < 81)continue;// no empty line
      cout << ze << " sol to find rank" << endl;
      if (!skvcatIsVali81(ze)) {
         cout << "not a valid sol" << endl;
         continue;
      }
      uint64_t r =SkvcatGetRankFromSolCharNotMin(ze, smin);
      if (!r) {
         cout << " failed to find rank" << endl;
         continue;
      }
      for (int i = 0; i < 81; i++) cout << smin[i] + 1;
      cout << " solmin rank" << r << endl;

   }
   cout << "end of file   " << endl;


}


/* strtoll example */

/*
#include <stdio.h>      // printf, NULL
#include <stdlib.h>     // strtoll

int main()
{
   char szNumbers[] = "1856892505 17b00a12b -01100011010110000010001101100 0x6fffff";
   char* pEnd;
   long long int lli1, lli2, lli3, lli4;
   lli1 = strtoll(szNumbers, &pEnd, 10);
   lli2 = strtoll(pEnd, &pEnd, 16);
   lli3 = strtoll(pEnd, &pEnd, 2);
   lli4 = strtoll(pEnd, NULL, 0);
   printf("The decimal equivalents are: %lld, %lld, %lld and %lld.\n", lli1, lli2, lli3, lli4);
   return 0;
}*/

void Go_0() {
   int need_input_file[3] = { 10,11,94 }, need = 0;
   for (int i = 0; i < 3; i++)
      if (sgo.command == need_input_file[i]) { need = 1; break; }


   // open  outputs files 1.txt
   if (sgo.foutput_name) {
      char zn[200];
      strcpy(zn, sgo.foutput_name);
      int ll = (int)strlen(zn);
      strcpy(&zn[ll], "_file1.txt");
      fout1.open(zn);
   }
   if (need) {// input file expected
      if (!sgo.finput_name) {
         cerr << "missing input file name" << sgo.finput_name << endl; return;
      }
      finput.open(sgo.finput_name);
      if (!finput.is_open()) {
         cerr << "error open file " << sgo.finput_name << endl;
         return;
      }
   }
   cerr << "running command " << sgo.command << endl;


   switch (sgo.command) {
   case 0: C0(); break;// virtual file sequential mode
   case 1:C1(); break;// get sol from rank
   case 10: C10(); break;// get sol for a file of ranks

   case 11: C11(); break;

   }
   cerr << "go_0 return" << endl;
}


To test the four case using sktvcat.exe (all DLL reachable at run time)

The user can use the commands
Code: Select all
sktvcat -c0 -v0-390 -v1-415 -v2-1  >d0.txt
sktvcat -c1 -v0-1  >d1.txt
sktvcat -c10 -ifmytr.txt  >d10.txt
sktvcat -c11 -ifmytsol.txt  >d11.txt


sktvcat -c0 -v0-390 -v1-415 -v2-1 >d0.txt

Sequential file for bands 390 to 415, print the sol
Result expected, something similar to
Hidden Text: Show
Code: Select all
 C0_ virtual file bands -v0-  -v1- print if -v2-
open 390 415 done
123456789457289631896317254231564897689173425745928163318645972572891346964732518 sol 5472730411 __
123456789457289631896317254231564897689173425745928163364792518572831946918645372 sol 5472730412 __
123456789457289631896317254231564897689173425745928163364891572518732946972645318 sol 5472730413 __
123456789457289631896317254231564897689173425745928163372645918518792346964831572 sol 5472730414 __
123456789457289631896317254231968475748523916965174328382641597574892163619735842 sol 5472730416 __
123456789457289631896317254238791546761534928945862173379128465514673892682945317 sol 5472730417 __
123456789457289631896317254241875396389642175765193428538764912612938547974521863 sol 5472730418 __
123456789457289631896317254241968375738524916965173428382641597574892163619735842 sol 5472730419 __
123456789457289631896317254248573916731968425965124378382641597574892163619735842 sol 5472730420 __
123456789457289631896317254249635817685741392731892465312978546578164923964523178 sol 5472730421 __
123456789457289631896317254261935847349872516578164923612593478785641392934728165 sol 5472730422 __
123456789457289631896317254261935847349872516578164923685741392712593468934628175 sol 5472730422 __
123456789457289631896317254264195378319872546578643912685721493742938165931564827 sol 5472730424 __
123456789457289631896317254264938175319572468785641392578164923642893517931725846 sol 5472730425 __
123456789457289631896317254264938517319572846785641923578164392642893175931725468 sol 5472730426 __
123456789457289631896317254271935846349862517568174923685741392712593468934628175 sol 5472730427 __
123456789457289631896317254274938165319562478685741392568174923742893516931625847 sol 5472730428 __
123456789457289631896317254274938516319562847685741923568174392742893165931625478 sol 5472730429 __
123456789457289631896317254285641973649735128731892546312978465568124397974563812 sol 5472730430 __
123456789457289631896731245231564897574928316689173524315642978748395162962817453 sol 5472730431 __
123456789457289631896731245231564897574928316689173524315897462748612953962345178 sol 5472730431 __
123456789457289631896731245231564897574928316689173524345612978718395462962847153 sol 5472730432 __
123456789457289631896731245231564897574928316689173524345897162718642953962315478 sol 5472730433 __
123456789457289631896731245231564897649178523785923164318697452564312978972845316 sol 5472730434 __
123456789457289631896731245231564897649178523785923164372895416564312978918647352 sol 5472730435 __
123456789457289631896731245231564897649178523785923164378695412564312978912847356 sol 5472730436 __
123456789457289631896731245231564897685973124749128563318697452564312978972845316 sol 5472730437 __
123456789457289631896731245231564897685973124749128563372895416564312978918647352 sol 5472730438 __
123456789457289631896731245231564897685973124749128563378695412564312978912847356 sol 5472730439 __
123456789457289631896731245231564897689173452745928163318692574562347918974815326 sol 5472730440 __
123456789457289631896731245231564897689173452745928163362815974574692318918347526 sol 5472730441 __
123456789457289631896731245231564897689173524745928163318697452564312978972845316 sol 5472730442 __
123456789457289631896731245231564897689173524745928163372895416564312978918647352 sol 5472730443 __
123456789457289631896731245231564897689173524745928163378695412564312978912847356 sol 5472730444 __
123456789457289631896731245231574896645928317789163524374895162518642973962317458 sol 5472730446 __
123456789457289631896731245231897564685143972749625318378512496564978123912364857 sol 5472730447 __
123456789457289631896731245231897564689145372745623918372514896564978123918362457 sol 5472730447 __
123456789457289631896731245234517968579648123681392457312874596745963812968125374 sol 5472730449 __
123456789457289631896731245235817964641392857789645312312578496564923178978164523 sol 5472730450 __
123456789457289631896731245235817964641392857789645312312578496568924173974163528 sol 5472730450 __
123456789457289631896731245235817964641392857789645312312578496574963128968124573 sol 5472730451 __
123456789457289631896731245235897164649312578781645392312964857564178923978523416 sol 5472730453 __
123456789457289631896731245235897164649312578781645392312968457568174923974523816 sol 5472730453 __
123456789457289631896731245235897164649312578781645392312974856574168923968523417 sol 5472730454 __
123456789457289631896731245239178564568924317741563928385647192612895473974312856 sol 5472730456 __
123456789457289631896731245239645817641897352785312964312578496568924173974163528 sol 5472730457 __
123456789457289631896731245241397568635812497789645312312974856564128973978563124 sol 5472730458 __
123456789457289631896731245241397568635812497789645312312974856574168923968523174 sol 5472730458 __
123456789457289631896731245241897563685312974739645812312568497564973128978124356 sol 5472730460 __
123456789457289631896731245241897563685312974739645812312578496574963128968124357 sol 5472730460 __
123456789457289631896731245241897563685312974739645812312968457578124396964573128 sol 5472730461 __
123456789457289631896731245245317896631892574789645312312968457564173928978524163 sol 5472730463 __
123456789457289631896731245245397168639812574781645392312968457568174923974523816 sol 5472730464 __
123456789457289631896731245245397168639812574781645392312974856574168923968523417 sol 5472730464 __
123456789457289631896731245245397816639812574781645392312968457564173928978524163 sol 5472730466 __
123456789457289631896731245245817396681392574739645812312968457564173928978524163 sol 5472730467 __
123456789457289631896731245249317568635892174781645392312968457568174923974523816 sol 5472730468 __
123456789457289631896731245249317568635892174781645392312974856574168923968523417 sol 5472730468 __
123456789457289631896731245249317568635892417781645392312974856574168923968523174 sol 5472730469 __
123456789457289631896731245285317964641892573739645812312968457578124396964573128 sol 5472730471 __
123456789457289631968137254245918376631574928789623415314862597576391842892745163 sol 5472730472 __
123456789457289631968137254295713468736894512841562397312975846584621973679348125 sol 5472730473 __
123456789457289631968731245231564897689317452745928163314875926596142378872693514 sol 5472730474 __
123456789457289631968731245231564897689317452745928163396142578514873926872695314 sol 5472730474 __
123456789457289631968731245231645897689317524745892316312564978574928163896173452 sol 5472730476 __
123456789457289631968731245231645897689317524745892316316978452574123968892564173 sol 5472730476 __
123456789457289631968731245231645897689317524745892316392564178574128963816973452 sol 5472730477 __
123456789457289631968731245231648597689517324745392816374125968592864173816973452 sol 5472730479 __
123456789457289631968731245231648597689517324745392816374925168512864973896173452 sol 5472730479 __
123456789457289631968731245234615897681397524795842316312564978579128463846973152 sol 5472730481 __
123456789457289631968731245234615897681397524795842316346978152579123468812564973 sol 5472730481 __
123456789457289631968731245234695817689317524715842396346178952571923468892564173 sol 5472730483 __
123456789457289631968731245239645817681397524745812396316978452574123968892564173 sol 5472730484 __
123456789457289631968731245239645817681397524745812396396178452574923168812564973 sol 5472730484 __
123456789457289631968731245239648517681597324745312896374125968592864173816973452 sol 5472730486 __
123456789457289631968731245241573896639812457785964123374625918596148372812397564 sol 5472730487 __
123456789457289631968731245281643597639517824745892316316978452592364178874125963 sol 5472730488 __
123456789457289631968731245284615397631897524795342816346978152579123468812564973 sol 5472730489 __
123456789457289631986137245231645897698713524745892316312564978574928163869371452 sol 5472730490 __
123456789457289631986137245231645897698713524745892316312574968564928173879361452 sol 5472730490 __
123456789457289631986137245231864597695371824748925316364592178512748963879613452 sol 5472730492 __
123456789457289631986137245231864597695371824748925316369718452512643978874592163 sol 5472730492 __
123456789457289631986137245231864597695371824748925316374592168512648973869713452 sol 5472730493 __
123456789457289631986137245231864597695371824748925316379618452512743968864592173 sol 5472730494 __
123456789457289631986137245231874596648925317795361824364592178512748963879613452 sol 5472730496 __
123456789457289631986137245231874596648925317795361824369718452512643978874592163 sol 5472730496 __
123456789457289631986137245231874596648925317795361824374592168512648973869713452 sol 5472730497 __
123456789457289631986137245231874596648925317795361824379618452512743968864592173 sol 5472730498 __
123456789457289631986137245248615973695743128731892456312978564579364812864521397 sol 5472730500 __
123456789457389612896127354231564978649718523785932146372645891568291437914873265 sol 5472730501 __
123456789457389612896127354231564978649718523785932146374291865562873491918645237 sol 5472730501 __
123456789457389612896127354231564978649718523785932146374891265568273491912645837 sol 5472730502 __
123456789457389612896127354231564978649718523785932146378645291562891437914273865 sol 5472730503 __
123456789457389612896127354231645978649871523785293146372564891568912437914738265 sol 5472730505 __
123456789457389612896127354231645978649871523785293146372914865564738291918562437 sol 5472730505 __
123456789457389612896127354231645978649871523785293146374568291562914837918732465 sol 5472730506 __
123456789457389612896127354231645978649871523785293146374912865562738491918564237 sol 5472730507 __
123456789457389612896127354231645978649871523785293146374918265568732491912564837 sol 5472730508 __
123456789457389612896127354231645978649871523785293146378564291562918437914732865 sol 5472730509 __
123456789457389612896172354285793146631524978749618523312945867568237491974861235 sol 5472730511 __
123456789457389612896271354281537946645928173739164528312645897568792431974813265 sol 5472730512 __
123456789457389612896271354285137946641928573739564128312645897568792431974813265 sol 5472730513 __
123456789457389612896271354285713946641892573739645128312564897568927431974138265 sol 5472730514 __
123456789457389612896271354289564173641937528735128946312645897568792431974813265 sol 5472730515 __
123456789457389612896721354231564978649178523785932146312645897568297431974813265 sol 5472730516 __
123456789457389612896721354231564978649178523785932146314297865562813497978645231 sol 5472730516 __
123456789457389612896721354231564978649178523785932146314897265568213497972645831 sol 5472730517 __
123456789457389612896721354231564978649178523785932146318645297562897431974213865 sol 5472730518 __
123456789457389612896721354231578946645932178789164523312645897568297431974813265 sol 5472730520 __
123456789457389612896721354231645978649817523785293146312564897568972431974138265 sol 5472730521 __
123456789457389612896721354231645978649817523785293146312974865564138297978562431 sol 5472730521 __
123456789457389612896721354231645978649817523785293146312978465568134297974562831 sol 5472730522 __
123456789457389612896721354231645978649817523785293146314568297562974831978132465 sol 5472730523 __
123456789457389612896721354231645978649817523785293146314972865562138497978564231 sol 5472730524 __
123456789457389612896721354231645978649817523785293146314978265568132497972564831 sol 5472730525 __
123456789457389612896721354231645978649817523785293146318564297562978431974132865 sol 5472730526 __
123456789457389612896721354231978546649532178785164923312645897568297431974813265 sol 5472730528 __
123456789457389612896721354234178965561932478789564123315297846642813597978645231 sol 5472730529 __
123456789457389612896721354234817965561293478789645123315972846642138597978564231 sol 5472730530 __
123456789457389612896721354235178946641932578789564123312645897568297431974813265 sol 5472730531 __
123456789457389612896721354235817946641293578789645123312564897568972431974138265 sol 5472730532 __
123456789457389612896721354235964178641578923789132546312645897568297431974813265 sol 5472730533 __
123456789457389612896721354239564178641978523785132946312645897568297431974813265 sol 5472730534 __
123456789457389621896217354268174593745938162931562847382641975574893216619725438 sol 5472730535 __
123456789457389621896217354268174593745938162931562847384725916579641238612893475 sol 5472730535 __
123456789457389621896217354268741593745893162931625847382164975574938216619572438 sol 5472730537 __
123456789457893612986217354274538196531964827698721435342685971715349268869172543 sol 5472730538 __

total elapsed time 0s 028ms


sktvcat -c1 -v0-1 >d1.txt

Code: Select all
C1_ find sol from rank -v0-
123456789456789123789123456214365897365897214897214365531642978642978531978531642 sol
total elapsed time 0s 002ms



sktvcat -c10 -ifmytr.txt >d10.txt

need input file fmytr.txt. I used (rank assumed in the first 10 characters of the line
Hidden Text: Show
Code: Select all
5472692770; 353  353 353,
5472707654; 357  357 357,

5472730537; 410  410 410,
5472730538; 415  415 415,
1


And got

Hidden Text: Show
Code: Select all
C10_ find sol from rank file of ranks
5472692770; 353  353 353, rank to find sol
123456789457289163698713254231564897569871342874392516386147925745928631912635478 sol
5472707654; 357  357 357, rank to find sol
123456789457289163896317245271643958584192376639875412318964527762531894945728631 sol
5472730537; 410  410 410, rank to find sol
123456789457389621896217354268741593745893162931625847382164975574938216619572438 sol
5472730538; 415  415 415, rank to find sol
123456789457893612986217354274538196531964827698721435342685971715349268869172543 sol
1 rank to find sol
123456789456789123789123456214365897365897214897214365531642978642978531978531642 sol
end of file   

total elapsed time 0s 005ms


sktvcat -c11 -ifmytsol.txt >d11.txt

need an entry file with solution grids fmytsol.txt
I had this , already min lexical although the call is for non min given
Hidden Text: Show
Code: Select all
123456789457289163698713254231564897574892631869371425312645978745928316986137542; 5472692770; 353  353 353,
123456789457289163896317245271643958685192374934875621368521497519764832742938516; 5472707654; 357  357 357,
123456789457289163896731524234568971561974238789312645318625497645897312972143856; 5472708986; 358  358 358,
123456789457289613689713245271564938836197524945328176362941857594872361718635492; 5472712474; 360  360 360,
123456789457289613698317245271964358865731924934528176349872561512643897786195432; 5472718292; 363  363 363,
123456789457289613698317254231874965785693142946125378374562891519738426862941537; 5472718928; 364  364 364,
123456789457289613698713245231978456749561832865324971374192568582637194916845327; 5472720275; 365  365 365,
123456789457289613869731254235648971671925348984317562346872195598163427712594836; 5472724163; 368  368 368,
123456789457289613896137254245618397639745128781392546378524961564971832912863475; 5472726150; 370  370 370,
123456789457289613896317245235641978761938452948572361312864597574193826689725134; 5472726657; 371  371 371,
123456789457289613968137245245613897639748521781592364316925478574861932892374156; 5472728705; 375  375 375,
123456789457289613968137254231645897689713542745892361312564978574928136896371425; 5472728927; 376  376 376,
123456789457289631689173245234567918768941352915328476372615894596834127841792563; 5472729438; 379  379 379,
123456789457289631869713245236594817578162394914378526345927168691835472782641953; 5472729812; 382  382 382,
123456789457289631869713254286971543394562178571834962638127495742395816915648327; 5472729990; 383  383 383,
123456789457289631896317245231645978689731452745892163312564897574928316968173524; 5472730357; 389  389 389,
123456789457289631968731245231645897689317524745892316312564978574928163896173452; 5472730476; 393  393 393,
123456789457289631986137245231645897698713524745892316312564978574928163869371452; 5472730490; 395  395 395,
123456789457389621896217354268741593745893162931625847382164975574938216619572438; 5472730537; 410  410 410,
123456789457893612986217354274538196531964827698721435342685971715349268869172543; 5472730538; 415  415 415,

And I got

Hidden Text: Show
Code: Select all
C11_ find rank for a file of solution grids
123456789457289163698713254231564897574892631869371425312645978745928316986137542; 5472692770; 353  353 353, sol to find rank
123456789457289163698713254231564897574892631869371425312645978745928316986137542 solmin rank5472692770
123456789457289163896317245271643958685192374934875621368521497519764832742938516; 5472707654; 357  357 357, sol to find rank
123456789457289163896317245271643958685192374934875621368521497519764832742938516 solmin rank5472707654
123456789457289163896731524234568971561974238789312645318625497645897312972143856; 5472708986; 358  358 358, sol to find rank
123456789457289163896731524234568971561974238789312645318625497645897312972143856 solmin rank5472708986
123456789457289613689713245271564938836197524945328176362941857594872361718635492; 5472712474; 360  360 360, sol to find rank
123456789457289613689713245271564938836197524945328176362941857594872361718635492 solmin rank5472712474
123456789457289613698317245271964358865731924934528176349872561512643897786195432; 5472718292; 363  363 363, sol to find rank
123456789457289613698317245271964358865731924934528176349872561512643897786195432 solmin rank5472718292
123456789457289613698317254231874965785693142946125378374562891519738426862941537; 5472718928; 364  364 364, sol to find rank
123456789457289613698317254231874965785693142946125378374562891519738426862941537 solmin rank5472718928
123456789457289613698713245231978456749561832865324971374192568582637194916845327; 5472720275; 365  365 365, sol to find rank
123456789457289613698713245231978456749561832865324971374192568582637194916845327 solmin rank5472720275
123456789457289613869731254235648971671925348984317562346872195598163427712594836; 5472724163; 368  368 368, sol to find rank
123456789457289613869731254235648971671925348984317562346872195598163427712594836 solmin rank5472724163
123456789457289613896137254245618397639745128781392546378524961564971832912863475; 5472726150; 370  370 370, sol to find rank
123456789457289613896137254245618397639745128781392546378524961564971832912863475 solmin rank5472726150
123456789457289613896317245235641978761938452948572361312864597574193826689725134; 5472726657; 371  371 371, sol to find rank
123456789457289613896317245235641978761938452948572361312864597574193826689725134 solmin rank5472726657
123456789457289613968137245245613897639748521781592364316925478574861932892374156; 5472728705; 375  375 375, sol to find rank
123456789457289613968137245245613897639748521781592364316925478574861932892374156 solmin rank5472728705
123456789457289613968137254231645897689713542745892361312564978574928136896371425; 5472728927; 376  376 376, sol to find rank
123456789457289613968137254231645897689713542745892361312564978574928136896371425 solmin rank5472728927
123456789457289631689173245234567918768941352915328476372615894596834127841792563; 5472729438; 379  379 379, sol to find rank
123456789457289631689173245234567918768941352915328476372615894596834127841792563 solmin rank5472729438
123456789457289631869713245236594817578162394914378526345927168691835472782641953; 5472729812; 382  382 382, sol to find rank
123456789457289631869713245236594817578162394914378526345927168691835472782641953 solmin rank5472729812
123456789457289631869713254286971543394562178571834962638127495742395816915648327; 5472729990; 383  383 383, sol to find rank
123456789457289631869713254286971543394562178571834962638127495742395816915648327 solmin rank5472729990
123456789457289631896317245231645978689731452745892163312564897574928316968173524; 5472730357; 389  389 389, sol to find rank
123456789457289631896317245231645978689731452745892163312564897574928316968173524 solmin rank5472730357
123456789457289631968731245231645897689317524745892316312564978574928163896173452; 5472730476; 393  393 393, sol to find rank
123456789457289631968731245231645897689317524745892316312564978574928163896173452 solmin rank5472730476
123456789457289631986137245231645897698713524745892316312564978574928163869371452; 5472730490; 395  395 395, sol to find rank
123456789457289631986137245231645897698713524745892316312564978574928163869371452 solmin rank5472730490
123456789457389621896217354268741593745893162931625847382164975574938216619572438; 5472730537; 410  410 410, sol to find rank
123456789457389621896217354268741593745893162931625847382164975574938216619572438 solmin rank5472730537
123456789457893612986217354274538196531964827698721435342685971715349268869172543; 5472730538; 415  415 415, sol to find rank
123456789457893612986217354274538196531964827698721435342685971715349268869172543 solmin rank5472730538
end of file
champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany

Re: Virtual catalog DLL

Postby champagne » Sun Nov 03, 2024 7:51 am

News after more tests on the virtual catalog.
First, tests showed bugs in the cleaning of the code. The repository has been updated.

The first big test made is a check of the grids having auto morphs.
the result is known for long, given by gsf
Hidden Text: Show
Code: Select all
Aut#      Grids
----------------
   1 5472170387   
   2     548449       
   3       7336       
   4       2826       
   6       1257       
   8         29       
   9         42       
  12         92       
  18         85       
  27          2       
  36         15       
  54         11       
  72          2       
 108          3       
 162          1       
 648          1       
===============
     5472730538      total   
   - 5472170387   
         560151


Running the sequential mode for the entire catalog, and calling for each grid the minlexing function, I got the same result in about 8 hours. Surely much longer than using a copy of the catalog ( about half an hour to extract the row 4 file wrote mladen) but in line with the given estimate of 3 hours ++ to just run the sequential mode.

I then produced the file of grids having 12 auto morphs and more an got this


Hidden Text: Show
Code: Select all
 C10_ find sol from rank file of ranks
964550;12 rank to find sol
123456789456789123789123456231564897564897231897231564312645978645978312978312645 sol
964551;12 rank to find sol
123456789456789123789123456231564897564897231897231564312645978648972315975318642 sol
964552;12 rank to find sol
123456789456789123789123456231564897564897231897231564312648975645972318978315642 sol
964554;12 rank to find sol
123456789456789123789123456231564897564897231897231564312648975675912348948375612 sol
964556;12 rank to find sol
123456789456789123789123456231564897564897231897231564312678945648915372975342618 sol
964558;12 rank to find sol
123456789456789123789123456231564897564897231897231564312978645645312978978645312 sol
964580;12 rank to find sol
123456789456789123789123456231564897564897231897231645345672918618945372972318564 sol
964604;12 rank to find sol
123456789456789123789123456231564897564897312897231645345612978672948531918375264 sol
964648;12 rank to find sol
123456789456789123789123456231564897564897312897312645375941268618275934942638571 sol
964684;12 rank to find sol
123456789456789123789123456231564897564897312978312645345978261617245938892631574 sol
964692;12 rank to find sol
123456789456789123789123456231564897564978312897312645345691278672845931918237564 sol
964704;12 rank to find sol
123456789456789123789123456231564897564978312978231645345612978692847531817395264 sol
964712;12 rank to find sol
123456789456789123789123456231564897564978312978312564315697248642835971897241635 sol
964713;12 rank to find sol
123456789456789123789123456231564897567891234894237561312645978648972315975318642 sol
964714;12 rank to find sol
123456789456789123789123456231564897567891234894237561312645978675918342948372615 sol
965083;12 rank to find sol
123456789456789123789123456231564897568972314974318562345691278612847935897235641 sol
965084;12 rank to find sol
123456789456789123789123456231564897648972315975318642312645978567891234894237561 sol
965085;12 rank to find sol
123456789456789123789123456231564897648972315975318642312645978594837261867291534 sol
965097;12 rank to find sol
123456789456789123789123456231564978564897312897231645312978564648315297975642831 sol
965110;12 rank to find sol
123456789456789123789123456231564978564897312897231645318675294642918537975342861 sol
965157;12 rank to find sol
123456789456789123789123456231564978564897312897312645318975264645231897972648531 sol
965165;12 rank to find sol
123456789456789123789123456231564978564897312978312564315648297697235841842971635 sol
965183;12 rank to find sol
123456789456789123789123456231564978564978231978231564312897645647315892895642317 sol
965194;12 rank to find sol
123456789456789123789123456231564978564978231978231564315892647692347815847615392 sol
965211;12 rank to find sol
123456789456789123789123456231564978564978231978231645345692817617845392892317564 sol
966995;12 rank to find sol
123456789456789123789123456231567894564938271978241635397814562645372918812695347 sol
967000;12 rank to find sol
123456789456789123789123456231567894567894231894231567312678945648915372975342618 sol
982861;12 rank to find sol
123456789456789123789123456231597648597864312864231597378945261642318975915672834 sol
982862;12 rank to find sol
123456789456789123789123456231597648597864312864231975312678594678945231945312867 sol
985782;12 rank to find sol
123456789456789123789123456231648975564972318897315642312567894645891237978234561 sol
985784;12 rank to find sol
123456789456789123789123456231648975564972318897315642312567894678294531945831267 sol
985790;12 rank to find sol
123456789456789123789123456231648975564972318897315642312597864678234591945861237 sol
987239;12 rank to find sol
123456789456789123789123456231648975597312864648975231364297518812534697975861342 sol
987242;12 rank to find sol
123456789456789123789123456231648975648975231975231648312594867567812394894367512 sol
987669;12 rank to find sol
123456789456789123789123456231678945564912378897345612312597864645831297978264531 sol
987671;12 rank to find sol
123456789456789123789123456231678945564912378897345612312597864678234591945861237 sol
987674;12 rank to find sol
123456789456789123789123456231678945564912378897345612312867594675294831948531267 sol
989443;12 rank to find sol
123456789456789123789123456231897564564312978897645312315968247672534891948271635 sol
989446;12 rank to find sol
123456789456789123789123456231897564564312978978564312315648297697235841842971635 sol
989448;12 rank to find sol
123456789456789123789123456231897564564312978978645231312978645647531892895264317 sol
989449;12 rank to find sol
123456789456789123789123456231897564567234891894561237312978645648315972975642318 sol
989450;12 rank to find sol
123456789456789123789123456231897564567234891894561237312978645675342918948615372 sol
989585;12 rank to find sol
123456789456789123789123456231897564568342971974615238312978645697534812845261397 sol
989586;12 rank to find sol
123456789456789123789123456231897564648315972975642318312978645567234891894561237 sol
989587;12 rank to find sol
123456789456789123789123456231897564648315972975642318312978645594261837867534291 sol
989617;12 rank to find sol
123456789456789123789123456231897645564231978897645312315972864642318597978564231 sol
13130428;12 rank to find sol
123456789456789123789123465231645897598372641674918532367891254842537916915264378 sol
13171907;12 rank to find sol
123456789456789123789123465231645978645897312897231546378912654564378291912564837 sol
26486110;12 rank to find sol
123456789456789123789123465291837546564291378837645912348912657615378294972564831 sol
26486255;12 rank to find sol
123456789456789123789123465291837546645291378837645291378912654564378912912564837 sol
26487990;12 rank to find sol
123456789456789123789123465291837654645291378837645291378912546564378912912564837 sol
26508997;12 rank to find sol
123456789456789123789123465297564318564831297831297654378912546615348972942675831 sol
26509030;12 rank to find sol
123456789456789123789123465297645831645831297831297546378564912564912378912378654 sol
49470293;12 rank to find sol
123456789456789123789132465218397654645821937937564218372918546591643872864275391 sol
49963161;12 rank to find sol
123456789456789123789132465218973546564218937937564218372891654645327891891645372 sol
49981895;12 rank to find sol
123456789456789123789132465218973654645218937937645218372891546564327891891564372 sol
50092122;12 rank to find sol
123456789456789123789132465231564978564978231978213546312845697697321854845697312 sol
50092136;12 rank to find sol
123456789456789123789132465231564978564978231978213546345697812697821354812345697 sol
50092138;12 rank to find sol
123456789456789123789132465231564978564978231978213546345821697697345812812697354 sol
50618297;12 rank to find sol
123456789456789123789132465231978546564213978897645312345821697672394851918567234 sol
50961365;12 rank to find sol
123456789456789123789132465234918576561273948978564231317845692695327814842691357 sol
51462225;12 rank to find sol
123456789456789123789132465261973548534218976897564312345821697618397254972645831 sol
51462233;12 rank to find sol
123456789456789123789132465261973548534218976897645312345821697672394851918567234 sol
51464793;12 rank to find sol
123456789456789123789132465264913578531278946897645312345821697672394851918567234 sol
224278398;12 rank to find sol
123456789456789123798132465219873546564291837837564291372918654681345972945627318 sol
224283561;12 rank to find sol
123456789456789123798132465219873654645291837837645291372918546581364972964527318 sol
224283653;12 rank to find sol
123456789456789123798132465231564897564897231879213546315948672682375914947621358 sol
224295966;12 rank to find sol
123456789456789123798132465231564978589371642647928531374815296865297314912643857 sol
224860181;12 rank to find sol
123456789456789123798132465234567891561894237879213546317948652682375914945621378 sol
225630968;12 rank to find sol
123456789456789123798132465261594837389267541574813692642975318835621974917348256 sol
225639340;12 rank to find sol
123456789456789123798132465264597831389214657571863294612945378835671942947328516 sol
473714580;12 rank to find sol
123456789456789123897231564231564897564897231789123456312978645648315972975642318 sol
473722279;12 rank to find sol
123456789456789123897231564231645978645897312789123645312578496568914237974362851 sol
4868086344;12 rank to find sol
123456789457189236968372514219547368586213497734698125342965871671824953895731642 sol
5404681029;12 rank to find sol
123456789457189263968327154234678591586912437791543628342861975619735842875294316 sol
5429750715;12 rank to find sol
123456789457189326689327154231645897598731642764892531375964218846213975912578463 sol
5429943660;12 rank to find sol
123456789457189326689327154296735841745891632831642597364978215578214963912563478 sol
5457833243;12 rank to find sol
123456789457189623689723451231645897745891236896237145312564978568972314974318562 sol
5457833275;12 rank to find sol
123456789457189623689723451231645897745891236896237145362578914518964372974312568 sol
5457889713;12 rank to find sol
123456789457189623689723451236897145745231896891645237314968572562374918978512364 sol
5457889721;12 rank to find sol
123456789457189623689723451236897145745231896891645237368574912514962378972318564 sol
5469017475;12 rank to find sol
123456789457189623896237514231645978689723145745891362312564897568972431974318256 sol
5469017479;12 rank to find sol
123456789457189623896237514231645978689723145745891362312568497578914236964372851 sol
5471170650;12 rank to find sol
123456789457189623986327451231645897698731245745298136364912578519874362872563914 sol
5471170651;12 rank to find sol
123456789457189623986327451231645897698732145745891236312564978574918362869273514 sol
5471349705;12 rank to find sol
123456789457189632689237145298615374531874926764392518342961857876543291915728463 sol
5472682497;12 rank to find sol
123456789457289163698137425246893571315764892879521634534978216761342958982615347 sol
5472708603;12 rank to find sol
123456789457289163896731524231564897578923416649178352384695271765312948912847635 sol
5472708611;12 rank to find sol
123456789457289163896731524231564897685973412749128356312645978568397241974812635 sol
5472708616;12 rank to find sol
123456789457289163896731524231564897685973412749128356314695278562847931978312645 sol
5472729811;12 rank to find sol
123456789457289631869713245236594817571862394984371526345927168698135472712648953 sol
5472730382;12 rank to find sol
123456789457289631896317245249635817368172594715948326531864972682791453974523168 sol
538449;18 rank to find sol
123456789456789123789123456214537968398642571675918342562394817831275694947861235 sol
732193;18 rank to find sol
123456789456789123789123456214635897598274631637918245375862914841597362962341578 sol
748349;18 rank to find sol
123456789456789123789123456214635978635897241978241635397562814541978362862314597 sol
760629;18 rank to find sol
123456789456789123789123456214637598598214637637598214341865972862971345975342861 sol
760647;18 rank to find sol
123456789456789123789123456214637598598214637637598214365842971842971365971365842 sol
900127;18 rank to find sol
123456789456789123789123456214865937865937214937214865348591672591672348672348591 sol
920839;18 rank to find sol
123456789456789123789123456214897365365214897897365214538971642642538971971642538 sol
939710;18 rank to find sol
123456789456789123789123456214937865865214937937865214348572691572691348691348572 sol
939711;18 rank to find sol
123456789456789123789123456214937865865214937937865214348591672591672348672348591 sol
939712;18 rank to find sol
123456789456789123789123456214937865865214937937865214348672591591348672672591348 sol
964559;18 rank to find sol
123456789456789123789123456231564897564897231897231564312978645648315972975642318 sol
964565;18 rank to find sol
123456789456789123789123456231564897564897231897231564315678942678942315942315678 sol
964590;18 rank to find sol
123456789456789123789123456231564897564897231978312645312645978647938512895271364 sol
965111;18 rank to find sol
123456789456789123789123456231564978564897312897231645318972564642315897975648231 sol
965112;18 rank to find sol
123456789456789123789123456231564978564897312897231645348672591672915834915348267 sol
965197;18 rank to find sol
123456789456789123789123456231564978564978231978231564317695842695842317842317695 sol
965198;18 rank to find sol
123456789456789123789123456231564978564978231978231564347692815692815347815347692 sol
966423;18 rank to find sol
123456789456789123789123456231564978645897231897312564312645897568971342974238615 sol
992746;18 rank to find sol
123456789456789123789123456234567891518942637697831245345678912861295374972314568 sol
992766;18 rank to find sol
123456789456789123789123456234567891567891234891234567318945672672318945945672318 sol
992769;18 rank to find sol
123456789456789123789123456234567891567891234891234567345678912678912345912345678 sol
992770;18 rank to find sol
123456789456789123789123456234567891567891234891234567345912678678345912912678345 sol
992773;18 rank to find sol
123456789456789123789123456234567891567891234891234567372615948615948372948372615 sol
993322;18 rank to find sol
123456789456789123789123456234567918567891342891234675315972864678345291942618537 sol
993330;18 rank to find sol
123456789456789123789123456234567918567891342891234675318975264672348591945612837 sol
993338;18 rank to find sol
123456789456789123789123456234567918567891342891234675348972561672315894915648237 sol
1000822;18 rank to find sol
123456789456789123789123456234591867591867234867234591318672945672945318945318672 sol
1000826;18 rank to find sol
123456789456789123789123456234591867591867234867234591345972618618345972972618345 sol
1005881;18 rank to find sol
123456789456789123789123456234891567518672394697345812375968241861234975942517638 sol
1005882;18 rank to find sol
123456789456789123789123456234891567567234891891567234315972648648315972972648315 sol
1006744;18 rank to find sol
123456789456789123789123456235817964817964235964235817348591672591672348672348591 sol
1006746;18 rank to find sol
123456789456789123789123456235964817817235964964817235348591672591672348672348591 sol
1006746;18 rank to find sol
123456789456789123789123456235964817817235964964817235348591672591672348672348591 sol
1006794;18 rank to find sol
123456789456789123789123456247395618395618247618247395571834962834962571962571834 sol
1007139;18 rank to find sol
123456789456789123789123456267348591591672348834915267348267915672591834915834672 sol
1007143;18 rank to find sol
123456789456789123789123456267348591834591672915267834348672915591834267672915348 sol
1007164;18 rank to find sol
123456789456789123789123456267591348591834672834267915375618294618942537942375861 sol
1007167;18 rank to find sol
123456789456789123789123456267591834348672915591834267672915348834267591915348672 sol
1007170;18 rank to find sol
123456789456789123789123456267834591348915672591267834672348915834591267915672348 sol
36488112;18 rank to find sol
123456789456789123789123564231645897598372641647918352375894216864231975912567438 sol
50807941;18 rank to find sol
123456789456789123789132465234675918567918342891243576345821697612597834978364251 sol
51441252;18 rank to find sol
123456789456789123789132465248573916537961248961248537315827694672394851894615372 sol
205811037;18 rank to find sol
123456789456789123789231564231564978564978231978123645345692817617845392892317456 sol
217152550;18 rank to find sol
123456789456789123789231645231564897564897231978123456317948562645372918892615374 sol
217155150;18 rank to find sol
123456789456789123789231645231564978564978231897123456375692814618347592942815367 sol
217157164;18 rank to find sol
123456789456789123789231645231564978598372416647918532374895261815627394962143857 sol
217222244;18 rank to find sol
123456789456789123789231645231897456564312897978645312312578964697124538845963271 sol
217223224;18 rank to find sol
123456789456789123789231645231897456598643271647125938375964812864512397912378564 sol
224860424;18 rank to find sol
123456789456789123798132465234567891567891234981324657345678912612945378879213546 sol
225619569;18 rank to find sol
123456789456789123798132465249573816537861294861294537315648972672915348984327651 sol
375141775;18 rank to find sol
123456789456789123798213654231564897549872361867931542384627915612395478975148236 sol
381099017;18 rank to find sol
123456789456789123798213654271364895364895271985172346512647938639528417847931562 sol
473714887;18 rank to find sol
123456789456789123897231564231564978564978231789312645312645897648197352975823416 sol
483274038;18 rank to find sol
123456789456789123897231645231645897645897231789312456318964572574123968962578314 sol
1010891909;18 rank to find sol
123456789456789231789123645215647398398512467674938152562391874847265913931874526 sol
1011561836;18 rank to find sol
123456789456789231789123645217364598598271463634895172342917856875632914961548327 sol
1012364857;18 rank to find sol
123456789456789231789123645231564897564897312897231456375618924618942573942375168 sol
1012364858;18 rank to find sol
123456789456789231789123645231564897564897312897231456375942168618375924942618573 sol
1012366536;18 rank to find sol
123456789456789231789123645231564978564978312897312456375691824618247593942835167 sol
1012367328;18 rank to find sol
123456789456789231789123645231564978597831462648972513375248196814695327962317854 sol
1012465996;18 rank to find sol
123456789456789231789123645234567918567891423891234567345912876678345192912678354 sol
1012644840;18 rank to find sol
123456789456789231789123645235964178697831524841572396364295817518347962972618453 sol
1012645588;18 rank to find sol
123456789456789231789123645235964817697831524841572963318295476562347198974618352 sol
1012652211;18 rank to find sol
123456789456789231789123645237561894514897362968342517372918456695234178841675923 sol
1012669826;18 rank to find sol
123456789456789231789123645238514976514697823697238514362845197845971362971362458 sol
1058086470;18 rank to find sol
123456789456789231789231564231564897564897123978123645395672418617348952842915376 sol
1058087160;18 rank to find sol
123456789456789231789231564231564978548973612697812453374125896862397145915648327 sol
1058087879;18 rank to find sol
123456789456789231789231564231564978597823416648917352374698125815342697962175843 sol
1061940350;18 rank to find sol
123456789456789231789312456231564897548973612967128543395647128612835974874291365 sol
1061946358;18 rank to find sol
123456789456789231789312456231564978598271643647938512372895164864127395915643827 sol
1062073985;18 rank to find sol
123456789456789231789312456231645978645978312978123645312597864597864123864231597 sol
1062073988;18 rank to find sol
123456789456789231789312456231645978645978312978123645364891527517264893892537164 sol
1062073989;18 rank to find sol
123456789456789231789312456231645978645978312978123645367591824592834167814267593 sol
1062134074;18 rank to find sol
123456789456789231789312456231678945675943812948125673397861524564237198812594367 sol
1062134075;18 rank to find sol
123456789456789231789312456231678945678945312945123678312597864597864123864231597 sol
1063032810;18 rank to find sol
123456789456789231789312456248673915395841627671925348537268194862194573914537862 sol
1063033867;18 rank to find sol
123456789456789231789312456275943618638175942941628375394861527517294863862537194 sol
1068733726;18 rank to find sol
123456789456789231798213645231645897589372416674891523367928154845137962912564378 sol
1076605956;18 rank to find sol
123456789456789231798213645271364958349528167865971324537142896612895473984637512 sol
4343171213;18 rank to find sol
123456789457189236869372415236745891514968372798231654341527968675894123982613547 sol
4867489505;18 rank to find sol
123456789457189236968372514215734968386921457794865123541698372632547891879213645 sol
4869114166;18 rank to find sol
123456789457189236968372514236745891514938672879621345392517468645893127781264953 sol
5429943526;18 rank to find sol
123456789457189326689327154291635847745891632836742591312564978574918263968273415 sol
5449129615;18 rank to find sol
123456789457189326869372514236745891514893672798261453372514968645928137981637245 sol
5472677636;18 rank to find sol
123456789457289163689173452235741896816392574974568231392817645568924317741635928 sol
989399;27 rank to find sol
123456789456789123789123456231897564564231897897564231315672948672948315948315672 sol
1061944620;27 rank to find sol
123456789456789231789312456231564978548973612967128543395641827672835194814297365 sol
964588;36 rank to find sol
123456789456789123789123456231564897564897231897312645318275964675948312942631578 sol
965181;36 rank to find sol
123456789456789123789123456231564978564978231978231564312697845697845312845312697 sol
966421;36 rank to find sol
123456789456789123789123456231564978597812364648397512375648291812935647964271835 sol
985542;36 rank to find sol
123456789456789123789123456231597864597864231648312975375948612864231597912675348 sol
985543;36 rank to find sol
123456789456789123789123456231597864597864231864231597312678945678945312945312678 sol
989377;36 rank to find sol
123456789456789123789123456231678945675942831948531672367815294594267318812394567 sol
989378;36 rank to find sol
123456789456789123789123456231678945678945231945231678312597864597864312864312597 sol
989403;36 rank to find sol
123456789456789123789123456231897564564231897897645312315972648642318975978564231 sol
989621;36 rank to find sol
123456789456789123789123456231897645564312897897645312315278964642931578978564231 sol
50092114;36 rank to find sol
123456789456789123789132465231564978564978231897321654345697812618245397972813546 sol
224283635;36 rank to find sol
123456789456789123798132465231564897564897231879213546312645978645978312987321654 sol
1012364856;36 rank to find sol
123456789456789231789123645231564897564897123978312456317948562645231978892675314 sol
1012366524;36 rank to find sol
123456789456789231789123645231564978564897123897231564375942816618375492942618357 sol
4869572229;36 rank to find sol
123456789457189236968372514291738465374265198685941327546813972732694851819527643 sol
5449015462;36 rank to find sol
123456789457189326869372514214965873635847192978213465342791658591638247786524931 sol
964567;54 rank to find sol
123456789456789123789123456231564897564897231897231564315972648672348915948615372 sol
964568;54 rank to find sol
123456789456789123789123456231564897564897231897231564348672915672915348915348672 sol
992760;54 rank to find sol
123456789456789123789123456234567891567891234891234567315972648678345912942618375 sol
992768;54 rank to find sol
123456789456789123789123456234567891567891234891234567318975642672348915945612378 sol
992772;54 rank to find sol
123456789456789123789123456234567891567891234891234567348915672672348915915672348 sol
1006747;54 rank to find sol
123456789456789123789123456235964817817235964964817235348672591591348672672591348 sol
1007163;54 rank to find sol
123456789456789123789123456267591348591834267834672591348267915672915834915348672 sol
1007168;54 rank to find sol
123456789456789123789123456267591834591834267834267591375618942618942375942375618 sol
473714885;54 rank to find sol
123456789456789123897231564231564978564978231789123645345617892618392457972845316 sol
1062073982;54 rank to find sol
123456789456789231789312456231645978598271643647893512375968124864127395912534867 sol
5472677656;54 rank to find sol
123456789457289163689173452235964817816735924974812635392641578568397241741528396 sol
965095;72 rank to find sol
123456789456789123789123456231564978564897312897231645312678594678945231945312867 sol
5472730538;72 rank to find sol
123456789457893612986217354274538196531964827698721435342685971715349268869172543 sol
964557;108 rank to find sol
123456789456789123789123456231564897564897231897231564312678945678945312945312678 sol
965173;108 rank to find sol
123456789456789123789123456231564978564978231897312645318297564675841392942635817 sol
5472677695;108 rank to find sol
123456789457289163689173452245968317316745928978312645564897231731524896892631574 sol
1007167;162 rank to find sol
123456789456789123789123456267591834348672915591834267672915348834267591915348672 sol
964550;648 rank to find sol
123456789456789123789123456231564897564897231897231564312645978645978312978312645 sol
end of file   

total elapsed time 3s 076ms


The second big test has been to run the file of t&e3 puzzles from "mith" (>4 million sudokus) to get a canonical morph.
This seems good regarding the virtual catalog use, but I'll report on it in the relevant thread.

After these 2 tests plus small tests here and there, the code should be safe. (a kind of beta test code)
champagne
2017 Supporter
 
Posts: 7454
Joined: 02 August 2007
Location: France Brittany


Return to Software