読者です 読者をやめる 読者になる 読者になる

Problem 22

euler perl


ファイルから名前を読んでそれぞれスコアを付けて、その合計を求めろという
問題。名前が二重引用符でくくられてるのが微妙にやらしいけど、それ以外は簡単。

#!/usr/bin/perl
use strict;
use warnings;

print "Answer is ", p22(), "\n"; # Answer is 871198282

sub p22 {
    open my $INPUT, "<", 'names.txt' or die "Can't open file\n";
    my $line = <$INPUT>;
    my @names = sort map {
        s/"//g;
        $_; } (split /,/, $line);

    my $sum = 0;
    my $length = (scalar @names);

    for my $i (1..$length) {
        $sum += count_score($names[$i - 1], $i);
    }

    close $INPUT;

    return $sum;
}

sub count_score {
    my ($name, $count) = @_;
    my @names = split //, $name;

    my $sum = 0;
    my $value_A = ord 'A';
    for my $char (@names) {
        $sum += (ord $char) - $value_A + 1;
    }

    return $sum * $count;
}