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

การหาจำนวน upside-down numbers ในช่วงใน JavaScript

Upside Down Numbers (ตัวเลขที่กลับด้านได้)

ตัวเลขที่เหมือนเดิมเมื่อหมุน 180 องศา เรียกว่า upside down numbers

เช่น 9116, 69

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับช่วงอาร์เรย์สองตัวเลข ฟังก์ชันควรคืนค่าจำนวน upside down numbers ทั้งหมดในช่วงที่กำหนด

ตัวอย่าง

โค้ดตัวอย่างด้านล่าง:

const range = [5, 125];
const flipNum = (number) => {
  const upsideDownDigits = [0, 1, -99, -99, -99, -99, 9, -99, 8, 6];
  let reverseNumArr = String(number)
    .split('')
    .map(val => Number(val))
    .reverse();
  let flipDigitsNumArr = reverseNumArr.map(val => upsideDownDigits[val]);
  if (flipDigitsNumArr.includes(-99)) {
    return false;
  }
  let flipDigitsNum = Number(
    flipDigitsNumArr.reduce((accum, curr) => accum + String(curr))
  );
  return flipDigitsNum === number;
};
const countUpsideDown = ([lowNum, highNum]) => {
  let uDNums = 0;
  for (let counter = lowNum; counter <= highNum; counter++) {
    uDNums += flipNum(counter) === true;
  }
  return uDNums;
};
console.log(countUpsideDown(range));

ผลลัพธ์

7

คำอธิบายเพิ่มเติม

ตัวเลขที่หมุน 180° ได้: 0→0, 1→1, 6↔9, 8→8 (2,3,4,5,7 ไม่ได้) โค้ดสร้าง mapping array ใช้ -99 สำหรับ invalid digits แล้ว reverse และ map ตรวจสอบว่าเท่าเดิม ในช่วง 5-125 มี 7 ตัว: 6, 8, 9, 11, 69, 88, 96