কম্পিউটার টিউটোরিয়াল

জাভাস্ক্রিপ্টে বাটারফ্লাই শাফেল করার পদ্ধতি


জাভাস্ক্রিপ্টে একটি বাটারফ্লাই শাফেল্ড অ্যারে হলো একটি নাম্বারের অ্যারে যেটি এমনভাবে সর্ট করা থাকে যেন অ্যারের সেন্টার থেকে ডূরত্ব বড়ার সাথে সাথে নাম্বারগুলো বড় হয় এবং এন্ডের দিকে ছোট হয়। সবচেয়ে বড় নাম্বার সবচেয়ে প্রথম ইনডেক্সে থাকে।

বাটারফ্লাই শাফেলড অ্যারের আরেকটি ভ্যারিয়েশন হলো যেখানে নাম্বারগুলো সেন্টারের দিকে বড় হয় এবং এন্ডের দিকে ছোট হয়। এই কেসে সবচেয়ে ছোট নাম্বার সবচেয়ে প্রথম ইনডেক্সে থাকে।

গাণিতিক পটভূমি থেকে আসা লোকদের জন্য, এটি কিছুটা গাউসিয়ান ডিস্ট্রিবিউশনের সাথে সম্পর্কিত।

উদাহরণ

মনে করুন আমাদের এই অ্যারে আছে -

const arr = [8,2,6,3,9,1,4,5,0,7];

যদি আমরা বাটারফ্লাই শাফেলিং অ্যাপ্লাই করি, আউটপুট হবে -

[9, 7, 5, 3, 1,0, 2, 4, 6, 8]

দেখুন কীভাবে সবচেয়ে বড় এবং দ্বিতীয় বড় নাম্বার দুটি এক্সট্রিম এন্ডে এবং সবচেয়ে ছোট নাম্বার সেন্টারে আছে।

আরেকটি সম্ভাবনা হতে পারে -

[0, 2, 4, 6, 8, 9, 7, 5, 3, 1]

আমাদের কাজ হলো একটি ফাংশন লিখা যা নাম্বারের একটি অ্যারে এবং দ্বিতীয় আর্গুমেন্ট হিসেবে একটি স্ট্রিং নিবে, স্ট্রিংটি 'asc' বা 'des' যেকোনো একটি হতে পারে। -

  • স্ট্রিং 'des' হলে অ্যারেটিকে ইনক্রিজিং টু ডিক্রিজিং অর্ডারে শাফেল করতে হবে।

  • যদি 'asc' হলে ডিক্রিজিং টু ইনক্রিজিং অর্ডারে শাফেল করতে হবে।

অ্যাপ্রোচ

  • স্ট্রিং 'asc' হলে আমরা প্রাথমিকভাবে অ্যারেটিকে आरোহী ক্রমে সর্ট করব, অন্যথায় অवरোহী ক্রমে। তাহলে ফাংশনটি 'asc' দিয়ে কল করা হলে অ্যারেটি দেখাবে এইরকম -

[0, 1, 2, 3, 4, 5, 6, 7, 8, 9]
  • তারপর আমরা অ্যারেটিকে দুটি অ্যারেতে ভাগ করব যেন অ্যাডজাসেন্ট এলিমেন্টগুলো বিপরীত অ্যারেতে যায়। আমরা একটি অ্যারেতে পুশ করব এবং অন্যটিতে আনশিফট করব, যেন একটি অ্যারে রিভার্স হয়ে যায় ম্যানুয়ালি না করেই।

এভাবে তৈরি দুটি অ্যারে দেখাবে এইরকম -

[ 0, 2, 4, 6, 8 ] [ 9, 7, 5, 3, 1 ]
  • শেষ ধাপ হলো এই দুটি অ্যারে কনক্যাট করা এবং এরপর আমাদের রিকোয়ার্ড অ্যারে পাব। এই সব কোডে বসালে দেখাবে এইরকম -

উদাহরণ

const array = [8,2,6,3,9,1,4,5,0,7]; const butterflyShuffle = (array, order = 'asc') => {    //creating a new copy of array so that we dont mutate the original array    const arr = array.slice();    //sorting ascending or descending based on the argument    arr.sort((a, b) => order === 'asc' ? a-b : b-a);    const first = [], second = [];    //this variable will later help in determining which array is to be reversed    //and which one is to be concatenated to which    //if length is even, it means that last element will go in second array    //otherwise it will go in first array    const isEven = arr.length % 2 === 0;    for (let i = 0; i < arr.length; i++){       if(i % 2 === 0){          isEven ? first.push(arr[i]) : first.unshift(arr[i]);          continue;       };       isEven ? second.unshift(arr[i]) : second.push(arr[i]);    };    return isEven ? second.concat(first) : first.concat(second); }; console.log(butterflyShuffle(array)); console.log(butterflyShuffle(array, 'des'));

আউটপুট

কনসোলে আউটপুট হবে -

[    9, 7, 5, 3, 1,    0, 2, 4, 6, 8 ] [    0, 2, 4, 6, 8,    9, 7, 5, 3, 1 ]

  1. জাভাস্ক্রিপ্টে অ্যারে থেকে সেটে কনভার্ট করা

  2. জাভাস্ক্রিপ্টে অবজেক্টের অ্যারে ID দিয়ে গ্রুপ করা

  3. জাভাস্ক্রিপ্টে ডেট অ্যারে সর্ট করা

  4. JavaScript অ্যারেকে C# অ্যারেতে রূপান্তর করা