Advertisement
Guest User

Untitled

a guest
Dec 17th, 2022
368
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
JavaScript 1.67 KB | Source Code | 0 0
  1. printcave=()=>console.log('|' + cave.match(/.{7}/g).reverse().join('|\n|') + '|');
  2. R=['  oooo ','   o     ooo     o   ','  ooo      o      o  ','  o      o      o      o    ','  oo     oo   '];
  3. space = ''.padStart(21, ' ');
  4. wind = document.body.innerText.trim();
  5. len = wind.length;
  6. c=len*R.length;
  7. trimcave=()=>cave.replace(/([ ]{7})*$/,'');
  8. addRock=()=>cave=trimcave()+space+R[N++%R.length];
  9. fallers=()=>[...cave.matchAll(/o/g)];
  10. canMoveLeft=()=>fallers().every(r=>r.index%7&&cave[r.index-1] !== 'X');
  11. canMoveRight=()=>fallers().every(r=>(1+r.index)%7&&cave[r.index+1] !== 'X');
  12. canMoveDown=()=>fallers().every(r=>r.index>6&&cave[r.index-7] !== 'X');
  13. moveLeft=()=>{if(canMoveLeft())cave=cave.replace(/ (o+)/g,'$1 ')};
  14. moveRight=()=>{if(canMoveRight())cave=cave.replace(/(o+) /g,' $1')};
  15. moveDown=()=>{cave=[...cave].map((l,i,a)=>{
  16.     if(l==' '&&a[i+7]=='o') return 'o';
  17.     if(l=='o'&&(((i+7)>a.length)||(a[i+7]!='o'))) return ' ';
  18.     return l;
  19. }).join('')};
  20. height=()=>(truncs*200)+(trimcave().length/7);
  21. results=[];
  22. dropRocks = (loops=c,k) => {
  23.     cave = '';
  24.     truncs=0;
  25.     N=0;
  26.     addRock();
  27.     for(loopnum=0; loopnum < loops;loopnum++){
  28.         if(cave.length>2100) {
  29.             cave=cave.slice(1400);
  30.             truncs++;
  31.         }
  32.         if(wind[loopnum%len]=='>') moveRight();
  33.         else moveLeft();
  34.         if(canMoveDown()){
  35.             moveDown();
  36.         }
  37.         else{
  38.             cave=cave.replace(/o/g,'X');
  39.             if(N==k)return height();
  40.             addRock();
  41.         }
  42.        
  43.     }
  44.     return([N, height()]);
  45. };
  46. [s,S]=dropRocks(c);
  47. [t,T]=dropRocks(c*2);
  48. dropRocks(c*2,s+(1e12-s)%(t-s))+Math.floor((1e12-s)/(t-s))*(T-S);
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement