Advertisement
RRusev77

RosettaStone

Jun 23rd, 2020
84
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(arr) {
  2.     let alphabet = ' ABCDEFGHIJKLMNOPQRSTUVWXYZ';
  3.     let alphabetLength = alphabet.length;
  4.  
  5.     let templateLines = Number(arr.shift());
  6.     let templateArray = [];
  7.  
  8.     for(let index in arr) {
  9.         arr[index] = arr[index].split(' ').map(Number);
  10.     }
  11.  
  12.     for(let i = 0; i < templateLines; i++) {
  13.         let templateLine = arr.shift();
  14.         templateArray.push(templateLine);
  15.     }
  16.  
  17.     let templateLineLength;
  18.  
  19.     if(templateLines > 1) {
  20.         templateLineLength = templateArray[0].length;
  21.     } else {
  22.         templateArray = templateArray[0].join(' ').split(' ');
  23.         templateArray = templateArray.map(Number);
  24.         templateLineLength = templateArray.length;
  25.     }
  26.    
  27.     let counter = 0;
  28.     let rowStart = 0;
  29.     let nextRow = false;
  30.     let rowLimit = templateLines;
  31.     // change that shit later
  32.     while(true) {
  33.         let index = 0;
  34.  
  35.         if(counter >= arr.length) {
  36.             counter = arr.length - 1;
  37.             nextRow = true;
  38.         }
  39.  
  40.         if(nextRow) {
  41.             rowStart += templateLines;
  42.             rowLimit = rowStart + templateLines;
  43.             counter = 0;
  44.             nextRow = false;
  45.         }
  46.  
  47.         if(rowStart >= arr.length) {
  48.             rowStart = arr.length - 1;
  49.         }
  50.  
  51.         let columnLimit = counter + templateLineLength;
  52.  
  53.         if(rowLimit > arr.length) {
  54.             rowLimit = arr.length;
  55.         }
  56.  
  57.         if(columnLimit > arr[counter].length) {
  58.             columnLimit = arr[counter].length;
  59.         }
  60.  
  61.         for(let i = rowStart; i < rowLimit; i++) {
  62.             // logic for each row
  63.             // To DO : [for loop] for columns
  64.             let columnIndex = 0;
  65.             for(let j = counter; j < columnLimit; j++) {
  66.                 if(templateLines > 1) {
  67.                     arr[i][j] = arr[i][j] + templateArray[index][columnIndex];
  68.                 } else {
  69.                     arr[i][j] = arr[i][j] + templateArray[columnIndex];
  70.                 }
  71.                
  72.                 columnIndex++;
  73.  
  74.                 if(arr[i][j] >= alphabetLength) {
  75.                     arr[i][j] = arr[i][j] % alphabetLength;
  76.                 }
  77.  
  78.                 arr[i][j] = alphabet[arr[i][j]];
  79.             }
  80.             index++;
  81.         }
  82.         counter += templateArray.length;
  83.  
  84.         let isFinished = false;
  85.  
  86.         for(let i = 0; i < arr.length; i++) {
  87.             for(let j = 0; j < arr[i].length; j++) {
  88.                 if(!Number.isInteger(arr[i][j])) {
  89.                     isFinished = true;
  90.                 } else {
  91.                     isFinished = false;
  92.                 }
  93.             }
  94.         }
  95.  
  96.         if(isFinished) {
  97.             break;
  98.         }
  99.     }
  100.  
  101.     for(let row in arr) {
  102.         arr[row] = arr[row].join('');
  103.     }
  104.  
  105.     console.log(arr.join(''));
  106.    
  107. }
  108.  
  109. // solve([ '2',
  110. // '59 36',
  111. // '82 52',
  112. // '4 18 25 19 8',
  113. // '4 2 8 2 18',
  114. // '23 14 22 0 22',
  115. // '2 17 13 19 20',
  116. // '0 9 0 22 22' ]
  117. // );
  118.  
  119. solve(['1',
  120.     '1 3 13',
  121.     '12 22 14 13 25 0 4 24 23',
  122.     '18 24 2 25 22 0 0 11 18',
  123.     '8 25 6 26 8 23 13 4 14',
  124.     '14 3 14 10 6 1 6 16 14',
  125.     '11 12 2 10 24 2 13 24 0',
  126.     '24 24 10 14 15 25 18 24 12',
  127.     '4 24 0 8 4 22 19 22 14',
  128.     '0 11 18 26 1 19 18 13 15',
  129.     '8 15 14 26 24 14 26 24 14']);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement