/*
* Generate List of num zeros
*/
function zerosArr(num) {
let arr = [];
for (let i = 0; i < num; i++) {
arr.push(0);
}
return arr;
}
/*
* Convert integer to number list
*/
function makeArray(number) {
const numberString = number.toString();
const laenge = numberString.length;
let outputArr = [];
for (let i = 0; i < laenge; i++) {
outputArr.push(parseInt(numberString[laenge-1-i]));
}
return outputArr;
}
/*
* Old School addition
*/
function plus(array1, array2) {
let uebertrag;
let ergebnis = [];
let max = (arr1, arr2) => { return arr1.length > arr2.length ? arr1. length : arr2.length; }
const maxLength = max(array1, array2);
for (let i = 0; i < maxLength; i++) {
if (!uebertrag) {uebertrag = 0;}
let summand1 = array1[i] ? array1[i] : 0;
let summand2 = array2[i] ? array2[i] : 0;
let summe = summand1 + summand2 + uebertrag;
let feldWert = summe % 10;
ergebnis.push(feldWert);
uebertrag = ( summe - feldWert ) / 10;
if ( i == maxLength-1 && uebertrag ) { ergebnis.push(uebertrag)}
}
return ergebnis;
}
/*
* Old School multiplication
*
* NEEDS: Old school addition
*/
function mal(array1, array2) {
const laenge1 = array1.length;
const laenge2 = array2.length;
let product = [0]
for (let i = 0; i < laenge1; i++) {
for (let j = 0; j < laenge2; j++) {
let ergebnis = array1[i] * array2[j]
let feldWert = ergebnis % 10;
let uebertrag = ( ergebnis - feldWert ) / 10;
let zwischenArr = zerosArr(i+j);
zwischenArr.push(feldWert);
if ( uebertrag > 0 ) { zwischenArr.push(uebertrag) };
product = plus(product, zwischenArr);
}
}
return product;
}
function giveRow(number) {
const factor = makeArray(number);
let rowArray = [mal(factor,factor)];
for (let i = 3; i <= 100; i++) {
rowArray.push(mal(rowArray[rowArray.length-1] ,factor));
}
return rowArray.map(item => trimZeros(item));
}
function giveVector() {
const resultVector = [];
for (let i = 2; i <= 100; i++) {
resultVector.push(...giveRow(i));
}
return resultVector;
}
function trimZeros(array) {
let goOn = true;
while (goOn) {
if (array[array.length-1] === 0) {
array.pop();
} else {
goOn = false;
}
}
return array;
}
function removeDuplicates(array) {
let resultArray = [];
array.sort(compareArrays);
let lastValue = [];
for (let i = 0; i < array.length; i++) {
if (compareArrays(array[i], lastValue) !== 0) {
resultArray.push(array[i]);
}
lastValue = array[i];
}
return resultArray
}
function compareArrays(array1, array2 ) {
if ( array1.length > array2.length ) {
return 1;
}
else if ( array1.length < array2.length ) {
return -1; }
else {
for (let i = array1.length - 1; i >= 0; i--) {
if (array1[i] !== array2[i]) {
return array1[i] > array2[i] ? 1 : -1;
}
}
return 0;
}
}
console.log(removeDuplicates(giveVector()).length)