Software Engineering

# Solving Love vs Friendship in C

## The challenge#

If　`a = 1, b = 2, c = 3 ... z = 26`

Then `l + o + v + e = 54`

and `f + r + i + e + n + d + s + h + i + p = 108`

So `friendship` is twice as strong as `love` ?

Your task is to write a function which calculates the value of a word based off the sum of the alphabet positions of its characters.

The input will always be made of only lowercase letters and will never be empty.

## The solution in C#

Option 1:

``````int word_score (const char *word) {
int x = 0;

while (*word)
x += *word++ - 'a' + 1;

return x;
}
``````

Option 2:

``````#include <string.h>
int word_score (const char *word) {
int sum = 0 ,len = strlen(word);
for(int i = 0; i< len; i++)
sum += word[i] - 'a' + 1;
return sum;
}
``````

Option 3:

``````int word_score(const char *word) {
int sum = 0;
while(*word) {
sum += *word++ - 96;
}
return sum;
}
``````

## Test cases to validate our solution#

``````#include <criterion/criterion.h>

static void do_test (const char *word, int expected);

Test(kata, basic_tests)
{
do_test("attitude", 100);
do_test("friends", 75);
do_test("family", 66);
do_test("selfness", 99);
do_test("knowledge", 96);
}

extern int word_score (const char *word);

static void do_test (const char *word, int expected)
{
int actual = word_score(word);
cr_assert_eq(actual, expected,
"expected %d but got %d for word \"%s\"",
expected, actual, word
);
}
``````