Page List

Search on the blog

2011年4月23日土曜日

TopCoder Marathon Match Local Tester

Marathon Matchのローカルテスターを作った。

TopCoderのサーバーでテストすることは出来るのだが、
  • 2時間に1回しかサーバーでテストできない。(Example testの場合は、15分に1回)
  • queueに人が溜まっていると待たないといけない
  • 採点されるテストケースは、Full Submit Testのテストケースより多い
の理由からローカルで自動テストスクリプトを作って走らせる人が多いようだ。

昨年のTCOで作ったはずだが、どこかに行ってしまったので今日作った。今度はどこかに行ってしまわないようにブログにあげておく。

テストを走らせる処理は、windowsのバッチスクリプト
テスト結果のパースはperlで書きました。
ローカルマシンよりTopcoderサーバーの方が断然早いのでTime Limitについては何らかの補正が必要か??
  1. @ECHO OFF  
  2.   
  3. echo System Test Starts..  
  4.   
  5. :: set variables  
  6. SET MAX_SEED=100  
  7. SET SEED=0  
  8. SET OUTPUT=%1.txt  
  9.   
  10. :: solve problems  
  11. :LOOP  
  12. echo Solving #%SEED% ....  
  13. IF %SEED%==0 echo SEED = %SEED% > %OUTPUT%  
  14. IF NOT %SEED%==0 echo SEED = %SEED% >> %OUTPUT%  
  15.   
  16. java -jar hogehogeVis.jar -exec "hogehoge.exe" -seed %SEED% -novis >> %OUTPUT%  
  17.   
  18. SET /A SEED=%SEED%+1  
  19. IF %SEED%==%MAX_SEED% GOTO LOOPEND  
  20. GOTO LOOP  
  21.   
  22. :LOOPEND  
  23. echo System Test Ends!  
  24. echo -----------------------  
  25. echo [Overall Result]  
  26. perl parse.pl %1  
  1. open(INPUT, "<" . $ARGV[0] . ".txt");  
  2.   
  3. @list = <INPUT>;  
  4.   
  5. $pointSum = 0;  
  6. $timeOver = 0;  
  7.   
  8. foreach $line( @list ) {  
  9.     if ($line =~ /(^Time)/) {  
  10.         $line =~ /([0-9\.]+)/;  
  11.         $time = $1;  
  12.         if ($time > 10) {  
  13.             $timeOver++ ;  
  14.         }  
  15.     }  
  16.     elsif ($line =~ /^Score/) {  
  17.         $line =~ /([0-9\.]+)/;  
  18.         $point = $1;  
  19.          
  20.         $pointSum += $point  
  21.     }  
  22. }  
  23.   
  24. print "Point: " . $pointSum . "\n";  
  25. print "Time Over: " . $timeOver . "\n";  
MAX_SEEDは、TopCoder上のFull Submissionでは100、System Testでは1000くらいだと思う。

0 件のコメント:

コメントを投稿