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