Алгоритм кодовых войн
Проблема
Есть две группы враждебных писем.
적대하는 두 문자 그룹이 있다.
Напишите функцию, которая принимает строку «бой», состоящую только из маленьких букв, и возвращает, кто выиграл бой.
'борьба'
Когда побеждает левая сторона, верните «Победа левой стороны!», когда побеждает правая сторона, верните «Победа правой!», в противном случае верните «Давай снова сразимся!».
левая сторона가 이긴다면: Левая сторона побеждает!
right side가 이긴다면: Правая сторона побеждает!
그 외의 경우에는: Давай снова сразимся!
Мощность левой стороны:
w: 4
p: 3
b: 2
s: 1
Сила правой стороны:
m: 4
q: 3
d: 2
z: 1
Решение 01
function alphabetWar(fight) { const leftPower = { w: 4, p: 3, b: 2, s: 1 }; const rightPower = { m: 4, q: 3, d: 2, z: 1 }; let leftScore = 0; let rightScore = 0; let arr = fight.split(''); for (let i = 0; i < arr.length; i++) { if (leftPower[arr[i]]) { leftScore += leftPower[arr[i]]; } if (rightPower[arr[i]]) { rightScore += rightPower[arr[i]]; } } if (leftScore > rightScore) return `Left side wins!`; else if (leftScore < rightScore) return `Right side wins!`; else return `Let's fight again`; } alphabetWar('wwqq'); // Left side wins! alphabetWar('mmpp'); // Right side wins! alphabetWar('wwmm'); // Let's fight again!
- split(): 문자열을 부분 문자열로 분할하고, 새 배열로 반환한다.
Решение 02
function alphabetWar(fight) { const powers = { w: 4, p: 3, b: 2, s: 1, m: -4, q: -3, d: -2, z: -1 }; const result = fight.split('').reduce((sum, i) => sum + (powers[i] || 0), 0); return result > 0 ? `Left side wins!` : result < 0 ? `Right side wins!` : `Let's fight again!`; } alphabetWar('wwqq'); // Left side wins! alphabetWar('mmpp'); // Right side wins! alphabetWar('wwmm'); // Let's fight again!
- reduce(): 배열을 하나의 값으로 줄이고, 그 값을 반환한다.