OSDN Git Service

[mk_rate] - Added a new option, --abnormal-threshold n:
authorDaigo Moriwaki <daigo@debian.org>
Sat, 19 Jul 2014 02:49:33 +0000 (11:49 +0900)
committerDaigo Moriwaki <daigo@debian.org>
Sat, 19 Jul 2014 02:49:33 +0000 (11:49 +0900)
  Games that end with the 'abnormal' status are counted in
  win/lost games for the rating calculation if a game plays more
  than n plies. Otherwise (or if n is zero), abnormal games are
  counted out of rating games.

changelog
mk_rate
utils/csa-filter.rb

index 69e6b33..c00f7e4 100644 (file)
--- a/changelog
+++ b/changelog
@@ -1,3 +1,12 @@
+2014-07-19  Daigo Moriwaki <daigo at debian dot org>
+
+       * [mk_rate]
+         - Added a new option, --abnormal-threshold n:
+           Games that end with the 'abnormal' status are counted in
+           win/lost games for the rating calculation if a game plays more
+           than n plies. Otherwise (or if n is zero), abnormal games are
+           counted out of rating games.
+
 2013-12-29  Daigo Moriwaki <daigo at debian dot org>
 
        * [shogi-server]
 2013-12-29  Daigo Moriwaki <daigo at debian dot org>
 
        * [shogi-server]
diff --git a/mk_rate b/mk_rate
index 1f9e54a..b540963 100755 (executable)
--- a/mk_rate
+++ b/mk_rate
 # ./mk_rate [options]
 # 
 # GAME_RESULTS_FILE::
 # ./mk_rate [options]
 # 
 # GAME_RESULTS_FILE::
-#   a path to a file listing results of games, which is genrated by the
+#   a path to a file listing results of games, which is generated by the
 #   mk_game_results command.
 #   In the second style above, the file content can be read from the stdin.
 #
 #   mk_game_results command.
 #   In the second style above, the file content can be read from the stdin.
 #
+# --abnormal-threshold::
+#   n [plies] (default 30)
+#   Games that end with the 'abnormal' status are counted in win/lost games
+#   for the rating calculation if a game plays more than n plies. Otherwise
+#   (or if n is zero), abnormal games are counted out of rating games.
+#
 # --base-date::
 # --base-date::
-#   a base time point for this calicuration (default now). Ex. '2009-10-31'
+#   a base time point for this calculation (default now). Ex. '2009-10-31'
 #
 # --half-life::
 #   n [days] (default 60)
 #
 # --half-life::
 #   n [days] (default 60)
@@ -68,7 +74,7 @@
 #
 # == PREREQUIRE
 #
 #
 # == PREREQUIRE
 #
-# Sample Command lines that isntall prerequires will work on Debian.
+# Sample Command lines that install prerequires will work on Debian.
 #
 # * Ruby 1.9.3 or 1.8.7 (including Rubygems)
 #
 #
 # * Ruby 1.9.3 or 1.8.7 (including Rubygems)
 #
 # * (Rated) players, who played more than $GAMES_LIMIT [15] (rated) games. 
 #
 
 # * (Rated) players, who played more than $GAMES_LIMIT [15] (rated) games. 
 #
 
+$:.unshift(File.dirname(File.expand_path(__FILE__)))
+require 'utils/csa-filter'
 require 'yaml'
 require 'time'
 require 'getoptlong'
 require 'yaml'
 require 'time'
 require 'getoptlong'
@@ -670,7 +678,12 @@ def parse(line)
     return
   end
 
     return
   end
 
-  return if state == "abnormal"
+  if state == "abnormal"
+    csa = CsaFileReader.new file
+    if $options["abnormal-threshold"] == 0 || csa.ply <= $options["abnormal-threshold"]
+      return
+    end
+  end
   time = Time.parse(time)
   return if $options["base-date"] < time
   how_long_days = ($options["base-date"] - time)/(3600*24)
   time = Time.parse(time)
   return if $options["base-date"] < time
   how_long_days = ($options["base-date"] - time)/(3600*24)
