const{readFile}=require('./readLines');constbuildClaims=lines=>{constclaims=newMap();constregex=/^#(?<id>\d*)\s@\s(?<left>\d*),(?<top>\d*):\s(?<width>\d*)x(?<height>\d*)$/;for(letlineoflines){const{id,left,top,width,height}=line.match(regex).groups;claims.set(id,{left:+left,top:+top,width:+width,height:+height});}returnclaims;};constcalculateOverlaps=claims=>{constfabric=[];letoverlaps=0;for(let[id,claim]ofclaims.entries()){const{left,top,width,height}=claim;constbottom=top+height;constright=left+width;for(letrow=top;row<bottom;row++){for(letcol=left;col<right;col++){if(!fabric[row]){fabric[row]=[];}if(!fabric[row][col]){fabric[row][col]=0;}elseif(fabric[row][col]===1){overlaps++;}fabric[row][col]++;}}}returnoverlaps;};(async()=>{constlines=awaitreadFile('03-input.txt');constclaims=buildClaims(lines);constoverlaps=calculateOverlaps(claims);console.log(`Overlaps are ${overlaps} square inches`);})();
03b.js
const{readFile}=require('./readLines');constbuildClaims=lines=>{constclaims=newMap();constregex=/^#(?<id>\d*)\s@\s(?<left>\d*),(?<top>\d*):\s(?<width>\d*)x(?<height>\d*)$/;for(letlineoflines){const{id,left,top,width,height}=line.match(regex).groups;claims.set(id,{left:+left,top:+top,width:+width,height:+height});}returnclaims;};constfindNonOverlappingClaimID=claims=>{constfabric=[];// Marking entriesfor(let[id,claim]ofclaims.entries()){const{left,top,width,height}=claim;constbottom=top+height;constright=left+width;for(letrow=top;row<bottom;row++){for(letcol=left;col<right;col++){if(!fabric[row]){fabric[row]=[];}if(!fabric[row][col]){fabric[row][col]=0;}fabric[row][col]++;}}}// Finding ID for the claim that doesnt overlapfor(let[id,claim]ofclaims.entries()){const{left,top,width,height}=claim;constbottom=top+height;constright=left+width;letdoesClaimOverlap=false;for(letrow=top;row<bottom;row++){for(letcol=left;col<right;col++){if(fabric[row][col]>1){doesClaimOverlap=true;}}}if(!doesClaimOverlap){returnid;}}};(async()=>{constlines=awaitreadFile('03-input.txt');constclaims=buildClaims(lines);constid=findNonOverlappingClaimID(claims);console.log(`The ID of the only claim that doesn't overlap is ${id}`);})();
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Javascript solution using regex capture groups (
/^#(?<id>\d*)\s@\s(?<left>\d*),(?<top>\d*):\s(?<width>\d*)x(?<height>\d*)$/
):readFile.js
03a.js
03b.js