আমাদের একটি জাভাস্ক্রিপ্ট ফাংশন লিখতে হবে যা দ্বি-মাত্রিক (অবশ্যই একটি বর্গ ম্যাট্রিক্স) অ্যারে এর আক্ষরিক বিন্যাসের মতো −
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
ফাংশনটির একটি নতুন অ্যারে তৈরি করা উচিত যা অবস্থান (0, 0) থেকে শুরু করে ইনপুট অ্যারে থেকে উপাদানগুলিকে সর্পিলভাবে নেয় এবং সেই একক মাত্রিক অ্যারেটি ফিরিয়ে দেয়৷
অতএব, এই অ্যারের জন্য, সর্পিলটি −
এর মতো হওয়া উচিতconst output = [1, 2, 3, 6, 9, 8, 7, 4, 5];
আমরা একটি অস্থায়ী ভেরিয়েবল তৈরি করব যা বর্তমান সারি এবং বর্তমান কলামের শুরুতে এবং শেষে উভয় দিকেই বিন্দু করে৷
এইভাবে, আমরা পুনরাবৃত্তভাবে প্রারম্ভিক সারি এবং প্রারম্ভিক কলাম বৃদ্ধি করতে পারি এবং শেষের সারি এবং শেষ কলামকে এমনভাবে হ্রাস করতে পারি যা ম্যাট্রিক্সের কেন্দ্রের দিকে সর্পিল হয়।
উদাহরণ
const arr = [ [1, 2, 3], [4, 5, 6], [7, 8, 9] ];
const spiral = (arr = []) => {
if (!arr || arr.length === 0) {
return [];
};
let startRow = 0;
let startCol = 0;
let res = [];
let endCol = arr[0].length - 1;
let endRow = arr.length - 1;
while (startRow <= endRow && startCol <= endCol) {
for (let i = startCol; i <= endCol; i++) {
res.push(arr[startRow][i]);
}
startRow++;
for (let i = startRow; i <= endRow; i++) {
res.push(arr[i][endCol]);
}
endCol--;
if (startRow <= endRow) {
for (let i = endCol; i >= startCol; i--) {
res.push(arr[endRow][i]);
}
endRow--;
}
if (startCol <= endCol) {
for (let i = endRow; i >= startRow; i--) {
res.push(arr[i][startCol]);
} startCol++;
}
}
return res;
};
console.log(spiral(arr)); আউটপুট
এবং কনসোলে আউটপুট হবে −
[ 1, 2, 3, 6, 9, 8, 7, 4, 5 ]