2016-03-20 5 views
0

Ich war auf der Suche nach einer Sudoku App auf Google Play-Store und ich fand this App sehr interessant. Sie haben verschiedene Schwierigkeitsgrade. Was ich in dieser App finde, ist eine Hinweisschaltfläche und eine automatische Fehlerprüfung, die automatisch erkennt, ob die eingegebene Nummer korrekt ist oder nicht. Jetzt möchte ich wissen, wie ich einen Algorithmus erstellen kann, der den gleichen Job macht, ob die eingegebene Zahl korrekt ist oder nicht. Wie funktioniert der Hinweis Button?Wie nach jedem Eintrag in Sudoku zu überprüfen, ob es gültig ist oder nicht

Edit nach Pauls Kommentar: Jetzt weiß ich, wie man überprüft, ob der eingegebene Wert korrekt ist oder nicht. Jetzt besteht das verbleibende Problem darin, Hinweise zu geben, die den Hinweisen der oben erwähnten App ähnlich sind. When I tab hint buttonWhen I press nextenter image description here

PS: lassen Sie mich wissen, ob diese Frage für den Standort nicht konstruktiv ist. Ich werde diese Frage gerne löschen, da ich mir nicht sicher bin, ob ich diese Frage hier oder in einer anderen Stackoverflow-Community stellen soll.

+0

Gibt es ein Problem, nur das Programm das Rätsel zu lösen, bevor das Spiel beginnt, die Lösung in einem Array speichern, dann prüfen, ob der eingegebene Wert übereinstimmt? – Paul

Antwort

0

Ihre Frage klingt verwirrend. Auf der einen Seite fragen Sie, wie Sie überprüfen können, ob die Sudoku-Position gültig ist oder nicht, aber im Beispiel zeigen Sie, wie ein Programm hilft, eine Position zu finden, an der Sie eine Zahl setzen können (nicht Ihr Sudoku überprüfen, sondern einen Schritt lösen) .

Um Sudoku zu überprüfen, müssen Sie nur überprüfen, ob die Zahlen in jeder Zeile/Spalte/Quadrat gültig sind. Dies wird leicht mit einer festgelegten Datenstruktur erreicht. Ich weiß nicht, Android und keine Zeit haben, zu sehen, hier so ist ein einfaches Python-Code, der ein Array von Strings nimmt und sagt, ob das Sudoku gilt:

from collections import Counter 

def isValidCounter(cnt): 
    del cnt[0] 
    for i in cnt: 
     if cnt[i] > 1: 
      return False 
    return True 

def isValid(arr): 
    M = [[int(i) if i != '.' else 0 for i in line] for line in arr] 

    # rows 
    for i in M: 
     if not isValidCounter(Counter(i)): 
      return False 

    # columns 
    for i in xrange(9): 
     if not isValidCounter(Counter(M[j][i] for j in xrange(9))): 
      return False 

    # squares 
    squares = [ 
     [M[0][i] for i in xrange(0, 3)] + [M[1][i] for i in xrange(0, 3)] + [M[2][i] for i in xrange(0, 3)], 
     [M[0][i] for i in xrange(3, 6)] + [M[1][i] for i in xrange(3, 6)] + [M[2][i] for i in xrange(3, 6)], 
     [M[0][i] for i in xrange(6, 9)] + [M[1][i] for i in xrange(6, 9)] + [M[2][i] for i in xrange(6, 9)], 

     [M[3][i] for i in xrange(0, 3)] + [M[4][i] for i in xrange(0, 3)] + [M[5][i] for i in xrange(0, 3)], 
     [M[3][i] for i in xrange(3, 6)] + [M[4][i] for i in xrange(3, 6)] + [M[5][i] for i in xrange(3, 6)], 
     [M[3][i] for i in xrange(6, 9)] + [M[4][i] for i in xrange(6, 9)] + [M[5][i] for i in xrange(6, 9)], 

     [M[6][i] for i in xrange(0, 3)] + [M[7][i] for i in xrange(0, 3)] + [M[8][i] for i in xrange(0, 3)], 
     [M[6][i] for i in xrange(3, 6)] + [M[7][i] for i in xrange(3, 6)] + [M[8][i] for i in xrange(3, 6)], 
     [M[6][i] for i in xrange(6, 9)] + [M[7][i] for i in xrange(6, 9)] + [M[8][i] for i in xrange(6, 9)] 
    ] 
    for square in squares: 
     if not isValidCounter(Counter(square)): 
      return False 

    return True 

Und hier ist, wie das Array wie folgt aussieht: