Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- var button = document.createElement('input');
- var button2 = document.createElement('input');
- var lvls;
- var initMtx = [];
- var rows=0;
- var cols = 0;
- var flag=1;
- var epmMtx = [];
- var epmFinal = [];
- var ids = ['1','2','3', '4', '5', '6', '7', '8', '9', '10', '11'];
- mtx = [];
- ////main func to start program
- function build(){
- var lvls = document.getElementById('lvls').value;
- document.body.innerHTML = '';
- var div = document.createElement('div');
- div.innerHTML = "<strong>Number of rows in each level";
- document.body.append(div);
- for (var i=0;i<=lvls;i++){
- if(i!=lvls){
- document.body.appendChild(document.createTextNode("Level\t" + (i+1)+" \t"));
- }else{document.body.appendChild(document.createTextNode("Columns "));}
- var input = document.createElement("input");
- input.type = "text";
- document.body.appendChild(input);
- document.body.appendChild(document.createElement("br"));
- }
- button.type = "button";
- button.className = "butt"
- button.value = "Build";
- document.body.appendChild(button);
- /////////////////code to build init mtx
- rowsNum = [];
- button.onclick= function(){
- for (var i=0;i<=lvls;i++){
- rowsNum.push(parseInt(document.getElementsByTagName("input")[i].value));
- }cols=rowsNum[rowsNum.length-1];
- document.body.innerHTML = '';
- for (var i=0;i<rowsNum.length-1;i++){
- rows+=rowsNum[i];
- }
- var tab = document.createElement("table");
- for (var i = 0; i < rows; i++){
- var row = tab.insertRow();
- for(var j = 0; j < cols; j++){
- var cell = row.insertCell();
- var input = document.createElement('input');
- input.type = "text";
- cell.appendChild(input);
- }
- document.body.appendChild(tab);
- }
- button2.type = "button";
- button2.className = "butt"
- button2.value = "Solve";
- document.body.appendChild(button2);
- }
- //////////////////////// code to get values from init mtx
- var rowArr = [];
- button2.onclick = function(){
- initMtx = [];
- for (let i = 0; i < rows; i++){
- for (let j = 0; j < cols; j++){
- var tmp = document.getElementsByTagName("table")[0].getElementsByTagName("tr")[i].getElementsByTagName("td")[j].firstElementChild.value;
- //console.log(tmp);
- rowArr.push(tmp);
- }
- initMtx.push(rowArr); rowArr = [];
- }
- if (checkCorrect(initMtx)){
- document.body.innerHTML = '';
- }else{
- alert("Incorrect data");
- }
- for (var i=0;i<rowsNum[0];i++){
- for (var j=rowsNum[0]; j<parseInt(rowsNum[0])+parseInt(rowsNum[1]);j++){
- epmMtx.push(compArr(initMtx[i], initMtx[j]));
- }
- }console.log(epmMtx);
- //epmMtx = epmMtx.sort();
- a=[];
- for (var i=0; i<epmMtx.length; i++){
- a.push(epmMtx.slice(i,i+1));
- }epmMtx = epmMtx.sort();
- for (var i=0; i<epmMtx.length-1;i++){
- if (epmMtx[i]=="000"){
- i++;
- }
- //var j = m;
- for (var j=i+1;j<epmMtx.length;j++){
- //console.log(j);
- if (compEPM(epmMtx[i], epmMtx[j])){
- console.log(epmMtx[i], epmMtx[j], j);
- //idArr.push(j);
- epmMtx[j]="000";
- }
- }
- }
- var t=0;
- for (var i=0; i<epmMtx.length; i++){
- if (epmMtx[i]!="000"){
- epmFinal[t]=(epmMtx.slice(i,i+1));
- t++;
- }
- }
- tmp=[];
- for (let i=0;i<epmFinal.length; i++){
- tmp=[];
- for (let j=0;j<epmFinal[0][0].length; j++){
- if (epmFinal[i][0][j]=='1'){
- tmp.push(ids[j]);
- }
- }
- mtx.push(tmp);
- }console.log(mtx);
- ///// multiply
- const last = mtx.length;
- for (var i = 0; i < last-1; i++){
- console.log(mtx);
- mtx.push(mult(mtx[i], mtx[mtx.length-1]));
- }
- result = mtx[mtx.length-1];
- result = lenSort(result);
- for (var i = 0; i<result.length;i++){
- result[i]=sortString(result[i]);
- }
- result=remArrDuplicates(result);
- idArr = [];
- m=1;
- //arr = result.slice(6);
- //console.log(arr);
- dnf = [];
- var l = result.length;
- for (var i=0; i<result.length-1;i++){
- if (result[i]=="000"){
- i++;
- }
- //var j = m;
- for (var j=i+1;j<result.length;j++){
- //console.log(j);
- if (removeExtras(result[i], result[j])==result[i].length){
- console.log(result[i], result[j], j);
- idArr.push(j);
- result[j]="000";
- //dnf.push(result[i].slice());
- //result.splice(j,1);
- //m++;
- }
- }
- }console.log(result);
- for (var i=0;i<result.length;i++){
- if (result[i]!="000"){
- dnf.push(result[i]);
- }
- }
- //dnf = remArrDuplicates(dnf);
- console.log(dnf);
- m=1;
- arr = result.slice(6);
- console.log(arr);
- var l = result.length;
- console.log(result);
- }
- /////////////////////////////////////////////////////////////
- }
- function checkCorrect(arr){///check 1 and 0
- var count=0;
- var general=0;
- for (let i=0;i<arr.length;i++){
- for(let j=0;j<arr[i].length;j++){
- if (arr[i][j]=="1"||arr[i][j]=="0"){
- count++;
- }general++;
- }
- }
- return general==count;
- }
- function compArr(arr1, arr2){
- var tmp = [];
- for (let i=0;i<arr1.length;i++){
- if (arr1[i]==arr2[i]){
- tmp.push("0");
- }else{
- tmp.push("1")
- }
- }
- return tmp;
- }
- /////что-то косяк работает норм, но не хочет принимать итоговую матрицу
- function compEPM(arr1,arr2){//figure if arr2 is extension of arr1
- var ones=0;
- var count=0;
- for (var i=0;i<arr1.length; i++){
- if (arr1[i]=='1'){
- ones++;
- }
- }
- for (var i=0;i<arr1.length;i++){
- if(arr1[i]==arr2[i]){
- if (arr1[i]=="1"){
- count++;
- }
- }
- }
- if (count>0&&ones>0){return count==ones;}
- else {return false}
- }
- //////////////////////////////
- /// peremnojenye probnoe
- //////////////////////////////
- // str = [];
- // mtx = [];
- // tmp = ['c'];
- // mtx.push(tmp);
- // tmp = ['b','e'];
- // mtx.push(tmp);
- // tmp = ['g','f'];
- // mtx.push(tmp);
- // tmp = ['a', 'b', 'd'];
- // mtx.push(tmp);
- // tmp = ['b', 'd', 'e','f'];
- // mtx.push(tmp);
- // const last = mtx.length;
- // for (var i = 0; i < last-1; i++){
- // console.log(mtx);
- // mtx.push(mult(mtx[i], mtx[mtx.length-1]));
- // }
- // result = mtx[mtx.length-1];
- // result = lenSort(result);
- // for (var i = 0; i<result.length;i++){
- // result[i]=sortString(result[i]);
- // }
- // result=remArrDuplicates(result);
- // idArr = [];
- // m=1;
- // //arr = result.slice(6);
- // //console.log(arr);
- // dnf = [];
- // var l = result.length;
- // for (var i=0; i<result.length-1;i++){
- // if (result[i]=="000"){
- // i++;
- // }
- // //var j = m;
- // for (var j=i+1;j<result.length;j++){
- // //console.log(j);
- // if (removeExtras(result[i], result[j])==result[i].length){
- // console.log(result[i], result[j], j);
- // idArr.push(j);
- // result[j]="000";
- // //dnf.push(result[i].slice());
- // //result.splice(j,1);
- // //m++;
- // }
- // }
- // }console.log(result);
- // for (var i=0;i<result.length;i++){
- // if (result[i]!="000"){
- // dnf.push(result[i]);
- // }
- // }
- // //dnf = remArrDuplicates(dnf);
- // console.log(dnf);
- // m=1;
- //arr = result.slice(6);
- //console.log(arr);
- //var l = result.length;
- //console.log(result);
- function mult(arr1, arr2){
- let arr = []; n=0;
- tmp = [];
- for (var i=0;i<arr1.length; i++){
- tmp = [];
- for (var j=0;j<arr2.length; j++){
- if (arr1[i]!=arr2[j]){
- arr.push(remDuplicates(arr1[i]+arr2[j]));
- }else{
- arr.push(arr1[i]);
- }
- }
- }//arr.push(tmp);
- arr.sort();
- for (var i=0;i<arr.length-1;i++){
- for (var m=1; m<arr.length; m++)
- for (var j=0;j<arr[i+1].length; j++){
- if (arr[i]==arr[m][j]){
- arr[m]="REMOVED";
- n++;
- }
- }
- }arr.sort();
- arr.splice(0,n);
- return arr;
- }
- function lenSort(arr){
- var len = arr.length;
- for (var i = 0; i < len ; i++) {
- for(var j = 0 ; j < len - i - 1; j++){ // this was missing
- if (arr[j].length > arr[j + 1].length) {
- // swap
- var temp = arr[j];
- arr[j] = arr[j+1];
- arr[j + 1] = temp;
- }
- }
- }
- return arr;
- }
- function sortString(str){
- var arr = str.split('');
- var tmp;
- for(var i = 0; i < arr.length; i++){
- for(var j = i + 1; j < arr.length; j++){
- if(arr[i] > arr[j]){
- tmp = arr[i];
- arr[i] = arr[j];
- arr[j] = tmp;
- }
- }
- }
- return arr.join('');
- }
- function remArrDuplicates(arr){
- return [...new Set(arr)];
- }
- function remDuplicates(s){
- var c = {};
- var r = '';
- for (var i = 0; i < s.length; i++) {
- if (!c[s[i]]) {
- r = r + s[i];
- c[s[i]] = 1;
- }
- }
- return r;
- }
- function removeExtras(arr1, arr2){
- var n = 0;
- for (var i=0;i<arr1.length;i++){
- for (var j=0;j<arr2.length;j++){
- if (arr1[i]==arr2[j]){
- n++;
- }
- }
- }return n;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement