C#

C#でProject Euler(8) Dictionary

C#

Pythonの辞書の代替になるコンテナはDictionaryです。Problem 27を考えてみましょう。Pythonならこんな感じです。 from itertools import * import time memo = { } def IsPrime(n): if n < 2: return False elif n in memo: return memo[n] b = all(n % p !…

C#でProject Euler(8) Set

C#

Pythonのsetの代替になるコンテナはHashSetとSortedSetがあります。Problem 29の小規模超ナイーブ版で考えてみましょう。Pythonならこんな感じです。 N = 10 s = set(a ** b for a in xrange(2, N + 1) for b in xrange(2, N + 1)) print len(s) HashSetを使…

C#でProject Euler(7) List

C#

ListはPythonのリストにあたるものです。C++のvectorにあたるといったほうがわかりやすいかもしれません。 using System; using System.Collections.Generic; // おまじない using System.Linq; class list_test { static void Main(string[] args) { var sw…

C#でProject Euler(6) 反復子ブロック

C#

タイトルは、英語ではiterator block、日本語公式サイトでは反復子ブロックと呼んでいるようです(方法 : 整数リストの反復子ブロックを作成する (C#))。反復子ブロックはPythonでいうジェネレータのようなものです。例としてProblem 2を考えてみましょう。…

C#でProject Euler(5) 速度

C#

ここで時間計測をしてみましょう。 using System; using System.Linq; class e001 { static void Main(string[] args) { var sw = new System.Diagnostics.Stopwatch(); sw.Start(); const int N = (int)1e9; var s = Enumerable.Range(1, N - 1). Where(n =…

C#でProject Euler(4) クエリ式

C#

前回はPythonの N = 1000 print sum(ifilter(lambda n: n % 3 == 0 or n % 5 == 0, xrange(1, N))) をC#で書くと、 const int N = 1000; var s = Enumerable.Range(1, N - 1). Where(n => n % 3 == 0 || n % 5 == 0).Sum(); Console.WriteLine(s); となるの…

C#でProject Euler(3) LINQ

C#

Problem 1をPythonでふつうに書くとこうなるのでした。 N = 1000 print sum(n for n in xrange(1, N) if n % 3 == 0 or n % 5 == 0) ジェネレータ式ではなく関数で書いてみると、 print sum(ifilter(lambda n: n % 3 == 0 or n % 5 == 0, xrange(1, N))) こ…

C#でProject Euler(2) ラムダ式

C#

次のコードを見てください。 using System; class lambda_test { static void Main(string[] args) { Func<int,int> f = (x) => x + 1; // ラムダ式 Console.WriteLine(f(1)); // 2 } } このfの定義がラムダ式です。型はFuncとなっています。引数がint一つで返り値がi</int,int>…

C#でProject Euler(1) はじめの一歩

C#

例えば、Problem 1ですが、Pythonでふつうに書くとこうでしょう。 N = 1000 print sum(n for n in xrange(1, N) if n % 3 == 0 or n % 5 == 0) 実質1行で書けます。しかし、Pythonは書きやすいけど遅いんですよね。C++の200倍くらい遅いことがあります。PyPy…