Advertisement
AlexanderHristov

5. *Star Enigma - JS regEx exercise

Nov 27th, 2018
151
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. function solve(inputArr) {
  2.  
  3.     let messageCount = inputArr.shift();
  4.     let attackedPlanets = [];
  5.     let destroyedPlanets = [];
  6.     let decryptionKey = '';
  7.  
  8.     const regExKey = /[SsTtAaRr]/g;
  9.     const regExValidator = /[^@\-:!>]*@([A-Za-z]+)[^@\-:!>]*:(\d+)[^@\-:!>]*!([A|D])![^@\-:!>]*->(\d+)/;
  10.  
  11.     for (let m = 0; m < messageCount; m++) {
  12.         let message = inputArr[m];
  13.  
  14.         if (!message.match(regExKey)) {
  15.             decryptionKey = 0;
  16.         } else {
  17.             decryptionKey = message.match(regExKey).length;
  18.         }
  19.  
  20.         let decodedMessage = [];
  21.        
  22.         for (let i = 0; i < message.length; i++) {
  23.  
  24.             let decoded = message[i].charCodeAt(0) - decryptionKey;
  25.             let realSymbol = String.fromCharCode(decoded);
  26.  
  27.             decodedMessage.push(realSymbol);
  28.         }
  29.  
  30.         decodedMessage = decodedMessage.join('');
  31.        
  32.         if (decodedMessage.match(regExValidator)) {
  33.  
  34.             let planetName = decodedMessage.match(regExValidator)[1];
  35.             let action = decodedMessage.match(regExValidator)[3];
  36.  
  37.             if (action === 'A') {
  38.                 attackedPlanets.push(planetName);
  39.             } else if (action === 'D') {
  40.                 destroyedPlanets.push(planetName);
  41.             }
  42.         }
  43.     }
  44.  
  45.     let attackedPlanetsCount = attackedPlanets.length;
  46.     let attackedPlanetsList = attackedPlanets
  47.         .sort((a, b) => a.localeCompare(b));
  48.  
  49.     let destroyedPlanetsCount = destroyedPlanets.length;
  50.     let destroyedPlanetsList = destroyedPlanets
  51.         .sort((a, b) => a.localeCompare(b));
  52.  
  53.     console.log(`Attacked planets: ${attackedPlanetsCount}`);
  54.     attackedPlanetsList.forEach(x => console.log(`-> ${x}`));
  55.  
  56.     console.log(`Destroyed planets: ${destroyedPlanetsCount}`);
  57.     destroyedPlanetsList.forEach(x => console.log(`-> ${x}`));
  58. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement