mene zanima koji je moj nivo programiranja. recimo da li je ovaj kod pocetnika ili juniora
import { Addend } from "/Addend.js";
export function calculate(dividend, divisor) {
/* divide addends with highest degree, after that multiply that result with divisor and substract from dividend, continue until dividen.degree > divisor.degree */
let arrDividend = [...dividend];
// save results of devision in result array
const result = [];
while (
(findAddendWithHightestDegree(arrDividend)?.degree || -1) >=
findAddendWithHightestDegree(divisor).degree
) {
let devisionValue = division(
findAddendWithHightestDegree(arrDividend),
findAddendWithHightestDegree(divisor)
);
result.push(devisionValue);
let substractArr = multiplication(devisionValue, divisor);
arrDividend = subtractionMany(arrDividend, substractArr);
console.log(result);
}
return result;
}
export function division(dividendTerm, divisorTerm) {
return new Addend(
`${Math.floor(dividendTerm.coefficient / divisorTerm.coefficient)}x^${
dividendTerm.degree - divisorTerm.degree
}`
);
}
// multiplication of two Addends help function for mulltiplication
function multipliSingle(term1, term2) {
return new Addend(
`${term1.coefficient * term2.coefficient}x^${term1.degree + term2.degree}`
);
}
export function multiplication(factor1, factor2) {
return factor2.map((addend) => multipliSingle(factor1, addend));
}
// finding addend with highest degree in array
function findAddendWithHightestDegree(arrayOfAddends) {
if (arrayOfAddends.length === 0) return;
return arrayOfAddends.reduce((maxAddend, addend) =>
maxAddend.degree > addend.degree ? maxAddend : addend
);
}
export function subtraction(minuend, subtrahend) {
minuend = minuend || new Addend("0x^0");
subtrahend = subtrahend || new Addend("0x^0");
// case degrees are not the same do nothing, but skip if one of addends is 0;
if (
minuend.degree !== subtrahend.degree &&
!subtrahend.degree &&
!minuend.degree
)
return;
return new Addend(
`${minuend.coefficient - subtrahend.coefficient}x^${
minuend.degree || subtrahend.degree
}`
);
}
function subtractionMany(minuendArr, substractArr) {
const subArr = [];
// find the highest degree in minuendArr, we assume minuendArr is higher degree then substractArr
/* if not then just change the code belove, not max of minuendArr, but max from both */
let maxDegreeAddend = findAddendWithHightestDegree(minuendArr);
for (let i = maxDegreeAddend.degree; i >= 0; i--) {
let addendMinu = minuendArr.find((addend) => addend.degree === i);
let addendSub = substractArr.find((addend) => addend.degree === i);
if (
(addendMinu || addendSub) &&
subtraction(addendMinu, addendSub).coefficient
)
subArr.push(subtraction(addendMinu, addendSub));
}
return subArr;
}
const seka = [new Addend("6x^3"), new Addend("15x^2"), new Addend("14x^1")];
const mama = [new Addend("2x^1"), new Addend("5x^0")];
console.log(calculate(seka, mama));