022 – Alphabetischer Wert von Namen aus einer Datei

 

Für diese Aufgabe wird die folgende Datei benötigt:

names-opt.txt

Diese 36K Textdatei enthält über 5000 Vornamen. Beginne damit, die Namen alphabetisch zu sortieren. Anschließend ermittle den alphabetischen Wert jedes Namens und multipliziere diesen mit der Position in der Liste, um die Punktzahl des Namens zu finden.

Beispiel:

Wenn die Liste alphabetisch sortiert ist, ist COLIN der 938ste Name. Der Wert des Namens ist 3+15+12+9+14=53. Die Punktzahl ist also 938\cdot 53 = 49714.

Was ist die Summe aller Punktzahlen in der Datei?

Lösung

Durch die Verwendung der Matlab-Funktion “textread” können wir die lowlevel-Routinen umgehen und erhalten direkt einen Vektor mit Namen. Diesen zu sortieren kostet nur einen weiteren Befehl. Anschließend werden die Buchstabenwerte ermittelt, wobei jeweils 64 abgezogen werden muss, damit das A den Wert 1 bekommt.

Matlab-Code:

function euler022

    clear
    tic

    names = textread('names-opt.txt', '%s');
    names = sort(names);

    n = length(names);
    res = 0;

    for i = 1 : n
        c = char(names(i));
        d = double(c) - ones(1, length(double(c))) * 64;
        res = res + sum(d) * i;
    end

    res
    toc
end

Ergebnis: 871198282
Rechenzeit: 0.158471 Sekunden