@@ -728,14 +741,15 @@ end
 def main
   $options = Hash::new
   parser = GetoptLong.new(
 def main
   $options = Hash::new
   parser = GetoptLong.new(
-    ["--base-date",         GetoptLong::REQUIRED_ARGUMENT],
-    ["--half-life",         GetoptLong::REQUIRED_ARGUMENT],
-    ["--half-life-ignore",  GetoptLong::REQUIRED_ARGUMENT],
-    ["--help", "-h",        GetoptLong::NO_ARGUMENT],
-    ["--ignore",            GetoptLong::REQUIRED_ARGUMENT],
-    ["--fixed-rate-player", GetoptLong::REQUIRED_ARGUMENT],
-    ["--fixed-rate",        GetoptLong::REQUIRED_ARGUMENT],
-    ["--skip-draw-games",   GetoptLong::NO_ARGUMENT])
+    ["--abnormal-threshold", GetoptLong::REQUIRED_ARGUMENT],
+    ["--base-date",          GetoptLong::REQUIRED_ARGUMENT],
+    ["--half-life",          GetoptLong::REQUIRED_ARGUMENT],
+    ["--half-life-ignore",   GetoptLong::REQUIRED_ARGUMENT],
+    ["--help", "-h",         GetoptLong::NO_ARGUMENT],
+    ["--ignore",             GetoptLong::REQUIRED_ARGUMENT],
+    ["--fixed-rate-player",  GetoptLong::REQUIRED_ARGUMENT],
+    ["--fixed-rate",         GetoptLong::REQUIRED_ARGUMENT],
+    ["--skip-draw-games",    GetoptLong::NO_ARGUMENT])
   parser.quiet = true
   begin
     parser.each_option do |name, arg|
   parser.quiet = true
   begin
     parser.each_option do |name, arg|
@@ -761,6 +775,8 @@ def main
   else
     $options["base-date"] = Time.now
   end
   else
     $options["base-date"] = Time.now
   end
+  $options["abnormal-threshold"] ||= 30
+  $options["abnormal-threshold"] = $options["abnormal-threshold"].to_i
   $options["half-life"] ||= 60
   $options["half-life"] = $options["half-life"].to_i
   $options["half-life-ignore"] ||= 7
   $options["half-life"] ||= 60
   $options["half-life"] = $options["half-life"].to_i
   $options["half-life-ignore"] ||= 7
index 6c29bbd..0a863fe 100755 (executable)
@@ -42,9 +42,11 @@ class CsaFileReader
   attr_reader :winner, :loser
   attr_reader :state
   attr_reader :start_time, :end_time
   attr_reader :winner, :loser
   attr_reader :state
   attr_reader :start_time, :end_time
+  attr_reader :ply
 
   def initialize(file_name)
     @file_name = file_name
 
   def initialize(file_name)
     @file_name = file_name
+    @ply = 0
     grep
   end
 
     grep
   end
 
@@ -92,6 +94,12 @@ class CsaFileReader
         end
       end
     end
         end
       end
     end
+
+    @str.each_line do |line|
+      if /^[\+\-]\d{4}[A-Z]{2}/ =~ line
+        @ply += 1
+      end
+    end
   end
 
   def movetimes
   end
 
   def movetimes
@@ -107,7 +115,8 @@ class CsaFileReader
            "BlackName #{@black_name}, WhiteName #{@white_name}\n" +
            "BlackId #{@black_id}, WhiteId #{@white_id}\n" +
            "Winner #{@winner}, Loser #{@loser}\n"    +
            "BlackName #{@black_name}, WhiteName #{@white_name}\n" +
            "BlackId #{@black_id}, WhiteId #{@white_id}\n" +
            "Winner #{@winner}, Loser #{@loser}\n"    +
-           "Start #{@start_time}, End #{@end_time}\n"
+           "Start #{@start_time}, End #{@end_time}\n" +
+           "Ply #{@ply}"
   end
 
   def identify_id(id)
   end
 
   def identify_id(id)