একটি অ্যারে সোর্টেড (বা অ্যাসেন্ডিং বা ডেসেন্ডিং) কিনা তা চেক করা, অর্ডর নির্দিষ্ট না করে।
লজিক
অ্যারে সোর্টেড থাকলে সব উপাদান অথবা নন-ডিক্রিজিং অথবা নন-ইনক্রিজিং অর্ডারে থাকবে।
সমাধান
const isSorted = (arr) => {
if (arr.length <= 1) return true;
// দিক নির্ধারণ: প্রথম দুটি ভিন্ন উপাদান থেকে
let direction = 0; // 0 = unknown, 1 = ascending, -1 = descending
for (let i = 1; i < arr.length; i++) {
if (arr[i] !== arr[i - 1]) {
direction = arr[i] > arr[i - 1] ? 1 : -1;
break;
}
}
// সব উপাদান একই হলে
if (direction === 0) return true;
// বাকি উপাদান চেক
for (let i = 1; i < arr.length; i++) {
if (direction === 1 && arr[i] < arr[i - 1]) return false;
if (direction === -1 && arr[i] > arr[i - 1]) return false;
}
return true;
};
// সংক্ষিপ্ত ভার্সন (every)
const isSortedShort = (arr) => {
if (arr.length <= 1) return true;
const isAscending = arr.every((val, i) => i === 0 || val >= arr[i - 1]);
const isDescending = arr.every((val, i) => i === 0 || val <= arr[i - 1]);
return isAscending || isDescending;
};
// টেস্ট
console.log(isSorted([1, 3, 56, 87, 99, 102])); // true (ascending)
console.log(isSorted([100, 50, 25, 10, 5, 1])); // true (descending)
console.log(isSorted([1, 3, 2, 4, 5])); // false
console.log(isSorted([5, 5, 5, 5])); // true (all equal)
console.log(isSorted([])); // true
মূল কোডের সমস্যা
মূল কোডে নেগেটিভ নম্বর চেক ছিল যা ভুল - সোর্টিংয়ের সাথে নেগেটিভ নম্বরের কোনো সম্পর্ক নেই। উপরের সমাধানটি সঠিক।
উৎপাদন
true