# Kenkem



## marolle (23. Nov 2016)

Hallo. ich bin neue Studentin in Wirtschaftsinformatik in Deutschland.ich hatte nie auf Java gehört. ich muss diese Aufgabe Vor Montag abegeben. ich weiß nicht nicht wie ich anfangen muss. bitte Hilfe. (Auch jemand mit dem ich studieren kann)
Eine Variante von Sudoku heißt KenKen. Das Rätsel besteht aus einer (n×n)-Matrix M, die durch dickere Umrandung zuunterschiedlichen Partitionen Pi zusammengefasst werden. Jedem Pi ist eine Operation Oi ∈ {+,−,∗,/,' '} und deren Endergebnis Ri zugeordnet. Das KenKen ist gelöst, wenn in jeder Spalte bzw. jeder Zeile jeweils alle Zahlen von 1 bis n genau einmal so vorkommen, dass sich bei Anwenden von Oi auf alle Zahlen in Pi das angegebene Ri ergibt. int[][][] kenken Jede der im Folgenden zu entwickelnden Methoden wird mit einem 3D-int[][][]-Feld aufgerufen, das ein KenKenProblem repräsentieren soll. Eine korrekte Datenstruktur hat exemplarisch nebenstehenden Aufbau: Jeder Eintrag enthält die Beschreibung einer Partition Pi als 2D-int[][]-Feld. Der erste Eintrag für jede einzelne Partition Pi enthält wiederum ein 1D-int[]-Feld der Länge 2 mit dem (Ri, Oi)-Paar. Alle weiteren Einträge von Pi sind ebenfalls 1D-int[]-Felder der Länge 2 und enthalten die Koordinaten eines zu Pi gehörenden Zahlenfeldes der Matrix M in der Form (Zeile, Spalte). Das Zahlenfeld „oben/links“ in M hat die Koordinaten (0,0). Erstellen Sie eine Klasse KenKen und implementieren Sie darin die einzelnen Methoden gemäß ihrer API wie folgt: a) Ergänzen Sie zunächst die Methode checkIntegrity(). Sie soll überprüfen, ob das übergebene 3D-Arraystrukturell als KenKen-Problem (wie oben beschrieben und im Beispiel-Bild gezeigt) interpretiert werden kann. b) Implementieren Sie nun die Methode checkValidity(). Sie soll überprüfen, ob das übergebene 3D-Array semantisch als KenKen-Problem interpretiert werden kann, d.h. ob die Partitionen überlappungsfrei sind und insgesamt genau ein quadratisches KenKen abdecken (die Partitionen selbst müssen dabei nicht zwangsweise zusammenhängend sein). c) Programmieren Sie schließlich ein rekursives Verfahren zur Lösung eines KenKen-Problems in solve(). Falls es mindestens eine Lösung gibt, dann soll solve() eine beliebige davon als quadratisches Array zurückgeben. Geben Sie Ihre vollständige Datei KenKen.java über EST ab.


----------



## Xyz1 (23. Nov 2016)

Wie schaut denn dieses Beispiel-Bild?


----------



## mariane (24. Nov 2016)

Heidi Witzka und Holla die Waldfee, ich verstehe nur Bahnhof. Dank Wiki reichte ein Blick auf die oberste Abbildung und alles war klar.
Es gibt reichlich rekusiv arbeitetende Sudoku-Solver, suche dir einen aus, den du verstehst bzw. nachvollziehen kannst, es gibt dann immer Abbruchbedingung für die Rekusion, keine Zahl doppelt in Zeile, keine doppelt in der Spalte etc.pp. Die Abbruchbedingung für die 3x3 Blöcke entfernst du und nimmst dafür für jede zu berechnende Partition eine weitere Abbruchbedingung auf. Wie genau nun die Partitionen und Operationen übergeben werden, must du natürlich auch noch überlegen. Zum testen würde ich erstmal mit einen 4x4 Ken Ken anfangen und Partionen und Operation in den Abbruchbedingungen fest vorgeben. Wenn das dann schonmal läuft ist das die halbe Miete.


----------



## VfL_Freak (24. Nov 2016)

Moin,

sagt mal ... ist bei Euch beiden die ENTER-Taste kaputt ??? 
Bei den Eingaben bekommt man ja Augenkrebs 

Gruß Klaus


----------



## Xyz1 (24. Nov 2016)

mariane hat gesagt.:


> für jede zu berechnende Partition


Das grenzt zwar an Quatsch, aber dennoch möchte ich das mit den Partitionen gerne verstehen, deswegen wäre es wichtig, das sie das nochmal visualisiert anzeigt.

