Du bist nicht angemeldet.

Werbeanzeige

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 713

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

1

28.11.2016, 02:46

Sudoku | isValid in Java

Hi,
ich muss für mein Studium als Übungsaufgabe
einen Sudoku-Algorithmus in Java implementieren.

Aus der Aufgabenstellung geht hervor, dass ein gelöstes
Sudoku-Feld eine Permutatiomnsmatrix sowie eine Permutationsblock ist.

Zum testen, ob es sich bei dem Feld um eine Permutationsmatrix/-feld handelt
habe ich bereits implementiert und sind laut Unittest-System der Uni korrekt.

Leider bekomme ich für meine Implementierung der "isValid"-Methode einen Error
(vom Unittest-System), dass diese eine falsche Lösung als richtig akzeptiert.

Debuggen ist leider nicht möglich, da die Unittests nicht öffentlich verfügbar
sind und auf dem Server ("der Blackbox") ausgeführt wird.

Da meine Methoden zum Testen der Eigenschaften bezgl. Permutationsmatrix- und Permutationsblock-
eigenschaft laut Unittest-System richtig sind, gehe ich davon aus das diese richtig ist.

Desweiteren gehe ich davon aus, dass ich eine wichtige Eigenschaft eines gelösten
Sudokufelds übersehen.

Kann mir jemand auf die Sprünge helfen?
Reicht es zu zeigen, dass ein Sudokufeld eine Permutationsmatrix und ein Permutationsblock ist?

LG Julien
P.S.: Code im Anhang als .txt Datei. Sudokufeld wird mit Buchstaben A bis I gefüllt. '\0' ist als Platzhalter definiert.
Ich sitze nun seit mehr als 7 Stunden an der Aufgabe und scheinen den Fehler nicht zu erkennen.
»Julién« hat folgende Datei angehängt:
  • Sudoku.java.txt (4,47 kB - 68 mal heruntergeladen - zuletzt: 31.05.2022, 06:45)
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von »Julién« (28.11.2016, 02:55) aus folgendem Grund: Versehentlich enter gedrückt


David Scherfgen

Administrator

Beiträge: 10 352

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

28.11.2016, 06:39

Drei Anmerkungen:
In “isPermutationMatrix“ machst du unnötig viele Prüfungen, du testest jede Zeile und jede Spalte mehrfach.
Und der eigentliche Fehler ist wohl, dass du nur dann “ungültig“ sagst, wenn ein Symbol mehrfach vorkommt. Du prüfst nicht, ob alle Symbole vorkommen. Da auch Nullen vorkommen dürfen, ist das ein Unterschied! Ein komplett leeres Sudoku wird von deinem Algorithmus als gültig akzeptiert.
Und dann prüfst du auch nirgendwo, ob das Array die richtige Größe von 9x9 hat.

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 713

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

3

28.11.2016, 20:10

Hi,
danke für die Anmerkungen :thumbsup: ,
ich habe die Schleifen "herausgezogen".

Laut Unittests muss ich ein leeres Sudoku auch als gültig einstufen.
Warum das so ist? *zucken mit schultern*

Edit:
Habe gerade eine EMail bekommen, dass meine Lösung bewertet wurde.
10/10 Punkten, anscheinend gab es Probleme mit der Aufgabenstellung.
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Schorsch

Supermoderator

Beiträge: 5 114

Wohnort: Wickede

Beruf: Softwareentwickler

  • Private Nachricht senden

4

28.11.2016, 20:26

Laut Unittests muss ich ein leeres Sudoku auch als gültig einstufen.
Warum das so ist? *zucken mit schultern*

Das hängt ja davon ab was speziell getestet wird. Möchtest du wissen ob dein Sudoku lösbar oder eben eindeutig lösbar ist. Ein komplett leeres Sudoku ist ja an sich lösbar aber eben nicht eindeutig. Von daher kann das schon passen.
„Es ist doch so. Zwei und zwei macht irgendwas, und vier und vier macht irgendwas. Leider nicht dasselbe, dann wär's leicht.
Das ist aber auch schon höhere Mathematik.“

Sacaldur

Community-Fossil

Beiträge: 2 280

Wohnort: Berlin

Beruf: FIAE

  • Private Nachricht senden

5

28.11.2016, 22:33

Laut Unittests muss ich ein leeres Sudoku auch als gültig einstufen.
Warum das so ist? *zucken mit schultern*

Das hängt ja davon ab was speziell getestet wird. Möchtest du wissen ob dein Sudoku lösbar oder eben eindeutig lösbar ist. Ein komplett leeres Sudoku ist ja an sich lösbar aber eben nicht eindeutig. Von daher kann das schon passen.

Ich denke mal, dass es nicht um die Lösbarkeit ging, aber dennoch muss ich eine ähnliche Anmerkung machen. Ein Sudoku kann auch dann ein valides Sudoku sein, wenn es noch nicht fertig gelöst wurde. Hier muss man betrachten, ob "valide" synonym zu "fertig und richtig" verwendet wird oder nicht. Wenn ein leeres Sudoku dabei als valide betrachtet wird, dann dürfte es letzterer Fall sein.
Spieleentwickler in Berlin? (Thema in diesem Forum)
---
Es ist ja keine Schande etwas falsch zu machen, als Programmierer tu ich das täglich, [...].

Julién

Alter Hase

  • »Julién« ist der Autor dieses Themas

Beiträge: 713

Wohnort: Bayreuth

Beruf: Student | Hilfswissenschaftler in der Robotik

  • Private Nachricht senden

6

02.12.2016, 00:47

Bei den Übungsaufgaben geht es darum, dass wir "neue" Konzepte wie Rekursion etc. anwenden lernen.
Das Problem bei der ganzen Aufgabe war, dass die Aufgabenstellung und die "Akzeptanzkriterien" ziemlich undeutlich, teilweise auch fehlerhaft,
formuliert waren.
Mein Zeitmanagement war, um fair zu sein, natürlich nicht optimal. Um 5 Uhr morgens programmiert man mir noch in BrainFuck-Logik :crazy:
I write my own game engines because if I'm going to live in buggy crappy filth, I want it to me my own - Ron Gilbert

Werbeanzeige