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

JavaScript-এ কাস্টম হেক্সাডেসিমাল ম্যাপিং দিয়ে ডেসিমল টু হেক্স কনভার্সন

ভূমিকা

স্ট্যান্ডার্ড হেক্সাডেসিমাল (Base-16) এ `0123456789ABCDEF` ক্যারেক্টার সেট ব্যবহার হয়। এই আর্টিকেলে ইউজার নিজের কাস্টম ১৬-ক্যারেক্টার সেট দিয়ে ডেসিমল থেকে হেক্স কনভার্সন করার রিকারসিভ ফাংশন দেখানো হয়েছে।

সম্পূর্ণ কোড

const num = 363;

const toHex = (
  num,
  hexString = '0123456789ABCDEF',
  hex = '',
  isNegative = num < 0
) => {
  if (hexString.length !== 16) {
    return false; // কাস্টম সেট অবশ্যই ১৬ ক্যারেক্টার হতে হবে
  }
  
  num = Math.abs(num);
  
  if (num && typeof num === 'number') {
    // রিকারসিভলি রিমেন্ডার অ্যাপেন্ড করুন এবং num ১৬ দিয়ে ভাগ করুন
    return toHex(Math.floor(num / 16), hexString, `${hexString[num % 16]}${hex}`, isNegative);
  }
  
  return isNegative ? `-${hex}` : hex;
};

console.log(toHex(num, 'QWERTYUIOPASDFGH')); // WUS
console.log(toHex(num));                       // 16B
console.log(toHex(num, 'QAZWSX0123456789'));   // A05

কোড ব্যাখ্যা

  1. ভ্যালিডেশন: কাস্টম সেট অবশ্যই ১৬ ক্যারেক্টার
  2. অবсолют ভ্যালু: নেগেটিভ হ্যান্ডলিং için `isNegative` ফ্ল্যাগ
  3. রিকারসিভ লজিক:
    • `num % 16` - রিমেন্ডার (০-১৫)
    • `hexString[remainder]` - কাস্টম ক্যারেক্টার পিক
    • প্রিফিক্স করুন (`${char}${hex}`) - কারণ রিকারশন লিস্ট বিল্ড করে
    • `Math.floor(num / 16)` - পরবর্তী রিকারসিভ কল
  4. বেস কেস: `num === 0` হলে রিকারশন বন্ধ
  5. নেগেটিভ হ্যান্ডল: প্রিফিক্স `-` যোগ

এক্সএমপ্লে ট্রেস (363, Стандар্ড হেক্স)

363 ÷ 16 = 22 remainder 11 (B)  → hex = "B"
22  ÷ 16 = 1  remainder 6  (6)  → hex = "6B"
1   ÷ 16 = 0  remainder 1  (1)  → hex = "16B"
Result: "16B"

কাস্টম ম্যাপিং উদাহরণ

Custom Set Mapping 363 →
QWERTYUIOPASDFGH 0=Q, 1=W, 2=E, 3=R, 4=T, 5=Y, 6=U, 7=I, 8=O, 9=P, 10=A, 11=S, 12=D, 13=F, 14=G, 15=H WUS (1=W, 6=U, 11=S)
QAZWSX0123456789 0=Q, 1=A, 2=Z, 3=W, 4=S, 5=X, 6=0, 7=1, 8=2, 9=3, 10=4, 11=5, 12=6, 13=7, 14=8, 15=9 A05 (1=A, 6=0, 11=5)

আউটপুট

WUS
16B
A05

আধুনিক বিকল্প পদ্ধতিগুলো

১. বিল্ট-ইন toString(16) + ম্যাপ (নন-রিকারসিভ)

const toHexCustom = (num, charset = '0123456789ABCDEF') => {
  if (charset.length !== 16) return false;
  const standard = num.toString(16).toUpperCase();
  return standard.split('').map(c => charset[parseInt(c, 16)]).join('');
};

২. ইটারেটিভ (স্ট্যাক সেফ)

const toHexIterative = (num, charset = '0123456789ABCDEF') => {
  if (charset.length !== 16) return false;
  if (num === 0) return charset[0];
  
  const neg = num < 0;
  num = Math.abs(num);
  let hex = '';
  
  while (num > 0) {
    hex = charset[num % 16] + hex;
    num = Math.floor(num / 16);
  }
  return neg ? '-' + hex : hex;
};

ব্যবহারিক অ্যাপ্লিকেশন

  • অবফাসকেশন: কোড/ডেটা লুকাতে কাস্টম এনকোডিং
  • শর্ট URL: বেস-৬২/বেস-৩৬ এনকোডিং (আলফানিউমেরিক)
  • গেমিং: ইভেন্ট আইডি, সেভ কোড
  • লাইসেন্স কী: মানব-পঠনযোগ্য কাস্টম ফরম্যাট

সারাংশ

রিকারসিভ পদ্ধতি অ্যালগরিদম বোঝার জন্য ভালো, কিন্তু প্রোডাকশনে ইটেরেটিভ বা বিল্ট-ইন `toString(16)` + ম্যাপিং ব্যবহার করুন। কাস্টম чарসেট ভ্যালিডেশন (১৬ ক্যারেক্টার) বাধ্যতামূলক।

  1. জাভাস্ক্রিপ্টে অ্যারে-এ নির্দিষ্ট সংখ্যক ভিন্ন এলিমেন্ট वाले সাব-অ্যারে গণনা

  2. জাভাস্ক্রিপ্টে Math ক্লাসে কাস্টম ceil ফাংশন যোগ করা

  3. জাভাস্ক্রিপ্টে রিপিটিং ডেসিমাল অংশের দৈর্ঘ্য খুঁজে বের করা

  4. জাভাস্ক্রিপ্টে ইন্টিজারের বাইনারি রিপ্রেজেন্টেশন অল্টারনেটিং বিট আছে কিনা যাচাই করা