Send commitlog mailing list submissions to
        commitlog@lists.openmoko.org

To subscribe or unsubscribe via the World Wide Web, visit
        http://lists.openmoko.org/mailman/listinfo/commitlog
or, via email, send a message with subject or body 'help' to
        [EMAIL PROTECTED]

You can reach the person managing the list at
        [EMAIL PROTECTED]

When replying, please edit your Subject line so it is more specific
than "Re: Contents of commitlog digest..."
Today's Topics:

   1. Openmoko's OpenEmbedded repository. This is used to build the
      Openmoko distribution: Changes to 'org.openmoko.asu.dev'
      ([EMAIL PROTECTED])
   2. Openmoko's OpenEmbedded repository. This is used to build the
      Openmoko distribution: Changes to 'org.openmoko.dev'
      ([EMAIL PROTECTED])
   3. r4519 - developers/erin_yueh/pythonEFL-sudoku/src
      ([EMAIL PROTECTED])
   4. r4520 - in developers/erin_yueh/pythonEFL-sudoku: data
      data/image        data/puzzle src/sudoku ([EMAIL PROTECTED])
--- Begin Message ---
 conf/distro/include/sane-srcrevs.inc |    2 +-
 1 files changed, 1 insertions(+), 1 deletions(-)

New commits:
commit 7074dd2dd3401a7e13b6ea4b1f8b0a5546ec5719
Author: Julian_chu <[EMAIL PROTECTED]>
Date:   Wed Jul 9 20:48:19 2008 +0800

    [assassin] Bump up the reversion of assassin to 193




--- End Message ---
--- Begin Message ---
 conf/distro/include/preferred-om-2008-versions.inc |    9 +-
 conf/distro/openmoko.conf                          |   23 +-
 .../glib-2.0-2.16.4/configure-libtool.patch        |   34 +
 packages/glib-2.0/glib-2.0_2.16.4.bb               |   11 +
 .../gtk+/gtk+-2.12.11/cellrenderer-cairo.patch     |   32 +
 packages/gtk+/gtk+-2.12.11/combo-arrow-size.patch  |   67 +
 packages/gtk+/gtk+-2.12.11/disable-print.patch     |   26 +
 packages/gtk+/gtk+-2.12.11/entry-cairo.patch       |  103 +
 packages/gtk+/gtk+-2.12.11/hardcoded_libtool.patch |   29 +
 packages/gtk+/gtk+-2.12.11/menu-deactivate.patch   |   51 +
 packages/gtk+/gtk+-2.12.11/no-demos.patch          |   10 +
 packages/gtk+/gtk+-2.12.11/pangoxft2.10.6.diff     | 2456 ++++++++++++++++++++
 packages/gtk+/gtk+-2.12.11/range-no-redraw.patch   |  127 +
 packages/gtk+/gtk+-2.12.11/run-iconcache.patch     |   19 +
 .../gtk+/gtk+-2.12.11/scrolled-placement.patch     |   22 +
 packages/gtk+/gtk+-2.12.11/toggle-font.diff        |  100 +
 packages/gtk+/gtk+_2.12.11.bb                      |   48 +
 17 files changed, 3140 insertions(+), 27 deletions(-)

New commits:
commit 1d2ffa9abf4464c9ae0d31ee1ca697aaaeb7a81c
Author: Graeme Gregory <[EMAIL PROTECTED]>
Date:   Wed Jul 9 14:50:20 2008 +0100

    [openmoko] remove all ${MACHINE_CLASS} settings, they are no longer
    wanted. Also switch back to standard gtk+ moko theme no longers uses the
    bitmaps.

commit 688e844b11f2fcca83fcefda8da82981057b30c2
Author: Graeme Gregory <[EMAIL PROTECTED]>
Date:   Wed Jul 9 13:37:24 2008 +0100

    [pref-versions] update the gtk+ version used to the latest.

commit a64fb4177283b7ed2bf13248b4d604d3831dc23b
Author: Graeme Gregory <[EMAIL PROTECTED]>
Date:   Wed Jul 9 13:35:43 2008 +0100

    [glib-2.0] add the latest version of glib

commit 2e387044089a51717756d56728b49a815f651783
Author: Graeme Gregory <[EMAIL PROTECTED]>
Date:   Wed Jul 9 13:35:09 2008 +0100

    [gtk+] add the latest version of gtk+




--- End Message ---
--- Begin Message ---
Author: erin_yueh
Date: 2008-07-09 18:13:51 +0200 (Wed, 09 Jul 2008)
New Revision: 4519

Modified:
   developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
Log:
add undo, redo functions, all functions are workable (Erin Yueh)


Modified: developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py      2008-07-09 
07:33:06 UTC (rev 4518)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku_ui.py      2008-07-09 
16:13:51 UTC (rev 4519)
@@ -4,7 +4,7 @@
 import ecore
 import edje
 import random
-import etk
+#import etk
 
 WINDOW_WIDTH = 455
 WINDOW_HEIGHT = 640
