v.1.0.0 NDameModel setup
This commit is contained in:
7
libs/backtracking-lib/src/backtracker.spec.ts
Normal file
7
libs/backtracking-lib/src/backtracker.spec.ts
Normal file
@@ -0,0 +1,7 @@
|
||||
import { Backtracker } from './backtracker';
|
||||
|
||||
describe('Backtracker', () => {
|
||||
it('should be defined', () => {
|
||||
expect(new Backtracker()).toBeDefined();
|
||||
});
|
||||
});
|
||||
26
libs/backtracking-lib/src/backtracker.ts
Normal file
26
libs/backtracking-lib/src/backtracker.ts
Normal file
@@ -0,0 +1,26 @@
|
||||
import { IBacktracking } from './backtracking.interface';
|
||||
|
||||
export class Backtracker {
|
||||
findSolution = (dataObject: IBacktracking): boolean => {
|
||||
if (dataObject.solved()) return true;
|
||||
|
||||
// nächstes freie Position suchen
|
||||
dataObject.nextPosition();
|
||||
|
||||
dataObject.options().forEach((option) => {
|
||||
// darf die Option hier eingestellt werden ?
|
||||
if (dataObject.positionPossible()) {
|
||||
dataObject.applyPosition();
|
||||
|
||||
// Lösung mit dem neu konfigurierten dataObject finden
|
||||
const solved: boolean = this.findSolution(dataObject);
|
||||
|
||||
if (solved) return true;
|
||||
|
||||
dataObject.discardPosition();
|
||||
}
|
||||
});
|
||||
|
||||
return false;
|
||||
};
|
||||
}
|
||||
@@ -1,4 +1,27 @@
|
||||
import { Injectable } from '@nestjs/common';
|
||||
|
||||
/**
|
||||
* PSEUDO-CODE:
|
||||
*
|
||||
void FIND_SOLUTIONS (Parameter):
|
||||
|
||||
wenn (gültige Lösung ):
|
||||
Bewahren Sie die Lösung auf
|
||||
Zurückkehren (gelöst)
|
||||
|
||||
für (alle Auswahlmöglichkeiten ):
|
||||
wenn (gültige Auswahl ):
|
||||
ANWENDEN ( Auswahl )
|
||||
|
||||
FIND_SOLUTIONS (Parameter)
|
||||
wenn (gültige Lösung ):
|
||||
Bewahren Sie die Lösung auf
|
||||
Zurückkehren (gelöst)
|
||||
|
||||
BACKTRACK ( Auswahl entfernen )
|
||||
|
||||
Zurückkehren (nicht gelöst)
|
||||
*/
|
||||
|
||||
@Injectable()
|
||||
export class BacktrackingLibService {}
|
||||
|
||||
10
libs/backtracking-lib/src/backtracking.interface.ts
Normal file
10
libs/backtracking-lib/src/backtracking.interface.ts
Normal file
@@ -0,0 +1,10 @@
|
||||
import { MatrixPosition } from './matrix-position';
|
||||
|
||||
export interface IBacktracking {
|
||||
options: () => Array<any>;
|
||||
solved: () => boolean;
|
||||
nextPosition: () => MatrixPosition;
|
||||
positionPossible: () => boolean;
|
||||
applyPosition: () => MatrixPosition;
|
||||
discardPosition: () => MatrixPosition;
|
||||
}
|
||||
25
libs/backtracking-lib/src/matrix-position.ts
Normal file
25
libs/backtracking-lib/src/matrix-position.ts
Normal file
@@ -0,0 +1,25 @@
|
||||
export class MatrixPosition {
|
||||
constructor(
|
||||
private _row: number,
|
||||
private _col: number,
|
||||
) {}
|
||||
|
||||
public get row() {
|
||||
return this._row;
|
||||
}
|
||||
public set row(r: number) {
|
||||
this._row = r;
|
||||
}
|
||||
|
||||
public get col() {
|
||||
return this._col;
|
||||
}
|
||||
|
||||
public set col(c: number) {
|
||||
this._col = c;
|
||||
}
|
||||
|
||||
public toString() {
|
||||
return `[${this._row},${this._col}]`;
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user