Using Cellular Automata to find AIC's

Programs which generate, solve, and analyze Sudoku puzzles

Using Cellular Automata to find AIC's

Postby RSW » Thu Jan 13, 2022 5:27 am

I'm curious about how other Sudoku Solver programmers have implemented their AIC solving routines. Following is a description of what I've done.

I started programming my own Sudoku solver four years ago, and as time and ambition permit, I continue to add various solving techniques. A year ago, I added X chains and XY chains. In the process, I realized that most of the code for X chains and XY chains is identical, and I hate having to duplicate code unnecessarily. So, I abandoned the X and XY chain code, and wrote a generic AIC solver. The basic principle is, I assume, fairly standard: build a table of all strong links, and then build a chain by going through the table and finding which strong links can be joined by means of a weak link. I said "I assume" because when I started writing my solver, I avoided looking at any other solver code. I didn't want to be influenced by how others had done it. But, picking up bits and pieces of various comments made in various forums and sudoku sites, I've concluded that the chain building methods are similar, using recursive tree searching and backtracking to build the chains. This is how I initially implemented my generic AIC solver. However, I ran into problems because the table of strong links is now much larger than what it would be if I was solving only X chains or only XY chains. Processing time grows geometrically with the number of strong links. A typical puzzle, after the initial basics have been solved, can often have tens of thousands of AIC's due to the countless permutations, but the same puzzle might only have 10 or 20 X chains or XY chains. And so, I was finding that my solver was sometimes taking several minutes to generate a list of all AIC's when the number was large. Obviously, for the purpose of solving a puzzle, the solver could stop after finding the first chain, but I wanted a complete list so that I could compare different chains and look for the more interesting ones.

At this point I abandoned the recursive tree search, and adopted an algorithm that I developed several years ago when working on a platform that would not allow recursion. It was essentially a path finding algorithm using an approach that could best be described as cellular automata.

https://en.wikipedia.org/wiki/Cellular_automaton

The table of strong links is the same as before, but with additional weak link data. Every possible weak link for each strong link is also included in the table. The table is now a complete network: essentially a roadmap for getting from point A to point B. In this case A and B are the opposite ends of the AIC. We now have the map, but we still need to find the route. Instead of starting at point A and proceeding with a tree searching algorithm to see where it may lead. We pick both ends and try to have them meet somewhere in the middle. This is where the cellular automata comes into play. In cellular automata, the state of a cell in generation N is determined by its state and its neighbours' states in generation N-1. (In the classic cellular automata Game of Life by John Horton Conway, the cells are arranged on a grid and the neighbours are the cells immediately adjacent.) In the context of finding AIC's, the "cells" are the strong link entries, and the neighbours are the other strong links to which they are weakly linked.

Rather than starting with an arbitrary strong link and seeing where it leads, a target elimination is chosen. For example, suppose we wish to eliminate candidate X from cell A. To do this we need to generate an AIC where both end nodes have a candidate value of X and whose cells can see the target cell A. So, the first step is to search the strong link table to find strong links that meet these criteria. Each one that is suitable is tagged with the information that it is a "terminal node". Each of these terminal nodes is also given a unique ID number.

Now the generations begin. With each new generation, each strong link looks at its immediate neighbours to see if any of them contain a terminal ID number. If so, it knows that this neighbour has a path to the target, and therefore the current node must also be on the path to the target. So, it copies the neighbour's terminal ID and applies it to itself. In this way all terminal nodes will generate paths throughout the network, and spreading in all directions. With each generation the lengths of the partial paths increase by one link. After several generations, one of the strong link nodes may discover that two of its neighbours have paths back to the target, and also that the neighbours' terminal ID's are different. The different terminal ID's mean that the two partial paths lead to different nodes which can each see the target. Therefore, two partial paths have, as we had hoped, met in the middle, and we have a complete AIC with the desired elimination. Because all partial paths are built in parallel, it takes only N/2 generations to find all chains of length N. Furthermore, the first chain to be found is guaranteed to be the shortest one possible. There is no reason to stop after finding the first AIC. We can continue to iterate through generations to see how many different chains can be found. One reason for doing this is that different chains may give additional eliminations due to internal subchains.

Of course, this finds an AIC for only one particular elimination target at a time (except for the subchain eliminations as mentioned above). So, the process has to be repeated for each target elimination. However, the building of the strong link network only has to be done once. After one target elimination is processed, a new set of terminal nodes is generated and the generation process is repeated.

This is how I've implemented my current AIC solver, and I've found it to be considerably faster at finding all possible AIC's than the previous recursive tree searching method. So far, the types of strong links that it uses are: bivalue cells, bilocal digits, UR derived strong links, ALS derived strong links, and group X links. As time permits, and as I think of them, I'll add other strong link types. The program code of the chain solver remains the same; it's just a matter of searching for the different types of strong links during the table building part of the process.

I'm wondering if what I've done here has already been tried by others, or if this is something new.
RSW
 
Posts: 614
Joined: 01 December 2018
Location: Western Canada

Re: Using Cellular Automata to find AIC's

Postby yzfwsf » Thu Jan 13, 2022 5:48 am

At this stage I am implementing AIC using the adjacency matrix data structure plus the BFS algorithm in my solver.
yzfwsf
 
Posts: 850
Joined: 16 April 2019

Re: Using Cellular Automata to find AIC's

Postby RSW » Thu Jan 13, 2022 5:54 am

Thanks. I should mention that my earlier tree searching method was also a breadth first search. So it would find the shortest chains from a given starting node, but there was no guarantee that the starting node was the best choice.
RSW
 
Posts: 614
Joined: 01 December 2018
Location: Western Canada

Re: Using Cellular Automata to find AIC's

Postby StrmCkr » Thu Jan 13, 2022 5:55 am

Took me awhile to figure out how to successfully implement an AIC code.

I have a strong link tree builder that runs first,
I realized the week link interface wasn't needed at all and removed that.

Instead my strong tree contains data that translates how it connects to the next branch of the strong tree based on its initial type and the links it can work with.
From strong links

From there my code populates a parent -> child tree in depth first fashion
Execution for eliminations is walked down in breadth/depth first fashion.

Mine locates all AIC chains applicable at the point of initialization. And stores each chain separately
From which a User could pick the best fit from said list to view.. (my solver is designed to apply all eliminations found at the end of a search function so it will not sort for (quality/choice) )