@@ -16,9 +16,9 @@
 def checkRow(row,value):
     isOK = True
     puzzle = ee.data["puzzle"]
-    print 'checkRow',row,value
+    #print 'checkRow',row,value
     for j in xrange(9):
-        print puzzle[row][j]
+        #print puzzle[row][j]
         if(value == puzzle[row][j]):
             isOK = False
     return isOK
@@ -26,9 +26,9 @@
 def checkColumn(column,value):
     isOK = True
     puzzle = ee.data["puzzle"]
-    print 'checkColumn',column,value
+    #print 'checkColumn',column,value
     for i in xrange(9):
-        print puzzle[i][column]
+        #print puzzle[i][column]
         if(value == puzzle[i][column]):
             isOK = False
     return isOK
@@ -36,11 +36,11 @@
 def checkGroup(group,value):
     isOK = True
     puzzle = ee.data["puzzle"]
-    print 'checkGroup',group,value
+    #print 'checkGroup',group,value
     (group,r,c) = GROUP_ROWCOL[str(group)]
     for i in xrange (r,r+3):
         for j in xrange(c,c+3):
-            print puzzle[i][j]
+            #print puzzle[i][j]
             if(value == puzzle[i][j]):
                 isOK = False
     return isOK
@@ -59,14 +59,13 @@
 
 def analyze(button,value):
     isOK = True
-    puzzle = ee.data["puzzle"]
-    # button40 2
+    #puzzle = ee.data["puzzle"]
     addr = button[6:]
     print addr, value
     i = int(addr) / 9
     j = int(addr) % 9
     g = (i/3)*3 + (j/3)
-    print i,j,g
+    print i,j,g,addr,value
     if(checkRow(i,value) == False or checkColumn(j,value) == False or 
checkGroup(g,value) == False):
         return False
 
@@ -75,27 +74,33 @@
 def number_key_cb(zoom_in, emission, source):
     print 'number_key_cb emission,source:',emission,source
     
-    if(source == 'clear'):
-        puzzle_clone = ee.data["puzzle_clone"]
-        puzzle = ee.data["puzzle"]
-        for i in xrange (9):
-            for j in xrange(9):
-                value = puzzle_clone[i][j]
-                
-                print 'i,j,value,puzzle[i][j]',i,j,value,puzzle[i][j]
-                puzzle[i][j] = value
-                addr = j + i *9
-                text_data = "button" + str(addr)
-                text = ee.data[text_data] 
-                text.data["value"] = value
-                text.text_set(str(value))
-                if(value>0):
-                    text.color_set(10,10,10,200)
-                elif(value==0):
-                    text.color_set(0,255,255,255)
+    if(source == 'clear' or source == 'create'):
+        # init undo redo action track
         ee.data["undo_counter"] = 0
+        ee.data["redo_counter"] = 0
         ee.data["undo_track"] = []
-        print 'clear all data!!'
+        ee.data["redo_track"] = []
+        ee.data["clicking"] = None
+        if(source == 'clear'):
+            puzzle_clone = ee.data["puzzle_clone"]
+            puzzle = ee.data["puzzle"]
+            for i in xrange (9):
+                for j in xrange(9):
+                    value = puzzle_clone[i][j]
+                    #print 
'i,j,value,puzzle[i][j]',i,j,value,puzzle_clone[i][j]
+                    puzzle[i][j] = value
+                    addr = j + i *9
+                    text_data = "button" + str(addr)
+                    text = ee.data[text_data] 
+                    text.text_set(str(value))
+                    if(value>0):
+                        text.color_set(10,10,10,200)
+                    elif(value==0):
+                        text.color_set(0,255,255,255)
+            print 'clear all data!!'
+        elif(source == 'create'):
+            print 'create new puzzle'
+            createNewPuzzle()
     elif(source =='undo'):
         print 'undo'
         if(ee.data["undo_counter"] == 0):
@@ -103,8 +108,10 @@
         print ee.data["undo_counter"], ee.data["undo_track"]
         undo_counter = ee.data["undo_counter"]
         (addr,value) = ee.data["undo_track"][undo_counter-1]
-        ee.data["undo_track"].pop()
-        
+        redo = ee.data["undo_track"].pop()
+        ee.data["redo_track"].append(redo)
+        redo_counter = ee.data["redo_counter"]
+        ee.data["redo_counter"] = redo_counter+1
         i = int(addr) / 9
         j = int(addr) % 9
         original_value = ee.data["puzzle_clone"][i][j]
@@ -113,31 +120,47 @@
         text.text_set(str(original_value))
         text.color_set(100,255,0,255)
         ee.data["puzzle"][i][j] = original_value
-        text.data["value"] = original_value
+        #text.data["value"] = original_value
         if(undo_counter>0):
             ee.data["undo_counter"] = undo_counter-1
     elif(source == 'redo'):
         print 'redo'
