mosredna

AoC 2021 day 14 Node.js

Dec 15th, 2021 (edited)
187
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. //const int listSize = sizeof rules / sizeof rules[0];
  2.  
  3. var fs = require("fs");
  4.  
  5. let t = Date.now();
  6.  
  7. var file =__filename.slice(__dirname.length + 1, -3)+ ".txt";
  8. let data = fs.readFileSync(file, 'utf8').toString().split('\n').map(s => s.trim());
  9.  
  10. let str = data[0];
  11. let rules = data.slice(2).map(str => str.split(' -> '))
  12.  
  13. let ruleList = [];
  14. let countList = [];
  15. let countMap = [];
  16.  
  17. for(let r in rules){  
  18.     ruleList[rules[r][0]]=rules[r][1];
  19.     countList[rules[r][0]] = 0;
  20. };
  21.  
  22. for (let i = 0; i < str.length-1; i++){
  23.     countList[str.charAt(i)+str.charAt(i +1)]++;
  24. }
  25.  
  26. function pairInsertion(){
  27.     let bufferList = [];
  28.     for (let i in countList) {
  29.         let val = countList[i] ;
  30.         if(val == 0)continue;
  31.  
  32.         let buf1 = i.charAt(0) + ruleList[i];
  33.         let buf2 = ruleList[i] + i.charAt(1);
  34.  
  35.         if(bufferList[buf1] == null)bufferList[buf1]=0;
  36.         if(bufferList[buf2] == null)bufferList[buf2]=0;
  37.  
  38.         bufferList[buf1]+=val;
  39.         bufferList[buf2]+=val;
  40.     }
  41.     countList = bufferList;
  42. }
  43.  
  44.  
  45. for (let x = 0; x < 40 ; x++) {
  46.     pairInsertion();
  47. }
  48.  
  49. for (let i in countList) {
  50.     let c =i.charAt(0);
  51.     if(countMap[c] == null)
  52.         countMap[c] = 0;
  53.     countMap[c] += countList[i];
  54. };
  55. countMap[str.charAt(0)] +=1;
  56.  
  57. let minCount=999999999999999;        
  58. let maxCount=0;
  59.  
  60. for(let kv in countMap){
  61.     maxCount = Math.max(countMap[kv], maxCount);
  62.     minCount = Math.min(countMap[kv], minCount);
  63. }
  64.  
  65. console.log( "------" );
  66. // not sure why I have to add 1 :D
  67. console.log( maxCount - minCount +1);
  68. console.log( Date.now() - t)
Add Comment
Please, Sign In to add comment