Guest User

Untitled

a guest
Dec 11th, 2019
88
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. var button = document.createElement('input');
  2. var button2 = document.createElement('input');
  3. var lvls;
  4. var initMtx = [];
  5. var rows=0;
  6. var cols = 0;
  7. var flag=1;
  8. var epmMtx = [];
  9. var epmFinal = [];
  10. var ids = ['1','2','3', '4', '5', '6', '7', '8', '9', '10', '11'];
  11. mtx = [];
  12. ////main func to start program
  13. function build(){
  14. var lvls = document.getElementById('lvls').value;
  15. document.body.innerHTML = '';
  16. var div = document.createElement('div');
  17. div.innerHTML = "<strong>Number of rows in each level";
  18. document.body.append(div);
  19. for (var i=0;i<=lvls;i++){
  20. if(i!=lvls){
  21. document.body.appendChild(document.createTextNode("Level\t" + (i+1)+" \t"));
  22. }else{document.body.appendChild(document.createTextNode("Columns "));}
  23. var input = document.createElement("input");
  24. input.type = "text";
  25. document.body.appendChild(input);
  26. document.body.appendChild(document.createElement("br"));
  27. }
  28.  
  29. button.type = "button";
  30. button.className = "butt"
  31. button.value = "Build";
  32. document.body.appendChild(button);
  33. /////////////////code to build init mtx
  34. rowsNum = [];
  35.  
  36. button.onclick= function(){
  37. for (var i=0;i<=lvls;i++){
  38. rowsNum.push(parseInt(document.getElementsByTagName("input")[i].value));
  39. }cols=rowsNum[rowsNum.length-1];
  40.  
  41. document.body.innerHTML = '';
  42. for (var i=0;i<rowsNum.length-1;i++){
  43. rows+=rowsNum[i];
  44. }
  45. var tab = document.createElement("table");
  46. for (var i = 0; i < rows; i++){
  47. var row = tab.insertRow();
  48. for(var j = 0; j < cols; j++){
  49. var cell = row.insertCell();
  50. var input = document.createElement('input');
  51. input.type = "text";
  52. cell.appendChild(input);
  53. }
  54. document.body.appendChild(tab);
  55. }
  56.  
  57. button2.type = "button";
  58. button2.className = "butt"
  59. button2.value = "Solve";
  60. document.body.appendChild(button2);
  61. }
  62. //////////////////////// code to get values from init mtx
  63. var rowArr = [];
  64.  
  65. button2.onclick = function(){
  66.  
  67. initMtx = [];
  68. for (let i = 0; i < rows; i++){
  69. for (let j = 0; j < cols; j++){
  70. var tmp = document.getElementsByTagName("table")[0].getElementsByTagName("tr")[i].getElementsByTagName("td")[j].firstElementChild.value;
  71. //console.log(tmp);
  72. rowArr.push(tmp);
  73. }
  74. initMtx.push(rowArr); rowArr = [];
  75. }
  76. if (checkCorrect(initMtx)){
  77. document.body.innerHTML = '';
  78. }else{
  79. alert("Incorrect data");
  80. }
  81.  
  82. for (var i=0;i<rowsNum[0];i++){
  83. for (var j=rowsNum[0]; j<parseInt(rowsNum[0])+parseInt(rowsNum[1]);j++){
  84. epmMtx.push(compArr(initMtx[i], initMtx[j]));
  85. }
  86. }console.log(epmMtx);
  87.  
  88. //epmMtx = epmMtx.sort();
  89.  
  90. a=[];
  91.  
  92. for (var i=0; i<epmMtx.length; i++){
  93. a.push(epmMtx.slice(i,i+1));
  94. }epmMtx = epmMtx.sort();
  95. for (var i=0; i<epmMtx.length-1;i++){
  96. if (epmMtx[i]=="000"){
  97. i++;
  98. }
  99. //var j = m;
  100. for (var j=i+1;j<epmMtx.length;j++){
  101. //console.log(j);
  102. if (compEPM(epmMtx[i], epmMtx[j])){
  103. console.log(epmMtx[i], epmMtx[j], j);
  104. //idArr.push(j);
  105. epmMtx[j]="000";
  106. }
  107. }
  108.  
  109. }
  110. var t=0;
  111. for (var i=0; i<epmMtx.length; i++){
  112. if (epmMtx[i]!="000"){
  113. epmFinal[t]=(epmMtx.slice(i,i+1));
  114. t++;
  115. }
  116. }
  117. tmp=[];
  118. for (let i=0;i<epmFinal.length; i++){
  119. tmp=[];
  120. for (let j=0;j<epmFinal[0][0].length; j++){
  121. if (epmFinal[i][0][j]=='1'){
  122. tmp.push(ids[j]);
  123. }
  124. }
  125. mtx.push(tmp);
  126. }console.log(mtx);
  127.  
  128. ///// multiply
  129. const last = mtx.length;
  130. for (var i = 0; i < last-1; i++){
  131. console.log(mtx);
  132. mtx.push(mult(mtx[i], mtx[mtx.length-1]));
  133. }
  134. result = mtx[mtx.length-1];
  135. result = lenSort(result);
  136. for (var i = 0; i<result.length;i++){
  137. result[i]=sortString(result[i]);
  138. }
  139. result=remArrDuplicates(result);
  140. idArr = [];
  141. m=1;
  142. //arr = result.slice(6);
  143. //console.log(arr);
  144. dnf = [];
  145.  
  146. var l = result.length;
  147. for (var i=0; i<result.length-1;i++){
  148. if (result[i]=="000"){
  149. i++;
  150. }
  151. //var j = m;
  152. for (var j=i+1;j<result.length;j++){
  153. //console.log(j);
  154. if (removeExtras(result[i], result[j])==result[i].length){
  155. console.log(result[i], result[j], j);
  156. idArr.push(j);
  157. result[j]="000";
  158. //dnf.push(result[i].slice());
  159. //result.splice(j,1);
  160. //m++;
  161. }
  162. }
  163. }console.log(result);
  164.  
  165.  
  166. for (var i=0;i<result.length;i++){
  167. if (result[i]!="000"){
  168. dnf.push(result[i]);
  169. }
  170. }
  171. //dnf = remArrDuplicates(dnf);
  172. console.log(dnf);
  173. m=1;
  174. arr = result.slice(6);
  175. console.log(arr);
  176. var l = result.length;
  177.  
  178.  
  179.  
  180. console.log(result);
  181.  
  182. }
  183.  
  184. /////////////////////////////////////////////////////////////
  185.  
  186. }
  187. function checkCorrect(arr){///check 1 and 0
  188. var count=0;
  189. var general=0;
  190. for (let i=0;i<arr.length;i++){
  191. for(let j=0;j<arr[i].length;j++){
  192. if (arr[i][j]=="1"||arr[i][j]=="0"){
  193. count++;
  194. }general++;
  195. }
  196. }
  197. return general==count;
  198. }
  199.  
  200. function compArr(arr1, arr2){
  201. var tmp = [];
  202. for (let i=0;i<arr1.length;i++){
  203. if (arr1[i]==arr2[i]){
  204. tmp.push("0");
  205. }else{
  206. tmp.push("1")
  207. }
  208. }
  209. return tmp;
  210. }
  211. /////что-то косяк работает норм, но не хочет принимать итоговую матрицу
  212. function compEPM(arr1,arr2){//figure if arr2 is extension of arr1
  213. var ones=0;
  214. var count=0;
  215. for (var i=0;i<arr1.length; i++){
  216. if (arr1[i]=='1'){
  217. ones++;
  218. }
  219. }
  220. for (var i=0;i<arr1.length;i++){
  221. if(arr1[i]==arr2[i]){
  222. if (arr1[i]=="1"){
  223. count++;
  224. }
  225. }
  226. }
  227. if (count>0&&ones>0){return count==ones;}
  228. else {return false}
  229. }
  230.  
  231.  
  232.  
  233.  
  234.  
  235. //////////////////////////////
  236.  
  237. /// peremnojenye probnoe
  238.  
  239. //////////////////////////////
  240.  
  241.  
  242.  
  243.  
  244.  
  245.  
  246. // str = [];
  247. // mtx = [];
  248. // tmp = ['c'];
  249. // mtx.push(tmp);
  250. // tmp = ['b','e'];
  251. // mtx.push(tmp);
  252. // tmp = ['g','f'];
  253. // mtx.push(tmp);
  254. // tmp = ['a', 'b', 'd'];
  255. // mtx.push(tmp);
  256. // tmp = ['b', 'd', 'e','f'];
  257. // mtx.push(tmp);
  258. // const last = mtx.length;
  259.  
  260. // for (var i = 0; i < last-1; i++){
  261. // console.log(mtx);
  262. // mtx.push(mult(mtx[i], mtx[mtx.length-1]));
  263. // }
  264. // result = mtx[mtx.length-1];
  265. // result = lenSort(result);
  266. // for (var i = 0; i<result.length;i++){
  267. // result[i]=sortString(result[i]);
  268. // }
  269. // result=remArrDuplicates(result);
  270. // idArr = [];
  271. // m=1;
  272. // //arr = result.slice(6);
  273. // //console.log(arr);
  274. // dnf = [];
  275.  
  276. // var l = result.length;
  277. // for (var i=0; i<result.length-1;i++){
  278. // if (result[i]=="000"){
  279. // i++;
  280. // }
  281. // //var j = m;
  282. // for (var j=i+1;j<result.length;j++){
  283. // //console.log(j);
  284. // if (removeExtras(result[i], result[j])==result[i].length){
  285. // console.log(result[i], result[j], j);
  286. // idArr.push(j);
  287. // result[j]="000";
  288. // //dnf.push(result[i].slice());
  289. // //result.splice(j,1);
  290. // //m++;
  291. // }
  292. // }
  293. // }console.log(result);
  294.  
  295.  
  296. // for (var i=0;i<result.length;i++){
  297. // if (result[i]!="000"){
  298. // dnf.push(result[i]);
  299. // }
  300. // }
  301. // //dnf = remArrDuplicates(dnf);
  302. // console.log(dnf);
  303. // m=1;
  304. //arr = result.slice(6);
  305. //console.log(arr);
  306. //var l = result.length;
  307.  
  308.  
  309.  
  310. //console.log(result);
  311.  
  312.  
  313.  
  314. function mult(arr1, arr2){
  315. let arr = []; n=0;
  316. tmp = [];
  317. for (var i=0;i<arr1.length; i++){
  318. tmp = [];
  319. for (var j=0;j<arr2.length; j++){
  320. if (arr1[i]!=arr2[j]){
  321. arr.push(remDuplicates(arr1[i]+arr2[j]));
  322. }else{
  323. arr.push(arr1[i]);
  324. }
  325. }
  326. }//arr.push(tmp);
  327. arr.sort();
  328. for (var i=0;i<arr.length-1;i++){
  329. for (var m=1; m<arr.length; m++)
  330. for (var j=0;j<arr[i+1].length; j++){
  331. if (arr[i]==arr[m][j]){
  332. arr[m]="REMOVED";
  333. n++;
  334. }
  335. }
  336. }arr.sort();
  337. arr.splice(0,n);
  338.  
  339. return arr;
  340. }
  341.  
  342. function lenSort(arr){
  343. var len = arr.length;
  344.  
  345. for (var i = 0; i < len ; i++) {
  346. for(var j = 0 ; j < len - i - 1; j++){ // this was missing
  347. if (arr[j].length > arr[j + 1].length) {
  348. // swap
  349. var temp = arr[j];
  350. arr[j] = arr[j+1];
  351. arr[j + 1] = temp;
  352. }
  353. }
  354. }
  355. return arr;
  356. }
  357.  
  358. function sortString(str){
  359. var arr = str.split('');
  360. var tmp;
  361. for(var i = 0; i < arr.length; i++){
  362. for(var j = i + 1; j < arr.length; j++){
  363.  
  364. if(arr[i] > arr[j]){
  365. tmp = arr[i];
  366. arr[i] = arr[j];
  367. arr[j] = tmp;
  368. }
  369. }
  370. }
  371. return arr.join('');
  372. }
  373.  
  374. function remArrDuplicates(arr){
  375. return [...new Set(arr)];
  376. }
  377.  
  378. function remDuplicates(s){
  379. var c = {};
  380. var r = '';
  381. for (var i = 0; i < s.length; i++) {
  382. if (!c[s[i]]) {
  383. r = r + s[i];
  384. c[s[i]] = 1;
  385. }
  386. }
  387. return r;
  388. }
  389.  
  390. function removeExtras(arr1, arr2){
  391. var n = 0;
  392. for (var i=0;i<arr1.length;i++){
  393. for (var j=0;j<arr2.length;j++){
  394. if (arr1[i]==arr2[j]){
  395. n++;
  396. }
  397. }
  398. }return n;
  399. }
RAW Paste Data