SmtC: Show me the Code
Ole Peter Smith
Instituto de Matemática e Estatística
Universidade Federal de Goiás
http://www.olesmith.com.br

Solution Algorithm
Existe pessoas presos na rua.
E pessoas livres na cadeia.
É uma questão de conceito.
Mahatma Gandhi.
< Eliminate | Topology | Initial >

Calculate Topology

  1. Generate Topology Matrix of Lists/Sets of 1-9.
    Python Listing: Initial.py.
    class Sudoku_Topology_Initial(
        ):
        def Topology_Initial(self):
            initial=set()
            for r in range(self.M):
                initial.add(r+1)
    
            #Starting topology
            topology=[]
            for r in range(self.M):
                topology.append([])
    
                for s in range(self.M):
                    element=self.S[r][s]
                    if (self.S[r][s]==0):
                        element=set(initial)
    
                    topology[r].append(element)
                    
            self.Topology_Eliminate(topology)
            
            return topology
    
  2. Loop over Given cells.
    Python Listing: Eliminate.py.
        def Topology_Eliminate(self,topology):
            for r in range(self.M):
                self.Topology_Eliminate_Rows(topology,r)
                        
        def Topology_Eliminate_Rows(self,topology,r):
            for s in range(self.M):
                self.Topology_Eliminate_Element(topology,r,s)
                        
                        
                        
    
    Python Listing: Eliminate.py.
    class Sudoku_Topology_Eliminate(
        ):
                    
        ##!
        ##! Eliminates elements from their shadow.
        ##!
        
        def Topology_Eliminate(self,topology):
            for r in range(self.M):
                self.Topology_Eliminate_Rows(topology,r)
                        
        def Topology_Eliminate_Rows(self,topology,r):
            for s in range(self.M):
                self.Topology_Eliminate_Element(topology,r,s)
                        
                        
                        
        def Topology_Eliminate_Element(self,topology,r,s):
            if (self.S[r][s]>0):
                self.Topology_Eliminate_Element_In_Row(topology,r,s)
                self.Topology_Eliminate_Element_In_Column(topology,r,s)
                self.Topology_Eliminate_Element_In_Box(topology,r,s)
    
            
        def Topology_Eliminate_Element_In_Row(self,topology,r,s):
            value=self.S[r][s]
            
            for s in range(self.M):
                if (self.S[r][s]==0):
                    if (value in topology[r][s]):
                        topology[r][s].remove(value)
                    
                
        def Topology_Eliminate_Element_In_Column(self,topology,r,s):
            value=self.S[r][s]
            
            for r in range(self.M):
                if (self.S[r][s]==0):
                    if (value in topology[r][s]):
                        topology[r][s].remove(value)
                    
                
        def Topology_Eliminate_Element_In_Box(self,topology,r,s):
            value=self.S[r][s]
    
            br=r//self.N
            bs=s//self.N
    
            r0=br*self.N
            s0=bs*self.N
            
            for rr in range(self.N):
                r=r0+rr
                
                for ss in range(self.N):
                    s=s0+ss
                    if (self.S[r][s]==0):
                        if (value in topology[r][s]):
                            topology[r][s].remove(value)
    
    
        def Topology_Eliminate_Element_In_Bla(self,topology,r,s):
            return
    
  3. Eliminate in Cell Shadow.
    Python Listing: Eliminate.py.
        def Topology_Eliminate_Element(self,topology,r,s):
            if (self.S[r][s]>0):
                self.Topology_Eliminate_Element_In_Row(topology,r,s)
                self.Topology_Eliminate_Element_In_Column(topology,r,s)
                self.Topology_Eliminate_Element_In_Box(topology,r,s)
    
            
    
  4. Eliminate in Cell Row.
    Python Listing: Eliminate.py.
        def Topology_Eliminate_Element_In_Row(self,topology,r,s):
            value=self.S[r][s]
            
            for s in range(self.M):
                if (self.S[r][s]==0):
                    if (value in topology[r][s]):
                        topology[r][s].remove(value)
                    
                
    
  5. Eliminate in Cell Column.
    Python Listing: Eliminate.py.
        def Topology_Eliminate_Element_In_Column(self,topology,r,s):
            value=self.S[r][s]
            
            for r in range(self.M):
                if (self.S[r][s]==0):
                    if (value in topology[r][s]):
                        topology[r][s].remove(value)
                    
                
    
  6. Eliminate in Cell Box.
    Python Listing: Eliminate.py.
        def Topology_Eliminate_Element_In_Box(self,topology,r,s):
            value=self.S[r][s]
    
            br=r//self.N
            bs=s//self.N
    
            r0=br*self.N
            s0=bs*self.N
            
            for rr in range(self.N):
                r=r0+rr
                
                for ss in range(self.N):
                    s=s0+ss
                    if (self.S[r][s]==0):
                        if (value in topology[r][s]):
                            topology[r][s].remove(value)
    
    
    
< Eliminate | Topology | Initial >
Messages:
0 secs.