ภาพรวม
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;
};