Schlagwort-Archive: Programmieren

Sudoku

In den Osterferien bin ich endlich dazu gekommen, mein kleines Sudoku-Lösungsprogramm zu schreiben, und es funktioniert schon in der jetzigen Version ausgezeichnet. Bisher tut es nichts weiter, als für jedes Kästchen im Sudoku eine Liste der noch möglichen Zahlen zu verwalten: jedes Mal, wenn eine neue Zahl irgendwo in ein Kästchen eingetragen wird, wird diese Zahl in allen Kästchen derselben Zeile, derselben Spalte und desselben Blocks aus der Liste entfernt. Das ist das Hauptprinzip.

Wie hilft mir diese einfache Listentabelle* die Lösungszahlen zu finden?

Naja: zum Einen kann ich alle Kästchen durchlaufen und mir ihre Listen anschauen. Wenn ich eine Liste finde, die nur noch eine Zahl enthält, dann ist in diesem Kästchen auch nur noch diese eine Zahl möglich, weil alle anderen Lösungen schon in andere Kästchen in Zeile, Spalte oder Block eingetragen worden sind. Diesen Treffer trage ich ins Kästchen ein (und aus den Listen drumherum aus), und dann kann ich schauen, ob ich noch weitere eindeutige Listen finde.
Was mache ich, wenn es irgendwann keine eindeutigen Treffer mehr gibt, weil sämtliche Listen mehrere mögliche Lösungszahlen enthalten? Dann kommt die zweite Methode ins Spiel: ich gehe alle Zeilen, Spalten und Blöcke durch und schaue, ob hier (in Zeile/Spalte/Block) eine Zahl in nur einer Liste vorkommt. Das entsprechende Kästchen ist dann die einzige Möglichkeit, diese Zahl in dieser Zeile ( oder Spalte oder Block) legal unterzubringen. Treffer eintragen, Trefferzahl aus Anliegerlisten streichen, weiterschauen.

Wie gesagt: das funktioniert ausgezeichnet. Bisher habe ich noch kein Sudoku gefunden, was ein Skript mit diesen beiden kleinen Funktionen nicht knacken konnte. Es funktioniert sogar so ausgezeichnet, dass ich hochgradig irritiert bin, weil ich beim Von-Hand-Lösen häufig noch einen weiteren Algorithmus verwenden muss, um Mehrdeutigkeiten aufzulösen. Bedeutet das, dass ich bisher beim Testen nur irgendwelche Popel-Sudokus gefunden habe und seither einfach keine richtig kniffligen mehr in der Zeitung stehen, oder bedeutet das, dass ich beim Von-Hand-Lösen dauernd Sachen übersehe und Flüchtigkeitsfehler mache?

Grmpf.
Ich gehe bis auf Weiteres erstmal davon aus, dass Sudokus seit den Osterferien einfacher geworden sind.
;-)

Code-Kommentare

Dinge, die man in Programmcode eigentlich lieber nicht lesen möchte: Weiterlesen

Englisch mit E

Heut nacht, nachdem das kleine MilchmonsterLeberwurstbrotmonster sich irgendwann wieder beruhigt hatte, lag ich noch eine ganze Weile wach und sah faul meinen Gedanken beim Umherschweifen zu. Über Silizium->Silicon->Silicone kam ich zur Frage, welche Wörter im Englischen ein neues, real existierendes Wort ergeben, wenn man ein „e“ anhängt.

Gegen drei hatte ich dann neben

Silicon

noch auf die Reihe auf „-ar“, also

bar
car
far
par
star
war

und die Reihe auf „-at“, also

at
cat
fat
hat
mat
pat
rat
sat
stat

und beschloss dann, jetzt doch lieber Schäfchen zu zählen statt Wörter. Aber ist schon spannend, dass sich aus nur einem Vokal + einem Konsonanten derartig viele Wörter ergeben, die sich mit einem „e“ verlängern lassen.