-        print ee.data["undo_counter"], ee.data["undo_track"]
+        if(ee.data["redo_counter"] == 0):
+            return
+        print ee.data["redo_counter"], ee.data["redo_track"]
+        redo_counter = ee.data["redo_counter"]
+        (addr,value) = ee.data["redo_track"][redo_counter-1]
+        undo = ee.data["redo_track"].pop()
+        ee.data["undo_track"].append(undo)
+        undo_counter = ee.data["undo_counter"]
+        ee.data["undo_counter"] = undo_counter+1
+        
+        i = int(addr) / 9
+        j = int(addr) % 9
+        text = ee.data["button"+str(addr)]
+        print i,j,value,text
+        text.text_set(str(value))
+        text.color_set(255,255,0,255)
+        ee.data["puzzle"][i][j] = int(value)
+        #text.data["value"] = int(value)
+        if(redo_counter>0):
+            ee.data["redo_counter"] = redo_counter-1
+        
     elif(source == 'solve'):
         print 'is solved?!'
         if(solve() == False):
             print 'NO'
         else:
             print 'YES'
-    elif(source == 'create'):
-        print 'create'
-        createNewPuzzle()
-        ee.data["undo_counter"] = 0
-        ee.data["undo_track"] = []
+
     else: 
         # fill in key number
         if(ee.data["clicking"]):
             text = ee.data[ee.data["clicking"]]
             text.text_set(source)
-            text.data["value"] = int(source)
             button = ee.data["clicking"]
-            addr = button[6:]
+            #addr = button[6:]
+            addr = ee.data["clicking"][6:]
             i = int(addr) / 9
             j = int(addr) % 9
             print i,j,addr
@@ -153,10 +176,9 @@
             undo_counter = ee.data["undo_counter"]
             ee.data["undo_counter"] = undo_counter +1
             step = (int(addr),int(source))
-            track = ee.data["undo_track"]
-            track.append(step)
-            print 'counter:',ee.data["undo_counter"]
-            print 'track:',track
+            ee.data["undo_track"].append(step)
+            #print 'undo_counter:',ee.data["undo_counter"]
+            #print 'undo_track:',ee.data["undo_track"]
     return True
 
 def puzzle_key_cb(zoom_in, emission, source):
@@ -191,7 +213,7 @@
 def createNewPuzzle():
     
     puzzle = get_puzzle()
-    print 'puzzle',puzzle
+    print 'new puzzle',puzzle
     for i in xrange(9):
         for j in xrange(9):
             ee.data["puzzle"][i][j] = puzzle[i][j]
@@ -200,7 +222,6 @@
             addr = j + i *9
             text_data = "button" + str(addr)
             text = ee.data[text_data] 
-            text.data["value"] = value
             text.text_set(str(value))
             if(value>0):
                 text.color_set(10,10,10,200)
@@ -219,7 +240,7 @@
     ee.title_set('sudoku')
     ee.size_min_set(WINDOW_WIDTH,WINDOW_HEIGHT)
     canvas = ee.evas
-    
+
     # create a background 
     bg = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", 
group="pythonEFL-sudoku/background")
     bg.pos = (0, 0)
@@ -227,7 +248,7 @@
     bg.show()
     ee.data["bg"] = bg
 
-    # create puzzle and icons
+    # create number keyboard and action icons
     area = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", 
group="pythonEFL-sudoku/panel")
     area.signal_callback_add("mouse,clicked,*", "*", number_key_cb)
     area.pos = (0, 0)
@@ -235,27 +256,30 @@
     area.show()
     area.data["area"] = area
 
-    # create puzzle and icons
+    # create puzzle board
     board = edje.Edje(canvas, file="/usr/share/sudoku/sudoku.edj", 
group="pythonEFL-sudoku/board")
     board.signal_callback_add("mouse,clicked,*", "*", puzzle_key_cb)
     board.pos = (0, 0)
     board.show()
-    
+
+    # retrieve one puzzle data
     puzzle = get_puzzle()
-    print 'puzzle',puzzle
     puzzle_clone = []
     for i in xrange(9):
         row = []
         for j in xrange(9):
             row.append(puzzle[i][j])
         puzzle_clone.append(row)
-    print 'puzzle_clone', puzzle_clone
-    
+    print 'puzzle',puzzle, puzzle_clone
     ee.data["puzzle"] = puzzle
     ee.data["puzzle_clone"] = puzzle_clone
-    
+    ee.data["clicking"] = None
+
+    # init redo undo track
     ee.data["undo_counter"] = 0
+    ee.data["redo_counter"] = 0
     ee.data["undo_track"] = []
+    ee.data["redo_track"] = []
     
     element_w = 455 / 9
     element_h = 455 / 9 
@@ -264,23 +288,17 @@
         for j in xrange(9):
             x = 15 + (element_w * (i))
             y = 15 + (element_h * (j))
-            
             value = puzzle[j][i]
-            
-            display = str(value)
             addr = j *9 + i
-            print 'row,column,value,addr: ',i,j,value,addr
-            text = canvas.Text(text=display, font=("sans serif", 16), 
color=(0,255,255,255))
-            #print i,j,x,y
+            #print 'row,column,value,addr: ',i,j,value,addr
+            text = canvas.Text(text=str(value), font=("sans serif", 16), 
color=(0,255,255,255))
             if(value>0):
+                text.data["fixed"] = True
                 text.color_set(10,10,10,200)
+            else:
+                text.data["fixed"] = False
             text.pos_set(x,y)
             text.show()
-            text.data["value"] = value
-            if(value>0):
-                text.data["fixed"] = True
-            else:
-                text.data["fixed"] = False
             text_data = "button" + str(addr)
             ee.data[text_data] = text
 




--- End Message ---
--- Begin Message ---
Author: erin_yueh
Date: 2008-07-09 18:45:19 +0200 (Wed, 09 Jul 2008)
New Revision: 4520

Added:
   developers/erin_yueh/pythonEFL-sudoku/data/image/dummy.png
   developers/erin_yueh/pythonEFL-sudoku/data/pythonEFL-sudoku.desktop
   developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py
Removed:
   developers/erin_yueh/pythonEFL-sudoku/data/puzzle/solver.py
   developers/erin_yueh/pythonEFL-sudoku/data/puzzle/sudoku.py
Log:
update sudoku.desktop and add generotor, solver script (Erin Yueh)


Added: developers/erin_yueh/pythonEFL-sudoku/data/image/dummy.png
===================================================================
(Binary files differ)


Property changes on: developers/erin_yueh/pythonEFL-sudoku/data/image/dummy.png
___________________________________________________________________
Name: svn:mime-type
   + application/octet-stream

