We use cookies to ensure you have the best browsing experience on our website. Please read our cookie policy for more information about how we use cookies.
below is my solution, i tested it succes making all cols and rows sum = 15, but still not correct, any solution guys ?
'usestrict';constfs=require('fs');process.stdin.resume();process.stdin.setEncoding('utf-8');letinputString='';letcurrentLine=0;process.stdin.on('data',function(inputStdin){inputString+=inputStdin;});process.stdin.on('end',function(){inputString=inputString.split('\n');main();});functionreadLine(){returninputString[currentLine++];}/* * Complete the 'formingMagicSquare' function below. * * The function is expected to return an INTEGER. * The function accepts 2D_INTEGER_ARRAY s as parameter. */letnumbersNotExist=[]letcounter=0lettempObj={}letnumberRedundant=[]functionrowSum(n,matrix,row){letsum=0;for(letj=0;j<n;j++){sum+=matrix[row][j];}returnsum;}functioncolSum(n,matrix,col){letsum=0;for(leti=0;i<n;i++){sum+=matrix[i][col];}returnsum;}functiondiagonalLeftUpSum(n,matrix){letsum=0;letrow=0for(leti=0;i<n;i++,row++){sum+=matrix[row][i];}returnsum;}functiondiagonalRightUpSum(n,matrix){letsum=0;letrow=0for(leti=n-1;i>=0;i--,row++){sum+=matrix[row][i];}returnsum;}functionalter(matrix,obj,target=15){if(!obj)returnconst{t,i,arr,diff}=objfor(letindex=0;index<arr.length;index++){if(t==='rows'){letmin=arr[index]+diff;letsum=minletmatch=numbersNotExist.includes(sum)if(min<10&&match){arr.forEach((v,idx)=>{if(index!==idx){sum+=v}})if(sum===target){matrix[i][index]=mincounter+=1break;}}}}}functionformingMagicSquare(matrix){constn=matrix.length;consttargetSum=15;functioncheck(){constflat=matrix.flat()for(leti=1;i<10;i++){if(!flat.includes(i)){if(!numbersNotExist.includes(i)){numbersNotExist.push(i)}}}flat.forEach((v)=>{if(tempObj[v]){tempObj[v]++}else{tempObj[v]=1}})numberRedundant=Object.entries(tempObj).filter(([_,v])=>v>1).map(([k,_])=>+k)tempObj={}constrows=[rowSum(n,matrix,0),rowSum(n,matrix,1),rowSum(n,matrix,2)]constcols=[colSum(n,matrix,0),colSum(n,matrix,1),colSum(n,matrix,2)]constdiagonals=[diagonalLeftUpSum(n,matrix),diagonalRightUpSum(n,matrix)]constdiagLeft=[matrix[0][0],matrix[1][1],matrix[2][2]]constdiagRight=[matrix[0][2],matrix[1][1],matrix[2][0]]constcol1=[matrix[0][0],matrix[1][0],matrix[2][0]]constcol2=[matrix[0][1],matrix[1][1],matrix[2][1]]constcol3=[matrix[0][2],matrix[1][2],matrix[2][2]]constarrDiag=[diagLeft,diagRight]constarrCols=[col1,col2,col3]constnotMagicRows=rows.map((v,i)=>{constdiff=targetSum-(v)returnv!==15&&{t:'rows',diff,i,arr:matrix[i]}}).filter((v)=>v!==false)constnotMagicCols=cols.map((v,i)=>{constdiff=targetSum-(v)returnv!==15&&{t:'cols',diff,i,arr:arrCols[i]}}).filter((v)=>v!==false)constnotMagicDiag=diagonals.map((v,i)=>{constdiff=targetSum-(v)returnv!==15&&{t:'diag',diff,i,arr:arrDiag[i]}}).filter((v)=>v!==false)return[...notMagicRows,...notMagicCols,...notMagicDiag]}letloop=4letdone=1do{construn=check()console.log("================")console.log(`startloop${done}`)console.log("================")console.log("before alter: ")console.log("not exist number: ",numbersNotExist)console.log("redundant number: ",numberRedundant)console.log("not matched lines: ")console.log(run)const[rows,cols,diag]=run;alter(matrix,rows)console.log("================")console.log("after alter: ")console.log("================")constrow1=[matrix[0][0],matrix[0][1],matrix[0][2]]constrow2=[matrix[1][0],matrix[1][1],matrix[1][2]]constrow3=[matrix[2][0],matrix[2][1],matrix[2][2]]constdiagLeft=[matrix[0][0],matrix[1][1],matrix[2][2]]constdiagRight=[matrix[0][2],matrix[1][1],matrix[2][0]]constcol1=[matrix[0][0],matrix[1][0],matrix[2][0]]constcol2=[matrix[0][1],matrix[1][1],matrix[2][1]]constcol3=[matrix[0][2],matrix[1][2],matrix[2][2]]console.log("================")constreduceRow1=row1.reduce((x,y)=>x+y,0)constreduceRow2=row1.reduce((x,y)=>x+y,0)constreduceRow3=row1.reduce((x,y)=>x+y,0)constreduceDiagLeft=diagLeft.reduce((x,y)=>x+y,0)constreduceDiagRight=diagRight.reduce((x,y)=>x+y,0)constreduceCol1=col1.reduce((x,y)=>x+y,0)constreduceCol2=col2.reduce((x,y)=>x+y,0)constreduceCol3=col3.reduce((x,y)=>x+y,0)console.log(`${row1}||${col1}||${diagLeft}||${diagRight}`)console.log(`${row2}||${col2}||${diagLeft}||${diagRight}`)console.log(`${row3}||${col3}||${diagLeft}||${diagRight}`)console.log(`${reduceRow1}||${reduceCol1}||${reduceDiagLeft}||${reduceDiagRight}`)console.log(`${reduceRow2}||${reduceCol2}||${reduceDiagLeft}||${reduceDiagRight}`)console.log(`${reduceRow3}||${reduceCol3}||${reduceDiagLeft}||${reduceDiagRight}`)console.log("================")console.log(`doneloop${done++}`)loop--}while(loop>0)console.log("Final Result: ")console.log(matrix[0])console.log(matrix[1])console.log(matrix[2])returncounter}functionmain(){constws=fs.createWriteStream(process.env.OUTPUT_PATH);lets=Array(3);for(leti=0;i<3;i++){s[i]=readLine().replace(/\s+$/g,'').split(' ').map(sTemp=>parseInt(sTemp,10));}// s = [// [4, 8, 2],// [4, 5, 7],// [6, 1, 6]// ]// console.log(s)constresult=formingMagicSquare(s);ws.write(result+'\n');ws.end();}
Cookie support is required to access HackerRank
Seems like cookies are disabled on this browser, please enable them to open this website
Forming a Magic Square
You are viewing a single comment's thread. Return to all comments →
below is my solution, i tested it succes making all cols and rows sum = 15, but still not correct, any solution guys ?