-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathp22.cpp
More file actions
54 lines (48 loc) · 1.37 KB
/
Copy pathp22.cpp
File metadata and controls
54 lines (48 loc) · 1.37 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
/**
* Using names.txt, a 46K text file containing over five-thousand first names,
* begin by sorting it into alphabetical order. Then working out the
* alphabetical value for each name, multiply this value by its alphabetical
* position in the list to obtain a name score.
*
* For example, when the list is sorted into alphabetical order, COLIN, which
* is worth 3 + 15 + 12 + 9 + 14 = 53, is the 938th name in the list. So,
* COLIN would obtain a score of 938*53 = 49714.
*
* What is the total of all the name scores in the file?
*/
#include <algorithm>
#include <cstring>
#include <iostream>
#include "euler.h"
BEGIN_PROBLEM(22, solve_problem_22)
PROBLEM_TITLE("Names scores")
PROBLEM_ANSWER("871198282")
PROBLEM_DIFFICULTY(1)
PROBLEM_FUN_LEVEL(1)
PROBLEM_TIME_COMPLEXITY("N*ln(N)")
PROBLEM_SPACE_COMPLEXITY("N")
END_PROBLEM()
static const char *names[] = {
#include "p22-names.txt"
};
static bool compare_string(const char *s1, const char *s2)
{
return strcmp(s1, s2) < 0;
}
static void solve_problem_22()
{
const int N = sizeof(names) / sizeof(names[0]);
std::sort(std::begin(names), std::end(names), compare_string);
int total = 0;
for (int i = 0; i < N; i++)
{
const char *s = names[i];
int score = 0;
for (; *s != '\0'; s++)
{
score += (*s - 'A' + 1);
}
total += (i + 1) * score;
}
std::cout << total << std::endl;
}