2013年4月29日月曜日

C# で Project Euler に挑戦: Problem 2

問題

偶数のフィボナッチ数

フィボナッチ数列の項は前の2つの項の和である. 最初の2項を 1, 2 とすれば, 最初の10項は以下の通りである.

1, 2, 3, 5, 8, 13, 21, 34, 55, 89, ...

数列の項の値が400万を超えない範囲で, 偶数値の項の総和を求めよ.

ぼくの解答

static void Main(string[] args)
{
    int n = 4000000;
    var answer = FibonacciNumbers(n - 1)
        .Where(i => i%2 == 0)
        .Sum();

    Console.WriteLine(answer);
    Console.ReadLine();
}

static IEnumerable<int> FibonacciNumbers(int max)
{
    foreach (var i in FibonacciNumbers())
    {
        if (max < i)
            yield break;

        yield return i;
    }
} 

static IEnumerable<int> FibonacciNumbers()
{
    var previous = 0;
    var current = 1;
    var next = 0;

    while (true)
    {
        next = previous + current;
        yield return next;

        previous = current;
        current = next;
    }
}

解説

問題を解くだけならもっとシンプルになるんですが、LINQっぽく(?)処理しようと思いました。

フィボナッチ数の無限シーケンスを返すメソッドを作って、最大値でブレークするオーバロードを用意。これで Where, Sum メソッドで簡単に処理できます。

2013年4月28日日曜日

C# で Project Euler に挑戦: Problem 1

問題

3と5の倍数

10未満の自然数のうち, 3 もしくは 5 の倍数になっているものは 3, 5, 6, 9 の4つがあり, これらの合計は 23 になる.

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

ぼくの解答

static void Main(string[] args)
{
    int n = 1000;

    var answer = Enumerable
        .Range(1, n - 1)
        .Where(i => i % 3 == 0 || i % 5 == 0)
        .Sum();

    Console.WriteLine(answer);
    Console.ReadLine();
}

解説

LINQって便利ですねぇ...

C# で Project Euler に挑戦: はじめに

Project Euler ってなに?

数学の問題をプログラミングで解いていくチャレンジプロジェクトです。
今のところ(2013/04/28時点)400問を超える問題があり、様々なプログラミング言語で世界中の人が挑戦しています。

公式サイトでアカウントを作って、たくさん問題を解いたり、問題を解いた後に参加できるレビューなどに参加すると、Award (Xboxとかの実績みたいなもの)がもらえます。

C# とアルゴリズムの勉強に

数年前から会社の新入社員教育のお題として、比較的簡単な問題を利用させてもらっていたのですが、自身の勉強のためにやってみることにしました。

日頃業務アプリケーション開発ばかりで込み入ったアルゴリズムなどをあまり考えることがなく、新鮮で面白いというのと、ちょっと勉強しておきたいなぁ、というのが動機です。

せっかくなのでC#らしい解き方を心がけたいと思います。例えば、LINQとか。

現時点の成果物

新入社員に教える手前、自分でもある程度解いておこうと思って作ったものが既にあるのですが、もうだいぶ前のことなので、改めてやって行きたいと思います。

のんびり

数学やアルゴリズムなどの分野は非常に苦手なのですが、興味があるのとプログラマとして重要な素養だと思うので、楽しんでやって行きたいと思います。

解いた問題

TFT 10.14 Peeba Comp

こちらのガイドの自分用まとめです。 https://www.reddit.com/r/CompetitiveTFT/comments/hraunp/tft_1014_break_the_meta_new_peeba_comp_set_35/ 難しいですが完成すると非常に強く、プレ...