OSDN Git Service

[mk_rate]
authorbeatles <beatles@b8c68f68-1e22-0410-b08e-880e1f8202b4>
Sun, 28 Dec 2008 01:41:16 +0000 (01:41 +0000)
committerbeatles <beatles@b8c68f68-1e22-0410-b08e-880e1f8202b4>
Sun, 28 Dec 2008 01:41:16 +0000 (01:41 +0000)
- Check kifu files more carefully so that files that contain
  incomplete records are skipped.
-  mk_rate might have failed to alloc due to out of memory. Now it
   consumes less memory (about 200MB instead of 2GB).

changelog
mk_rate

index 9a4f330..a9b2095 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,3 +1,11 @@
+2008-12-28 Daigo Moriwaki <daigo at debian dot org>
+
+       * [mk_rate]
+         - Check kifu files more carefully so that files that contain
+           incomplete records are skipped.
+         -  mk_rate might have failed to alloc due to out of memory. Now it
+            consumes less memory (about 200MB instead of 2GB).
+
 2008-12-13 Daigo Moriwaki <daigo at debian dot org>
 
        * [shogi-server]
 2008-12-13 Daigo Moriwaki <daigo at debian dot org>
 
        * [shogi-server]
diff --git a/mk_rate b/mk_rate
index a035783..568c4f4 100755 (executable)
--- a/mk_rate
+++ b/mk_rate
@@ -466,14 +466,19 @@ class WinLossMatrix
   end
 
   ##
   end
 
   ##
-  # Removes a delete_index'th player and returns a new object.
+  # Removes players in a rows such as [1,3,5], and then returns a new
+  # object.
   #
   #
-  def delete_row(delete_index)
+  def delete_rows(rows)
+    rows = rows.sort.reverse
+
     copied_cols = []
     (0...size).each do |i|
     copied_cols = []
     (0...size).each do |i|
-      next if i == delete_index
+      next if rows.include?(i)
       row = @matrix.row(i).clone
       row = @matrix.row(i).clone
-      row.delete_at(delete_index)
+      rows.each do |j|
+        row.delete_at(j)
+      end
       copied_cols << row
     end
     if copied_cols.size == 0
       copied_cols << row
     end
     if copied_cols.size == 0
@@ -481,20 +486,13 @@ class WinLossMatrix
     else
       new_matrix = GSL::Matrix[*copied_cols]
     end
     else
       new_matrix = GSL::Matrix[*copied_cols]
     end
-    new_keys = @keys.clone
-    new_keys.delete_at(delete_index)
-    return WinLossMatrix.new(new_keys, new_matrix)
-  end
 
 
-  ##
-  # Removes players in a rows; [1,3,5]
-  #
-  def delete_rows(rows)
-    obj = self
-    rows.sort.reverse.each do |index|
-      obj = obj.delete_row(index)
+    new_keys = @keys.clone
+    rows.each do |j|
+      new_keys.delete_at(j)
     end
     end
-    obj
+
+    return WinLossMatrix.new(new_keys, new_matrix)
   end
 
   ##
   end
 
   ##