2016年12月15日

TypeScriptでProject Euler #1 「3と5の倍数」

   このエントリーをはてなブックマークに追加 Clip to Evernote
今回から、実際にProject Eulerの問題をTypeScriptで解いていきます。


問題

第1問は、

1000 未満の 3 か 5 の倍数になっている数字の合計を求めよ.

   Project Euler日本語翻訳サイト から引用

というもの。

この問題は、第1問目ということで簡単ですね。


TypeScriptで問題を解く

TypeScriptでProject Euler #0で作成したテンプレートプログラムをフォルダーごとコピーし、新しいプロジェクトを作成し、Solverクラスのexecメソッドを問題に合わせて書き換えます。

作成したTypeScriptのコードは以下の通り。

import * as Utils from './utils';
import Stopwatch = Utils.Stopwatch;

class Solver {
    exec(num: number): number {
        var sum = 0;
        for (var i = 1; i < num; i++) {
            if (i % 3 === 0 || i % 5 === 0)
                sum += i;
        }
        return sum;
    }
}
class Application {
    static run(): void {
        let sw = Stopwatch.startNew();
        try {
            let p = new Solver();
            let n = p.exec(1000);
            console.log(n);
        } finally {
            sw.stop();
            console.log(sw.toString());
        }
    }
}
Application.run();

※Stopwatchクラスについては、「TypeScriptでProject Euler #0」 を見てください。


プログラムを書き終えて

今回のプログラムでは、新たに得たTypeScriptの知識というはほとんどないかな。

TypeScript は、この程度のプログラムだと、C#と同じ感覚で書けますね。僕の中では、比較演算子が === と3つつなげるのが一番の大きな違いといった感じです。

そういえば、execメソッドで、var 使っちゃいましたが、スコープの扱いがC#に近い let を使ったほうがいいですね。次回からは、let使おうと思います。

ちなみに、僕のMacBookAirでは、デバッグコンソールで20ミリ程度で終わるので、この程度のプログラムならば自分にとって分かりやすいコードで書けばいいかなと思います。LINQ使えれば、もっと簡単に書けるんですけどね。まあ仕方ないですね。


答えは皆さんの楽しみのために載せないでおきますね。

解いた答えがあっているかは、本家サイトでアカウント登録して、該当する問題のページを開くと、答えを入力する欄があり、ここに解いた値を入れcheck ボタンを押すことで、答え合わせができるようになっています。



 

この記事へのトラックバックURL

http://trackback.blogsys.jp/livedoor/gushwell/52480499