Files
backtracking/libs/backtracking-lib/src/abstract-backtracker.ts
2024-11-29 20:35:48 +01:00

56 lines
1.6 KiB
TypeScript

import { Logger } from '@nestjs/common';
import { IBacktrackingModel } from './backtracking-model.interface';
export abstract class ABacktracker {
protected readonly logger = new Logger(this.constructor.name);
abstract doBacktrack: () => boolean[][];
protected findSolution = (dataModel: IBacktrackingModel): boolean => {
if (dataModel.solved()) return true;
// nächstes freie Position suchen
// const nxtPossPos = dataModel.nextPossiblePosition();
while (dataModel.nextPossiblePosition()) {
dataModel.applyPosition();
// Lösung mit dem neu konfigurierten dataObject finden
const solved: boolean = this.findSolution(dataModel);
if (solved) return true;
const afterDiscardedPos = dataModel.discardPosition();
this.logger.debug(`afterDiscardedPos: ${afterDiscardedPos}`);
}
return false;
};
protected ___findSolution___ = (dataModel: IBacktrackingModel): boolean => {
if (dataModel.solved()) return true;
// dataModel.options.forEach((option) => {
while (dataModel.hasNext()) {
// nächstes freie Position suchen
const nxtPos = dataModel.nextPosition();
this.logger.debug(`nxtPos: ${nxtPos}`);
// darf die Option hier eingestellt werden ?
if (dataModel.positionPossible()) {
dataModel.applyPosition();
// Lösung mit dem neu konfigurierten dataObject finden
const solved: boolean = this.findSolution(dataModel);
if (solved) return true;
const afterDiscardedPos = dataModel.discardPosition();
this.logger.debug(`afterDiscardedPos: ${afterDiscardedPos}`);
}
}
return false;
};
}