問題
-
If all the numbers from 1 to 1000 (one thousand) inclusive were written out in words, how many letters would be used?
-
1 から 1000 (one thousand) までの数字をすべて英単語で書けば、全部で何文字になるか。
解答
どう考えても数値計算じゃなくて文字列処理の問題です。つまりPerlの出番です。 数値を英語表現に変換する必要がありますが、Lingua::EN::NumbersというCPANモジュールがまさにその機能を持っています。
以前のバージョンではイギリス/アメリカ英語の切り替え機能を持っていたようですが、現在は削除されています。生成される英語表現はイギリス英語が元になっているようなので、当座の用は満たせます。
コードの本質的な箇所ではありませんが、Perl 5.10から関数プロトタイプに_
を指定できるようになりました。
これを使うと、引数が省略されたとき$_
の値を使うという組み込み関数と同様の挙動を簡単に実現できます。
#!/usr/bin/perl
use strict;
use warnings;
use feature qw/say/;
use Lingua::EN::Numbers qw/num2en/;
use List::Util qw/sum/;
sub num_of_chars_in_english(_) {
my $english_expr = num2en shift;
$english_expr =~ tr/a-z//;
}
say sum map { num_of_chars_in_english } 1 .. 1000;
コメント
コメントを投稿