সমস্যা:
আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা একটি বর্গাকার ম্যাট্রিক্সে নেয় (একটি অ্যারে যার একই সংখ্যক সারি এবং কলাম রয়েছে)। ফাংশনটি অ্যারের অ্যারের মাধ্যমে তির্যকভাবে অতিক্রম করা উচিত এবং ট্র্যাভার্স করার সময় এটির সম্মুখীন হওয়া সেই ক্রমে স্থাপন করা উপাদানগুলির একটি নতুন অ্যারে প্রস্তুত করা উচিত।
উদাহরণস্বরূপ, যদি ফাংশনে ইনপুট হয় −
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
তারপর আউটপুট −
হওয়া উচিতconst output = [1, 2, 4, 7, 5, 3, 6, 8, 9];
উদাহরণ
এর জন্য কোড হবে −
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ]; const findDiagonalOrder = (arr = []) => { if(!arr.length){ return []; }; let ind = 0; let colBegin = 0, rowBegin = 0; let rowMax = arr.length, colMax = arr[0].length; const res = [], stack = []; while(rowBegin< rowMax || colBegin<colMax) { for(let row = rowBegin, col = colBegin; row < rowMax && col >=0 ; row++,col--){ if(ind%2 === 0){ stack.push((arr[row][col])); }else{ res.push(arr[row][col]); }; }; ind++; while(stack.length){ res.push(stack.pop()); }; colBegin++ if(colBegin> colMax-1 && rowBegin < rowMax){ colBegin = colMax-1 rowBegin++ } }; return res }; console.log(findDiagonalOrder(arr));
কোড ব্যাখ্যা:
আমরা যে পদক্ষেপগুলি নিয়েছি তা হল −
৷-
সূচনা বিন্দুর ট্র্যাক রেখে এক দিকে পাড়ি দেওয়া।
-
যদি ইনডেক্স সমান হয়, তাহলে আমরা একটি স্ট্যাকের দিকে ঠেলে দেব এবং একবার এটি তির্যকের শেষ প্রান্তে পৌঁছালে, আমাদের আউটপুট অ্যারেতে পপড যোগ করে।
-
আমরা পরবর্তী তির্যকে যাওয়ার সাথে সাথে সূচক বৃদ্ধি করতে থাকি।
-
আমরা কলামের শুরুর সূচী বৃদ্ধি করি যতক্ষণ না এটি শেষ না হয়, কারণ এটি পরবর্তী পুনরাবৃত্তির জন্য এটি শেষ সূচীতে বন্ধ হয়ে যাবে এবং আমরা এই বিন্দু থেকে সারি শুরু করার সূচীকে বৃদ্ধি করব।
আউটপুট
এবং কনসোলে আউটপুট হবে −
[ 1, 2, 4, 7, 5, 3, 6, 8, 9 ]