Meine Hilfsbereitschaft habe ich ja schon angeboten.


----------



## mariane (24. Nov 2016)

gemeint ist soetwas: https://de.wikipedia.org/wiki/Datei:KenKenSolution.svg


DerWissende hat gesagt.:


> Das grenzt zwar an Quatsch


Wieso ist das Quatsch? Wie bei einem normalen Sudoku mußt du alle Bedingungen überprüfen sobald sie überprüfbar sind, wenn im Wiki-Beispiel links die 5 und 6 die erste Partition ausfüllen, testest du ob die Summe 11 ist, weil dies die Bedingung ist. In den Beispiel wird auch klar, dass 1,2,3,4 nie zur Lösungsmenge der Partiton zählen können.


----------



## Xyz1 (24. Nov 2016)

Könntest du das verlinkte Bild bitte genauer Begründen/Beschreiben, denn so geht nicht hervor, was überhaupt eine Partition ist.

Natürlich ist das Quatsch, Blödsinn, Nonsens - denn eine einfache, sofortige Abbruchbedingung ist das nicht. Sry wenn ich dich dahingehen verbessern muss.


----------



## mariane (24. Nov 2016)

Wenn du in den zwei Feldern, 4 und 3 stehen hättest, wäre das false, weil 3 + 4 != 11 ist. 1A Abbruchbedingung, da brauchst du die anderen Felder gar nicht weiter austesten.

Also nichts mit Quatsch, Blödsinn, Nonsens. Vor kurzen habe ich erst einen Solver mit eigenen Abbruchbedingungen geschieben , um z.B. soetwas https://www.geocaching.com/geocache/GC6WA3E oder soetwas https://www.geocaching.com/geocache/GC6W5NA zu erstellen und zu überprüfen. Also komm' bitte von deinem hohen Ross wieder runter. Die Wiki-Abbildung erkläre ich dir nicht, die ist selbsterklärend - sorry!

Beide Sudokus sind übrigens mit herkömmlichen Solvern nicht zu lösen.


----------



## Xyz1 (24. Nov 2016)

Nö, selbsterklärend/selbstverständlich ist das nicht - zumal gar nicht ersichtlich ist, was denn eine dicke und dünne Linie ist. Und deine links werde ich nicht aufrufen - da ich mit Bioinformatik nicht so viel zu tun habe.

Wie es auch sei, der/die TE hat sich bisher nicht wieder gemeldet - ein Zeichen/Signal dafür, dass Hilfe nicht erforderlich/gewünscht ist.


----------



## Meniskusschaden (25. Nov 2016)

DerWissende hat gesagt.:


> ... denn so geht nicht hervor, was überhaupt eine Partition ist.


Die Erklärung hat mich auch erst einmal erschlagen. Aber zusammen mit dem Bild ist die Beschreibung der TE dann ja doch ganz gut verständlich:


marolle hat gesagt.:


> Das Rätsel besteht aus einer (n×n)-Matrix M, die durch dickere Umrandung zuunterschiedlichen Partitionen Pi zusammengefasst werden. Jedem Pi ist eine Operation Oi ∈ {+,−,∗,/,' '} und deren Endergebnis Ri zugeordnet.


Die Zahlen einer Partition müssen also so gewählt werden, dass es es zum angegebenen Ergebnis führt, wenn man sie über die angegebene Rechenoperation miteinander verknüpft.


----------



## JohnDoeAuD (25. Nov 2016)

RTFM: https://www2.cs.fau.de/teaching/WS2016/AuD/organisation/plagiarismus.html !!!


----------



## Xyz1 (25. Nov 2016)

Meniskusschaden hat gesagt.:


> Die Zahlen einer Partition müssen also so gewählt werden, dass es es zum angegebenen Ergebnis führt, wenn man sie über die angegebene Rechenoperation miteinander verknüpft.


Jo, aber von oben nach unten, von unten nach oben, von links nach rechts, von rechts nach links?
Also für mich zu viele Unbekannten.



JohnDoeAuD hat gesagt.:


> RTFM: https://www2.cs.fau.de/teaching/WS2016/AuD/organisation/plagiarismus.html !!!


Ich habe noch gar nichts gemacht, nur nach der Aufgabe gefragt  Bitte verhaften Sie mich nicht 
(Nur ein Scherz)


----------



## Meniskusschaden (25. Nov 2016)

DerWissende hat gesagt.:


> Jo, aber von oben nach unten, von unten nach oben, von links nach rechts, von rechts nach links?
> Also für mich zu viele Unbekannten.


Das kann man ja erst einmal offen lassen und gegen ein OperandOrderStrategy-Interface programmieren.


----------

