Weihnachtsaufgabenblatt, Rucksackproblem, Sudoku

Transcription

Weihnachtsaufgabenblatt, Rucksackproblem, Sudoku
Universität Bielefeld
Technische Fakultät
AG Praktische Informatik
Übung zu den Vorlesungen Algorithmen &
Datenstrukturen
Programmieren in Haskell
Wintersemester 2011/2012
Allgemeiner Hinweis: Die Punkte die mit der Lösung dieser Aufgaben erreicht werden können, sind Zusatzpunkte. Die Punkte werden zu Euren erzielten Punkten addiert,
erhöhen jedoch nicht die 50% Hürde aus der Gesamtpunktzahl.
Aufgabe 11.1 (9). Das Rucksackproblem ist das Problem aus einem Haufen von Gegenständen, denen jeweils ein Wert und ein Gewicht zugeordnet ist, diejenigen auszuwählen
die in einen Rucksack mit einer Maximalgewichtsangabe x passen, so dass der Gesamtwert
des Rucksacks maximiert wird.
Implementieren Sie eine Haskell-Programm, das Rucksackprobleminstanzen löst. Eine
Funktion soll für eine beliebige Eingabe den optimalen Rucksackwert (und das zugehörige
Gewicht) berechnen. Ein weitere Funktion berechnet den konkreten Inhalt von einem
optimalen Rucksack für eine Eingabe.
Aufgabe 11.2 (10). Implementieren Sie einen Sudoku-Solver in Haskell. Ein Sudoku
ist ein 9 × 9 Feld, dessen Zellen mit den Zahlen 1 − 9 gefüllt werden müssen. Dabei
müssen alle Zahlen 1 − 9 jeweils in jeder Zeile, jeder Spalte und in jedem der 3 × 3 Blöcke
vorkommen. Je nach Schwierigkeit werden wenige oder viele Zahlen vorgegeben.
Der Solver soll ein teilausgefülltes Feld als Eingabe bekommen und eine oder mehrere
Lösungen ausgeben. Ob alle Lösungen ausgeben werden, soll über einen Parameter konfigurierbar sein.
Und eine Beispielausgabe ist:
5 3 4 | 6 7 8 | 9 1 2
6 7 2 | 1 9 5 | 3 4 8
1 9 8 | 3 4 2 | 5 6 7
53..7....
-------+-------+-----6..195...
8 5 9 | 7 6 1 | 4 2 3
.98....6.
4 2 6 | 8 5 3 | 7 9 1
8...6...3
7 1 3 | 9 2 4 | 8 5 6
4..8.3..1
7...2...6
-------+-------+-----.6....28.
9 6 1 | 5 3 7 | 2 8 4
...419..5
2 8 7 | 4 1 9 | 6 3 5
3 4 5 | 2 8 6 | 1 7 9
....8..79
Begründen Sie Ihre Modellierungsentscheidungen und wesentliche Implementationseigenschaften.
Eine Beispieleingabe ist:
Abgabe: Dienstag, 10.1.2012. Bearbeitung in 2er oder 3er Gruppen (alle Namen und
Tutor auf die Abgabe schreiben).
1