Advertisement
Guest User

Untitled

a guest
Dec 14th, 2017
70
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. let input = `0: 3
  2. 1: 2
  3. 4: 4
  4. 6: 4`
  5.  
  6. let regex = /(\d+):\s(\d+)/s;
  7.  
  8. let inputArray = input.split('\n')
  9.  
  10. let firewall = [];
  11. firewall = createFirewall();
  12.  
  13. // Part One
  14. console.log("Part One: ", goThroughFirewall(firewall, "severity"));
  15.  
  16.  
  17. let packetDelay;
  18. let passed = false;
  19.  
  20. while (!passed){
  21.     if (packetDelay == undefined){
  22.         packetDelay = 0;
  23.     }
  24.     else {
  25.         packetDelay++;
  26.     }
  27.     resetFirewall(firewall);  
  28.     for (let idx = 0; idx < packetDelay; idx++){
  29.         moveScanners(firewall);
  30.     }
  31.     passed = !goThroughFirewall(firewall, "delay")    
  32. }
  33. console.log("Part Two: ", packetDelay);
  34.  
  35.  
  36.  
  37.  
  38. function goThroughFirewall(firewall, task){
  39.     let packetPosition = 0;
  40.     let severity = 0;
  41.     let caught = false;
  42.     for (let idx = 0; idx < firewall.length; idx++){
  43.         if (firewall[packetPosition] != undefined){
  44.             if (firewall[packetPosition].scanner === 1) {
  45.                 // you are caught now
  46.                 severity = severity + (firewall[packetPosition].range * firewall[packetPosition].depth);
  47.                 caught = true;
  48.             }        
  49.         }    
  50.         moveScanners(firewall);
  51.         packetPosition++;      
  52.     }
  53.     switch (task){
  54.         case "severity":
  55.             return severity;
  56.         case "delay" :
  57.             return caught;
  58.     }
  59. }
  60.  
  61.  
  62. function createFirewall(){
  63.     let firewall = [];
  64.     for (let idx = 0; idx < inputArray.length; idx++){
  65.         const layer = regex.exec(inputArray[idx]);
  66.         const layerDepth = layer[1];
  67.         const layerRange = layer[2];
  68.         firewall[layerDepth] = {
  69.             depth: layerDepth,
  70.             range: layerRange,
  71.             scanner: 1,
  72.             scannerDown: true
  73.         }
  74.     }  
  75.     return firewall;
  76. }
  77.  
  78.  
  79. function moveScanners(firewall){
  80.     for (let idx = 0; idx < firewall.length; idx++){
  81.         if (firewall[idx] != undefined){
  82.             if (firewall[idx].scannerDown){
  83.                 firewall[idx].scanner++;
  84.             }
  85.             else {
  86.                 firewall[idx].scanner--;
  87.             }
  88.             if (firewall[idx].scanner >= firewall[idx].range || firewall[idx].scanner <= 1){
  89.                 firewall[idx].scannerDown = !firewall[idx].scannerDown
  90.             }
  91.         }
  92.     }
  93. }
  94.  
  95.  
  96. function resetFirewall(firewall){
  97.     for (let idx = 0; idx < firewall.length; idx++){
  98.         if (firewall[idx] != undefined){
  99.             firewall[idx].scanner = 1;
  100.             firewall[idx].scannerDown = true;
  101.         }
  102.     }
  103. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement