2016-02-01から1ヶ月間の記事一覧

Group 関数

シーケンス内の隣り合う要素のうち、同じ値のものを配列にまとめる関数 Group を作ってみました。 using System; using System.Collections.Generic; using System.Linq; static class Iter { public static IEnumerable<T[]> Group<T>(IEnumerable<T> xs) { var ls = n</t></t></t[]>…

対角線のどちら側か

R, C が与えられたとき、それぞれの格子点が対角線のどちら側にあるか判定するプログラムです。 対角線の傾き (R-1)/(C - 1) 格子点の傾き i/j について、その大きさを比較します。もし傾きが等しければ格子点は対角線上にあることがわかります。 等しくなけ…

ラムダ式で再帰

ラムダ式の再帰呼び出しのサンプルです。 using System; class Program { static void Main() { Func<int, int> fact = null; fact = n => { if (n == 0) return 1; else return n * fact(n - 1); }; for (int i = 1; i < 10; i++) Console.WriteLine(fact(i)); } } 実</int,>…

バイナリファイルの読み書き。PNG の縦横サイズを取得してみる

BinaryReader, BinaryWriter クラスを用いて、バイナリデータの読み書きを行うサンプルです。 using System; using System.IO; class Program { const string filename = "data.dat"; static void Read() { using (var reader = new BinaryReader(File.Open(…

インスタンスメソッドと静的メソッドに同じメソッド名をつける

インスタンスメソッドと静的メソッドのそれぞれに同じ名前を付けることが出来ます。ただし、メソッドの引数は異なるようにする必要があります。 たとえば、以下のサンプルコードでは、インスタンスメソッドと静的メソッドいずれも Hello という名前で定義し…

リストの連結

リストを連結させるサンプルです。以下の 2 通りの方法で書いてみました。 List.AddRange で要素を追加する Enumerable.Concat で二つのリストを連結する using System; using System.Collections.Generic; using System.Linq; class Program { static List<int> </int>…

Python の itertools.product を C# で作る(3 引数まで対応)

Python の itertools モジュールには product という関数が定義されています。 たとえば 1, 3, 4 の数字を使って 4 桁の数を作るには、Python では itertools.product([1, 3, 4], repeat=4) と書くだけで実現できます。 配列を用意してバックトラックで桁を…

再帰で順列をつくる

再帰で順列を作るサンプルです。 ABCD の順列をつくりたい A を除いた BCD で順列を作り、先頭に A を付けると A が先頭の順列ができあがる B を除いた ACD で順列を作り、先頭に B を付けると B が先頭の順列ができあがる C を除いた ABD で……(以下同様) 1 …

MinBy, MaxBy を Aggregate で代用する

リストの要素から、ある特定のキーで最小の値を持つものを取得したい場合があります。 Ruby では、Enumerable#min_by メソッドを使うと、そのような要素を簡単に取得できます。 C# には、そのものずばりのメソッドは標準ライブラリにはないのですが、Enumera…