Files
freecodecamp--freecodecamp/curriculum/challenges/english/blocks/daily-coding-challenges-python/6821ebce237de8297eaee790.md
T
wehub-resource-sync dde272c4b8
i18n - Build Validation / Validate i18n Builds (24) (push) Has been cancelled
CI - Node.js / Lint (24) (push) Has been cancelled
CI - Node.js / Build (24) (push) Has been cancelled
CI - Node.js / Test (24) (push) Has been cancelled
CI - Node.js / Test - Upcoming Changes (24) (push) Has been cancelled
CI - Node.js / Test - i18n (italian, 24) (push) Has been cancelled
CI - Node.js / Test - i18n (portuguese, 24) (push) Has been cancelled
CD - Docker - GHCR Images / Build and Push Images (push) Has been cancelled
chore: import upstream snapshot with attribution
2026-07-13 11:55:53 +08:00

139 lines
3.4 KiB
Markdown

---
id: 6821ebce237de8297eaee790
title: "Challenge 14: Character Battle"
challengeType: 29
dashedName: challenge-14
---
# --description--
Given two strings representing your army and an opposing army, each character from your army battles the character at the same position from the opposing army using the following rules:
- Characters `a-z` have a strength of `1-26`, respectively.
- Characters `A-Z` have a strength of `27-52`, respectively.
- Digits `0-9` have a strength of their face value.
- All other characters have a value of zero.
- Each character can only fight one battle.
For each battle, the stronger character wins. The army with more victories, wins the war. Return the following values:
- `"Opponent retreated"` if your army has more characters than the opposing army.
- `"We retreated"` if the opposing army has more characters than yours.
- `"We won"` if your army won more battles.
- `"We lost"` if the opposing army won more battles.
- `"It was a tie"` if both armies won the same number of battles.
# --hints--
`battle("Hello", "World")` should return `"We lost"`.
```js
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(battle("Hello", "World"), "We lost")`)
}})
```
`battle("pizza", "salad")` should return `"We won"`.
```js
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(battle("pizza", "salad"), "We won")`)
}})
```
`battle("C@T5", "D0G$")` should return `"We won"`.
```js
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(battle("C@T5", "D0G$"), "We won")`)
}})
```
`battle("kn!ght", "orc")` should return `"Opponent retreated"`.
```js
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(battle("kn!ght", "orc"), "Opponent retreated")`)
}})
```
`battle("PC", "Mac")` should return `"We retreated"`.
```js
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(battle("PC", "Mac"), "We retreated")`)
}})
```
`battle("Wizards", "Dragons")` should return `"It was a tie"`.
```js
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(battle("Wizards", "Dragons"), "It was a tie")`)
}})
```
`battle("Mr. Smith", "Dr. Jones")` should return `"It was a tie"`.
```js
({test: () => { runPython(`
from unittest import TestCase
TestCase().assertEqual(battle("Mr. Smith", "Dr. Jones"), "It was a tie")`)
}})
```
# --seed--
## --seed-contents--
```py
def battle(my_army, opposing_army):
return my_army
```
# --solutions--
```py
def get_strength(soldier):
letters = 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ'
if soldier.isdigit():
return int(soldier)
elif soldier in letters:
return letters.index(soldier) + 1
else:
return 0
def battle(my_army, opposing_army):
if len(my_army) > len(opposing_army):
return 'Opponent retreated'
if len(opposing_army) > len(my_army):
return 'We retreated'
my_wins = 0
their_wins = 0
for my_soldier, their_soldier in zip(my_army, opposing_army):
my_strength = get_strength(my_soldier)
their_strength = get_strength(their_soldier)
if my_strength > their_strength:
my_wins += 1
elif their_strength > my_strength:
their_wins += 1
if my_wins > their_wins:
return 'We won'
elif their_wins > my_wins:
return 'We lost'
else:
return 'It was a tie'
```