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

การเติมออเปอเรเตอร์ที่หายไปในสมการด้วย JavaScript

เราจำเป็นต้องเขียนฟังก์ชัน JavaScript ที่รับชุดตัวเลขเข้ามาและคืนลำดับการดำเนินการที่ถูกต้องเพื่อให้สมการสมบูรณ์ ออเปอเรเตอร์ที่ใช้ได้คือ (+, -, *, /, ^, %)

ตัวอย่าง:

Input: 5 3 8  Output: 5+3=8
Input: 9 27 3 Output: 9=27/3
Input: 5 2 25, 1 5 2 Output: 5^2=25, 1=5%2

สำหรับแต่ละอินพุต จะมีคำตอบที่เป็นไปได้อย่างน้อยหนึ่งคำตอบ เราต้องคืนคำตอบที่ถูกต้องอย่างน้อยหนึ่งคำตอบ

อัลกอริทึมที่ใช้:

  • เลือกตัวเลขที่ใหญ่กว่าไว้ข้างหนึ่ง (เช่น 1 4 7 จะเป็น 7)
  • วางเครื่องหมายเท่ากับหน้าตัวกลาง (เช่น 1 4=7)
  • แก้สมการ
  • ถ้าไม่ได้ ลองอีกตัวเลือกหนึ่ง

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

const arr = ["5 3 8", "9 27 3", "5 2 25", "1 5 2", "3 3 3 30"];
const findCombination = (arr = []) => {
  const answers = [];
  for(let i = 0; i < arr.length; i++){
    const el = arr[i];
    // ใช้ brute force ลองหาคำตอบ
    for(let n = 0; n < 1000; n++){
      const s = el.replace(/ /g, () => "+- */^%="[Math.floor(Math.random() * 7)]);
      if(eval(s.replace(/=/g, "===").replace(/\^/g, "**")) === true 
        && answers.indexOf(s) === -1){
        answers.push(s);
      };
    };
  }
  return answers;
};
console.log(findCombination(arr));

ผลลัพธ์

ผลลัพธ์ที่แสดงในคอนโซลจะเป็นดังนี้:

[ 
  '5+3=8', 
  '9=27/3', 
  '5^2=25', 
  '1=5%2', 
  '3=3%3^30', 
  '3^3+3=30', 
  '3+3^3=30' 
]