is2004 | Wiki | グルメマップ | ブックマーク | OWiki

比較演算

文字列比較

 public static bool lth(string lhs, string rhs) {
   return (lhs.CompareTo(rhs)) < 0;
 }
 public static bool gth(string lhs, string rhs) {
   return lth(rhs, lhs);
 }

List 比較

 public static bool lth<T>(List<T> lhs, List<T> rhs) where T: IComparable<T> {
   int l = Math.Max(lhs.Count, rhs.Count);
   for(int i=0;i<l;i++) {
     if(i >= lhs.Count) return true;
     if(i >= rhs.Count) return false;
     int r = lhs[i].CompareTo(rhs[i]);
     if(r < 0) return true;
     if(r > 0) return false;
   }
   return false;
 }
 public static bool gth<T>(List<T> lhs, List<T> rhs) where T: IComparable<T> {
   return lth(lhs, rhs);
 }

Array 比較

 public static bool lth<T>(T[] lhs, T[] rhs) where T: IComparable<T> {
   int l = Math.Max(lhs.Length, rhs.Length);
   for(int i=0;i<l;i++) {
     if(i >= lhs.Length) return true;
     if(i >= rhs.Length) return false;
     int r = lhs[i].CompareTo(rhs[i]);
     if(r < 0) return true;
     if(r > 0) return false;
   }
   return false;
 }
 public static bool gth<T>(T[] lhs, T[] rhs) where T: IComparable<T> {
   return lth(lhs, rhs);
 }

関数型プログラミング

Array

 public delegate T BinaryOperator<T>(T x, T y);
 public static T Fold<T>(T[] a, T init, BinaryOperator<T> f) {
   T v = init;
   foreach (T x in a)
     v = f(v, x);
   return v;
 }
 public static T[] Filter<T>(T[] a, Predicate<T> f) {
   List<T> l = new List<T>();
   foreach (T v in a)
     if (f(v))
       l.Add(v);
   return l.ToArray();
 }

図形

二直線の交点

(sx1, sy1)-(ex1, ey1) と (sx2, sy2)-(ex2, ey2) の二直線の交点を求める。平行なら null

 static Pair<Rational, Rational>
   intersection(Rational sx1, Rational sy1, Rational ex1, Rational ey1, 
                Rational sx2, Rational sy2, Rational ex2, Rational ey2) {
   Rational a = sx1 - ex1;
   Rational b = sy1 - ey1;
   Rational c = -sx2 + ex2;
   Rational d = -sy2 + ey2;

   if (a * d == b * c) return null;
   Rational Z = a*d-b*c;

   Rational px = -sx1 + sx2;
   Rational py = -sy1 + sy2;

   Rational k = (px * d - py * c)/ Z;
   Rational x = k * a + sx1;
   Rational y = k * b + sy1;
   return new Pair<Rational, Rational>(x, y);
 }

トップ   差分 バックアップ リロード   一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2007-06-15 (金) 14:52:55 (4388d)