Deleted: developers/erin_yueh/pythonEFL-sudoku/data/puzzle/solver.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/data/puzzle/solver.py 2008-07-09 
16:13:51 UTC (rev 4519)
+++ developers/erin_yueh/pythonEFL-sudoku/data/puzzle/solver.py 2008-07-09 
16:45:19 UTC (rev 4520)
@@ -1,252 +0,0 @@
-#!/usr/bin/python
-
-import sys
-
-class SudokuSolver:
-    def __init__(self):
-        self.puzzle = None
-
-        self.row = [False] * 90
-        self.col = [False] * 90
-        self.grp = [False] * 90
-
-        self.steps = []
-        for i in xrange(9):
-            self.steps.append([])
-
-        self.scores = [-1] * 81
-
-        self.tries = []
-        for i in xrange(81):
-            self.tries.append([])
-
-        self.relatives = []
-        for r in xrange(9):
-            for c in xrange(9):
-                tmp = []
-                for x in xrange(9):
-                    if x != c:
-                        tmp.append(r * 9 + x)
-                for y in xrange(9):
-                    if y != r:
-                        tmp.append(y * 9 + c)
-                gr = (r / 3) * 3
-                gc = (c / 3) * 3
-                for y in xrange(gr, gr + 3):
-                    for x in xrange(gc, gc + 3):
-                        if y != r and x != c:
-                            tmp.append(y * 9 + x)
-
-                self.relatives.append(tmp)
-
-    def _verify(self):
-        print "verify"
-        for r in xrange(9):
-            for c in xrange(9):
-                s = self.scores[r * 9 + c]
-                if s == -1:
-                    continue
-
-                tmp = []
-                for n in xrange(1, 10):
-                    if not (self.row[r * 10 + n] or self.col[c * 10 + n] or 
self.grp[((r / 3) * 3 + (c / 3)) * 10 + n]):
-                        tmp.append(n)
-
-                if len(tmp) - 1 != s:
-                    print "(%d, %d) has score %d, instead of %d" % (r, c, 
len(tmp) - 1, s)
-                    return False
-
-                
-                old = self.tries[r * 9 + c][:]
-                old.sort()
-                if old != tmp:
-                    print "(%d, %d) has tries", tmp, "instead of", old
-
-                try:
-                    self.steps[s].index(r * 9 + c)
-                except:
-                    print "(%d, %d) @ %d is not a step" % (r, c, s)
-                    return False
-
-        return True
-
-    def _try(self, pos, n):
-        positions = []
-        for p in self.relatives[pos]:
-            if self.scores[p] >= 0 and n in self.tries[p]:
-                if len(self.tries[p]) == 1:
-                    return False
-
-                positions.append(p)
-
-        r = pos / 9
-        c = pos % 9
-        self.row[r * 10 + n] = True
-        self.col[c * 10 + n] = True
-        self.grp[((r / 3) * 3 + (c / 3)) * 10 + n] = True
-
-        self.puzzle[r][c] = n
-
-        for p in positions:
-            self.tries[p].remove(n)
-            s = self.scores[p]
-            self.scores[p] -= 1
-            self.steps[s - 1][:0] = [p]
-            self.steps[s].remove(p)
-
-        return True
-
-    def _undo(self, pos, n):
-        r = pos / 9
-        c = pos % 9
-        self.row[r * 10 + n] = False
-        self.col[c * 10 + n] = False
-        self.grp[((r / 3) * 3 + (c / 3)) * 10 + n] = False
-
-        self.puzzle[r][c] = 0
-
-        for p in self.relatives[pos]:
-            old_score = self.scores[p]
-            if old_score == -1:
-                continue
-
-            if n not in self.tries[p]:
-                y = p / 9
-                x = p % 9
-                if not (self.row[y * 10 + n] or self.col[x * 10 + n] or 
self.grp[((y / 3) * 3 + (x / 3)) * 10 + n]):
-                    self.tries[p][:0] = [n]
-                    self.scores[p] += 1
-                    self.steps[old_score + 1][:0] = [p]
-                    self.steps[old_score].remove(p)
-
-    def _solve(self):
-        pos = 81
-        for score in xrange(9):
-            if self.steps[score]:
-                pos = self.steps[score].pop()
-                break
-        if pos >= 81:
-            return True
-
-        self.scores[pos] = -1
-
-        for n in self.tries[pos]:
-            if self._try(pos, n):
-                if self._solve():
-                    return True
-                self._undo(pos, n)
-
-        self.scores[pos] = score
-        self.steps[score].append(pos)
-
-        return False
-
-    def _analyze(self):
-        for i in xrange(90):
-            self.row[i] = False
-            self.col[i] = False
-            self.grp[i] = False
-
-        for r in xrange(9):
-            for c in xrange(9):
-                pos = r * 9 + c
-                v = self.puzzle[r][c]
-                if v:
-                    if self.row[r * 10 + v] or self.col[c * 10 + v] or 
self.grp[((r / 3) * 3 + (c / 3)) * 10 + v]:
-                        return False
-
-                    self.row[r * 10 + v] = True
-                    self.col[c * 10 + v] = True
-                    self.grp[((r / 3) * 3 + (c / 3)) * 10 + v] = True
-
-                    self.scores[pos] = -1
-
-        for i in xrange(9):
-            self.steps[i] = []
-
-        for r in xrange(9):
-            for c in xrange(9):
-                pos = r * 9 + c
-                v = self.puzzle[r][c]
-                if not v:
-                    tries = []
-                    for n in xrange(1, 10):
-                        if not (self.row[r * 10 + n] or self.col[c * 10 + n] 
or self.grp[((r / 3) * 3 + (c / 3)) * 10 + n]):
-                            tries.append(n)
-
-                    if not tries:
-                        return False
-                    
-                    score = len(tries) - 1
-
-                    self.tries[pos] = tries
-                    self.scores[pos] = score
-                    self.steps[score].append(pos)
-
-        while (self.steps[0]):
-            pos = self.steps[0].pop()
-            r = pos / 9
-            c = pos % 9
-
-            v = self.tries[pos].pop()
-
-            self.row[r * 10 + v] = True
-            self.col[c * 10 + v] = True
-            self.grp[((r / 3) * 3 + (c / 3)) * 10 + v] = True
-            self.puzzle[r][c] = v
-
-            self.scores[pos] = -1
-
-            for p in self.relatives[pos]:
-                s = self.scores[p]
-                if s > 0 and v in self.tries[p]:
-                    self.tries[p].remove(v)
-                    self.scores[p] -= 1
-                    self.steps[s - 1][:0] = [p]
-                    self.steps[s].remove(p)
-
-        return True
-
-    def solve(self, puzzle):
-        self.puzzle = puzzle
-
-        if not self._analyze():
-            return False
-
-        return self._solve()
-
-def parse_file():
-    lines = sys.stdin.readlines()
-
-    puzzles = []
-    for l in lines:
-        if (len(l) != 82):
-            print "xxx"
-            continue
-
-        p = []
-        for i in xrange(9):
-            t = []
-            for j in xrange(9):
-                t.append(int(l[i * 9 + j]))
-            p.append(t)
-        puzzles.append(p)
-
-    return puzzles
-
-def main():
-    solver = SudokuSolver()
-    puzzles = parse_file()
-
-    for p in puzzles:
-        if (solver.solve(p)):
-            pass
-            for i in xrange(9):
-                print p[i]
-            print
-        else:
-            print "no solution"
-        
-
-if __name__ == "__main__":
-    main()

