เราจำเป็นต้องเขียนฟังก์ชัน 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' ]