Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Giải bài toán Alphabets fight trong JavaScript

Vấn đề

Xét tình huống quân đội hai nhóm chữ cái đang chiến đấu. Các binh sĩ và trọng lượng của họ như sau:

Nhóm A

Trọng lượng
Binh sĩ
A1
B2
C3
D4

Nhóm B

Trọng lượng
Binh sĩ
W1
X2
Y3
Z4

Ngoài binh sĩ, còn có bom được ký hiệu bằng '!', và bom giết chết binh sĩ ở hai bên cạnh nó. Ví dụ: 'A!BC' sẽ kết quả 'C' và '!!CC!!' sẽ kết quả ''.

Hàm cần tìm ra khi tất cả bom nổ xong thì đội nào thắng hoặc cả hai đội hòa nhau.

Ví dụ, nếu đầu vào là:

Đầu vào

const str = '!WX!YZ!DC!BA!';

Đầu ra

const output = 'Tie';

Giải thích

Vì sau khi tất cả bom nổ xong, cả hai đội sẽ kết thúc với cùng điểm số.

Ví dụ

Dưới đây là mã thực hiện:

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';
  } else if (sum > 0) {
    return 'Team A';
  } else {
    return 'Tie';
  }
};
console.log(stringFight(str));

Kết quả

Tie