Deleted: developers/erin_yueh/pythonEFL-sudoku/data/puzzle/sudoku.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/data/puzzle/sudoku.py 2008-07-09 
16:13:51 UTC (rev 4519)
+++ developers/erin_yueh/pythonEFL-sudoku/data/puzzle/sudoku.py 2008-07-09 
16:45:19 UTC (rev 4520)
@@ -1,252 +0,0 @@
-#!/usr/bin/python
-
-import sys
-
-class SudokuSolver:
-    def __init__(self):
-        self.puzzle = None
-
-        self.row = [False] * 90
-        self.col = [False] * 90
-        self.grp = [False] * 90
-
-        self.steps = []
-        for i in xrange(9):
-            self.steps.append([])
-
-        self.scores = [-1] * 81
-
-        self.tries = []
-        for i in xrange(81):
-            self.tries.append([])
-
-        self.relatives = []
-        for r in xrange(9):
-            for c in xrange(9):
-                tmp = []
-                for x in xrange(9):
-                    if x != c:
-                        tmp.append(r * 9 + x)
-                for y in xrange(9):
-                    if y != r:
-                        tmp.append(y * 9 + c)
-                gr = (r / 3) * 3
-                gc = (c / 3) * 3
-                for y in xrange(gr, gr + 3):
-                    for x in xrange(gc, gc + 3):
-                        if y != r and x != c:
-                            tmp.append(y * 9 + x)
-
-                self.relatives.append(tmp)
-
-    def _verify(self):
-        print "verify"
-        for r in xrange(9):
-            for c in xrange(9):
-                s = self.scores[r * 9 + c]
-                if s == -1:
-                    continue
-
-                tmp = []
-                for n in xrange(1, 10):
-                    if not (self.row[r * 10 + n] or self.col[c * 10 + n] or 
self.grp[((r / 3) * 3 + (c / 3)) * 10 + n]):
-                        tmp.append(n)
-
-                if len(tmp) - 1 != s:
-                    print "(%d, %d) has score %d, instead of %d" % (r, c, 
len(tmp) - 1, s)
-                    return False
-
-                
-                old = self.tries[r * 9 + c][:]
-                old.sort()
-                if old != tmp:
-                    print "(%d, %d) has tries", tmp, "instead of", old
-
-                try:
-                    self.steps[s].index(r * 9 + c)
-                except:
-                    print "(%d, %d) @ %d is not a step" % (r, c, s)
-                    return False
-
-        return True
-
-    def _try(self, pos, n):
-        positions = []
-        for p in self.relatives[pos]:
-            if self.scores[p] >= 0 and n in self.tries[p]:
-                if len(self.tries[p]) == 1:
-                    return False
-
-                positions.append(p)
-
-        r = pos / 9
-        c = pos % 9
-        self.row[r * 10 + n] = True
-        self.col[c * 10 + n] = True
-        self.grp[((r / 3) * 3 + (c / 3)) * 10 + n] = True
-
-        self.puzzle[r][c] = n
-
-        for p in positions:
-            self.tries[p].remove(n)
-            s = self.scores[p]
-            self.scores[p] -= 1
-            self.steps[s - 1][:0] = [p]
-            self.steps[s].remove(p)
-
-        return True
-
-    def _undo(self, pos, n):
-        r = pos / 9
-        c = pos % 9
-        self.row[r * 10 + n] = False
-        self.col[c * 10 + n] = False
-        self.grp[((r / 3) * 3 + (c / 3)) * 10 + n] = False
-
-        self.puzzle[r][c] = 0
-
-        for p in self.relatives[pos]:
-            old_score = self.scores[p]
-            if old_score == -1:
-                continue
-
-            if n not in self.tries[p]:
-                y = p / 9
-                x = p % 9
-                if not (self.row[y * 10 + n] or self.col[x * 10 + n] or 
self.grp[((y / 3) * 3 + (x / 3)) * 10 + n]):
-                    self.tries[p][:0] = [n]
-                    self.scores[p] += 1
-                    self.steps[old_score + 1][:0] = [p]
-                    self.steps[old_score].remove(p)
-
-    def _solve(self):
-        pos = 81
-        for score in xrange(9):
-            if self.steps[score]:
-                pos = self.steps[score].pop()
-                break
-        if pos >= 81:
-            return True
-
-        self.scores[pos] = -1
-
-        for n in self.tries[pos]:
-            if self._try(pos, n):
-                if self._solve():
-                    return True
-                self._undo(pos, n)
-
-        self.scores[pos] = score
-        self.steps[score].append(pos)
-
-        return False
-
-    def _analyze(self):
-        for i in xrange(90):
-            self.row[i] = False
-            self.col[i] = False
-            self.grp[i] = False
-
-        for r in xrange(9):
-            for c in xrange(9):
-                pos = r * 9 + c
-                v = self.puzzle[r][c]
-                if v:
-                    if self.row[r * 10 + v] or self.col[c * 10 + v] or 
self.grp[((r / 3) * 3 + (c / 3)) * 10 + v]:
-                        return False
-
-                    self.row[r * 10 + v] = True
-                    self.col[c * 10 + v] = True
-                    self.grp[((r / 3) * 3 + (c / 3)) * 10 + v] = True
-
-                    self.scores[pos] = -1
-
-        for i in xrange(9):
-            self.steps[i] = []
-
-        for r in xrange(9):
-            for c in xrange(9):
-                pos = r * 9 + c
-                v = self.puzzle[r][c]
-                if not v:
-                    tries = []
-                    for n in xrange(1, 10):
-                        if not (self.row[r * 10 + n] or self.col[c * 10 + n] 
or self.grp[((r / 3) * 3 + (c / 3)) * 10 + n]):
-                            tries.append(n)
-
-                    if not tries:
-                        return False
-                    
-                    score = len(tries) - 1
-
-                    self.tries[pos] = tries
-                    self.scores[pos] = score
-                    self.steps[score].append(pos)
-
-        while (self.steps[0]):
-            pos = self.steps[0].pop()
-            r = pos / 9
-            c = pos % 9
-
-            v = self.tries[pos].pop()
-
-            self.row[r * 10 + v] = True
-            self.col[c * 10 + v] = True
-            self.grp[((r / 3) * 3 + (c / 3)) * 10 + v] = True
-            self.puzzle[r][c] = v
-
-            self.scores[pos] = -1
-
-            for p in self.relatives[pos]:
-                s = self.scores[p]
-                if s > 0 and v in self.tries[p]:
-                    self.tries[p].remove(v)
-                    self.scores[p] -= 1
-                    self.steps[s - 1][:0] = [p]
-                    self.steps[s].remove(p)
-
-        return True
-
-    def solve(self, puzzle):
-        self.puzzle = puzzle
-
-        if not self._analyze():
-            return False
-
-        return self._solve()
-
-def parse_file():
-    lines = sys.stdin.readlines()
-
-    puzzles = []
-    for l in lines:
-        if (len(l) != 82):
-            print "xxx"
-            continue
-
-        p = []
-        for i in xrange(9):
-            t = []
-            for j in xrange(9):
-                t.append(int(l[i * 9 + j]))
-            p.append(t)
-        puzzles.append(p)
-
-    return puzzles
-
-def main():
-    solver = SudokuSolver()
-    puzzles = parse_file()
-
-    for p in puzzles:
-        if (solver.solve(p)):
-            pass
-            for i in xrange(9):
-                print p[i]
-            print
-        else:
-            print "no solution"
-        
-
-if __name__ == "__main__":
-    main()

