Tag 35 – Sudoku

100_1353Der Heutige Tag war wenig abwechslungsreich. Zwischen 13:30 und 17:00 bin ich nichtsnutzig an der Theke gesessen. Ansosten habe ich mich den ganzen Tag, auch während der „Arbeit“, mit Java Programmierung beschäftigt. Die Zeit ist dabei erstaunlich schnell vergangen. Ich kam mir schon vor wie in der Schule: Denken und so. Ich habe versucht ein Programm zu schreiben, das Sudokus löst. Ich habe es NOCH nicht geschafft, aber ich bin schon relativ weit. Wenn ich fertig bin, dann kann ich dieses Werkzeug, auf das die Welt gewartet hat, hier online stellen. Also: Stay tuned! Ihr merkt: wenn ich schon so etwas belangloses hier schreibe, dann muss der Tag WIRKLICH ereignislos gewesen sein. Fast ereignislos: Ich habe heute ein Postkarte und ein Päckchen von lieben Freunden und Freundinnen bekommen! Danke schön an euch!!! Dafür bekommt ihr einen Ausschnitt meines Sudokulösers.🙂

lg, Dima

public class Feld{

//—Variablen—
int[] m = new int[10];

//—Konstruktoren—
//Bekanntes Feld
Feld(int x){
m[0] = x;
}

//Unbekanntes Feld
Feld(){
int i;

for(i=1;i<10;i++){
m[i-1] = i;
}
}

//—Methoden—
//Gibt eindeutigen Wert des Feldes zurück oder 0.
int wert(){
if(m[1]>0 && m[1]<10){
return 0;
}
else{
return m[0];
}
}

}

4 Antworten so far »

  1. 1

    Dave said,

    Hi Dima!
    Das ist ein sehr ehrgeiziges Projekt, dass du dir da vorgenommen hast. Dabei wünsche ich dir natürlich viel Glück und Keativität und erlaube mir einen Denkanstoß: Ich bin mit deiner letzten Methode nicht so ganz einverstanden. Wenn der Wert in Arraystelle 1 zwischen 0 und 10 liegt, wird 0 ausgegeben; und sonst wird der Wert, der in Arraystelle 0 steht, ausgegeben. Was hat das für einen Sinn? Was ist mit den anderen Arraystellen?
    LG Dave

  2. 2

    semidicht said,

    Hi! Ja, ich versuche mich daran, obwohl das durchaus eine harte Nuss ist, wenn man so wenig ahnung hat wie ich.^^ Aber allein der Versuch ist es wert, denn schon dabei lernt man ne Menge. Ich bin aber auch recht optimistisch, dass das klappt!
    Der Code aus dem Post ist mittlerweile total überholt. Die Idee war aber für jedes Feld einen Array mit allen in diesem Feld noch möglichen Zahlen zu haben. Wenn eine einzige Zahl übrig ist, dann wird sie ausgegeben: return m[0]; (else zweig) wenn aber auf der zweiten Stelle m[1] noch was vernüfntiges ist, dann wird 0 ausgegeben, das als kontrollwert dient für: „es kommt noch mehr als eine Zahl in frage“
    Ich weiß: das ist mumpitz. Ich habe die Prüfung im true Zweig so angelegt, weil ich nicht wusste was mit dem wert so alles passieren kann etc.
    Mittlerweile bin ich aber zu ArrayList(); als datenstrucktur für den Inhalt der Felder übergegangen, was alles VIEL einfacher gemacht hat. jetzt schaut die Methode so aus:

    int wert(){
    int i = m.size();
    if(i != 1){
    return 0;
    }
    else{
    int a = m.get(0);
    return a;
    }
    }

    Das funktionier auch schon super. vielleicht kriege ich heute schon komplett die Berechnung hin. Dann muss ich aber noch an der Benutzereingabe arbeiten, denn ich will noch eine graphische benutzeroberfläche. Ausserdem kann mein Algorithmus keine „schweren“ Sudokus lösen. Wenn es erstmal mit den leichten klappt, werde ich noch eine methode schreiben, die das dann per brute-force etwas „unterstützt“.

    lg

    Dima

  3. 3

    Dave said,

    Dann bin ich schon mal gespannt auf dein Ergebnis. Vergiss beim Brute-Forcen nicht, dass das Programm in endlicher Zeit ausführbar sein soll😉
    LG
    Dave

  4. 4

    semidicht said,

    1,47E19 Jahre sind auch endlich😉


Comment RSS · TrackBack URI

Schreibe einen Kommentar

Trage deine Daten unten ein oder klicke ein Icon um dich einzuloggen:

WordPress.com-Logo

Du kommentierst mit Deinem WordPress.com-Konto. Abmelden / Ändern )

Twitter-Bild

Du kommentierst mit Deinem Twitter-Konto. Abmelden / Ändern )

Facebook-Foto

Du kommentierst mit Deinem Facebook-Konto. Abmelden / Ändern )

Google+ Foto

Du kommentierst mit Deinem Google+-Konto. Abmelden / Ändern )

Verbinde mit %s

%d Bloggern gefällt das: