v.2.0.1 doBacktracking @Query('starting-position'...)

This commit is contained in:
TiiJay
2024-11-30 10:06:51 +01:00
parent 63626ce9d0
commit 0e588651bf
5 changed files with 28 additions and 10 deletions

View File

@@ -4,9 +4,12 @@ import { NDameModel } from './n-dame-model';
export class NDameBacktracker extends ABacktracker { export class NDameBacktracker extends ABacktracker {
private _model: NDameModel; private _model: NDameModel;
constructor(private readonly modelSize: number) { constructor(
private readonly startingPosition,
private readonly modelSize: number,
) {
super(); super();
this._model = new NDameModel(modelSize); this._model = new NDameModel(startingPosition, modelSize);
} }
get model() { get model() {

View File

@@ -17,11 +17,24 @@ export class NDameModel implements IBacktrackingModel {
this._modelSize - 1, this._modelSize - 1,
); );
constructor(private readonly _modelSize: number) { constructor(
private readonly _startingPosition,
private readonly _modelSize: number,
) {
this.initNDameField(); this.initNDameField();
} }
private initNDameField() { private initNDameField() {
// haben wir eine StartPosition, das muss die modelPosition expilzit gesetzt werden
// StartPosition darf nicht größer als modelSize sein !
if (
this._startingPosition > 0 &&
this._startingPosition <= this.modelSize
) {
this.modelPosition.col = this._startingPosition - 2;
this.modelPosition.row = 0;
}
for (var zeile = 0; zeile < this._modelSize; zeile++) { for (var zeile = 0; zeile < this._modelSize; zeile++) {
this.nDamesMatrix[zeile] = []; this.nDamesMatrix[zeile] = [];
for (var spalte = 0; spalte < this._modelSize; spalte++) { for (var spalte = 0; spalte < this._modelSize; spalte++) {

View File

@@ -35,9 +35,11 @@ export class NDameProblemController {
doBacktracking( doBacktracking(
@Query('model-size', new DefaultValuePipe(5), ParseIntPipe) @Query('model-size', new DefaultValuePipe(5), ParseIntPipe)
modelSize: number, modelSize: number,
@Query('starting-position', new DefaultValuePipe(-1), ParseIntPipe)
startingPosition: number,
) { ) {
return this.nDameProblemService return this.nDameProblemService
.doBacktracking(modelSize) .doBacktracking(startingPosition, modelSize)
.map((row) => row.map((col) => (col ? 'X' : 'O'))); .map((row) => row.map((col) => (col ? 'X' : '.')));
} }
} }

View File

@@ -6,14 +6,14 @@ import { NDameBacktracker } from './n-dame-backtracker';
export class NDameProblemService { export class NDameProblemService {
private readonly logger = new Logger(this.constructor.name); private readonly logger = new Logger(this.constructor.name);
doBacktracking(modelSize: number): boolean[][] { doBacktracking(startingPosition: number, modelSize: number): boolean[][] {
const nDameBacktracker = new NDameBacktracker(modelSize); const nDameBacktracker = new NDameBacktracker(startingPosition, modelSize);
return nDameBacktracker.doBacktrack(); return nDameBacktracker.doBacktrack();
} }
getBacktracking(): NDameBacktracker { getBacktracking(): NDameBacktracker {
const backTracker = new NDameBacktracker(5); const backTracker = new NDameBacktracker(0, 5);
backTracker.model.solved(); backTracker.model.solved();
@@ -31,7 +31,7 @@ export class NDameProblemService {
} }
getModel(field: number, modelSize: number): boolean[][] { getModel(field: number, modelSize: number): boolean[][] {
const model = new NDameModel(modelSize); const model = new NDameModel(-1, modelSize);
const modelFieldCount = model.modelSize * model.modelSize; const modelFieldCount = model.modelSize * model.modelSize;
const rndFields = []; const rndFields = [];

View File

@@ -1,6 +1,6 @@
{ {
"name": "backtracking", "name": "backtracking",
"version": "2.0.0", "version": "2.0.1",
"description": "", "description": "",
"author": "", "author": "",
"private": true, "private": true,