Vấn đề
Chúng ta cần viết một hàm JavaScript nhận vào một mảng ký tự đơn arr làm đối số duy nhất. Mảng chỉ có thể chứa 4 ký tự:
- 'N' → hướng Bắc
- 'S' → hướng Nam
- 'W' → hướng Tây
- 'E' → hướng Đông
Mỗi ký tự chỉ định một bước di chuyển đơn vị theo hướng đó. Nếu bất kỳ nơi nào trong mảng, hai hướng đối diện [('S' và 'N') hoặc ('E' và 'W')] xuất hiện liền kề, chúng sẽ triệt tiêu chuyển động của nhau. Do đó, hàm phải tìm hướng di chuyển kết quả của toàn bộ mảng.
Ví dụ, nếu đầu vào là:
const arr = ['N', 'S', 'S', 'E', 'W', 'N', 'W'];
Thì đầu ra sẽ là:
const output = 'W';
Giải thích kết quả
'N' và 'S' triệt tiêu nhau, 'E' và 'W' triệt tiêu nhau, và cuối cùng 'N' và 'S' lại triệt tiêu nhau để chỉ còn lại 'W'.
Ví dụ
Dưới đây là mã thực hiện:
const arr = ['N', 'S', 'S', 'E', 'W', 'N', 'W'];
const cancelDirections = (arr = []) => {
let str = arr.join('');
while (str.includes('NS') || str.includes('SN') || str.includes('EW') || str.includes('WE')) {
str = str.replace('NS', '');
str = str.replace('SN', '');
str = str.replace('EW', '');
str = str.replace('WE', '');
}
return str.split('');
};
console.log(cancelDirections(arr));
Kết quả
Đầu ra trên console:
['W']