Added: developers/erin_yueh/pythonEFL-sudoku/data/pythonEFL-sudoku.desktop
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/data/pythonEFL-sudoku.desktop         
                (rev 0)
+++ developers/erin_yueh/pythonEFL-sudoku/data/pythonEFL-sudoku.desktop 
2008-07-09 16:45:19 UTC (rev 4520)
@@ -0,0 +1,12 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=pythonEFL-sudoku
+TryExec=sudoku_ui.py
+GenericName=pythonEFL-sudoku
+Comment=Sudoku game
+StartupNotify=false
+Exec=sudoku_ui.py
+Icon=pythonEFL-sudoku
+Terminal=false
+Type=Application
+Categories=Games;

Added: developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py
===================================================================
--- developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py               
                (rev 0)
+++ developers/erin_yueh/pythonEFL-sudoku/src/sudoku/generator.py       
2008-07-09 16:45:19 UTC (rev 4520)
@@ -0,0 +1,199 @@
+#!/usr/bin/python
+
+import ecore.evas
+import ecore
+import math
+import random
+
+def generateDummyGroup(ee,number):
+       group = ee.data['group_list']
+       (g,start_row,start_line) = group[str(number)]
+       items = [1,2,3,4,5,6,7,8,9]
+       random.shuffle(items)
+       for i in range (start_row, start_row+3):
+               for j in range(start_line, start_line+3):
+                       key = (i,j)
+                       obj = ee.data[key]
+                       obj.color_set(0,255,0,255)
+                       value = items.pop()
+                       obj.text_set(str(value))
+                       obj.data['value'] = value
+       return True
+
+def checkGroupRule(ee,number):
+       group = ee.data['group_list']
+       (g,start_row,start_line) = group[str(number)]
+       used_items = [0]
+       
+       for i in range (start_row,start_row+3):
+               for j in range(start_line,start_line+3):
+                       key = (i,j)
+                       obj = ee.data[key]
+                       value = int(obj.data['value'])
+                       if(value>0):
+                               used_items.append(value)
+       #print 'check group:',number,'used_items =',used_items
+       return used_items
+
+def checkRowRule(ee,number):
+       used_items = [0]
+       for i in range(1,10):
+               key = (number,i) # row
+               obj = ee.data[key]
+               value = int(obj.data['value'])
+               if(value>0):
+                       used_items.append(value)
+    #print 'check row:', number, 'used_items = ',used_items
+       return used_items
+
+def checkLineRule(ee,number):
+       used_items = [0]
+       for i in range(1,10):
+               key = (i,number) # line
+               obj = ee.data[key]
+               value = int(obj.data['value'])
+               if(value>0):
+                       used_items.append(value)
+    #print 'check line:', number, 'used_items = ',used_items
+       return used_items
+
+def CheckAndMergeUsed(group_used,row_used,line_used):
+       items = [1,2,3,4,5,6,7,8,9]
+       for k in range(len(group_used)):
+               if(group_used[k] in items):
+                       items.remove(group_used[k])
+       for i in range(len(row_used)):
+               if(row_used[i] in items):
+                       items.remove(row_used[i])
+       for j in range(len(line_used)):
+               if(line_used[j] in items):
+                       items.remove(line_used[j])
+       
+       if(len(items)==0):
+               return False
+       else:
+               return True
+
+def fillinByGroup(ee,number):
+       group = ee.data['group_list']
+       (g,start_row,start_line) = group[str(number)]
+       items = [1,2,3,4,5,6,7,8,9]
+       random.shuffle(items)
+       
+       group_used = checkGroupRule(ee,number)
+       needed = len(items) - len(group_used) + 1
+       bingo = 0
+       
+       for i in range (start_row,start_row+3):
+               for j in range(start_line,start_line+3):
+                       key = (i,j)
+                       obj = ee.data[key]
+                       value = int(obj.data['value'])
+                       if(value==0):
+                               group_used = checkGroupRule(ee,number)
+                               row_used = checkRowRule(ee,i)
+                               line_used = checkLineRule(ee,j)
+                               
if(CheckAndMergeUsed(group_used,row_used,line_used) == False):
+                                       return 1
+                               for v in range(len(items)):
+                                       ball = items[v]
+                                       if(ball not in group_used and 
+                                               ball not in row_used and ball 
not in line_used):
+                                               obj.data['value'] = ball
+                                               obj.text_set(str(ball))
+                                               obj.color_set(255,0,0,255)
+                                               bingo+=1
+                                               break
+       if(bingo==needed):
+               return 0
+       else:
+               return 1
+
+def refreshByGroup(ee,number):
+       group = ee.data['group_list']
+       (g,start_row,start_line) = group[str(number)]
+       
+       for i in range (start_row,start_row+3):
+               for j in range(start_line,start_line+3):
+                       key = (i,j)
+                       obj = ee.data[key]
+                       obj.text_set('0')
+                       obj.data['value'] = 0
+       
+       return True
+       
+
+def main():
+       ee = ecore.evas.SoftwareX11(w=360, h=360)
+       canvas = ee.evas
+       group = {
+               '1': (1,1,1), '2':(2,1,4), '3':(3,1,7),
+               '4': (4,4,1), '5':(5,4,4), '6':(6,4,7),
+               '7': (7,7,1), '8':(8,7,4), '9':(9,7,7),
+       }
+       
+       ee.data['group_list'] = group
+       
+       # create a black backgound 
+       bg = canvas.Rectangle(color=(0, 0, 0, 255))
+       bg.size = canvas.size
+       bg.show()
+       
+       element_w = 360 / 9
+       element_h = 360 / 9 
+       
+       # put all elements to Text objects
+       for i in range (1,10):
+               for j in range(1,10):
+                       x = 5 + (element_w * (i-1))
+                       y = 5 + (element_h * (j-1))
+                       value = 0
+                       display = str(value)
+                       text = canvas.Text(text=display, font=("sans serif", 
12), color=(0,255,255,255))
+                       text.pos_set(x,y)
+                       text.data['row'] = j
+                       text.data['line'] = i
+                       text.data['value'] = value
+                       text.show()
+                       addr = (text.data['row'],text.data['line'])
+                       ee.data[addr] = text
+                       text.text_set(str(addr))
+
+       dummy_group = (9,5,1)
+       #not_dummy_group = (2,8,7,4,6,1,5,9,3)
+       not_dummy_group = (2,8,3,4,6,7)
+       flag = False
+       times = 0
+       counter = 0
+       curr_time = ecore.time_get()
+       print 'start to run:', times, curr_time
+       while(flag == False):
+               counter = 1
+               # generate three dummy group
+               for i in range(len(dummy_group)):
+                       #print 'generateDummyGroup', dummy_group[i]
+                       generateDummyGroup(ee,dummy_group[i])
+               # clean up other groups
+               for j in range(len(not_dummy_group)):
+                       #print 'refreshByGroup', not_dummy_group[j]
+                       refreshByGroup(ee,not_dummy_group[j])
+               # fill in by group
+               for k in range(len(not_dummy_group)):
+                       #print 'fillinByGroup', not_dummy_group[k]
+                       counter = fillinByGroup(ee,not_dummy_group[k])
+                       if(counter==1):
+                               break
+               if(counter ==1):
+                       flag = False
+               elif(counter ==0):
+                       flag = True
+               times += 1
+       
+       print 'times = ', times, 'running time = ',(ecore.time_get() - 
curr_time)
+       
+       ee.show()
+       ecore.animator_frametime_set(1.0 / 10.0)
+       ecore.main_loop_begin()
+ 
+if __name__ == "__main__":
+       main()
\ No newline at end of file




--- End Message ---
_______________________________________________
commitlog mailing list
commitlog@lists.openmoko.org
http://lists.openmoko.org/mailman/listinfo/commitlog

Reply via email to