ปัญหา
พิจารณาสถานการณ์ที่กองทหารของสองกลุ่มตัวอักษรกำลังต่อสู้กัน ทหารของทั้งสองฝ่ายและน้ำหนักมีดังนี้
TeamA
| ทหาร | น้ำหนัก |
|---|---|
| A | 1 |
| B | 2 |
| C | 3 |
| D | 4 |
TeamB
| ทหาร | น้ำหนัก |
|---|---|
| W | 1 |
| X | 2 |
| Y | 3 |
| Z | 4 |
นอกจากทหารแล้ว ยังมีระเบิดในสนามรบที่แสดงด้วย '!' และระเบิดจะฆ่าทหารที่อยู่ด้านข้างเคียง
ตัวอย่าง: 'A!BC' จะได้ 'C' และ '!!CC!!' จะได้ ''
ฟังก์ชันของเราต้องหาว่าเมื่อระเบิดทั้งหมดในสนามรบระเบิดแล้ว ฝ่ายไหนชนะ หรือทั้งสองฝ่ายมีน้ำหนักเท่ากัน
ตัวอย่างเช่น หากอินพุตคือ
อินพุต
const str = '!WX!YZ!DC!BA!';
เอาต์พุต
const output = 'Tie';
คำอธิบายเอาต์พุต
เพราะหลังจากระเบิดระเบิดหมด ทั้งสองทีมจะมีคะแนนเท่ากัน
ตัวอย่างโค้ด
const str = '!WX!YZ!DC!BA!';
const stringFight = (str) => {
const map = {
'D': 4, 'C': 3, 'B': 2, 'A': 1,
'Z': -4, 'Y': -3, 'X': -2, 'W': -1
};
const arr = [];
const arr1 = str.split('');
for (let i = 0; i < str.length; i++) {
if (arr1[i - 1] !== '!' && arr1[i] !== '!' && arr1[i + 1] !== '!') {
arr.push(arr1[i]);
};
};
const sum = arr.reduce((a, b) => a + (map[b] ? map[b] : 0), 0);
if (sum < 0) {
return 'Team B';
if (sum < 0) {
return 'Team B';
} else if (sum > 0) {
return 'Team A';
} else {
return 'Tie';
};
};
};
console.log(stringFight(str));
ผลลัพธ์
Tie