Confusing Number คืออะไร?
ตัวเลขที่เมื่อหมุน 180 องศา (ทั้งแนวตั้งและแนวนอน) จะกลายเป็นตัวเลขอื่นที่ถูกต้อง และตัวเลขใหม่นั้นต้องมีอยู่ในช่วง 1 ถึง n ด้วย ตัวเลขที่หมุนได้คือ 0,1,6,8,9 (6↔9, 0,1,8 คงเดิม)
ปัญหา
รับตัวเลข num สร้างอาร์เรย์ 1 ถึง num นับว่ามี Confusing Number กี่ตัว
ตัวอย่าง
const num = 10;
อาร์เรย์: [1,2,3,4,5,6,7,8,9,10] → Confusing Numbers: 1,6,8,9,10 → ผลลัพธ์ 5
โค้ดตัวอย่าง
const num = 10;
const countConfusing = (num = 1) => {
let count = 0;
const valid = '01689';
const rotateMap = {'0':'0','1':'1','6':'9','8':'8','9':'6'};
const prepareRotation = num => {
let res = '';
const numArr = String(num).split('');
if(numArr.some(el => !valid.includes(el))){ return false; }
numArr.map(el => { res = rotateMap[el] + res; });
return +res;
};
for(let i = 1; i <= num; i++){
const rotated = prepareRotation(i);
if(rotated && rotated > 0 && rotated <= num){ count++; }
}
return count;
};
console.log(countConfusing(num));
ผลลัพธ์
5