Irgendwann Mal™ werde ich ein kleines Script basteln, was alle Drei-Buchstaben-Kombinationen nach dem Muster Konsonant-Vokal-Konsonant durch ein Wörterbuch jagt und dann alle Treffer nochmal mit einem angehängten „e“ testet.

Also… sobald ich den Sudoku-Löser und den Minesweeper-Mogler geschrieben habe, mich in Gimp eingearbeitet und das HDR-Script getestet habe, meinen Fantasy-Roman geschrieben habe (hups, wegen des Rollenspiels gestern sind die 100 Wörter untergegangen!) und meine Lektüre-Warteschlange abgelesen habe.

Also vermutlich gegen 2027.

Dichten und Debuggen und der Musenkuss

Ich hasse Programmieren.

Nein, eigentlich ja nicht. Aber manchmal halt schon. Heute zum Beispiel. Und heute war dummerweise ich schuld…

Das letzte Jahr habe ich mehr oder weniger damit zugebracht, fremden Code kennen zu lernen und zu debuggen. Irgendein Kollege kommt rein, mit mehr oder weniger roten Flecken im Gesicht, und sagt sowas wie: „Sag mal, Christian, Du bist doch jetzt derjenige, der für XYZ zuständig ist, oder?“
In dem Moment kriege ich immer schon Schweißausbrüche, denn ich weiß genau: die nächsten Stunden oder Tage darf ich mich wieder fluchend durch zigtausend Zeilen Programmcode wühlen, der unkommentiert und, hmmm, sonderbar strukturiert ist, und nach irgendwelchen obskuren Bugs suchen. Zwei Tage später bin ich zwar völlig aus meinem eigentlichen Projekt raus, aber immerhin ist der Bug behoben, ich habe das Programm mit seinen fünfzehn Millionen Optionen, Sondereinstellungen und Wahlmöglichkeiten besser kennengelernt, der Kunde ist glücklich und ein paar hundert Zeilen Code sind nebenbei wieder sauberer geworden. Das entschädigt ein wenig für die grauen Haare.

Nein, fremden Code debuggen zu müssen ist echt schlimm. So frustrierend! Da liest man Code, da testet man, da wälzt man Dokumentationen und googelt sich die Finger wund — nichts funktioniert!

Das einzige, was schlimmer ist, als stundenlang erfolglos fremden Code zu debuggen, ist, stundenlang erfolglos eigenen Code zu debuggen. Da kommt man sich noch viel blöder vor, und man kann nicht mal auf jemand anders schimpfen…

Debuggen ist sowieso der ungeliebte Teil des Programmierens, und auch neuen Code zu schreiben ist gelegentlich einfach mühsam und nervig. Aber manchmal… manchmal fluppt es halt einfach: der Algorithmus stimmt, das Programm kompiliert im ersten Versuch, und es läuft auch gleich fehlerfrei durch. Das ist selten, aber gelegentlich gellen in solchen Fällen Glücksschreie durchs Büro.

Hmmnja.

Wie kriege ich jetzt die Kurve zum Dichten? Einfach übergangslos umschwenken? OK:

Beim Dichten oder Schreiben ist es ähnlich: manchmal kriegt man ums Verrecken keinen gerade Satz auf das Papier, und den einen oder anderen Absatz streicht man fünfmal durch, bevor man annähernd zufrieden ist — und manchmal fängt man an und schreibt eine Kurzgeschichte oder ein Gedicht glatt und fehlerfrei runter. Zack, Unterschrift, fertig! Das ist selten, aber gelegentlich gellen in solchen Fällen Glücksschreie durchs Haus.

Irgendein schlauer Mensch hat mal sowas gesagt wie: „Es gibt Tage, da scheint einem alles zu gelingen. Keine Angst: das geht vorüber.“
Ja, das geht vorüber, und allzu oft passiert es auch sowieso nicht. Aber wenn einem sowas mal wieder passiert — hach…

Was für ein Genuss,
so ein Musenkuss!