(the strong link tree can be expanded to include als links etc but I found it easier to have separate als/ahs for different functions
And just have a multiple point option check for advance AIC building between nodes.

From the way my code executes it eliminates many palindrome sequences, and removes duplicates chains. (redundancies)
as the start path is a forward moving process the starting cell is from 80->0 so that each cell is the starting cell once and row col box links for said cell are only tried once ie I will not flipping it to weak instead of strong start this ensure the next link is. Weak check.

for example: Yzf's AIc solver for the below pattern {x-wing} finds 14 different chains
Code: Select all
.---------------------------------.---------------------------------.---------------------------------.
| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |
| 23456789   123456789  23456789  | 23456789   23456789   23456789  | 23456789   23456789   23456789  |
| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |
:---------------------------------+---------------------------------+---------------------------------:
| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |
| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |
| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |
:---------------------------------+---------------------------------+---------------------------------:
| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |
| 23456789   123456789  23456789  | 23456789   23456789   23456789  | 23456789   123456789  23456789  |
| 123456789  123456789  123456789 | 123456789  123456789  123456789 | 123456789  123456789  123456789 |
'---------------------------------'---------------------------------'---------------------------------'

mine identifies 4 { ie the 4 cells that can be the starting point}
    70 = 64 - 10 = 16
    64 = 70 - 16 = 10
    16 = 10 - 64 = 70
    10 = 16 - 70 = 64
this list might look like it can be reduced down to (1 or 2) chains but it cannot not, the difference is : left and right handed choice
16 = 10 is not the same as 10 = 16 they might look the same but in code you would need a left/right handed flip check to determine if 10 is the weak or 16 is the weak link. My code pre defines the 2nd cell as the weak interface.

I made this mistake early and only had 1 version of the code saving and found out that my code skipping hundreds of valid chains.
i originally tried a weak/strong link checking code but it added many more lines of code and resulted in a multiplier of redundant chains it found as seen in yzf's

after a bunch of trial and error testing the best solution with least amount of redundancies was to save the flip scenario in the strong link builder.
so that each strong link found created 2 cases Left -> Right and Right -> Left where the 2nd cell was the "connection" point for the next link.

point to note:
is that the strong link builder works by sectors where by it cannot create duplicates of strong links by selecting "cells" as a reference point

Strong link builder: Show
Code: Select all
Procedure links;{rebuild}
var
N,xn,q,j,a,b,c,d,e,m,n2:integer;
 output: text;
 used:numberset;
begin
setlength(Linkset,10,6,0);

for n:= 1 to 9 do
begin
q:=-1;
A:=-1;
b:=-1;
c:=-1;
D:=-1;
e:=-1;
used:=[];
 for xn:= 0 to 26 do
   begin

    {bivavle cell}
    if DigitRCB[xn,n] <> []
     then
      begin
             for J in (DigitRCB[xn,n]-used) do
        if nm[j] = 2
          then
              begin
              include(used,j);
           inc(q);         
           setlength(linkset[n][0],q+1);
         
           include(linkset[n][0][q,0],n);
           include(linkset[n][0][q,1],j);

              linkset[n][0][q,2]:=[j];
             
           for m in (pm[j]-[n]) do
            begin
              include(linkset[n][0][q,3],m);          
            linkset[n][0][q,9]:= peer[j] * digitcell[m];
            end;             

              linkset[n][0][q,4]:=cellsec[j];
              linkset[n][0][q,5]:=CellSec[j];          
          
              linkset[n][0][q,6]:=[n];
           linkset[n][0][q,7]:=[m];
              linkset[n][0][q,8]:= peer[j] * digitcell[n] ;   
       
           end;
        end;{bivavle}
      
      {bi local}       
      if (sec[xn,n] = 2 )
          then          
          for J in DigitRCB[xn,n] do
            begin
            
            inc(a);
            
             setlength(linkset[n][1],a+1);
            include(linkset[n][1][a,0],n);
             include(linkset[n][1][a,1],j);
            linkset[n][1][a,2]:= Digitrcb[xn,n] - [j];
            include(linkset[n][1][a,3],n);
            //include(linkset[n,1,a,4],xn);
             linkset[n][1][a,4]:=cellsec[j] - [xn];
            
            for m in digitRCB[xn,n] -[j] do
             linkset[n][1][a,5]:=cellsec[m]-[xn];            
                  
              linkset[n][1][a,6]:=pm[j]-[n];
             linkset[n][1][a,7]:=pm[m]-[n];
             linkset[n][1][a,8]:=peer[j]*digitcell[n] -[m];                 
             linkset[n][1][a,9]:=peer[m]*digitcell[n] -[j];
            
                end; {bilocal}
            
      { single + grouped & Grouped + single}       
      if (sec[xn,n] <5) and (Sec[xn,n] >2)
          then
            for J in DigitRCB[xn,n] do
              for m in peerRCB[xn] do
                 if  ((DigitRCB[m,n] * DigitRCB[xn,n])  + [j] = DigitRCB[xn,n] )
                     and not ( J in DigitRCB[m,n])   
                      then                
                   begin
            { single + grouped}       
                  inc(b);
            setlength(linkset[n][2],b+1);
            include(linkset[n][2,b,0],n);
             include(linkset[n][2,b,1],j);
            linkset[n][2,b,2]:= Digitrcb[xn,n] - [j];
            include(linkset[n][2,b,3],n);
            linkset[n][2,b,4]:=cellsec[j] - [xn];
            include(linkset[n][2,b,5],m);            
             linkset[n][2,b,6]:=pm[j]-[n];
             linkset[n][2,b,7]:=[0];
             linkset[n][2,b,9]:= Digitrcb[m,n]- (DigitRCB[m,n] * DigitRCB[xn,n]) ;
             linkset[n][2,b,8]:= peer[j]* digitcell[n]-(DigitRCB[m,n] * DigitRCB[xn,n]);
            
                 { grouped + single}
                  inc(c);
            setlength(linkset[n][3],c+1);
            include(linkset[n][3,c,0],n);
            linkset[n][3,c,1]:= Digitrcb[xn,n] - [j];
             include(linkset[n][3,c,2],j);            
            include(linkset[n][3,c,3],n);
            include(linkset[n][3,c,4],m);
            linkset[n][3,c,5]:= cellsec[j] - [xn] ;             
            linkset[n][3,c,6]:=[0];
            linkset[n][3,c,7]:=pm[j]-[n];
            linkset[n][3,c,9]:= peer[j] * digitcell[n]-(DigitRCB[m,n] * DigitRCB[xn,n]);
            linkset[n][3,c,8]:= DigitRCB[m,n]  -(DigitRCB[m,n] * DigitRCB[xn,n]) ;
                  end;
                  
   {Grouped + grouped}       
if (sec[xn,n] <7) and (Sec[xn,n] >4)
    then
       for J in peerrcb[xn] do
        for m in (peerrcb[xn]-[0..j]) do
        if ((DigitRCB[j,n] * DigitRCB[xn,n]) + (DigitRCB[m,n] * DigitRCB[xn,n]) = (DigitRCB[xn,n]))
           and (DigitRCB[j,n] * DigitRCB[m,n] = [] )
            then
              begin
          
               inc(d);
            setlength(linkset[n][4],d+1);
            include(linkset[n][4,d,0],n);
            linkset[n][4,d,1]:=(DigitRCB[xn,n] * Digitrcb[j,n]);
            linkset[n][4,d,2]:=(DigitRCB[xn,n] * DigitRCB[m,n]);
            include(linkset[n][4,d,3],n);
            include(linkset[n][4,d,4],J);
            include(linkset[n][4,d,5],m);            
               linkset[n][4,d,6]:=[0];   
            linkset[n][4,d,7]:=[0];
            linkset[n][4,d,9]:= DigitRCB[m,n] - (DigitRCB[xn,n] * DigitRCB[m,n]);
            linkset[n][4,d,8]:= DigitRCB[j,n] - (DigitRCB[xn,n] * DigitRCB[j,n]);
            
            inc(d);
            setlength(linkset[n][4],d+1);
            include(linkset[n][4,d,0],n);
            linkset[n][4,d,2]:=(DigitRCB[xn,n] * Digitrcb[j,n]);
            linkset[n][4,d,1]:=(DigitRCB[xn,n] * DigitRCB[m,n]);
            include(linkset[n][4,d,3],n);
            include(linkset[n][4,d,4],m);
            include(linkset[n][4,d,5],j);            
            linkset[n][4,d,6]:=[0];
            linkset[n][4,d,7]:=[0];   
               linkset[n][4,d,9]:= DigitRCB[j,n] - (DigitRCB[xn,n] * DigitRCB[j,n]);   
               linkset[n][4,d,8]:= DigitRCB[m,n] - (DigitRCB[xn,n] * DigitRCB[m,n]);         

              end;
          
if (sec[xn,n] <6) and (Sec[xn,n] >1) and (xn in [18..26])
   then
     for J in eri[xn-18,n] do
      begin
      
      inc(e);
      setlength(linkset[n][5],e+1);
      include(linkset[n][5,e,0],n);
      linkset[n][5,e,1]:=(DigitRCB[xn,n] * Digitrcb[Rx[secset[xn,j]],n]);
      linkset[n][5,e,2]:=(DigitRCB[xn,n] * DigitRCB[Cy[secset[xn,j]]+9,n]);
      include(linkset[n][5,e,3],n);
      include(linkset[n][5,e,4], rx[secset[xn,j]]);
      include(linkset[n][5,e,5],  Cy[secset[xn,j]]+9);
       linkset[n][5,e,6]:=[0];
      linkset[n][5,e,7]:=[0];
      linkset[n][5,e,8]:= DigitRCB[Rx[secset[xn,j]],n]  - (Digitrcb[xn,n] * Digitrcb[Rx[secset[xn,j]],n]);
      linkset[n][5,e,9]:= DigitRCB[Cy[secset[xn,j]]+9,n]  - (Digitrcb[xn,n] * Digitrcb[Cy[secset[xn,j]]+9,n]);
      
      inc(e);
      setlength(linkset[n][5],e+1);
      include(linkset[n][5,e,0],n);
      linkset[n][5,e,2]:=(DigitRCB[xn,n] * Digitrcb[Rx[secset[xn,j]],n]);
      linkset[n][5,e,1]:=(DigitRCB[xn,n] * DigitRCB[Cy[secset[xn,j]]+9,n]);
      include(linkset[n][5,e,3],n);
      include(linkset[n][5,e,5], rx[secset[xn,j]]);
      include(linkset[n][5,e,4],  Cy[secset[xn,j]]+9);       
       linkset[n][5,e,6]:=[0];
      linkset[n][5,e,7]:=[0];
      linkset[n][5,e,9]:= DigitRCB[Rx[secset[xn,j]],n]  - (Digitrcb[xn,n] * Digitrcb[Rx[secset[xn,j]],n]);
      linkset[n][5,e,8]:= DigitRCB[Cy[secset[xn,j]]+9,n]  - (Digitrcb[xn,n] * Digitrcb[Cy[secset[xn,j]]+9,n]);
      
      
      end;

end;
end;
{ writting txt file output to verify manually
assign(output,'C:\sudoku\combotest.txt');
erase(output);
rewrite(output);
close(output);

for n2 in [1..9] do
for xn in [0..5] do
 for J:= low(linkset[n2][xn]) to high(linkset[n2][xn]) do
 begin
   append(output);
      writeln(output);   
         write(output,'#',n2,' | ');
          write(output,'type:',xn,' | ');      
      for n:= low(linkset[n2][xn,j]) to high(linkset[n2][xn,j]) do
       begin
          for M in linkset[n2][xn,j,n] do
        write(output,m,',');
        write(output,' | ');
      end; 
      close(output);      
 end;}

end;{strong link builder}


AIC: Show
Code: Select all
{A.I.C }
procedure AIC(K:integer);
type
xsets = array of array of numberset;
steps = array of array of numberset;
used = array of numberset;
used2 = array of numberset;
hold = array of integer;
acts = array of array of integer;
acts2 = array of array of integer;
var
h:hold;
xset: xsets;
step:steps;
use: used;
use2: used2;
act: acts;
act2: acts2;
n,a,b,c,d,e,f,g,j,u,m,r,max:integer;

begin

setlength(xset,0,0);
if k = 1 then begin u:=0; setlength(techwrite,u+1,0); end;
 b:=-1;
for n in[1..9] do
 for a in [0..5] do
    for c:=  low(linkset[n][a]) to high(linkset[n][a]) do
        begin
       b:=b+1;
       setlength(xset,b+1,10);
       xset[b]:=linkset[n,a,c];      
      end;
      
//finds the arrays that are the same data points

 max:= high(xset);
 setlength(act2,0,0);
 setlength(act2,max+1);
 
for b:= 0 to max do
begin
 g:=0;
 
for e:= 0 to max do
   begin   
 
    {same digit chain with any repeating cells}
if  (xset[b][0] = xset[e][0])    {  first digit is the same }
    and (xset[b][3] = xset[e][3]) {  last digit is the same }
   and ((xset[e][1] + xset[e][2]) * (xset[b][1]+xset[b][2]) <> [])
   
        then
          begin
          setlength(act2[b],g+1);
           act2[b][g]:=e;
          g:=g+1;
         end;
   
    {catches digit changes }
if  (xset[b][0] = xset[e][0])    {  first digit is the same }      
   and (xset[b][1] * xset[e][1] <> []) {  first cell contains same cells }   
        then
          begin
          setlength(act2[b],g+1);
           act2[b][g]:=e;
          g:=g+1;
         end;       
    end;    
end;

 for a:= high(xset) downto 0 do 
     begin
   setlength(act,0,0);
   b:=0; 
   setlength(act,b+1,max+1);
   act[b][a]:=1;     
   
   for R in act2[a] do
       begin                
       act[b][R]:=1;      
      end;   
 
      
   setlength(use2,b+1);   
   use2[b]:= xset[a][2]+ xset[a][1] ; //used cells;
   setlength(h,b+1);
   h[b]:=max;   
   setlength(step,b+1,10);
   step[b]:=xset[a];
   
repeat
   for c:= h[b] downto 0 do
     if (act[b][c] <> 1) //array wasnt used befor    
    and (step[b][5]  * xset[c][4] <> [])  // sectors must shared at the link   
    and (((step[b][3] * xset[c][0] <> []) and (xset[c][1]*step[b][2] =[]))
 
   or  ( (step[b][7] * xset[c][0] = xset[c][0]) // verifies this is an exchange cell  where a & B are diffrent digits but visible to both sides of the exchange
          and (xset[c][6] * step[b][3] = step[b][3])// verifies this is an exchange cell  where a & B are diffrent digits but visible to both sides of the exchange
         and (xset[c][0] <> step[b][3]) //  the next and last are diffrent
         and (step[b][2] = xset[c][1])) )   // and they share a cell    
      then
     begin
      h[b]:=h[b] - 1;
      b:=b+1;     
      setlength(use,b+1);   
      setlength(act,b+1,max+1);
       act[b]:=act[b-1];
       act[b][c]:=1;
     
     for R in act2[c] do
       begin         
       act[b][R]:=1;      
      end;

      setlength(h,b+1);
      setlength(use2,b+1);   
       use2[b]:= use2[b-1]+xset[c][1]+xset[c][2] ;       
      h[b]:=max;

         setlength(step,b+1,10);
        step[b]:=xset[c];          

      if k = 1
        then 
           begin        
          m:=((b+1)*4);
         setlength(techwrite[u],0);
         setlength(techwrite[u],m+14);
         end;
 
{end points visible to each other same digits}    
if (b > 0) and (xset[a][0] = xset[c,3]) and (xset[c][5] * xset[a][4] = [])and (((xset[a][8]*xset[c][9]) -(use[b]+use2[b])) <> [])//normal
 then
    begin
    active:=true;
 
    for n in (xset[a][0] + xset[c,3] )  do
      begin
            covered2[n]:=covered2[n] + ((xset[a][8]*xset[c][9]) -({use[b]+}use2[b]));
        if k = 1 then
         techwrite[u,n+m+3]:=techwrite[u,n+m+3] + (digitcell[n] *((xset[a][8]*xset[c][9]) -({use[b]+}use2[b])));
       end; 

{chain loop? }
      
   end;

{end points visible to each other diffrent digits}
if (b > 0) and (xset[a][0] <> xset[c,3]) and (xset[c][5] * xset[a][4] <> [])
and ( xset[c][2] * xset[a][1] =[])//and dont use the same cells at start and end
  then
     begin   
   
active:=true;
 
      for n in xset[a][0] do
      if N in xset[C][7]  then
       begin
       covered2[n]:=covered2[n] + (xset[c][2]);
      
      if k = 1 then techwrite[u,n+m+3]:=techwrite[u,n+m+3]  + (digitcell[n]*(xset[c][2]));
      
      end;
      
      for n in xset[c][3] do
     if n in xset[a][6] then
      begin
       covered2[n]:=covered2[n] + (xset[a][1]);
      
      if k = 1 then techwrite[u,n+m+3]:=techwrite[u,n+m+3] + (digitcell[n]*(xset[a][1]));
      
       end;       
      
    end; 
 
 //end points overlap = loop   
 
if (b > 0) //bi local over lap specifically
and (((xset[a][0] <> xset[c,3]) and (xset[c][5] * xset[a][4] <> [])
and ( xset[c][2] = xset[a][1])  and (xset[c][7] * xset[a][6] <> [0]))
// bivalve intial digit is seen by the end point
or ((xset[a][0] = xset[c][3]) and (xset[c][5] * xset[a][4] <> [])
and (xset[c][2] * xset[a][1] = [])) )

 then
   begin      
   
    for e:= (0) to (b-1) do
       for d:= e+1 to (b) do
        begin
        active:=true;
       
        //overlapping weaklinks are locked                           //below verifies the the step befor can be overlaped by next digit
           if (step[e][2] * step[d][1] = step[e][2]) and (step[e][3] * step[d][6] <> [])
              then    
            for n in step[e][2]*step[d][1] do
             begin
                covered[n]:= covered[n] +( pm[n]-(step[e][3]+step[d][0]));
            
            if k = 1 then
             begin    
              for r in (pm[n]-(step[e][3]+step[d][0])) do
                   techwrite[u,r+m+3]:=techwrite[u,r+m+3]+[n];
               end;   
            end;
            
         if (step[e][1] * step[d][2] = step[e][1]) and (step[e][0] * step[d][7] <> [])
              then    
            for n in step[e][1]*step[d][2] do
                begin             
                covered[n]:= covered[n] +( pm[n]-(step[e][0]+step[d][3]));   
            
            if k = 1 then
             begin    
              for r in (pm[n]-(step[e][0]+step[d][3])) do
                   techwrite[u,r+m+3]:=techwrite[u,r+m+3]+[n];
      
            end;
         
            end;
         
//peers of weaklinks are removed if they share the same digit.          
             if step[d][0] = step[e][3]
               then
             for n in step[d][0] do
            begin
                covered2[n]:=covered2[n] + ((step[d][8] * step[e][9]) - use2[b]);
            
            if k = 1 then techwrite[u,n+m+3]:=techwrite[u,n+m+3] + (digitcell[n]*((step[d][8] * step[e][9]) - use2[b]));
            end;
          end;
 end;
 
 if (k = 1) and (techwrite[u,1+m+3]+ (techwrite[u,2+m+3])+ (techwrite[u,3+m+3] )
+ (techwrite[u,4+m+3] ) + (techwrite[u,5+m+3])+ (techwrite[u,6+m+3] )
+ (techwrite[u,7+m+3] ) + (techwrite[u,8+m+3])+ (techwrite[u,9+m+3] ) <> [])
and (b > 0)
 then 
   begin
      techwrite[u,0]:=[4];
   techwrite[u,1]:=[m];
   
for e:= 0 to b do
 begin
  techwrite[u,(e*4)+2]:=step[e,0];
  techwrite[u,(e*4)+3]:=step[e,1];
  techwrite[u,(e*4)+4]:=step[e,2];
  techwrite[u,(e*4)+5]:=step[e,3];   
end;
   

if  u = 32767 
 then
   begin
   if k = 1 then  chaindisplay(#26,u);
   
   setlength(techwrite,0,0);   
   u:=0;
   end;     
   u:=u+1;   
    setlength(techwrite,u+1);
    setlength(techwrite[u],m+14);   
 
   end; 
         {break;}   
     end
     else
      h[b]:= h[b] - 1;   
             
if (h[b] < 0) and (b > 0) {or (b >= 26)}
 then
  begin
  b:=b-1;
     
      setlength(use2,b+1);
       setlength(h,b+1);
      setlength(step,b+1,10);
      setlength(act,b+1,max+1);
     h[b]:=h[b]-1;
  end; 
 

until (h[b] = -1) or (b = 0)    
         
   end;
   if k = 1 then chaindisplay(#26,u);
end; {A.I.C}
Last edited by StrmCkr on Thu Jan 20, 2022 8:53 am, edited 22 times in total.
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

Re: Using Cellular Automata to find AIC's

Postby yzfwsf » Thu Jan 13, 2022 6:00 am

The best choice depends on how you define it, and requires a deterministic evaluation function. Only after finding all possible AICs and scoring them will the so-called best choice be found by sorting the list, so there is no way to guess where as A starting point would be the best choice.
yzfwsf
 
Posts: 850
Joined: 16 April 2019

Re: Using Cellular Automata to find AIC's

Postby P.O. » Thu Jan 13, 2022 1:50 pm

at the moment, schematically i do the following: a chain begins with a xor relation between two candidates or group of candidates: a binary relation between two terms.
at the start of the puzzle and afrer each elimination i compute a pool of 'binaries'; then the loop to build a chain begins: one of the 'binaries' is chosen and one of its terms is chosen as the start of the chain, the other as the first link, they are at depth 0 of the bfs algorithm.
a link is a term that is set, it eliminates all the candidates of the same sort that are connected to it, those eliminations can produce new links, that is to say: terms of binary relations that are set; those new links are put in the stack of next links at depth + 1 which is depth 1.
when the search is done the stack of next links becomes the stack of current links; each link is processed: first a test for elimination is done with the sart of the chain, if one is found and the puzzle is not solved the whole process begins again, if not the seach for new links begins and if found put in the stack of next links at depth + 1 which is depth 2 now.
then the next link of the current stack is processed etc.
this is the outline of the algorithm.
P.O.
 
Posts: 1364
Joined: 07 June 2021

Re: Using Cellular Automata to find AIC's

Postby StrmCkr » Thu Jan 13, 2022 9:44 pm

From your description RSW It's like you are looking to find 2 strong links starting/ending points with in the 18 peer cells of the target cell.

Then figure out if the start end chains have a tree to connect them.
(either by building links off the end points or cross checking a pre built tree)
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

Re: Using Cellular Automata to find AIC's

Postby RSW » Sun Jan 16, 2022 1:45 am

StrmCkr wrote:From your description RSW It's like you are looking to find 2 strong links starting/ending points with in the 18 peer cells of the target cell.

Then figure out if the start end chains have a tree to connect them.
(either by building links off the end points or cross checking a pre built tree)

Yes. That's essentially correct.

Here is an example using Leren's Puzzles 62
56.......48..2..9....6.15.4...1.87.675.......61..7..5...5.4216...9.6327.82...79..

After Basics:
Code: Select all
 +-----------+------------+--------------+
 | 5  6  123 | 347 389 49 | 38  1238 127 |
 | 4  8  13  | 37  2   5  | 6   9    17  |
 | 29 39 7   | 6   38  1  | 5   238  4   |
 +-----------+------------+--------------+
 | 29 39 4   | 1   5   8  | 7   23   6   |
 | 7  5  238 | 234 39  6  | 348 1238 129 |
 | 6  1  238 | 234 7   49 | 348 5    29  |
 +-----------+------------+--------------+
 | 3  7  5   | 9   4   2  | 1   6    8   |
 | 1  4  9   | 8   6   3  | 2   7    5   |
 | 8  2  6   | 5   1   7  | 9   4    3   |
 +-----------+------------+--------------+


At this point we call the chain solver, and the first thing it does is build the strong and weak link arrays

STEP 1
Building Strong Link array
Total BiLocal links: 35, Dups: 13
Total BiValue links: 14
Total UR links: 0
Total ALS links: 31
Group Links: 37
Final network contains:
Total Strong Links: 117
Total Weak Links: 1120

At this point the full interconnected strong/weak network has been built. We thus have a complete roadmap that can be used for all chains. The next step is to pick a target elimination and find suitable chain which is just a route through the map.

STEP 2
Now we work through all of the elimination targets. In this example we will target candidate 1 in cell r2c9. The routine then finds all strong links that can see this cell and has the suitable candidate. These will be the terminal nodes of the chains.

Solving for Elimination Target 1r2c9 (This part will be repeated for each candidate in the puzzle)
Terminal Links:
ID-1 SL-0 (1)r2c3=(1)r2c9
ID-2 SL-1 (1)r5c9=(1)r5c8
ID-3 SL-2 (1)r2c3=(1)r1c3
ID-4 SL-3 (1)r1c8=(1)r5c8
ID-5 *SL-17 (7)r2c9=(7)r2c4
ID-6 *SL-19 (7)r2c9=(7)r1c9
ID-7 SL-37 (1)r2c3=(3)r2c3
ID-8 SL-52 (1)r2c3=(7)r2c4
ID-9 SL-65 (1)r2c3=(9)r3c2
ID-10 SL-68 (1)r2c3=(2)r3c1
ID-11 SL-78 (1)r5c9=(3)r4c8
ID-12 SL-81 (1)r1c8=(1)r1c9
ID-13 SL-100 (1)r1c8=(1)r1c3
ID-14 SL-101 (1)r5c9=(1)r1c9


The SL-nn numbers are the ID numbers of the strong links that meet the criteria. Note that the ones with an asterisk are ones that are the actual target cell.

So for this target elimination, we have 14 terminal nodes and we use all of them in parallel, following separate paths out from all of them at the same time. When any two different ones meet, then we have a valid chain. We can stop at this point, but the program is set up to run for a fixed number of generations or maximum number of found chains, whichever occurs first. In this case it finds 6 chains before hitting the generation limit and stopping:

The following AIC's have been found:
(Number in angle brackets is length of chain, number in square brackets is the ID number of the weak link where the partial paths converged.)

<5> [678] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(1239)b1p678 => (1)b1p6=(2)b1p7
(1)r5c9==(3-2)r4c8=(2)r4c1-(2)r3c1==(1)r2c3 => -1r2c9

<7> [721] bGRP 81 1: r1c8=r12c9, ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(1)r1c8=(1)r12c9-(1)r5c9==(3)r4c8-(3)r4c2=(3)r3c2-(3=1)r2c3 => -1r1c3 -1r2c9

<8> [679] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(1)r5c9==(3)r4c8-(3)r4c2=(3-2)r4c8=(2)r4c1-(2)r3c1=(2-1)r1c3=(1)r2c3 => -1r2c9 -2r1c8

<14> [746] ALS(1239)b1p678 => (1)b1p6=(2)b1p7, bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(1)r2c3==(2)r3c1-(2)r4c1=(2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2=3)r4c8-(3)r4c2=(3)r3c2-(3=1)r2c3 => -1r1c3 -1r2c9 -2r6c3 -2r45c8

<16> [745] ALS(1239)b1p678 => (1)b1p6=(2)b1p7, bGRP 83 1: r13c8=r1c9, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(1)r2c3==(2)r3c1-(2)r4c1=(2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(9)r1c5-(9)r5c5=(9)r5c9-(9=2)r6c9-(2)r4c8=(2)r4c1-(2)r3c1=(2-1)r1c3=(1)r2c3 => -1r1c3 -1r2c9 -2r3c1 -2r6c3 -2r5c38 -2r14c8

<16> [842] ALS(239)b6p29 => (3)b6p2=(9)b6p9, bGRP 92 1: r56c4=r5c5, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(139)b1p68 => (1)b1p6=(9)b1p8
(1=3)r2c3-(3)r3c2=(3)r4c2-(3)r4c8==(9)r6c9-(9)r5c9=(9)r5c5-(3)r5c5=(3)r56c4-(3)r2c4==(1)r2c9-(1)r5c9==(3)r4c8-(3=9)r4c2-(9)r3c2==(1)r2c3 => -1r1c3 -1r2c9 -3r4c2 -3r6c7 -3r5c78 -3r13c8


If we wish to continue to find eliminations of other targets then we go back to STEP 2 and repeat, (we don't need to rebuild the strong/weak link tables of course).
For just the single chain in this example the following is the summary of possible eliminations and the run stats.
Chain elimination summary:
(In square brackets, first number is number of eliminations, second number is length of associated chain.)
[001] [005] -1r2c9
[002] [007] -1r1c3 -1r2c9
[002] [008] -1r2c9 -2r1c8
[005] [014] -1r1c3 -1r2c9 -2r6c3 -2r45c8
[008] [016] -1r1c3 -1r2c9 -2r3c1 -2r6c3 -2r5c38 -2r14c8
[008] [016] -1r1c3 -1r2c9 -3r4c2 -3r6c7 -3r5c78 -3r13c8

Run Stats:
Build strong link array: 11.21 ms
Build weak link array: 9.74 ms
Chain solve: 2.38 ms
Chain trace: 2.50 ms
Chain format: 0.83 ms
Display Update: 7.82 ms
29 Total M-chains, 6 Unique M-chains,
0 duplicate chains found & 23 duplicate eliminations found.


In the stats list, note that there is a time for chain solve and a time for chain trace. The Solve time is the time it takes to propagate paths through the network and discover a complete path. A Trace subroutine is then called to further process the chain. It traces the chain from the centre to the ends. If it determines that this chain is not a duplicate of a previously found chain, then it checks to find any additional subchain eliminations. (The subchain elimination check accounts for most of the time expended in the trace routine.) If the complete set of eliminations is unique, then the chain is saved in the chain list. If the set of eliminations is not unique, but the chain is shorter than the existing one having the same eliminations, then the new chain replaces the old one in the list. Chain format time is from another routine that takes the raw set of links and formats it into a human readable AIC format. Display update is included for comparison of relative times to do things in the program. The programming language has a fairly top heavy GUI, and it can be seen that the time to output the final text is about the same as what it takes to find the chains. From the above stats, it can be seen that the routine found a total of 29 valid chains that will give -1r2c9, but 23 of them give duplicate eliminations, and are omitted from the final list.
RSW
 
Posts: 614
Joined: 01 December 2018
Location: Western Canada

Re: Using Cellular Automata to find AIC's

Postby RSW » Sun Jan 16, 2022 1:54 am

And just for comparison. Here is a full run where the routine sequentially targets every un-eliminated candidate in the puzzle

Hidden Text: Show
Target 1r1c3
ID-1 SL-0 (1)r2c3=(1)r2c9
ID-2 SL-2 (1)r2c3=(1)r1c3
ID-3 SL-3 (1)r1c8=(1)r5c8
ID-4 *SL-8 (2)r1c3=(2)r3c1
ID-5 SL-37 (1)r2c3=(3)r2c3
ID-6 SL-52 (1)r2c3=(7)r2c4
ID-7 SL-65 (1)r2c3=(9)r3c2
ID-8 SL-68 (1)r2c3=(2)r3c1
ID-9 SL-80 (1)r1c7=(1)r2c9
ID-10 SL-81 (1)r1c8=(1)r1c9
ID-11 *SL-102 (2)r1c3=(2)r1c8
ID-12 *SL-103 (2)r1c3=(2)r5c3
Target 2r1c3
ID-1 *SL-2 (1)r1c3=(1)r2c3
ID-2 SL-4 (2)r3c1=(2)r3c8
ID-3 SL-6 (2)r3c1=(2)r4c1
ID-4 SL-8 (2)r3c1=(2)r1c3
ID-5 SL-40 (2)r3c1=(9)r3c1
ID-6 SL-55 (2)r3c1=(3)r3c2
ID-7 SL-57 (2)r3c1=(8)r3c5
ID-8 SL-66 (2)r3c1=(3)r3c2
ID-9 SL-68 (2)r3c1=(1)r2c3
ID-10 SL-82 (2)r1c7=(2)r3c8
ID-11 SL-83 (2)r1c9=(2)r1c8
ID-12 SL-84 (2)r4c3=(2)r4c1
ID-13 *SL-100 (1)r1c3=(1)r1c8
ID-14 SL-105 (2)r1c9=(2)r5c9
Target 3r1c3
ID-1 *SL-2 (1)r1c3=(1)r2c3
ID-2 *SL-8 (2)r1c3=(2)r3c1
ID-3 SL-9 (3)r2c3=(3)r2c4
ID-4 SL-11 (3)r3c2=(3)r4c2
ID-5 SL-36 (3)r1c7=(8)r1c7
ID-6 SL-37 (3)r2c3=(1)r2c3
ID-7 SL-41 (3)r3c2=(9)r3c2
ID-8 SL-53 (3)r2c3=(7)r2c9
ID-9 SL-55 (3)r3c2=(2)r3c1
ID-10 SL-66 (3)r3c2=(2)r3c1
ID-11 SL-86 (3)r3c2=(3)r1c3
ID-12 SL-88 (3)r1c7=(3)r3c8
ID-13 SL-89 (3)r1c7=(3)r1c8
ID-14 SL-90 (3)r4c3=(3)r4c2
ID-15 *SL-100 (1)r1c3=(1)r1c8
ID-16 *SL-102 (2)r1c3=(2)r1c8
ID-17 *SL-103 (2)r1c3=(2)r5c3
ID-18 SL-109 (3)r1c7=(3)r5c7
Target 3r1c4
ID-1 SL-9 (3)r2c4=(3)r2c3
ID-2 *SL-12 (4)r1c4=(4)r1c6
ID-3 *SL-16 (7)r1c4=(7)r1c9
ID-4 *SL-18 (7)r1c4=(7)r2c4
ID-5 SL-36 (3)r1c7=(8)r1c7
ID-6 SL-38 (3)r2c4=(7)r2c4
ID-7 SL-42 (3)r3c5=(8)r3c5
ID-8 SL-54 (3)r2c4=(1)r2c9
ID-9 SL-88 (3)r1c7=(3)r3c8
ID-10 SL-89 (3)r1c7=(3)r1c8
ID-11 SL-91 (3)r6c4=(3)r5c4
ID-12 SL-92 (3)r4c4=(3)r5c5
ID-13 SL-108 (3)r1c5=(3)r5c5
ID-14 SL-109 (3)r1c7=(3)r5c7
ID-15 *SL-112 (4)r1c4=(4)r5c4
Target 4r1c4
ID-1 SL-12 (4)r1c6=(4)r1c4
ID-2 SL-13 (4)r5c4=(4)r5c7
ID-3 SL-14 (4)r1c6=(4)r6c6
ID-4 *SL-16 (7)r1c4=(7)r1c9
ID-5 *SL-18 (7)r1c4=(7)r2c4
ID-6 SL-35 (4)r1c6=(9)r1c6
ID-7 SL-51 (4)r1c6=(7)r1c9
ID-8 SL-74 (4)r1c6=(7)r2c4
ID-9 SL-94 (4)r5c4=(4)r6c4
ID-10 SL-95 (4)r4c4=(4)r6c6
Target 7r1c4
ID-1 *SL-12 (4)r1c4=(4)r1c6
ID-2 SL-16 (7)r1c9=(7)r1c4
ID-3 SL-17 (7)r2c4=(7)r2c9
ID-4 SL-18 (7)r2c4=(7)r1c4
ID-5 SL-19 (7)r1c9=(7)r2c9
ID-6 SL-38 (7)r2c4=(3)r2c4
ID-7 SL-49 (7)r1c9=(9)r1c5
ID-8 SL-51 (7)r1c9=(4)r1c6
ID-9 SL-52 (7)r2c4=(1)r2c3
ID-10 SL-69 (7)r2c4=(8)r3c5
ID-11 SL-71 (7)r2c4=(9)r1c5
ID-12 SL-74 (7)r2c4=(4)r1c6
ID-13 *SL-112 (4)r1c4=(4)r5c4
Target 3r1c5
ID-1 SL-9 (3)r2c4=(3)r2c3
ID-2 *SL-23 (8)r1c5=(8)r3c5
ID-3 *SL-24 (9)r1c5=(9)r1c6
ID-4 *SL-31 (9)r1c5=(9)r5c5
ID-5 SL-36 (3)r1c7=(8)r1c7
ID-6 SL-38 (3)r2c4=(7)r2c4
ID-7 SL-42 (3)r3c5=(8)r3c5
ID-8 SL-46 (3)r5c5=(9)r5c5
ID-9 SL-54 (3)r2c4=(1)r2c9
ID-10 SL-76 (3)r5c5=(4)r6c6
ID-11 SL-88 (3)r1c7=(3)r3c8
ID-12 SL-89 (3)r1c7=(3)r1c8
ID-13 SL-92 (3)r5c5=(3)r4c4
ID-14 SL-107 (3)r1c4=(3)r5c4
ID-15 SL-108 (3)r5c5=(3)r1c5
ID-16 SL-109 (3)r1c7=(3)r5c7
ID-17 *SL-113 (8)r1c5=(8)r1c7
Target 8r1c5
ID-1 SL-20 (8)r3c5=(8)r3c8
ID-2 SL-23 (8)r3c5=(8)r1c5
ID-3 *SL-24 (9)r1c5=(9)r1c6
ID-4 *SL-31 (9)r1c5=(9)r5c5
ID-5 SL-36 (8)r1c7=(3)r1c7
ID-6 SL-42 (8)r3c5=(3)r3c5
ID-7 SL-56 (8)r3c5=(9)r3c2
ID-8 SL-57 (8)r3c5=(2)r3c1
ID-9 SL-64 (8)r3c5=(9)r5c5
ID-10 SL-69 (8)r3c5=(7)r2c4
ID-11 SL-70 (8)r3c5=(4)r1c4
ID-12 SL-73 (8)r3c5=(9)r1c6
ID-13 SL-96 (8)r1c7=(8)r3c8
ID-14 SL-97 (8)r1c7=(8)r1c8
ID-15 SL-115 (8)r1c7=(8)r5c7
Target 9r1c5
ID-1 *SL-23 (8)r1c5=(8)r3c5
ID-2 SL-24 (9)r1c6=(9)r1c5
ID-3 SL-27 (9)r5c5=(9)r5c9
ID-4 SL-31 (9)r5c5=(9)r1c5
ID-5 SL-32 (9)r1c6=(9)r6c6
ID-6 SL-34 (9)r5c5=(9)r6c6
ID-7 SL-35 (9)r1c6=(4)r1c6
ID-8 SL-46 (9)r5c5=(3)r5c5
ID-9 SL-62 (9)r5c5=(1)r5c8
ID-10 SL-64 (9)r5c5=(8)r3c5
ID-11 SL-73 (9)r1c6=(8)r3c5
ID-12 *SL-113 (8)r1c5=(8)r1c7
Target 4r1c6
ID-1 SL-12 (4)r1c4=(4)r1c6
ID-2 SL-14 (4)r6c6=(4)r1c6
ID-3 *SL-24 (9)r1c6=(9)r1c5
ID-4 *SL-32 (9)r1c6=(9)r6c6
ID-5 SL-47 (4)r6c6=(9)r6c6
ID-6 SL-50 (4)r1c4=(9)r1c5
ID-7 SL-63 (4)r6c6=(2)r6c9
ID-8 SL-70 (4)r1c4=(8)r3c5
ID-9 SL-72 (4)r1c4=(9)r1c5
ID-10 SL-76 (4)r6c6=(3)r5c5
ID-11 SL-95 (4)r6c6=(4)r4c4
ID-12 SL-112 (4)r1c4=(4)r5c4
Target 9r1c6
ID-1 *SL-12 (4)r1c6=(4)r1c4
ID-2 *SL-14 (4)r1c6=(4)r6c6
ID-3 SL-24 (9)r1c5=(9)r1c6
ID-4 SL-28 (9)r6c6=(9)r6c9
ID-5 SL-31 (9)r1c5=(9)r5c5
ID-6 SL-32 (9)r6c6=(9)r1c6
ID-7 SL-34 (9)r6c6=(9)r5c5
ID-8 SL-47 (9)r6c6=(4)r6c6
ID-9 SL-49 (9)r1c5=(7)r1c9
ID-10 SL-50 (9)r1c5=(4)r1c4
ID-11 SL-71 (9)r1c5=(7)r2c4
ID-12 SL-72 (9)r1c5=(4)r1c4
Target 3r1c7
ID-1 SL-88 (3)r3c8=(3)r1c7
ID-2 SL-93 (3)r4c7=(3)r4c8
ID-3 *SL-97 (8)r1c7=(8)r1c8
ID-4 SL-110 (3)r1c8=(3)r4c8
ID-5 *SL-115 (8)r1c7=(8)r5c7
Target 8r1c7
ID-1 SL-20 (8)r3c8=(8)r3c5
ID-2 SL-21 (8)r6c7=(8)r6c3
ID-3 SL-23 (8)r1c5=(8)r3c5
ID-4 *SL-89 (3)r1c7=(3)r1c8
ID-5 SL-96 (8)r3c8=(8)r1c7
ID-6 SL-98 (8)r6c7=(8)r5c7
ID-7 SL-99 (8)r4c7=(8)r5c8
ID-8 *SL-109 (3)r1c7=(3)r5c7
ID-9 SL-113 (8)r1c5=(8)r1c7
ID-10 SL-116 (8)r1c8=(8)r5c8
Target 1r1c8
ID-1 SL-0 (1)r2c9=(1)r2c3
ID-2 SL-1 (1)r5c8=(1)r5c9
ID-3 SL-2 (1)r1c3=(1)r2c3
ID-4 SL-3 (1)r5c8=(1)r1c8
ID-5 SL-39 (1)r2c9=(7)r2c9
ID-6 SL-54 (1)r2c9=(3)r2c4
ID-7 SL-62 (1)r5c8=(9)r5c5
ID-8 SL-79 (1)r5c8=(9)r6c9
ID-9 SL-80 (1)r2c9=(1)r1c7
ID-10 SL-100 (1)r1c3=(1)r1c8
ID-11 SL-101 (1)r1c9=(1)r5c9
Target 2r1c8
ID-1 *SL-3 (1)r1c8=(1)r5c8
ID-2 SL-4 (2)r3c8=(2)r3c1
ID-3 SL-5 (2)r4c8=(2)r4c1
ID-4 SL-8 (2)r1c3=(2)r3c1
ID-5 SL-45 (2)r4c8=(3)r4c8
ID-6 SL-58 (2)r3c8=(9)r3c2
ID-7 SL-61 (2)r4c8=(9)r4c2
ID-8 SL-67 (2)r1c3=(9)r3c2
ID-9 *SL-81 (1)r1c8=(1)r1c9
ID-10 SL-82 (2)r3c8=(2)r1c7
ID-11 SL-83 (2)r1c9=(2)r1c8
ID-12 SL-85 (2)r4c8=(2)r4c9
ID-13 SL-102 (2)r1c3=(2)r1c8
ID-14 SL-103 (2)r1c3=(2)r5c3
ID-15 SL-105 (2)r1c9=(2)r5c9
Target 3r1c8
ID-1 *SL-3 (1)r1c8=(1)r5c8
ID-2 SL-10 (3)r4c8=(3)r4c2
ID-3 SL-36 (3)r1c7=(8)r1c7
ID-4 SL-45 (3)r4c8=(2)r4c8
ID-5 SL-60 (3)r4c8=(9)r4c1
ID-6 SL-77 (3)r4c8=(9)r6c9
ID-7 SL-78 (3)r4c8=(1)r5c9
ID-8 *SL-81 (1)r1c8=(1)r1c9
ID-9 SL-88 (3)r3c8=(3)r1c7
ID-10 SL-89 (3)r1c7=(3)r1c8
ID-11 SL-93 (3)r4c8=(3)r4c7
ID-12 SL-109 (3)r1c7=(3)r5c7
Target 8r1c8
ID-1 *SL-3 (1)r1c8=(1)r5c8
ID-2 SL-20 (8)r3c8=(8)r3c5
ID-3 SL-23 (8)r1c5=(8)r3c5
ID-4 SL-36 (8)r1c7=(3)r1c7
ID-5 *SL-81 (1)r1c8=(1)r1c9
ID-6 SL-96 (8)r3c8=(8)r1c7
ID-7 SL-97 (8)r1c7=(8)r1c8
ID-8 SL-99 (8)r5c8=(8)r4c7
ID-9 SL-113 (8)r1c5=(8)r1c7
ID-10 SL-115 (8)r1c7=(8)r5c7
ID-11 SL-116 (8)r5c8=(8)r1c8
Target 1r1c9
ID-1 SL-0 (1)r2c9=(1)r2c3
ID-2 SL-1 (1)r5c9=(1)r5c8
ID-3 SL-2 (1)r1c3=(1)r2c3
ID-4 SL-3 (1)r1c8=(1)r5c8
ID-5 *SL-16 (7)r1c9=(7)r1c4
ID-6 *SL-19 (7)r1c9=(7)r2c9
ID-7 SL-39 (1)r2c9=(7)r2c9
ID-8 SL-54 (1)r2c9=(3)r2c4
ID-9 SL-78 (1)r5c9=(3)r4c8
ID-10 SL-80 (1)r2c9=(1)r1c7
ID-11 SL-81 (1)r1c8=(1)r1c9
ID-12 *SL-83 (2)r1c9=(2)r1c8
ID-13 SL-100 (1)r1c3=(1)r1c8
ID-14 SL-101 (1)r5c9=(1)r1c9
ID-15 *SL-105 (2)r1c9=(2)r5c9
Target 2r1c9
ID-1 SL-4 (2)r3c8=(2)r3c1
ID-2 SL-8 (2)r1c3=(2)r3c1
ID-3 *SL-16 (7)r1c9=(7)r1c4
ID-4 *SL-19 (7)r1c9=(7)r2c9
ID-5 SL-48 (2)r6c9=(9)r6c9
ID-6 SL-58 (2)r3c8=(9)r3c2
ID-7 SL-63 (2)r6c9=(4)r6c6
ID-8 SL-67 (2)r1c3=(9)r3c2
ID-9 SL-82 (2)r3c8=(2)r1c7
ID-10 SL-85 (2)r4c9=(2)r4c8
ID-11 SL-102 (2)r1c3=(2)r1c8
ID-12 SL-103 (2)r1c3=(2)r5c3
ID-13 SL-104 (2)r1c8=(2)r4c8
Target 7r1c9
ID-1 SL-16 (7)r1c4=(7)r1c9
ID-2 SL-17 (7)r2c9=(7)r2c4
ID-3 SL-18 (7)r1c4=(7)r2c4
ID-4 SL-19 (7)r2c9=(7)r1c9
ID-5 SL-39 (7)r2c9=(1)r2c9
ID-6 SL-53 (7)r2c9=(3)r2c3
ID-7 *SL-83 (2)r1c9=(2)r1c8
ID-8 *SL-105 (2)r1c9=(2)r5c9
Target 1r2c3
ID-1 SL-0 (1)r2c9=(1)r2c3
ID-2 SL-2 (1)r1c3=(1)r2c3
ID-3 *SL-9 (3)r2c3=(3)r2c4
ID-4 SL-39 (1)r2c9=(7)r2c9
ID-5 SL-54 (1)r2c9=(3)r2c4
ID-6 SL-80 (1)r2c9=(1)r1c7
ID-7 SL-100 (1)r1c3=(1)r1c8
Target 3r2c3
ID-1 *SL-0 (1)r2c3=(1)r2c9
ID-2 *SL-2 (1)r2c3=(1)r1c3
ID-3 SL-9 (3)r2c4=(3)r2c3
ID-4 SL-11 (3)r3c2=(3)r4c2
ID-5 SL-38 (3)r2c4=(7)r2c4
ID-6 SL-41 (3)r3c2=(9)r3c2
ID-7 SL-54 (3)r2c4=(1)r2c9
ID-8 SL-55 (3)r3c2=(2)r3c1
ID-9 SL-66 (3)r3c2=(2)r3c1
ID-10 SL-86 (3)r3c2=(3)r1c3
ID-11 SL-90 (3)r4c3=(3)r4c2
Target 3r2c4
ID-1 SL-9 (3)r2c3=(3)r2c4
ID-2 *SL-17 (7)r2c4=(7)r2c9
ID-3 *SL-18 (7)r2c4=(7)r1c4
ID-4 SL-37 (3)r2c3=(1)r2c3
ID-5 SL-42 (3)r3c5=(8)r3c5
ID-6 SL-53 (3)r2c3=(7)r2c9
ID-7 SL-91 (3)r6c4=(3)r5c4
ID-8 SL-92 (3)r4c4=(3)r5c5
ID-9 SL-108 (3)r1c5=(3)r5c5
Target 7r2c4
ID-1 *SL-9 (3)r2c4=(3)r2c3
ID-2 SL-16 (7)r1c4=(7)r1c9
ID-3 SL-17 (7)r2c9=(7)r2c4
ID-4 SL-18 (7)r1c4=(7)r2c4
ID-5 SL-19 (7)r2c9=(7)r1c9
ID-6 SL-39 (7)r2c9=(1)r2c9
ID-7 SL-53 (7)r2c9=(3)r2c3
Target 1r2c9
ID-1 SL-0 (1)r2c3=(1)r2c9
ID-2 SL-1 (1)r5c9=(1)r5c8
ID-3 SL-2 (1)r2c3=(1)r1c3
ID-4 SL-3 (1)r1c8=(1)r5c8
ID-5 *SL-17 (7)r2c9=(7)r2c4
ID-6 *SL-19 (7)r2c9=(7)r1c9
ID-7 SL-37 (1)r2c3=(3)r2c3
ID-8 SL-52 (1)r2c3=(7)r2c4
ID-9 SL-65 (1)r2c3=(9)r3c2
ID-10 SL-68 (1)r2c3=(2)r3c1
ID-11 SL-78 (1)r5c9=(3)r4c8
ID-12 SL-81 (1)r1c8=(1)r1c9
ID-13 SL-100 (1)r1c8=(1)r1c3
ID-14 SL-101 (1)r5c9=(1)r1c9
Target 7r2c9
ID-1 *SL-0 (1)r2c9=(1)r2c3
ID-2 SL-16 (7)r1c9=(7)r1c4
ID-3 SL-17 (7)r2c4=(7)r2c9
ID-4 SL-18 (7)r2c4=(7)r1c4
ID-5 SL-19 (7)r1c9=(7)r2c9
ID-6 SL-38 (7)r2c4=(3)r2c4
ID-7 SL-49 (7)r1c9=(9)r1c5
ID-8 SL-51 (7)r1c9=(4)r1c6
ID-9 SL-52 (7)r2c4=(1)r2c3
ID-10 SL-69 (7)r2c4=(8)r3c5
ID-11 SL-71 (7)r2c4=(9)r1c5
ID-12 SL-74 (7)r2c4=(4)r1c6
ID-13 *SL-80 (1)r2c9=(1)r1c7
Target 2r3c1
ID-1 SL-4 (2)r3c8=(2)r3c1
ID-2 SL-5 (2)r4c1=(2)r4c8
ID-3 SL-6 (2)r4c1=(2)r3c1
ID-4 SL-8 (2)r1c3=(2)r3c1
ID-5 *SL-25 (9)r3c1=(9)r3c2
ID-6 *SL-29 (9)r3c1=(9)r4c1
ID-7 SL-43 (2)r4c1=(9)r4c1
ID-8 SL-58 (2)r3c8=(9)r3c2
ID-9 SL-59 (2)r4c1=(3)r4c2
ID-10 SL-67 (2)r1c3=(9)r3c2
ID-11 SL-75 (2)r4c1=(3)r4c2
ID-12 SL-82 (2)r3c8=(2)r1c7
ID-13 SL-84 (2)r4c1=(2)r4c3
ID-14 SL-102 (2)r1c3=(2)r1c8
ID-15 SL-103 (2)r1c3=(2)r5c3
Target 9r3c1
ID-1 *SL-4 (2)r3c1=(2)r3c8
ID-2 *SL-6 (2)r3c1=(2)r4c1
ID-3 *SL-8 (2)r3c1=(2)r1c3
ID-4 SL-25 (9)r3c2=(9)r3c1
ID-5 SL-26 (9)r4c1=(9)r4c2
ID-6 SL-29 (9)r4c1=(9)r3c1
ID-7 SL-30 (9)r3c2=(9)r4c2
ID-8 SL-41 (9)r3c2=(3)r3c2
ID-9 SL-43 (9)r4c1=(2)r4c1
ID-10 SL-56 (9)r3c2=(8)r3c5
ID-11 SL-58 (9)r3c2=(2)r3c8
ID-12 SL-60 (9)r4c1=(3)r4c8
ID-13 SL-65 (9)r3c2=(1)r2c3
ID-14 SL-67 (9)r3c2=(2)r1c3
Target 3r3c2
ID-1 SL-9 (3)r2c3=(3)r2c4
ID-2 SL-10 (3)r4c2=(3)r4c8
ID-3 SL-11 (3)r4c2=(3)r3c2
ID-4 *SL-25 (9)r3c2=(9)r3c1
ID-5 *SL-30 (9)r3c2=(9)r4c2
ID-6 SL-37 (3)r2c3=(1)r2c3
ID-7 SL-42 (3)r3c5=(8)r3c5
ID-8 SL-44 (3)r4c2=(9)r4c2
ID-9 SL-53 (3)r2c3=(7)r2c9
ID-10 SL-59 (3)r4c2=(2)r4c1
ID-11 SL-75 (3)r4c2=(2)r4c1
ID-12 SL-88 (3)r3c8=(3)r1c7
ID-13 SL-90 (3)r4c2=(3)r4c3
ID-14 SL-106 (3)r1c3=(3)r5c3
Target 9r3c2
ID-1 *SL-11 (3)r3c2=(3)r4c2
ID-2 SL-25 (9)r3c1=(9)r3c2
ID-3 SL-26 (9)r4c2=(9)r4c1
ID-4 SL-29 (9)r3c1=(9)r4c1
ID-5 SL-30 (9)r4c2=(9)r3c2
ID-6 SL-40 (9)r3c1=(2)r3c1
ID-7 SL-44 (9)r4c2=(3)r4c2
ID-8 SL-61 (9)r4c2=(2)r4c8
ID-9 *SL-86 (3)r3c2=(3)r1c3
Target 3r3c5
ID-1 SL-9 (3)r2c4=(3)r2c3
ID-2 SL-11 (3)r3c2=(3)r4c2
ID-3 *SL-20 (8)r3c5=(8)r3c8
ID-4 *SL-23 (8)r3c5=(8)r1c5
ID-5 SL-38 (3)r2c4=(7)r2c4
ID-6 SL-41 (3)r3c2=(9)r3c2
ID-7 SL-46 (3)r5c5=(9)r5c5
ID-8 SL-54 (3)r2c4=(1)r2c9
ID-9 SL-55 (3)r3c2=(2)r3c1
ID-10 SL-66 (3)r3c2=(2)r3c1
ID-11 SL-76 (3)r5c5=(4)r6c6
ID-12 SL-86 (3)r3c2=(3)r1c3
ID-13 SL-88 (3)r3c8=(3)r1c7
ID-14 SL-92 (3)r5c5=(3)r4c4
ID-15 SL-107 (3)r1c4=(3)r5c4
ID-16 SL-108 (3)r5c5=(3)r1c5
Target 8r3c5
ID-1 SL-20 (8)r3c8=(8)r3c5
ID-2 SL-23 (8)r1c5=(8)r3c5
ID-3 SL-96 (8)r3c8=(8)r1c7
ID-4 SL-113 (8)r1c5=(8)r1c7
Target 2r3c8
ID-1 SL-4 (2)r3c1=(2)r3c8
ID-2 SL-5 (2)r4c8=(2)r4c1
ID-3 SL-6 (2)r3c1=(2)r4c1
ID-4 SL-8 (2)r3c1=(2)r1c3
ID-5 *SL-20 (8)r3c8=(8)r3c5
ID-6 SL-40 (2)r3c1=(9)r3c1
ID-7 SL-45 (2)r4c8=(3)r4c8
ID-8 SL-55 (2)r3c1=(3)r3c2
ID-9 SL-57 (2)r3c1=(8)r3c5
ID-10 SL-61 (2)r4c8=(9)r4c2
ID-11 SL-66 (2)r3c1=(3)r3c2
ID-12 SL-68 (2)r3c1=(1)r2c3
ID-13 SL-83 (2)r1c9=(2)r1c8
ID-14 SL-85 (2)r4c8=(2)r4c9
ID-15 *SL-88 (3)r3c8=(3)r1c7
ID-16 *SL-96 (8)r3c8=(8)r1c7
ID-17 SL-102 (2)r1c8=(2)r1c3
ID-18 SL-105 (2)r1c9=(2)r5c9
Target 3r3c8
ID-1 *SL-4 (2)r3c8=(2)r3c1
ID-2 SL-10 (3)r4c8=(3)r4c2
ID-3 SL-11 (3)r3c2=(3)r4c2
ID-4 *SL-20 (8)r3c8=(8)r3c5
ID-5 SL-36 (3)r1c7=(8)r1c7
ID-6 SL-41 (3)r3c2=(9)r3c2
ID-7 SL-42 (3)r3c5=(8)r3c5
ID-8 SL-45 (3)r4c8=(2)r4c8
ID-9 SL-55 (3)r3c2=(2)r3c1
ID-10 SL-60 (3)r4c8=(9)r4c1
ID-11 SL-66 (3)r3c2=(2)r3c1
ID-12 SL-77 (3)r4c8=(9)r6c9
ID-13 SL-78 (3)r4c8=(1)r5c9
ID-14 *SL-82 (2)r3c8=(2)r1c7
ID-15 SL-86 (3)r3c2=(3)r1c3
ID-16 SL-89 (3)r1c7=(3)r1c8
ID-17 SL-93 (3)r4c8=(3)r4c7
ID-18 *SL-96 (8)r3c8=(8)r1c7
ID-19 SL-109 (3)r1c7=(3)r5c7
Target 8r3c8
ID-1 *SL-4 (2)r3c8=(2)r3c1
ID-2 SL-20 (8)r3c5=(8)r3c8
ID-3 SL-23 (8)r3c5=(8)r1c5
ID-4 SL-36 (8)r1c7=(3)r1c7
ID-5 SL-42 (8)r3c5=(3)r3c5
ID-6 SL-56 (8)r3c5=(9)r3c2
ID-7 SL-57 (8)r3c5=(2)r3c1
ID-8 SL-64 (8)r3c5=(9)r5c5
ID-9 SL-69 (8)r3c5=(7)r2c4
ID-10 SL-70 (8)r3c5=(4)r1c4
ID-11 SL-73 (8)r3c5=(9)r1c6
ID-12 *SL-82 (2)r3c8=(2)r1c7
ID-13 *SL-88 (3)r3c8=(3)r1c7
ID-14 SL-97 (8)r1c7=(8)r1c8
ID-15 SL-99 (8)r5c8=(8)r4c7
ID-16 SL-113 (8)r1c7=(8)r1c5
ID-17 SL-115 (8)r1c7=(8)r5c7
ID-18 SL-116 (8)r5c8=(8)r1c8
Target 2r4c1
ID-1 SL-4 (2)r3c1=(2)r3c8
ID-2 SL-5 (2)r4c8=(2)r4c1
ID-3 SL-6 (2)r3c1=(2)r4c1
ID-4 SL-8 (2)r3c1=(2)r1c3
ID-5 *SL-26 (9)r4c1=(9)r4c2
ID-6 *SL-29 (9)r4c1=(9)r3c1
ID-7 SL-40 (2)r3c1=(9)r3c1
ID-8 SL-45 (2)r4c8=(3)r4c8
ID-9 SL-55 (2)r3c1=(3)r3c2
ID-10 SL-57 (2)r3c1=(8)r3c5
ID-11 SL-61 (2)r4c8=(9)r4c2
ID-12 SL-66 (2)r3c1=(3)r3c2
ID-13 SL-68 (2)r3c1=(1)r2c3
ID-14 SL-103 (2)r5c3=(2)r1c3
Target 9r4c1
ID-1 *SL-5 (2)r4c1=(2)r4c8
ID-2 *SL-6 (2)r4c1=(2)r3c1
ID-3 SL-25 (9)r3c1=(9)r3c2
ID-4 SL-26 (9)r4c2=(9)r4c1
ID-5 SL-29 (9)r3c1=(9)r4c1
ID-6 SL-30 (9)r4c2=(9)r3c2
ID-7 SL-40 (9)r3c1=(2)r3c1
ID-8 SL-44 (9)r4c2=(3)r4c2
ID-9 SL-61 (9)r4c2=(2)r4c8
ID-10 *SL-84 (2)r4c1=(2)r4c3
Target 3r4c2
ID-1 SL-10 (3)r4c8=(3)r4c2
ID-2 SL-11 (3)r3c2=(3)r4c2
ID-3 *SL-26 (9)r4c2=(9)r4c1
ID-4 *SL-30 (9)r4c2=(9)r3c2
ID-5 SL-41 (3)r3c2=(9)r3c2
ID-6 SL-45 (3)r4c8=(2)r4c8
ID-7 SL-55 (3)r3c2=(2)r3c1
ID-8 SL-60 (3)r4c8=(9)r4c1
ID-9 SL-66 (3)r3c2=(2)r3c1
ID-10 SL-77 (3)r4c8=(9)r6c9
ID-11 SL-78 (3)r4c8=(1)r5c9
ID-12 SL-86 (3)r3c2=(3)r1c3
ID-13 SL-106 (3)r5c3=(3)r1c3
Target 9r4c2
ID-1 *SL-10 (3)r4c2=(3)r4c8
ID-2 *SL-11 (3)r4c2=(3)r3c2
ID-3 SL-25 (9)r3c2=(9)r3c1
ID-4 SL-26 (9)r4c1=(9)r4c2
ID-5 SL-29 (9)r4c1=(9)r3c1
ID-6 SL-30 (9)r3c2=(9)r4c2
ID-7 SL-41 (9)r3c2=(3)r3c2
ID-8 SL-43 (9)r4c1=(2)r4c1
ID-9 SL-56 (9)r3c2=(8)r3c5
ID-10 SL-58 (9)r3c2=(2)r3c8
ID-11 SL-60 (9)r4c1=(3)r4c8
ID-12 SL-65 (9)r3c2=(1)r2c3
ID-13 SL-67 (9)r3c2=(2)r1c3
ID-14 *SL-90 (3)r4c2=(3)r4c3
Target 2r4c8
ID-1 SL-4 (2)r3c8=(2)r3c1
ID-2 SL-5 (2)r4c1=(2)r4c8
ID-3 SL-6 (2)r4c1=(2)r3c1
ID-4 *SL-10 (3)r4c8=(3)r4c2
ID-5 SL-43 (2)r4c1=(9)r4c1
ID-6 SL-48 (2)r6c9=(9)r6c9
ID-7 SL-58 (2)r3c8=(9)r3c2
ID-8 SL-59 (2)r4c1=(3)r4c2
ID-9 SL-63 (2)r6c9=(4)r6c6
ID-10 SL-75 (2)r4c1=(3)r4c2
ID-11 SL-82 (2)r3c8=(2)r1c7
ID-12 SL-83 (2)r1c8=(2)r1c9
ID-13 SL-84 (2)r4c1=(2)r4c3
ID-14 SL-105 (2)r5c9=(2)r1c9
Target 3r4c8
ID-1 *SL-5 (2)r4c8=(2)r4c1
ID-2 SL-10 (3)r4c2=(3)r4c8
ID-3 SL-11 (3)r4c2=(3)r3c2
ID-4 SL-44 (3)r4c2=(9)r4c2
ID-5 SL-59 (3)r4c2=(2)r4c1
ID-6 SL-75 (3)r4c2=(2)r4c1
ID-7 SL-88 (3)r3c8=(3)r1c7
ID-8 SL-89 (3)r1c8=(3)r1c7
ID-9 SL-90 (3)r4c2=(3)r4c3
ID-10 SL-109 (3)r5c7=(3)r1c7
Target 2r5c3
ID-1 SL-5 (2)r4c1=(2)r4c8
ID-2 SL-6 (2)r4c1=(2)r3c1
ID-3 SL-7 (2)r5c4=(2)r6c4
ID-4 SL-8 (2)r1c3=(2)r3c1
ID-5 *SL-22 (8)r5c3=(8)r6c3
ID-6 SL-43 (2)r4c1=(9)r4c1
ID-7 SL-59 (2)r4c1=(3)r4c2
ID-8 SL-67 (2)r1c3=(9)r3c2
ID-9 SL-75 (2)r4c1=(3)r4c2
ID-10 SL-84 (2)r4c1=(2)r4c3
ID-11 SL-102 (2)r1c3=(2)r1c8
ID-12 SL-103 (2)r1c3=(2)r5c3
ID-13 *SL-114 (8)r5c3=(8)r5c7
Target 3r5c3
ID-1 SL-9 (3)r2c3=(3)r2c4
ID-2 SL-10 (3)r4c2=(3)r4c8
ID-3 SL-11 (3)r4c2=(3)r3c2
ID-4 *SL-22 (8)r5c3=(8)r6c3
ID-5 SL-37 (3)r2c3=(1)r2c3
ID-6 SL-44 (3)r4c2=(9)r4c2
ID-7 SL-46 (3)r5c5=(9)r5c5
ID-8 SL-53 (3)r2c3=(7)r2c9
ID-9 SL-59 (3)r4c2=(2)r4c1
ID-10 SL-75 (3)r4c2=(2)r4c1
ID-11 SL-76 (3)r5c5=(4)r6c6
ID-12 SL-86 (3)r1c3=(3)r3c2
ID-13 SL-90 (3)r4c2=(3)r4c3
ID-14 SL-91 (3)r5c4=(3)r6c4
ID-15 SL-92 (3)r5c5=(3)r4c4
ID-16 SL-108 (3)r5c5=(3)r1c5
ID-17 *SL-114 (8)r5c3=(8)r5c7
Target 8r5c3
ID-1 SL-21 (8)r6c3=(8)r6c7
ID-2 SL-22 (8)r6c3=(8)r5c3
ID-3 SL-98 (8)r5c7=(8)r6c7
ID-4 SL-99 (8)r5c8=(8)r4c7
ID-5 SL-116 (8)r5c8=(8)r1c8
Target 2r5c4
ID-1 SL-7 (2)r6c4=(2)r5c4
ID-2 *SL-13 (4)r5c4=(4)r5c7
ID-3 *SL-94 (4)r5c4=(4)r6c4
Target 3r5c4
ID-1 *SL-7 (2)r5c4=(2)r6c4
ID-2 SL-9 (3)r2c4=(3)r2c3
ID-3 *SL-13 (4)r5c4=(4)r5c7
ID-4 SL-38 (3)r2c4=(7)r2c4
ID-5 SL-46 (3)r5c5=(9)r5c5
ID-6 SL-54 (3)r2c4=(1)r2c9
ID-7 SL-76 (3)r5c5=(4)r6c6
ID-8 SL-87 (3)r1c4=(3)r1c5
ID-9 SL-91 (3)r6c4=(3)r5c4
ID-10 SL-92 (3)r5c5=(3)r4c4
ID-11 *SL-94 (4)r5c4=(4)r6c4
ID-12 SL-108 (3)r5c5=(3)r1c5
Target 4r5c4
ID-1 *SL-7 (2)r5c4=(2)r6c4
ID-2 SL-12 (4)r1c4=(4)r1c6
ID-3 SL-13 (4)r5c7=(4)r5c4
ID-4 SL-14 (4)r6c6=(4)r1c6
ID-5 SL-15 (4)r5c7=(4)r6c7
ID-6 SL-47 (4)r6c6=(9)r6c6
ID-7 SL-50 (4)r1c4=(9)r1c5
ID-8 SL-63 (4)r6c6=(2)r6c9
ID-9 SL-70 (4)r1c4=(8)r3c5
ID-10 SL-72 (4)r1c4=(9)r1c5
ID-11 SL-76 (4)r6c6=(3)r5c5
ID-12 SL-95 (4)r6c6=(4)r4c4
ID-13 SL-111 (4)r6c4=(4)r6c7
ID-14 SL-112 (4)r1c4=(4)r5c4
Target 3r5c5
ID-1 *SL-27 (9)r5c5=(9)r5c9
ID-2 *SL-31 (9)r5c5=(9)r1c5
ID-3 *SL-34 (9)r5c5=(9)r6c6
ID-4 SL-42 (3)r3c5=(8)r3c5
ID-5 SL-87 (3)r1c5=(3)r1c4
ID-6 SL-91 (3)r6c4=(3)r5c4
ID-7 SL-107 (3)r5c4=(3)r1c4
Target 9r5c5
ID-1 SL-24 (9)r1c5=(9)r1c6
ID-2 SL-27 (9)r5c9=(9)r5c5
ID-3 SL-28 (9)r6c6=(9)r6c9
ID-4 SL-31 (9)r1c5=(9)r5c5
ID-5 SL-32 (9)r6c6=(9)r1c6
ID-6 SL-33 (9)r5c9=(9)r6c9
ID-7 SL-34 (9)r6c6=(9)r5c5
ID-8 SL-47 (9)r6c6=(4)r6c6
ID-9 SL-49 (9)r1c5=(7)r1c9
ID-10 SL-50 (9)r1c5=(4)r1c4
ID-11 SL-71 (9)r1c5=(7)r2c4
ID-12 SL-72 (9)r1c5=(4)r1c4
ID-13 *SL-92 (3)r5c5=(3)r4c4
ID-14 *SL-108 (3)r5c5=(3)r1c5
Target 3r5c7
ID-1 SL-10 (3)r4c8=(3)r4c2
ID-2 *SL-13 (4)r5c7=(4)r5c4
ID-3 *SL-15 (4)r5c7=(4)r6c7
ID-4 SL-36 (3)r1c7=(8)r1c7
ID-5 SL-45 (3)r4c8=(2)r4c8
ID-6 SL-46 (3)r5c5=(9)r5c5
ID-7 SL-60 (3)r4c8=(9)r4c1
ID-8 SL-76 (3)r5c5=(4)r6c6
ID-9 SL-77 (3)r4c8=(9)r6c9
ID-10 SL-78 (3)r4c8=(1)r5c9
ID-11 SL-89 (3)r1c7=(3)r1c8
ID-12 SL-91 (3)r5c4=(3)r6c4
ID-13 SL-92 (3)r5c5=(3)r4c4
ID-14 SL-108 (3)r5c5=(3)r1c5
ID-15 SL-109 (3)r1c7=(3)r5c7
ID-16 SL-110 (3)r4c8=(3)r1c8
Target 4r5c7
ID-1 SL-13 (4)r5c4=(4)r5c7
ID-2 SL-15 (4)r6c7=(4)r5c7
ID-3 SL-94 (4)r5c4=(4)r6c4
ID-4 SL-111 (4)r6c7=(4)r6c4
Target 8r5c7
ID-1 *SL-13 (4)r5c7=(4)r5c4
ID-2 *SL-15 (4)r5c7=(4)r6c7
ID-3 SL-21 (8)r6c7=(8)r6c3
ID-4 SL-22 (8)r5c3=(8)r6c3
ID-5 SL-36 (8)r1c7=(3)r1c7
ID-6 SL-97 (8)r1c7=(8)r1c8
ID-7 SL-98 (8)r6c7=(8)r5c7
ID-8 SL-99 (8)r5c8=(8)r4c7
ID-9 SL-114 (8)r5c3=(8)r5c7
ID-10 SL-115 (8)r1c7=(8)r5c7
ID-11 SL-116 (8)r5c8=(8)r1c8
Target 1r5c8
ID-1 SL-1 (1)r5c9=(1)r5c8
ID-2 SL-3 (1)r1c8=(1)r5c8
ID-3 SL-78 (1)r5c9=(3)r4c8
ID-4 SL-81 (1)r1c8=(1)r1c9
ID-5 *SL-99 (8)r5c8=(8)r4c7
ID-6 SL-101 (1)r5c9=(1)r1c9
ID-7 *SL-116 (8)r5c8=(8)r1c8
Target 2r5c8
ID-1 *SL-1 (1)r5c8=(1)r5c9
ID-2 *SL-3 (1)r5c8=(1)r1c8
ID-3 SL-4 (2)r3c8=(2)r3c1
ID-4 SL-5 (2)r4c8=(2)r4c1
ID-5 SL-7 (2)r5c4=(2)r6c4
ID-6 SL-45 (2)r4c8=(3)r4c8
ID-7 SL-48 (2)r6c9=(9)r6c9
ID-8 SL-58 (2)r3c8=(9)r3c2
ID-9 SL-61 (2)r4c8=(9)r4c2
ID-10 SL-63 (2)r6c9=(4)r6c6
ID-11 SL-82 (2)r3c8=(2)r1c7
ID-12 SL-83 (2)r1c8=(2)r1c9
ID-13 *SL-99 (8)r5c8=(8)r4c7
ID-14 SL-105 (2)r5c9=(2)r1c9
ID-15 *SL-116 (8)r5c8=(8)r1c8
Target 3r5c8
ID-1 *SL-1 (1)r5c8=(1)r5c9
ID-2 *SL-3 (1)r5c8=(1)r1c8
ID-3 SL-10 (3)r4c8=(3)r4c2
ID-4 SL-45 (3)r4c8=(2)r4c8
ID-5 SL-46 (3)r5c5=(9)r5c5
ID-6 SL-60 (3)r4c8=(9)r4c1
ID-7 SL-76 (3)r5c5=(4)r6c6
ID-8 SL-77 (3)r4c8=(9)r6c9
ID-9 SL-78 (3)r4c8=(1)r5c9
ID-10 SL-88 (3)r3c8=(3)r1c7
ID-11 SL-89 (3)r1c8=(3)r1c7
ID-12 SL-91 (3)r5c4=(3)r6c4
ID-13 SL-92 (3)r5c5=(3)r4c4
ID-14 *SL-99 (8)r5c8=(8)r4c7
ID-15 SL-108 (3)r5c5=(3)r1c5
ID-16 SL-109 (3)r5c7=(3)r1c7
ID-17 *SL-116 (8)r5c8=(8)r1c8
Target 8r5c8
ID-1 *SL-1 (1)r5c8=(1)r5c9
ID-2 *SL-3 (1)r5c8=(1)r1c8
ID-3 SL-20 (8)r3c8=(8)r3c5
ID-4 SL-21 (8)r6c7=(8)r6c3
ID-5 SL-22 (8)r5c3=(8)r6c3
ID-6 SL-96 (8)r3c8=(8)r1c7
ID-7 SL-97 (8)r1c8=(8)r1c7
ID-8 SL-98 (8)r6c7=(8)r5c7
ID-9 SL-114 (8)r5c3=(8)r5c7
ID-10 SL-115 (8)r5c7=(8)r1c7
Target 1r5c9
ID-1 SL-0 (1)r2c9=(1)r2c3
ID-2 SL-1 (1)r5c8=(1)r5c9
ID-3 SL-3 (1)r5c8=(1)r1c8
ID-4 *SL-27 (9)r5c9=(9)r5c5
ID-5 *SL-33 (9)r5c9=(9)r6c9
ID-6 SL-39 (1)r2c9=(7)r2c9
ID-7 SL-54 (1)r2c9=(3)r2c4
ID-8 SL-62 (1)r5c8=(9)r5c5
ID-9 SL-79 (1)r5c8=(9)r6c9
ID-10 SL-80 (1)r2c9=(1)r1c7
ID-11 SL-81 (1)r1c9=(1)r1c8
Target 2r5c9
ID-1 *SL-1 (1)r5c9=(1)r5c8
ID-2 SL-5 (2)r4c8=(2)r4c1
ID-3 SL-7 (2)r5c4=(2)r6c4
ID-4 *SL-27 (9)r5c9=(9)r5c5
ID-5 *SL-33 (9)r5c9=(9)r6c9
ID-6 SL-45 (2)r4c8=(3)r4c8
ID-7 SL-48 (2)r6c9=(9)r6c9
ID-8 SL-61 (2)r4c8=(9)r4c2
ID-9 SL-63 (2)r6c9=(4)r6c6
ID-10 SL-83 (2)r1c9=(2)r1c8
ID-11 *SL-101 (1)r5c9=(1)r1c9
ID-12 SL-104 (2)r4c8=(2)r1c8
ID-13 SL-105 (2)r1c9=(2)r5c9
Target 9r5c9
ID-1 *SL-1 (1)r5c9=(1)r5c8
ID-2 SL-27 (9)r5c5=(9)r5c9
ID-3 SL-28 (9)r6c9=(9)r6c6
ID-4 SL-31 (9)r5c5=(9)r1c5
ID-5 SL-33 (9)r6c9=(9)r5c9
ID-6 SL-34 (9)r5c5=(9)r6c6
ID-7 SL-46 (9)r5c5=(3)r5c5
ID-8 SL-48 (9)r6c9=(2)r6c9
ID-9 SL-62 (9)r5c5=(1)r5c8
ID-10 SL-64 (9)r5c5=(8)r3c5
ID-11 SL-77 (9)r6c9=(3)r4c8
ID-12 SL-79 (9)r6c9=(1)r5c8
ID-13 *SL-101 (1)r5c9=(1)r1c9
Target 2r6c3
ID-1 SL-5 (2)r4c1=(2)r4c8
ID-2 SL-6 (2)r4c1=(2)r3c1
ID-3 SL-7 (2)r6c4=(2)r5c4
ID-4 SL-8 (2)r1c3=(2)r3c1
ID-5 *SL-21 (8)r6c3=(8)r6c7
ID-6 *SL-22 (8)r6c3=(8)r5c3
ID-7 SL-43 (2)r4c1=(9)r4c1
ID-8 SL-48 (2)r6c9=(9)r6c9
ID-9 SL-59 (2)r4c1=(3)r4c2
ID-10 SL-63 (2)r6c9=(4)r6c6
ID-11 SL-67 (2)r1c3=(9)r3c2
ID-12 SL-75 (2)r4c1=(3)r4c2
ID-13 SL-84 (2)r4c1=(2)r4c3
ID-14 SL-102 (2)r1c3=(2)r1c8
ID-15 SL-103 (2)r1c3=(2)r5c3
Target 3r6c3
ID-1 SL-9 (3)r2c3=(3)r2c4
ID-2 SL-10 (3)r4c2=(3)r4c8
ID-3 SL-11 (3)r4c2=(3)r3c2
ID-4 *SL-21 (8)r6c3=(8)r6c7
ID-5 *SL-22 (8)r6c3=(8)r5c3
ID-6 SL-37 (3)r2c3=(1)r2c3
ID-7 SL-44 (3)r4c2=(9)r4c2
ID-8 SL-53 (3)r2c3=(7)r2c9
ID-9 SL-59 (3)r4c2=(2)r4c1
ID-10 SL-75 (3)r4c2=(2)r4c1
ID-11 SL-86 (3)r1c3=(3)r3c2
ID-12 SL-90 (3)r4c2=(3)r4c3
ID-13 SL-91 (3)r6c4=(3)r5c4
Target 8r6c3
ID-1 SL-21 (8)r6c7=(8)r6c3
ID-2 SL-22 (8)r5c3=(8)r6c3
ID-3 SL-98 (8)r6c7=(8)r5c7
ID-4 SL-114 (8)r5c3=(8)r5c7
Target 2r6c4
ID-1 SL-7 (2)r5c4=(2)r6c4
ID-2 SL-48 (2)r6c9=(9)r6c9
ID-3 SL-63 (2)r6c9=(4)r6c6
ID-4 *SL-91 (3)r6c4=(3)r5c4
Target 3r6c4
ID-1 *SL-7 (2)r6c4=(2)r5c4
ID-2 SL-9 (3)r2c4=(3)r2c3
ID-3 SL-38 (3)r2c4=(7)r2c4
ID-4 SL-46 (3)r5c5=(9)r5c5
ID-5 SL-54 (3)r2c4=(1)r2c9
ID-6 SL-76 (3)r5c5=(4)r6c6
ID-7 SL-87 (3)r1c4=(3)r1c5
ID-8 SL-92 (3)r5c5=(3)r4c4
ID-9 SL-108 (3)r5c5=(3)r1c5
Target 4r6c4
ID-1 *SL-7 (2)r6c4=(2)r5c4
ID-2 SL-12 (4)r1c4=(4)r1c6
ID-3 SL-13 (4)r5c4=(4)r5c7
ID-4 SL-14 (4)r6c6=(4)r1c6
ID-5 SL-15 (4)r6c7=(4)r5c7
ID-6 SL-47 (4)r6c6=(9)r6c6
ID-7 SL-50 (4)r1c4=(9)r1c5
ID-8 SL-63 (4)r6c6=(2)r6c9
ID-9 SL-70 (4)r1c4=(8)r3c5
ID-10 SL-72 (4)r1c4=(9)r1c5
ID-11 SL-76 (4)r6c6=(3)r5c5
ID-12 *SL-91 (3)r6c4=(3)r5c4
ID-13 SL-94 (4)r5c4=(4)r6c4
ID-14 SL-95 (4)r6c6=(4)r4c4
ID-15 SL-111 (4)r6c7=(4)r6c4
ID-16 SL-112 (4)r1c4=(4)r5c4
Target 4r6c6
ID-1 SL-12 (4)r1c6=(4)r1c4
ID-2 SL-13 (4)r5c4=(4)r5c7
ID-3 SL-14 (4)r1c6=(4)r6c6
ID-4 SL-15 (4)r6c7=(4)r5c7
ID-5 *SL-28 (9)r6c6=(9)r6c9
ID-6 *SL-32 (9)r6c6=(9)r1c6
ID-7 *SL-34 (9)r6c6=(9)r5c5
ID-8 SL-35 (4)r1c6=(9)r1c6
ID-9 SL-51 (4)r1c6=(7)r1c9
ID-10 SL-74 (4)r1c6=(7)r2c4
ID-11 SL-94 (4)r5c4=(4)r6c4
ID-12 SL-111 (4)r6c7=(4)r6c4
ID-13 SL-112 (4)r5c4=(4)r1c4
Target 9r6c6
ID-1 *SL-14 (4)r6c6=(4)r1c6
ID-2 SL-24 (9)r1c6=(9)r1c5
ID-3 SL-27 (9)r5c5=(9)r5c9
ID-4 SL-28 (9)r6c9=(9)r6c6
ID-5 SL-31 (9)r5c5=(9)r1c5
ID-6 SL-32 (9)r1c6=(9)r6c6
ID-7 SL-33 (9)r6c9=(9)r5c9
ID-8 SL-34 (9)r5c5=(9)r6c6
ID-9 SL-35 (9)r1c6=(4)r1c6
ID-10 SL-46 (9)r5c5=(3)r5c5
ID-11 SL-48 (9)r6c9=(2)r6c9
ID-12 SL-62 (9)r5c5=(1)r5c8
ID-13 SL-64 (9)r5c5=(8)r3c5
ID-14 SL-73 (9)r1c6=(8)r3c5
ID-15 SL-77 (9)r6c9=(3)r4c8
ID-16 SL-79 (9)r6c9=(1)r5c8
ID-17 *SL-95 (4)r6c6=(4)r4c4
Target 3r6c7
ID-1 SL-10 (3)r4c8=(3)r4c2
ID-2 *SL-15 (4)r6c7=(4)r5c7
ID-3 *SL-21 (8)r6c7=(8)r6c3
ID-4 SL-36 (3)r1c7=(8)r1c7
ID-5 SL-45 (3)r4c8=(2)r4c8
ID-6 SL-60 (3)r4c8=(9)r4c1
ID-7 SL-77 (3)r4c8=(9)r6c9
ID-8 SL-78 (3)r4c8=(1)r5c9
ID-9 SL-89 (3)r1c7=(3)r1c8
ID-10 SL-91 (3)r6c4=(3)r5c4
ID-11 *SL-98 (8)r6c7=(8)r5c7
ID-12 SL-109 (3)r1c7=(3)r5c7
ID-13 SL-110 (3)r4c8=(3)r1c8
ID-14 *SL-111 (4)r6c7=(4)r6c4
Target 4r6c7
ID-1 SL-13 (4)r5c7=(4)r5c4
ID-2 SL-14 (4)r6c6=(4)r1c6
ID-3 SL-15 (4)r5c7=(4)r6c7
ID-4 *SL-21 (8)r6c7=(8)r6c3
ID-5 SL-47 (4)r6c6=(9)r6c6
ID-6 SL-63 (4)r6c6=(2)r6c9
ID-7 SL-76 (4)r6c6=(3)r5c5
ID-8 SL-94 (4)r6c4=(4)r5c4
ID-9 SL-95 (4)r6c6=(4)r4c4
ID-10 *SL-98 (8)r6c7=(8)r5c7
Target 8r6c7
ID-1 *SL-15 (4)r6c7=(4)r5c7
ID-2 SL-21 (8)r6c3=(8)r6c7
ID-3 SL-22 (8)r6c3=(8)r5c3
ID-4 SL-36 (8)r1c7=(3)r1c7
ID-5 SL-97 (8)r1c7=(8)r1c8
ID-6 SL-99 (8)r5c8=(8)r4c7
ID-7 *SL-111 (4)r6c7=(4)r6c4
ID-8 SL-114 (8)r5c7=(8)r5c3
ID-9 SL-115 (8)r1c7=(8)r5c7
ID-10 SL-116 (8)r5c8=(8)r1c8
Target 2r6c9
ID-1 SL-5 (2)r4c8=(2)r4c1
ID-2 SL-7 (2)r6c4=(2)r5c4
ID-3 *SL-28 (9)r6c9=(9)r6c6
ID-4 *SL-33 (9)r6c9=(9)r5c9
ID-5 SL-45 (2)r4c8=(3)r4c8
ID-6 SL-61 (2)r4c8=(9)r4c2
ID-7 SL-83 (2)r1c9=(2)r1c8
ID-8 SL-104 (2)r4c8=(2)r1c8
ID-9 SL-105 (2)r1c9=(2)r5c9
Target 9r6c9
ID-1 SL-27 (9)r5c9=(9)r5c5
ID-2 SL-28 (9)r6c6=(9)r6c9
ID-3 SL-32 (9)r6c6=(9)r1c6
ID-4 SL-33 (9)r5c9=(9)r6c9
ID-5 SL-34 (9)r6c6=(9)r5c5
ID-6 SL-47 (9)r6c6=(4)r6c6

Reached max text limit for this post. Continued in next post.
RSW
 
Posts: 614
Joined: 01 December 2018
Location: Western Canada

Re: Using Cellular Automata to find AIC's

Postby RSW » Sun Jan 16, 2022 1:58 am

Hmm. For some reason I don't seem to be able to post the rest of the program run. So I'll just show the stats summary.

Summary for compete run:
Build strong link array: 12.82 ms
Build weak link array: 9.89 ms
Chain solve: 213.86 ms
Chain trace: 450.54 ms
Chain format: 145.18 ms
Display Update: 358.66 ms
3670 Total Chains, 258 Unique chains,
522 duplicate chains found & 2890 duplicate eliminations found.


Since I couldn't include a complete set of the found chains, here's a partial list:
Hidden Text: Show
<4> [7]
(2)r4c8=(2)r4c1-(2)r3c1=(2)r3c8 => -2r15c8

<4> [16]
(2)r1c3=(2)r3c1-(2)r4c1=(2)r4c8 => -2r1c8

<4> [677] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r4c8==(1)r5c9-(1)r5c8=(1)r1c8 => -3r1c8

<4> [566] ALS(3789)b2p248 => (7)b2p4=(9)b2p2
(3)r2c3=(3-7)r2c4==(9)r1c5-(9=3)r5c5 => -3r5c3

<4> [239]
(2)r5c4=(2)r6c4-(2=9)r6c9-(9=4)r6c6 => -4r5c4

<4> [230]
(4)r5c7=(4)r5c4-(4=9)r6c6-(9=3)r5c5 => -3r5c7

<5> [239]
(4)r5c7=(4-2)r5c4=(2)r6c4-(2=9)r6c9-(9=4)r6c6 => -4r5c4 -4r6c7

<5> [434] ALS(123489)r5c34578 => (1)r5c8=(9)r5c5, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(1)r5c8==(9)r5c5-(9)r1c5==(7)r1c9-(7=1)r2c9 => -1r1c8 -1r5c9

<5> [251] ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(9)r5c9=(9)r5c5-(9)r1c5==(7)r1c9-(7=1)r2c9 => -1r5c9

<5> [235]
(2=9)r6c9-(9)r6c6=(9-4)r1c6=(4-7)r1c4=(7)r1c9 => -2r1c9

<5> [678] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(1239)b1p678 => (1)b1p6=(2)b1p7
(1)r5c9==(3-2)r4c8=(2)r4c1-(2)r3c1==(1)r2c3 => -1r2c9

<6> [803] aGRP 88 1: r1c78=r3c8, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4
(3)r1c78=(3)r3c8-(3)r4c8==(1)r5c9-(1)r2c9==(3)r2c4 => -3r1c45

<6> [252] ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(1)r5c8=(1)r5c9-(1=7)r2c9-(7)r1c9==(9)r1c5-(9=3)r5c5 => -3r5c8

<6> [680] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(1)r2c3=(1)r2c9-(1)r5c9==(3)r4c8-(3)r4c2=(3)r3c2 => -3r2c3

<6> [683] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r3c2=(3)r4c2-(3)r4c8==(1)r5c9-(1=7)r2c9-(7=3)r2c4 => -3r2c3 -3r3c5

<6> [746] bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(2)r13c8=(2)r1c9-(7)r1c9==(4)r1c6-(4=9)r6c6-(9=2)r6c9 => -2r45c8

<7> [678] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(1)r2c3=(1)r2c9-(1)r5c9==(3-2)r4c8=(2)r4c1-(2)r3c1=(2)r1c3 => -1r1c3 -2r1c8

<7> [275] ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(2=9)r6c9-(9)r6c6=(9-4)r1c6==(7)r1c9-(7=1)r2c9-(1)r5c9=(1)r5c8 => -2r5c8

<7> [680] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(1)r2c3=(1)r2c9-(1)r5c9==(3)r4c8-(3)r4c2=(3)r3c2-(3=1)r2c3 => -1r1c3 -1r2c9

<7> [239]
(4)r5c7=(4-2)r5c4=(2)r6c4-(2=9)r6c9-(9=4)r6c6-(4)r6c7=(4)r5c7 => -4r5c4 -4r6c7 -8r5c7

<7> [683] ALS(137)r2c39 => (3)r2c3=(7)r2c9, ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(7)r2c9==(3)r2c3-(3)r3c2=(3)r4c2-(3)r4c8==(1)r5c9-(1=7)r2c9 => -7r2c4 -7r1c9

<7> [739] bGRP 83 1: r13c8=r1c9, ALS(1239)b1p678 => (1)b1p6=(2)b1p7
(2)r1c9=(2)r13c8-(2)r4c8=(2)r4c1-(2)r3c1==(1)r2c3-(1=7)r2c9 => -7r1c9

<7> [683] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r2c4=(3)r2c3-(3)r3c2=(3)r4c2-(3)r4c8==(1)r5c9-(1=7)r2c9 => -7r2c4

<8> [685] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(2)r4c1=(2-3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4==(4)r1c6-(4=9)r6c6-(9=2)r6c9 => -2r6c3 -2r4c8

<8> [159] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(2)r3c8=(2)r3c1-(2)r4c1=(2-3)r4c8==(1)r5c9-(1=7)r2c9-(7=3)r2c4-(3=8)r3c5 => -2r15c8 -8r3c8

<8> [683] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(378)b2p48 => (7)b2p4=(8)b2p8
(8=3)r3c5-(3)r3c2=(3)r4c2-(3)r4c8==(1)r5c9-(1=7)r2c9-(7)r2c4==(8)r3c5 => -8r1c5 -8r3c8

<8> [842] bGRP 92 1: r56c4=r5c5, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r5c5=(3)r56c4-(3)r2c4==(1)r2c9-(1)r5c9==(3)r4c8-(3)r4c2=(3)r3c2 => -3r2c3 -3r3c5 -3r5c78

<8> [745] bGRP 83 1: r13c8=r1c9, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(3)r3c2=(3)r4c2-(3=2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(9)r1c5-(9=3)r5c5 => -3r3c5 -3r5c78

<8> [679] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(1)r5c9==(3)r4c8-(3)r4c2=(3-2)r4c8=(2)r4c1-(2)r3c1=(2-1)r1c3=(1)r2c3 => -1r2c9 -2r1c8

<8> [613] ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(3)r2c3=(3-7)r2c4==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2=3)r4c8-(3)r4c2=(3)r3c2 => -3r1c3

<8> [746] bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(2)r4c1=(2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4)r1c6-(4=9)r6c6-(9=2)r6c9 => -2r6c3 -2r45c8

<8> [251] ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(1)r5c8=(1-9)r5c9=(9)r5c5-(9)r1c5==(7)r1c9-(7=1)r2c9-(1)r1c8=(1)r5c8 => -1r1c8 -1r5c9 -8r5c8

<8> [300] ALS(137)r2c39 => (3)r2c3=(7)r2c9, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(1)r5c8=(1)r5c9-(1)r2c9=(1-3)r2c3==(7)r2c9-(7)r1c9==(9)r1c5-(9=3)r5c5 => -3r5c38

<8> [683] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r2c4=(3)r2c3-(3)r3c2=(3)r4c2-(3)r4c8==(1)r5c9-(1=7)r2c9-(7=3)r2c4 => -3r2c3 -3r56c4 -3r1c45 -3r3c5

<8> [685] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2=3)r4c8 => -3r4c2 -3r6c7 -3r5c78 -3r13c8

<8> [686] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(239)r4c12 => (2)r4c1=(3)r4c2
(1)r2c3=(1)r2c9-(1)r5c9==(3)r4c8-(3)r4c2==(2)r4c1-(2)r3c1=(2)r1c3 => -1r1c3

<9> [686] ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(239)r4c12 => (2)r4c1=(3)r4c2
(8=3)r3c5-(3)r2c4==(1)r2c9-(1)r5c9==(3)r4c8-(3)r4c2==(2)r4c1-(2)r3c1=(2)r3c8 => -8r3c8

<9> [301] ALS(137)r2c39 => (3)r2c3=(7)r2c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(2=3)r4c8-(3)r4c2=(3)r3c2-(3)r2c3==(7)r2c9-(7)r1c9==(4)r1c6-(4=9)r6c6-(9=2)r6c9 => -2r5c89

<9> [792] aGRP 88 1: r1c78=r3c8, ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r1c78=(3)r3c8-(3)r3c2=(3)r4c2-(3)r4c8==(1)r5c9-(1)r2c9=(1-3)r2c3=(3)r2c4 => -3r2c3 -3r1c45 -3r3c5

<9> [299] ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(137)r2c39 => (3)r2c3=(7)r2c9, ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r2c4==(1-7)r2c9==(3)r2c3-(3=9)r3c2-(9=3)r4c2-(3)r4c8==(1)r5c9-(1=7)r2c9-(7=3)r2c4 => -3r2c3 -3r56c4 -3r1c45 -3r3c5 -7r2c4 -7r1c9

<9> [16] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4
(3)r2c4=(3-1)r2c3=(1-2)r1c3=(2)r3c1-(2)r4c1=(2-3)r4c8==(1)r5c9-(1)r2c9==(3)r2c4 => -1r2c9 -2r1c8 -3r2c3 -3r56c4 -3r1c45 -3r3c5

<9> [746] ALS(2389)r3c125 => (2)r3c1=(8)r3c5, bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(8)r3c5==(2)r3c1-(2)r4c1=(2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4-9)r1c6=(9)r1c5 => -8r1c5

<9> [685] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4
(3)r2c4=(3)r2c3-(3)r3c2=(3)r4c2-(3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4=(7)r2c9 => -3r2c3 -3r56c4 -3r1c45 -3r3c5 -7r2c4

<9> [678] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(1239)b1p678 => (1)b1p6=(2)b1p7
(3)r2c4=(3-1)r2c3=(1)r2c9-(1)r5c9==(3-2)r4c8=(2)r4c1-(2)r3c1==(1)r2c3-(1=7)r2c9 => -1r1c3 -1r2c9 -7r2c4

<9> [419] ALS(239)r4c28 => (2)r4c8=(9)r4c2, ALS(2389)r3c258 => (2)r3c8=(9)r3c2
(4)r5c7=(4)r5c4-(4=9)r6c6-(9=2)r6c9-(2)r4c8==(9)r4c2-(9)r3c2==(2)r3c8-(2=3)r4c8 => -2r15c8 -3r5c7

<9> [685] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4
(7=1)r2c9-(1=3)r2c3-(3=9)r3c2-(9=3)r4c2-(3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4=(7)r2c9 => -1r2c9 -3r2c3 -3r3c5 -7r2c4 -7r1c9

<9> [678] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(1239)b1p678 => (1)b1p6=(2)b1p7, ALS(137)r2c39 => (3)r2c3=(7)r2c9
(7=1)r2c9-(1)r2c3=(1)r2c9-(1)r5c9==(3-2)r4c8=(2)r4c1-(2)r3c1==(1-3)r2c3==(7)r2c9 => -1r1c3 -1r2c9 -7r2c4 -7r1c9

<9> [515] ALS(1239)b1p368 => (2)b1p3=(9)b1p8, ALS(239)r4c28 => (2)r4c8=(9)r4c2
(2)r1c3==(9)r3c2-(9)r4c2==(2)r4c8-(2=9)r6c9-(9=4)r6c6-(4)r1c6=(4-7)r1c4=(7)r1c9 => -2r1c89

<9> [419] ALS(239)r4c28 => (2)r4c8=(9)r4c2, ALS(2389)r3c258 => (2)r3c8=(9)r3c2
(7)r1c9=(7-4)r1c4=(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2)r4c8==(9)r4c2-(9)r3c2==(2)r3c8 => -2r5c8 -2r1c89

<9> [611] ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(3)r2c3=(3-7)r2c4==(4-9)r1c6=(9)r6c6-(9=2)r6c9-(2)r4c8=(2)r4c1-(2)r3c1=(2)r1c3 => -2r1c8 -3r1c3

<9> [300] ALS(137)r2c39 => (3)r2c3=(7)r2c9, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(2=3)r4c8-(3)r4c2=(3)r3c2-(3)r2c3==(7)r2c9-(7)r1c9==(9)r1c5-(9)r5c5=(9)r5c9 => -2r5c9

<9> [434] ALS(123489)r5c34578 => (1)r5c8=(9)r5c5, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(1)r5c8=(1)r5c9-(1)r5c8==(9)r5c5-(9)r1c5==(7)r1c9-(7=1)r2c9-(1)r1c8=(1)r5c8 => -1r1c8 -1r5c9 -2r5c8

<9> [238]
(4)r1c4=(4-9)r1c6=(9)r6c6-(9=2)r6c9-(2=3)r4c8-(3)r4c2=(3)r3c2-(3)r2c3=(3)r2c4 => -3r1c4

<10> [748] ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9, bGRP 83 1: r13c8=r1c9, ALS(239)r4c28 => (2)r4c8=(9)r4c2
(2)r4c1=(2)r4c8-(2=9)r6c9-(9=4)r6c6-(4)r1c6==(7)r1c9-(2)r1c9=(2)r13c8-(2)r4c8==(9)r4c2 => -2r45c8 -9r4c1

<10> [745] bGRP 83 1: r13c8=r1c9, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(3)r2c4=(3)r2c3-(3)r3c2=(3)r4c2-(3=2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(9)r1c5-(9=3)r5c5 => -3r6c4 -3r5c478 -3r13c5

<10> [687] ALS(34789)b2p2348 => (4)b2p3=(7)b2p4, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(239)r4c28 => (2)r4c8=(9)r4c2
(9=3)r4c2-(3=2)r4c8-(2=9)r6c9-(9=4)r6c6-(4)r1c6==(7-3)r2c4==(1)r2c9-(1)r5c9==(3-2)r4c8==(9)r4c2 => -3r4c2 -3r6c7 -3r5c78 -3r13c8 -9r4c1 -9r3c2

<10> [842] bGRP 92 1: r56c4=r5c5, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(389)r3c25 => (8)r3c5=(9)r3c2
(8=3)r3c5-(3)r5c5=(3)r56c4-(3)r2c4==(1)r2c9-(1)r5c9==(3)r4c8-(3=9)r4c2-(9)r3c2==(8)r3c5 => -3r5c78 -8r1c5 -8r3c8

<10> [515] ALS(1239)b1p368 => (2)b1p3=(9)b1p8, ALS(239)r4c28 => (2)r4c8=(9)r4c2
(3)r2c4=(3-1)r2c3=(1-2)r1c3==(9)r3c2-(9)r4c2==(2)r4c8-(2=9)r6c9-(9=4)r6c6-(4)r1c6=(4)r1c4 => -2r1c8 -3r1c4

<10> [678] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(1239)b1p678 => (1)b1p6=(2)b1p7, ALS(137)r2c49 => (1)r2c9=(3)r2c4
(3)r2c4=(3-1)r2c3=(1)r2c9-(1)r5c9==(3-2)r4c8=(2)r4c1-(2)r3c1==(1)r2c3-(1)r2c9==(3)r2c4 => -1r1c3 -1r2c9 -3r2c3 -3r56c4 -3r1c45 -3r3c5

<10> [11] ALS(1239)b1p678 => (1)b1p6=(2)b1p7, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4
(3)r2c4=(3-1)r2c3==(2)r3c1-(2)r4c1=(2)r3c1-(2)r4c1=(2-3)r4c8==(1)r5c9-(1)r2c9==(3)r2c4 => -1r2c9 -3r2c3 -3r56c4 -3r1c45 -3r3c5

<10> [842] bGRP 92 1: r56c4=r5c5, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(3)r5c5=(3)r56c4-(3)r2c4==(1)r2c9-(1)r5c9==(3)r4c8-(3)r4c2=(3)r3c2-(3)r2c3=(3)r2c4 => -3r2c3 -3r6c4 -3r1c45 -3r5c478 -3r3c5

<10> [289] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, aGRP 90 2: r56c3=r4c2, ALS(137)r2c39 => (3)r2c3=(7)r2c9
(3=7)r2c4-(7=1)r2c9-(1)r5c9==(3)r4c8-(3)r4c2=(3)r56c3-(3)r2c3==(7-1)r2c9=(1-3)r2c3=(3)r2c4 => -1r2c9 -3r2c3 -3r56c4 -3r1c45 -3r3c5 -7r2c4 -7r1c9

<10> [819] ALS(3789)b2p248 => (7)b2p4=(9)b2p2, aGRP 90 2: r56c3=r4c2, bGRP 83 1: r13c8=r1c9, ALS(123789)r1c35789 => (7)r1c9=(9)r1c5
(9)r1c5==(7-3)r2c4=(3)r2c3-(3)r56c3=(3)r4c2-(3=2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(9)r1c5 => -9r5c5 -9r1c6

<10> [746] bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(3=2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2=3)r4c8-(3)r4c2=(3)r4c8 => -2r4c8 -23r5c8 -3r4c2 -3r56c7 -3r13c8

<10> [687] ALS(34789)b2p2348 => (4)b2p3=(7)b2p4, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(239)r4c28 => (2)r4c8=(9)r4c2
(3=2)r4c8-(2=9)r6c9-(9=4)r6c6-(4)r1c6==(7-3)r2c4==(1)r2c9-(1)r5c9==(3-2)r4c8==(9)r4c2-(9=3)r3c2 => -3r4c2 -3r2c3 -3r3c58 -3r6c7 -3r5c78 -3r1c8

<10> [842] bGRP 92 1: r56c4=r5c5, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(2=9)r6c9-(9)r5c9=(9)r5c5-(3)r5c5=(3)r56c4-(3)r2c4==(1)r2c9-(1)r5c9==(3-2)r4c8=(2)r4c1 => -2r6c3 -2r4c8 -3r5c78

<10> [684] ALS(1239)b6p269 => (1)b6p6=(3)b6p2
(7)r1c4=(7)r1c9-(7=1)r2c9-(1)r5c9==(3)r4c8-(3=9)r4c2-(9=3)r3c2-(3)r2c3=(3-7)r2c4=(7)r1c4 => -4r1c4 -7r2c4 -7r1c9

<10> [748] ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9, bGRP 83 1: r13c8=r1c9, ALS(239)r4c28 => (2)r4c8=(9)r4c2
(3=2)r4c8-(2=9)r6c9-(9=4)r6c6-(4)r1c6==(7)r1c9-(2)r1c9=(2)r13c8-(2)r4c8==(9)r4c2-(9=3)r3c2 => -2r45c8 -3r4c2 -3r3c8

<10> [810] bGRP 89 1: r1c7=r13c8, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(3)r1c7=(3)r13c8-(3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2=3)r4c8 => -3r4c2 -3r1c458 -3r6c7 -3r5c78 -3r3c8

<10> [746] bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(3)r2c4=(3)r2c3-(3)r3c2=(3)r4c2-(3=2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4-9)r1c6=(9)r1c5 => -3r1c5

<10> [685] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(9=3)r4c2-(3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2)r4c8=(2)r4c1 => -9r4c1

<10> [657] ALS(349)b5p59 => (3)b5p5=(4)b5p9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9, ALS(137)r2c39 => (3)r2c3=(7)r2c9
(9)r5c9=(9-3)r5c5==(4)r6c6-(4)r1c6==(7)r1c9-(7)r2c9==(3)r2c3-(3)r3c2=(3)r4c2-(3=2)r4c8 => -2r5c9 -3r5c3

<10> [746] bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(2)r4c1=(2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2=3)r4c8-(3=9)r4c2 => -2r6c3 -2r45c8 -9r4c1

<10> [685] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(7)r1c4=(7-3)r2c4=(3)r2c3-(3=9)r3c2-(9=3)r4c2-(3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4==(4)r1c6 => -3r2c3 -3r56c4 -3r13c5 -34r1c4

<10> [746] bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(2)r4c1=(2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2)r6c4=(2)r5c4 => -2r6c3 -2r5c38 -2r4c8

<10> [685] ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(137)r2c49 => (1)r2c9=(3)r2c4, ALS(34789)b2p2348 => (4)b2p3=(7)b2p4
(2)r4c1=(2-3)r4c8==(1)r5c9-(1)r2c9==(3-7)r2c4==(4)r1c6-(4=9)r6c6-(9=2)r6c9-(2)r6c4=(2)r5c4 => -2r56c3 -2r4c8

<10> [837] bGRP 92 1: r56c4=r5c5
(1)r5c8=(1)r5c9-(1)r2c9=(1-3)r2c3=(3)r2c4-(3)r56c4=(3)r5c5-(9)r5c5=(9)r5c9-(9=2)r6c9 => -2r5c8 -3r5c3

<10> [826] ALS(34789)b2p2348 => (4)b2p3=(7)b2p4, aGRP 90 2: r56c3=r4c2, ALS(1239)b6p269 => (1)b6p6=(3)b6p2, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(4)r1c6==(7-3)r2c4=(3)r2c3-(3)r56c3=(3)r4c2-(3)r4c8==(1)r5c9-(1=7)r2c9-(7)r1c9==(4)r1c6 => -4r1c4 -4r6c6

<10> [772] ALS(249)r6c69 => (2)r6c9=(4)r6c6, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9, bGRP 83 1: r13c8=r1c9, aGRP 85 5: r45c8=r56c9, bGRP 83 1: r13c8=r1c9
(2)r6c9==(4)r6c6-(4)r1c6==(7)r1c9-(2)r1c9=(2)r13c8-(2)r45c8=(2)r56c9-(2)r1c9=(2)r13c8 => -2r45c8 -2r1c9

<10> [746] bGRP 83 1: r13c8=r1c9, ALS(1234789)r1c356789 => (4)r1c6=(7)r1c9
(7)r1c4=(7-3)r2c4=(3)r2c3-(3=9)r3c2-(9=3)r4c2-(3=2)r4c8-(2)r13c8=(2)r1c9-(7)r1c9==(4)r1c6 => -4r1c4
RSW
 
Posts: 614
Joined: 01 December 2018
Location: Western Canada

Re: Using Cellular Automata to find AIC's

Postby StrmCkr » Sun Jan 16, 2022 4:31 am

Here's a thought.
If each tree branch is a full length cycle that's generated
Isn It just a last value check for truth..
(so that start/finish match) x start and x-1 ends
From this you coud as do a node cnt and eliminate longer paths..

Open question:
are you using templates/ back door cells to identify what elimination cells to focus your searchs on?

just looking to find shortest paths for each elimination with maximum effect?
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

Re: Using Cellular Automata to find AIC's

Postby RSW » Sun Jan 16, 2022 7:23 am

StrmCkr wrote: Open question:
are you using templates/ back door cells to identify what elimination cells to focus your searchs on?

just looking to find shortest paths for each elimination with maximum effect?


Yes. Since this method targets specific eliminations, it makes sense to target the ones that lead to the shortest solution. For example Leren's Puzzle 62 that I used for the example has the following anti-backdoors (single elimination that gives stte):
-1r1c3, -4r1c4, -9r1c6, -7r1c9, -3r2c3, -7r2c4, -1r2c9, -2r3c1, -9r3c2, -9r4c1, -3r4c2, -2r4c8, -9r5c5, -4r6c6, -9r6c9
So, these are the first to try. If none of them produce a chain, then the remaining candidates are tried.

Regarding your first question, I didn't quite follow what you were saying. This method will find the shortest chain first, the same as a breadth first search. So, the search can be stopped as soon as the first chain is found, and it will be guaranteed to be the shortest one (for the given target elimination).

I just chose (for the time being) to let the search continue mainly for testing purposes. This allowed me to try various puzzles that have been posted in the forum and check to see if it finds the same chains posted by other members. If it doesn't find them, then I have to figure out why it doesn't. This helped in finding bugs in the logic. Once I'm completely satisfied that it works correctly, then I can have it quit after finding the first chain. There is still some development work that I need to do before I can call it complete. For example there are still a couple of types of UR and ALS strong links that are not yet included. I expect that once I add them, I'll find something else that needs to be added, and this will be a never ending process. :)

Following is a step by step explanation of how one of the chains is found by having two half paths meet in the middle. I didn't pick the shortest chain for this because it's too trivial. So this is for a longer one.

Code: Select all
We assume that the complete network of strong and weak links has already been built.

Target elimination: -1r2c9

Setup Step - Find all possible terminal strong links

ID-1   SL-0    (1)r2c3=(1)r2c9
ID-2   SL-1    (1)r5c9=(1)r5c8
ID-3   SL-2    (1)r2c3=(1)r1c3
ID-4   SL-3    (1)r1c8=(1)r5c8
ID-5  *SL-17   (7)r2c9=(7)r2c4
ID-6  *SL-19   (7)r2c9=(7)r1c9
ID-7   SL-37   (1)r2c3=(3)r2c3  //This will be one successful half path terminal node (but we don't know this yet).
ID-8   SL-52   (1)r2c3=(7)r2c4
ID-9   SL-65   (1)r2c3=(9)r3c2
ID-10  SL-68   (1)r2c3=(2)r3c1
ID-11  SL-78   (1)r5c9=(3)r4c8
ID-12  SL-81   (1)r1c8=(1)r12c9 //This will be the other successful half path terminal node.
ID-13  SL-100  (1)r1c8=(1)r1c3
ID-14  SL-101  (1)r5c9=(1)r1c9


Pass 1
 Step 1: Check all weak links in the network to see if any half paths have converged.
         None have converged so far. So no complete chain yet.
 Step 2: Extend all half paths by iterating through all of the weak links associated with the last strong
         link, and appending the weak link's other strong link. Thus the half paths branch out at the weak
         link. All half paths from 1 to 14 will have links added, but only 7 and 12 will be shown here.

(Half paths ID-1 through ID-6 are not shown since they don't lead to the shortest chain)         

ID-7   (1=3)r2c3 - (3)r3c2 = (3)r4c2 <--This is the path branch that will be successful
                 |
                 +--- another strong link branch
                 |
                 +--- another strong link branch, etc.

(Half paths ID-8 through ID-11 not shown)

ID-12  (1)r1c8 = (1)r12c9 - (1)r5c9 == (3)r4c8 <--This is the path branch that will be successful
                          |
                          +--- another strong link branch
                          |
                          +--- another strong link branch, etc.

(Half paths ID-3 and ID-14 not shown)

Pass 1 summary:
We extended half path ID-7 by adding strong link (3)r3c2 = (3)r4c2
We extended half path ID-12 by adding strong link (1)r5c9 == (3)r4c8
All other half paths were also extended by one link, but are not shown here.

Pass 2
 Step 1: This time when we check the weak links to see if any half paths have converged, we
         see that half paths 7 and 12 meet at a weak link: (3)r4c8-(3)r4c2. Therefore, we
         have a complete chain. We reverse the half path ID-12 chain, and append it to the
         half path ID-7 chain:

         (1)r1c8=(1)r12c9-(1)r5c9==(3)r4c8  -  (3)r4c2=(3)r3c2-(3=1)r2c3

Thus, we have the shortest chain that gives the -1r2c9 elimination after only two passes. We know that we have the -1r2c9 elimination by default, but there may be more. So, we trace the chain to check for other eliminations, and in doing so, we also find -1r1c3. So, we have:
(1)r1c8 = (1)r12c9 - (1)r5c9 == (3)r4c8 - (3)r4c2 = (3)r3c2 - (3=1)r2c3 => -1r1c3 -1r2c9

<<Edited to add:
In the case where no anti-backdoors exist, tracing the chain to find additional eliminations, as discussed in the previous paragraph, is justification for not terminating the search after the first chain is found. Different chains can provide different secondary eliminations which together may lead to an stte solution. So, it's worth searching for these if it doesn't have a high computing cost.
>>

So in summary, for this example we have multiple half paths propagating simultaneously from the 14 starting nodes, and ending in a chain whenever two of the half paths meet. No recursion, and no backtracking.
RSW
 
Posts: 614
Joined: 01 December 2018
Location: Western Canada

Re: Using Cellular Automata to find AIC's

Postby StrmCkr » Sun Jan 16, 2022 9:56 am

Code: Select all
Regarding your first question, I didn't quite follow what you were saying. This method will find the shortest chain first, the same as a breadth first search. So, the search can be stopped as soon as the first chain is found, and it will be guaranteed to be the shortest one (for the given target elimination).


something along the lines of this : the tree is generated in full, no eliminations generated as that adds time building is quick.

generate an array of N many aic's each having N node points. {each point is the data set for the node} forward walking only.

0) start - node - {choice 1} node - node - node - end {saved}
1) start - node - {choice 2} node - node - node - node - node - node - end {saved}
2) start - node - {choice 3} node - node - node - node - node - node - node - node - node end {saved}
start - end {terminate}

its possible to slice the array on any node.

if N sets of starting points that can also be ending points out of a list
lets say (x cell has 14 possible links to it)
S of x with F of (x-1)

shrink the list of start nodes meeting the initial requirement of 1 of (S) cells
and at the same time ensuring it also has 1 of (F) as its last cell.
then cut the list by nodel size.

repeat for the other (S-1) with (F-1) end points and save those lists

then every array left at least generates an elimination/placement at the target spot
walk the list of values to generate the extra eliminations if possible.
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

Re: Using Cellular Automata to find AIC's

Postby RSW » Mon Jan 17, 2022 7:36 am

Yes, that could be done, but I don't know how efficient it would be. It seems to me that it could end up generating a lot of very long chains that have no eliminations.

This brings up another point. What you do depends on what is considered most important. As yzfwsf said:
The best choice depends on how you define it

The algorithm, as it is now, will find all of the subchain eliminations as shorter single elimination chains, but it will find them only when targeted, which may not happen until after a previous target elimination produces a longer chain with that elimination. So, we could consider two different priorities:
1) Find a single chain that solves the puzzle, even if it's very long (but contains multiple eliminations).
2) Keep the chains as short as possible, even if it means requiring multiple chains to solve the puzzle.

As it is right now, the algorithm can be set to do either one. By saving all chains, we can sort and select them according to our priorities.
RSW
 
Posts: 614
Joined: 01 December 2018
Location: Western Canada

Re: Using Cellular Automata to find AIC's

Postby StrmCkr » Mon Jan 17, 2022 8:51 am

lot of very long chains that have no eliminations.

yeah full tables could generate a lot of overhead and actually walking it in full has many fruitless chains

mines presently like that because i wanted to know how many chains per "technique" was valid with and without eliminations for an older idea of mine for rating grids.

makes it slow but it works.....

edit: apparently not

Code: Select all
 +-----------+------------+--------------+
 | 5  6  123 | 347 389 49 | 38  1238 127 |
 | 4  8  13  | 37  2   5  | 6   9    17  |
 | 29 39 7   | 6   38  1  | 5   238  4   |
 +-----------+------------+--------------+
 | 29 39 4   | 1   5   8  | 7   23   6   |
 | 7  5  238 | 234 39  6  | 348 1238 129 |
 | 6  1  238 | 234 7   49 | 348 5    29  |
 +-----------+------------+--------------+
 | 3  7  5   | 9   4   2  | 1   6    8   |
 | 1  4  9   | 8   6   3  | 2   7    5   |
 | 8  2  6   | 5   1   7  | 9   4    3   |
 +-----------+------------+--------------+

this grid crashed my code. now to find another bug :( oh the joys...

edit edit: errors still erroring.
Last edited by StrmCkr on Fri Jan 21, 2022 3:23 am, edited 1 time in total.
Some do, some teach, the rest look it up.
stormdoku
User avatar
StrmCkr
 
Posts: 1425
Joined: 05 September 2006

Next

Return to Software

cron