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

การหาสถานะหลังการชนกันทั้งหมดใน JavaScript

ปัญหา

เราต้องเขียนฟังก์ชัน JavaScript ที่รับอาร์เรย์ arr ซึ่งแทนตำแหน่งของดาวเคราะห์น้อยต่างๆ ในพื้นที่หนึ่งมิติ

สำหรับดาวเคราะห์น้อยแต่ละดวง ค่าสัมบูรณ์แทนขนาด และเครื่องหมายแทนทิศทาง (บวกหมายถึงขวา ลบหมายถึงซ้าย) ดาวเคราะห์น้อยแต่ละดวงเคลื่อนที่ด้วยความเร็วเท่ากัน

ฟังก์ชันควรหาสถานะของดาวเคราะห์น้อยหลังจากการชนกันทั้งหมด หากดาวเคราะห์น้อยสองดวงพบกัน ตัวเล็กจะระเบิด หากขนาดเท่ากัน ทั้งคู่จะระเบิด ดาวเคราะห์น้อยที่เคลื่อนที่ในทิศทางเดียวกันจะไม่พบกัน

ตัวอย่างเช่น หากอินพุตคือ

อินพุต

const arr = [7, 12, -8];

เอาต์พุต

const output = [7, 12];

คำอธิบายเอาต์พุต

12 และ -8 จะชนกัน ทำให้เหลือ 12

7 และ 12 จะไม่เคยชนกัน

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

const arr = [7, 12, -8];
const findState = (arr = []) => {
const track = [];
for (const el of arr) {
track.push(el);
while (track[track.length - 1] < 0 && track[track.length - 2] > 0) {
const a = -track.pop();
const b = track.pop();
if (a > b) {
track.push(-a);
} else if (a < b) {
track.push(b);
}
}
}
return track;
};
console.log(findState(arr));

ผลลัพธ์

[7, 12]