Hi, ich studiere Informatik im ersten Semester. Normalerweise habe ich keine Probleme mit Programmieraufgaben, allerdings spielen nun die Schwierigkeit der Problemstellung und die bescheidenen Werkzeuge unserer momentanen Programmiersprache zusammen.
Deshalb erstmal für die Leser: Wir benutzen die funktionale Programmiersprache Racket.
Das Problem ist das altbewährte Damenproblem in der allgemeinen Form. Genauer heißt das, wir übergeben einer Prozedur einen Wert n, der die Maße des Feldes darstellen soll und herausbekommen wollen wir einen Wert x, der die Anzahl aller möglichen Lösungen enthält. Der Vertrag ist also:
n-queens: number -> number
Mehr ist nicht vorgegeben, außer natürlich rekursiv programmieren (wie auch anders in Racket) und nach dem Backtracking-Verfahren.
An und für sich ist das Problem in Worten gefasst nicht schwer: Wir setzen eine Dame in die erste Zeile, setzen dann eine zweite Dame in die zweite Zeile und prüfen, ob diese dort gesetzt werden kann, wenn ja springt man in die nächste Zeile, wenn nicht muss man die zweite Dame versetzen. Ist man in der Zeile n+1 angekommen, so hat man eine Lösung gefunden. Dann wird die erste Dame um ein Feld versetzt, bis die Spalte n+1 erreicht wurde.
Die Überprüfungsprozedur, ob eine Dame gesetzt werden kann habe ich (glaube ich). Aber trotzdem weiß ich im Moment gar nicht weiter, weil wir nur Listen übergeben können und wie der Rekursionsanker gesetzt werden muss und wie letztendlich die Rekursion gestartet werden soll.
Es wäre echt super, wenn ihr mir helfen könntet. Wenn aus meinen Erläuterungen noch etwas unklar geblieben sein sollte, fragt bitte nach, dann werde ich so schnell wie möglich antworten.
Mit freundlichen Grüßen, Naryxus
Deshalb erstmal für die Leser: Wir benutzen die funktionale Programmiersprache Racket.
Das Problem ist das altbewährte Damenproblem in der allgemeinen Form. Genauer heißt das, wir übergeben einer Prozedur einen Wert n, der die Maße des Feldes darstellen soll und herausbekommen wollen wir einen Wert x, der die Anzahl aller möglichen Lösungen enthält. Der Vertrag ist also:
n-queens: number -> number
Mehr ist nicht vorgegeben, außer natürlich rekursiv programmieren (wie auch anders in Racket) und nach dem Backtracking-Verfahren.
An und für sich ist das Problem in Worten gefasst nicht schwer: Wir setzen eine Dame in die erste Zeile, setzen dann eine zweite Dame in die zweite Zeile und prüfen, ob diese dort gesetzt werden kann, wenn ja springt man in die nächste Zeile, wenn nicht muss man die zweite Dame versetzen. Ist man in der Zeile n+1 angekommen, so hat man eine Lösung gefunden. Dann wird die erste Dame um ein Feld versetzt, bis die Spalte n+1 erreicht wurde.
Die Überprüfungsprozedur, ob eine Dame gesetzt werden kann habe ich (glaube ich). Aber trotzdem weiß ich im Moment gar nicht weiter, weil wir nur Listen übergeben können und wie der Rekursionsanker gesetzt werden muss und wie letztendlich die Rekursion gestartet werden soll.
Es wäre echt super, wenn ihr mir helfen könntet. Wenn aus meinen Erläuterungen noch etwas unklar geblieben sein sollte, fragt bitte nach, dann werde ich so schnell wie möglich antworten.
Mit freundlichen Grüßen, Naryxus