Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- let input = `0: 3
- 1: 2
- 4: 4
- 6: 4`
- let regex = /(\d+):\s(\d+)/s;
- let inputArray = input.split('\n')
- let firewall = [];
- firewall = createFirewall();
- // Part One
- console.log("Part One: ", goThroughFirewall(firewall, "severity"));
- let packetDelay;
- let passed = false;
- while (!passed){
- if (packetDelay == undefined){
- packetDelay = 0;
- }
- else {
- packetDelay++;
- }
- resetFirewall(firewall);
- for (let idx = 0; idx < packetDelay; idx++){
- moveScanners(firewall);
- }
- passed = !goThroughFirewall(firewall, "delay")
- }
- console.log("Part Two: ", packetDelay);
- function goThroughFirewall(firewall, task){
- let packetPosition = 0;
- let severity = 0;
- let caught = false;
- for (let idx = 0; idx < firewall.length; idx++){
- if (firewall[packetPosition] != undefined){
- if (firewall[packetPosition].scanner === 1) {
- // you are caught now
- severity = severity + (firewall[packetPosition].range * firewall[packetPosition].depth);
- caught = true;
- }
- }
- moveScanners(firewall);
- packetPosition++;
- }
- switch (task){
- case "severity":
- return severity;
- case "delay" :
- return caught;
- }
- }
- function createFirewall(){
- let firewall = [];
- for (let idx = 0; idx < inputArray.length; idx++){
- const layer = regex.exec(inputArray[idx]);
- const layerDepth = layer[1];
- const layerRange = layer[2];
- firewall[layerDepth] = {
- depth: layerDepth,
- range: layerRange,
- scanner: 1,
- scannerDown: true
- }
- }
- return firewall;
- }
- function moveScanners(firewall){
- for (let idx = 0; idx < firewall.length; idx++){
- if (firewall[idx] != undefined){
- if (firewall[idx].scannerDown){
- firewall[idx].scanner++;
- }
- else {
- firewall[idx].scanner--;
- }
- if (firewall[idx].scanner >= firewall[idx].range || firewall[idx].scanner <= 1){
- firewall[idx].scannerDown = !firewall[idx].scannerDown
- }
- }
- }
- }
- function resetFirewall(firewall){
- for (let idx = 0; idx < firewall.length; idx++){
- if (firewall[idx] != undefined){
- firewall[idx].scanner = 1;
- firewall[idx].scannerDown = true;
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement