Computer >> บทช่วยสอนคอมพิวเตอร์ >  >> การเขียนโปรแกรม >> JavaScript

การหาความห่างของหลักตัวเลข (Digit Distance) ใน JavaScript

ภาพรวม

Digit Distance คือผลรวมค่าสัมบูรณ์ของความต่างระหว่างหลักตัวเลขที่ตรงกันของตัวเลขสองตัว เช่น 345 และ 678 -> |3-6|+|4-7|+|5-8| = 9

การนำไปใช้

const digitDistance = (a, b) => {
  const aStr = String(a);
  const bStr = String(b);
  let diff = 0;
  
  for (let i = 0; i < aStr.length && i < bStr.length; i++) {
    diff += Math.abs(Number(aStr[i]) - Number(bStr[i]));
  }
  return diff;
};

console.log(digitDistance(345, 678)); // 9

ผลลัพธ์

9

การจัดการความยาวไม่เท่ากัน

const digitDistanceFull = (a, b) => {
  const aStr = String(a);
  const bStr = String(b);
  const maxLen = Math.max(aStr.length, bStr.length);
  
  // Pad ด้วย 0 ด้านหน้า
  const aPad = aStr.padStart(maxLen, '0');
  const bPad = bStr.padStart(maxLen, '0');
  
  return [...aPad].reduce((sum, digit, i) => 
    sum + Math.abs(Number(digit) - Number(bPad[i])), 0);
};

console.log(digitDistanceFull(123, 45));   // |0-0|+|1-0|+|2-4|+|3-5| = 0+1+2+2 = 5
console.log(digitDistanceFull(123, 4567)); // 0-4, 1-5, 2-6, 3-7 = 4+4+4+4 = 16

วิธีการทางคณิตศาสตร์ (ไม่ใช้ String)

const digitDistanceMath = (a, b) => {
  let diff = 0;
  while (a > 0 || b > 0) {
    diff += Math.abs((a % 10) - (b % 10));
    a = Math.floor(a / 10);
    b = Math.floor(b / 10);
  }
  return diff;
};

การประยุกต์ใช้

  • Error Detection: Checksums, Error Correcting Codes
  • Image Processing: Perceptual Hashing (pHash)
  • Biometrics: Fingerprint Minutiae Matching
  • Cryptography: Side-channel Analysis
  • Game Development: Number Guessing Games

ขยายเป็น Hamming Distance สำหรับ Binary

const hammingDistance = (a, b) => {
  let xor = a ^ b;
  let count = 0;
  while (xor) {
    count += xor & 1;
    xor >>= 1;
  }
  return count;
};