gettc 1.9 → 1.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
 - data/core/lib/gettc/types.rb +3 -3
 - data/core/lib/version.rb +1 -1
 - data/core/test/gettc/signature_test.rb +1 -1
 - data/core/test/gettc/types_test.rb +6 -6
 - data/dist/config.yml +1 -1
 - data/dist/include/javascript/engine.rb +38 -0
 - data/dist/include/javascript/topcoder.js +7 -0
 - data/dist/include/javascript/topcoder/errors.js +7 -0
 - data/dist/include/javascript/topcoder/reader.js +239 -0
 - data/dist/include/javascript/topcoder/writer.js +46 -0
 - data/dist/include/python/engine.rb +1 -1
 - data/dist/include/python/topcoder/__init__.py +3 -3
 - data/dist/include/python/topcoder/__init__.pyc +0 -0
 - data/dist/include/python/topcoder/errors.py +1 -1
 - data/dist/include/python/topcoder/errors.pyc +0 -0
 - data/dist/include/python/topcoder/reader.py +4 -4
 - data/dist/include/python/topcoder/reader.pyc +0 -0
 - data/dist/include/python/topcoder/writer.py +2 -2
 - data/dist/include/python/topcoder/writer.pyc +0 -0
 - data/dist/include/ruby/topcoder/reader.rb +2 -2
 - data/dist/include/ruby/topcoder/writer.rb +17 -14
 - data/dist/template/bin/runner.rb +3 -0
 - data/dist/template/solve/javascript/Makefile +8 -0
 - data/dist/template/solve/javascript/{name}.js +7 -0
 - data/dist/template/solve/javascript/{name}Solver.js +30 -0
 - metadata +10 -2
 
    
        checksums.yaml
    CHANGED
    
    | 
         @@ -1,7 +1,7 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            ---
         
     | 
| 
       2 
2 
     | 
    
         
             
            SHA1:
         
     | 
| 
       3 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       4 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 3 
     | 
    
         
            +
              metadata.gz: be356b29f63fbb870ee7ffca99f1bcc3d0bcd52e
         
     | 
| 
      
 4 
     | 
    
         
            +
              data.tar.gz: 47c2abcafbe216880d20d01a6d11c0731bda6c66
         
     | 
| 
       5 
5 
     | 
    
         
             
            SHA512:
         
     | 
| 
       6 
     | 
    
         
            -
              metadata.gz:  
     | 
| 
       7 
     | 
    
         
            -
              data.tar.gz:  
     | 
| 
      
 6 
     | 
    
         
            +
              metadata.gz: 2e057827784adaa9d9f2e8b55c299f0a3e67aa72945409d5540fd610a38168819c2e960af5f6a3d9c6065c9947e377b2e58fcd98419498cd686ae8bf2b5b2f4f
         
     | 
| 
      
 7 
     | 
    
         
            +
              data.tar.gz: 7c2bcb3dd3f338056b204f2d4f3d0505b949b7f58616a1bb5adbec67c1c21a2ef9e290b090658f6494feb1a04356c555fcce82b6fcea7d38db5e496d1b2d433b
         
     | 
    
        data/core/lib/gettc/types.rb
    CHANGED
    
    | 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            module Gettc
         
     | 
| 
       2 
2 
     | 
    
         
             
                TypeError = Class.new StandardError        
         
     | 
| 
       3 
     | 
    
         
            -
                class  
     | 
| 
      
 3 
     | 
    
         
            +
                class UnsupportedType < TypeError
         
     | 
| 
       4 
4 
     | 
    
         
             
                    attr_accessor :type
         
     | 
| 
       5 
5 
     | 
    
         
             
                    def initialize type = nil, msg = "Not a valid TopCoder type"
         
     | 
| 
       6 
6 
     | 
    
         
             
                        @type = type
         
     | 
| 
         @@ -49,7 +49,7 @@ module Gettc 
     | 
|
| 
       49 
49 
     | 
    
         
             
                class TArray < Type
         
     | 
| 
       50 
50 
     | 
    
         
             
                    attr_accessor :subtype
         
     | 
| 
       51 
51 
     | 
    
         
             
                    def initialize subtype
         
     | 
| 
       52 
     | 
    
         
            -
                        raise  
     | 
| 
      
 52 
     | 
    
         
            +
                        raise UnsupportedType.new subtype unless subtype.is_a? Type
         
     | 
| 
       53 
53 
     | 
    
         
             
                        @subtype = subtype
         
     | 
| 
       54 
54 
     | 
    
         
             
                    end
         
     | 
| 
       55 
55 
     | 
    
         
             
                    def == ary
         
     | 
| 
         @@ -78,6 +78,6 @@ module Gettc 
     | 
|
| 
       78 
78 
     | 
    
         
             
                    when "String"
         
     | 
| 
       79 
79 
     | 
    
         
             
                        return TString
         
     | 
| 
       80 
80 
     | 
    
         
             
                    end
         
     | 
| 
       81 
     | 
    
         
            -
                    raise  
     | 
| 
      
 81 
     | 
    
         
            +
                    raise UnsupportedType.new str
         
     | 
| 
       82 
82 
     | 
    
         
             
                end
         
     | 
| 
       83 
83 
     | 
    
         
             
            end
         
     | 
    
        data/core/lib/version.rb
    CHANGED
    
    
| 
         @@ -7,7 +7,7 @@ class SignatureTest < Test::Unit::TestCase 
     | 
|
| 
       7 
7 
     | 
    
         
             
                    assert_raise CannotParseSignature do 
         
     | 
| 
       8 
8 
     | 
    
         
             
                        parse_signature "invalid_signature" 
         
     | 
| 
       9 
9 
     | 
    
         
             
                    end
         
     | 
| 
       10 
     | 
    
         
            -
                    assert_raise  
     | 
| 
      
 10 
     | 
    
         
            +
                    assert_raise UnsupportedType do 
         
     | 
| 
       11 
11 
     | 
    
         
             
                        parse_signature "strange_type name" 
         
     | 
| 
       12 
12 
     | 
    
         
             
                    end
         
     | 
| 
       13 
13 
     | 
    
         
             
                    assert_raise InvalidVariableName do 
         
     | 
| 
         @@ -4,12 +4,12 @@ include Gettc 
     | 
|
| 
       4 
4 
     | 
    
         | 
| 
       5 
5 
     | 
    
         
             
            class TypesTest < Test::Unit::TestCase
         
     | 
| 
       6 
6 
     | 
    
         
             
                def test_parse_type
         
     | 
| 
       7 
     | 
    
         
            -
                    assert_raise  
     | 
| 
       8 
     | 
    
         
            -
                    assert_raise  
     | 
| 
       9 
     | 
    
         
            -
                    assert_raise  
     | 
| 
       10 
     | 
    
         
            -
                    assert_raise  
     | 
| 
       11 
     | 
    
         
            -
                    assert_raise  
     | 
| 
       12 
     | 
    
         
            -
                    assert_raise  
     | 
| 
      
 7 
     | 
    
         
            +
                    assert_raise UnsupportedType do array = TArray.new 123 end
         
     | 
| 
      
 8 
     | 
    
         
            +
                    assert_raise UnsupportedType do type = parse_type "" end
         
     | 
| 
      
 9 
     | 
    
         
            +
                    assert_raise UnsupportedType do type = parse_type " " end
         
     | 
| 
      
 10 
     | 
    
         
            +
                    assert_raise UnsupportedType do type = parse_type "[]" end       
         
     | 
| 
      
 11 
     | 
    
         
            +
                    assert_raise UnsupportedType do type = parse_type "vector" end       
         
     | 
| 
      
 12 
     | 
    
         
            +
                    assert_raise UnsupportedType do type = parse_type "vector[]" end       
         
     | 
| 
       13 
13 
     | 
    
         
             
                    assert_equal TBoolean, parse_type("boolean")
         
     | 
| 
       14 
14 
     | 
    
         
             
                    assert_equal TInt, parse_type("int")
         
     | 
| 
       15 
15 
     | 
    
         
             
                    assert_equal TLong, parse_type("long")
         
     | 
    
        data/dist/config.yml
    CHANGED
    
    
| 
         @@ -0,0 +1,38 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            require "gettc/types"
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            module Gettc
         
     | 
| 
      
 4 
     | 
    
         
            +
                class Type
         
     | 
| 
      
 5 
     | 
    
         
            +
                    def dumb_javascript
         
     | 
| 
      
 6 
     | 
    
         
            +
                        if is_a? TArray then
         
     | 
| 
      
 7 
     | 
    
         
            +
                            return "[]"
         
     | 
| 
      
 8 
     | 
    
         
            +
                        end
         
     | 
| 
      
 9 
     | 
    
         
            +
             
     | 
| 
      
 10 
     | 
    
         
            +
                        case self
         
     | 
| 
      
 11 
     | 
    
         
            +
                        when TInt, TLong, TFloat, TDouble
         
     | 
| 
      
 12 
     | 
    
         
            +
                            return "0"
         
     | 
| 
      
 13 
     | 
    
         
            +
                        when TChar
         
     | 
| 
      
 14 
     | 
    
         
            +
                            return "'$'"
         
     | 
| 
      
 15 
     | 
    
         
            +
                        when TString
         
     | 
| 
      
 16 
     | 
    
         
            +
                            return '"$"'
         
     | 
| 
      
 17 
     | 
    
         
            +
                        when TBoolean
         
     | 
| 
      
 18 
     | 
    
         
            +
                            return "true"
         
     | 
| 
      
 19 
     | 
    
         
            +
                        end
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
      
 21 
     | 
    
         
            +
                        return "null"
         
     | 
| 
      
 22 
     | 
    
         
            +
                    end
         
     | 
| 
      
 23 
     | 
    
         
            +
                end
         
     | 
| 
      
 24 
     | 
    
         
            +
                class JavascriptEngine
         
     | 
| 
      
 25 
     | 
    
         
            +
                    attr_reader :arglist, :input
         
     | 
| 
      
 26 
     | 
    
         
            +
                    def initialize func, vars
         
     | 
| 
      
 27 
     | 
    
         
            +
                        temp = vars.map do |var|
         
     | 
| 
      
 28 
     | 
    
         
            +
                            var.name
         
     | 
| 
      
 29 
     | 
    
         
            +
                        end
         
     | 
| 
      
 30 
     | 
    
         
            +
                        @arglist = temp.join ", "
         
     | 
| 
      
 31 
     | 
    
         
            +
             
     | 
| 
      
 32 
     | 
    
         
            +
                        temp = vars.map do |var| 
         
     | 
| 
      
 33 
     | 
    
         
            +
                            "var " + var.name + ' = reader.next("' + var.type.to_s + '");'
         
     | 
| 
      
 34 
     | 
    
         
            +
                        end
         
     | 
| 
      
 35 
     | 
    
         
            +
                        @input = temp.join " reader.next();\n"
         
     | 
| 
      
 36 
     | 
    
         
            +
                    end
         
     | 
| 
      
 37 
     | 
    
         
            +
                end
         
     | 
| 
      
 38 
     | 
    
         
            +
            end
         
     | 
| 
         @@ -0,0 +1,239 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            var tc = require("./errors");
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            function ParseError(text, pos, info) {
         
     | 
| 
      
 4 
     | 
    
         
            +
                if (pos < text.length && pos >= 0) {
         
     | 
| 
      
 5 
     | 
    
         
            +
                    text = text.substr(0, pos) + "|" + 
         
     | 
| 
      
 6 
     | 
    
         
            +
                           text.substr(pos, 1) + "|" +
         
     | 
| 
      
 7 
     | 
    
         
            +
                           text.substr(pos + 1);
         
     | 
| 
      
 8 
     | 
    
         
            +
                }
         
     | 
| 
      
 9 
     | 
    
         
            +
                this.message = "<" + text + ">";
         
     | 
| 
      
 10 
     | 
    
         
            +
                if (typeof(info) === "string") {
         
     | 
| 
      
 11 
     | 
    
         
            +
                    this.message += " (" + info + ")";
         
     | 
| 
      
 12 
     | 
    
         
            +
                }
         
     | 
| 
      
 13 
     | 
    
         
            +
             
     | 
| 
      
 14 
     | 
    
         
            +
                this.toString = function() {
         
     | 
| 
      
 15 
     | 
    
         
            +
                    return "ParseError: " + this.message;
         
     | 
| 
      
 16 
     | 
    
         
            +
                };
         
     | 
| 
      
 17 
     | 
    
         
            +
            }
         
     | 
| 
      
 18 
     | 
    
         
            +
             
     | 
| 
      
 19 
     | 
    
         
            +
             
     | 
| 
      
 20 
     | 
    
         
            +
            function Reader(text) {
         
     | 
| 
      
 21 
     | 
    
         
            +
                this.text = text;
         
     | 
| 
      
 22 
     | 
    
         
            +
                this.pos = 0;
         
     | 
| 
      
 23 
     | 
    
         
            +
                this.len = text.length;
         
     | 
| 
      
 24 
     | 
    
         
            +
            }
         
     | 
| 
      
 25 
     | 
    
         
            +
             
     | 
| 
      
 26 
     | 
    
         
            +
            Reader.prototype.next = function(type) {
         
     | 
| 
      
 27 
     | 
    
         
            +
                if (typeof(type) === "undefined") {
         
     | 
| 
      
 28 
     | 
    
         
            +
                    spaces.call(this);
         
     | 
| 
      
 29 
     | 
    
         
            +
                    expect.call(this, ',');
         
     | 
| 
      
 30 
     | 
    
         
            +
                    return ;
         
     | 
| 
      
 31 
     | 
    
         
            +
                }
         
     | 
| 
      
 32 
     | 
    
         
            +
                if (type.substr(type.length - 2, 2) === "[]") {
         
     | 
| 
      
 33 
     | 
    
         
            +
                    return nextArray.call(this, type.substr(0, type.length - 2));
         
     | 
| 
      
 34 
     | 
    
         
            +
                }
         
     | 
| 
      
 35 
     | 
    
         
            +
                switch (type) {
         
     | 
| 
      
 36 
     | 
    
         
            +
                    case "boolean":
         
     | 
| 
      
 37 
     | 
    
         
            +
                        return nextBoolean.call(this);
         
     | 
| 
      
 38 
     | 
    
         
            +
                    case "int":
         
     | 
| 
      
 39 
     | 
    
         
            +
                        return nextInt32.call(this);
         
     | 
| 
      
 40 
     | 
    
         
            +
                    case "long":
         
     | 
| 
      
 41 
     | 
    
         
            +
                        return nextInt64.call(this);
         
     | 
| 
      
 42 
     | 
    
         
            +
                    case "float":
         
     | 
| 
      
 43 
     | 
    
         
            +
                    case "double":
         
     | 
| 
      
 44 
     | 
    
         
            +
                        return nextFloat.call(this);
         
     | 
| 
      
 45 
     | 
    
         
            +
                    case "char":
         
     | 
| 
      
 46 
     | 
    
         
            +
                        return nextChar.call(this);
         
     | 
| 
      
 47 
     | 
    
         
            +
                    case "String":
         
     | 
| 
      
 48 
     | 
    
         
            +
                        return nextString.call(this);
         
     | 
| 
      
 49 
     | 
    
         
            +
                    default:
         
     | 
| 
      
 50 
     | 
    
         
            +
                        throw new tc.UnsupportedType(type);
         
     | 
| 
      
 51 
     | 
    
         
            +
                }
         
     | 
| 
      
 52 
     | 
    
         
            +
            };
         
     | 
| 
      
 53 
     | 
    
         
            +
             
     | 
| 
      
 54 
     | 
    
         
            +
             
     | 
| 
      
 55 
     | 
    
         
            +
            function isWhiteSpace() {
         
     | 
| 
      
 56 
     | 
    
         
            +
                var c = this.text.charAt(this.pos);
         
     | 
| 
      
 57 
     | 
    
         
            +
                return c === ' ' || c === '\t' || c === '\n';
         
     | 
| 
      
 58 
     | 
    
         
            +
            }
         
     | 
| 
      
 59 
     | 
    
         
            +
             
     | 
| 
      
 60 
     | 
    
         
            +
            function isDigit(c) {
         
     | 
| 
      
 61 
     | 
    
         
            +
                var c = this.text.charAt(this.pos);
         
     | 
| 
      
 62 
     | 
    
         
            +
                return c >= '0' && c <= '9';
         
     | 
| 
      
 63 
     | 
    
         
            +
            }
         
     | 
| 
      
 64 
     | 
    
         
            +
             
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
            function raiseHere(message) {
         
     | 
| 
      
 67 
     | 
    
         
            +
                throw new ParseError(this.text, this.pos, message);
         
     | 
| 
      
 68 
     | 
    
         
            +
            }
         
     | 
| 
      
 69 
     | 
    
         
            +
             
     | 
| 
      
 70 
     | 
    
         
            +
            function checkPos() {
         
     | 
| 
      
 71 
     | 
    
         
            +
                if (this.pos >= this.len) {
         
     | 
| 
      
 72 
     | 
    
         
            +
                    raiseHere.call(this, "unexpected end of input");
         
     | 
| 
      
 73 
     | 
    
         
            +
                }
         
     | 
| 
      
 74 
     | 
    
         
            +
            }
         
     | 
| 
      
 75 
     | 
    
         
            +
             
     | 
| 
      
 76 
     | 
    
         
            +
             
     | 
| 
      
 77 
     | 
    
         
            +
            function token() {
         
     | 
| 
      
 78 
     | 
    
         
            +
                checkPos.call(this);
         
     | 
| 
      
 79 
     | 
    
         
            +
                return this.text.charAt(this.pos);
         
     | 
| 
      
 80 
     | 
    
         
            +
            }
         
     | 
| 
      
 81 
     | 
    
         
            +
             
     | 
| 
      
 82 
     | 
    
         
            +
            function spaces() {
         
     | 
| 
      
 83 
     | 
    
         
            +
                while (this.pos < this.len && isWhiteSpace.call(this)) {
         
     | 
| 
      
 84 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 85 
     | 
    
         
            +
                }
         
     | 
| 
      
 86 
     | 
    
         
            +
            }
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
      
 88 
     | 
    
         
            +
            function expect(character) {
         
     | 
| 
      
 89 
     | 
    
         
            +
                if (token.call(this) === character) {
         
     | 
| 
      
 90 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 91 
     | 
    
         
            +
                } else {
         
     | 
| 
      
 92 
     | 
    
         
            +
                    raiseHere(this, "expecting <" + character + ">");
         
     | 
| 
      
 93 
     | 
    
         
            +
                }
         
     | 
| 
      
 94 
     | 
    
         
            +
            }
         
     | 
| 
      
 95 
     | 
    
         
            +
             
     | 
| 
      
 96 
     | 
    
         
            +
             
     | 
| 
      
 97 
     | 
    
         
            +
            function nextBoolean() {
         
     | 
| 
      
 98 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 99 
     | 
    
         
            +
                if (this.text.substr(this.pos, 4).toUpperCase() === "TRUE") {
         
     | 
| 
      
 100 
     | 
    
         
            +
                    this.pos += 4;
         
     | 
| 
      
 101 
     | 
    
         
            +
                    return true;
         
     | 
| 
      
 102 
     | 
    
         
            +
                } else if (this.text.substr(this.pos, 5).toUpperCase() === "FALSE") {
         
     | 
| 
      
 103 
     | 
    
         
            +
                    this.pos += 5;
         
     | 
| 
      
 104 
     | 
    
         
            +
                    return false;
         
     | 
| 
      
 105 
     | 
    
         
            +
                }
         
     | 
| 
      
 106 
     | 
    
         
            +
                raiseHere.call(this, "expecting either true or false");
         
     | 
| 
      
 107 
     | 
    
         
            +
            }
         
     | 
| 
      
 108 
     | 
    
         
            +
             
     | 
| 
      
 109 
     | 
    
         
            +
             
     | 
| 
      
 110 
     | 
    
         
            +
            function nextDigits() {
         
     | 
| 
      
 111 
     | 
    
         
            +
                checkPos.call(this);
         
     | 
| 
      
 112 
     | 
    
         
            +
                if (!isDigit.call(this)) {
         
     | 
| 
      
 113 
     | 
    
         
            +
                    raiseHere.call(this, "expecting a digit");
         
     | 
| 
      
 114 
     | 
    
         
            +
                }
         
     | 
| 
      
 115 
     | 
    
         
            +
                var start = this.pos;
         
     | 
| 
      
 116 
     | 
    
         
            +
                while (true) {
         
     | 
| 
      
 117 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 118 
     | 
    
         
            +
                    if (this.pos === this.len || !isDigit.call(this)) {
         
     | 
| 
      
 119 
     | 
    
         
            +
                        break;
         
     | 
| 
      
 120 
     | 
    
         
            +
                    }
         
     | 
| 
      
 121 
     | 
    
         
            +
                }
         
     | 
| 
      
 122 
     | 
    
         
            +
                return this.text.substr(start, this.pos - start);
         
     | 
| 
      
 123 
     | 
    
         
            +
            }
         
     | 
| 
      
 124 
     | 
    
         
            +
             
     | 
| 
      
 125 
     | 
    
         
            +
             
     | 
| 
      
 126 
     | 
    
         
            +
            function nextNaturalNumber(parser) {
         
     | 
| 
      
 127 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 128 
     | 
    
         
            +
                if (token.call(this) === "-") {
         
     | 
| 
      
 129 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 130 
     | 
    
         
            +
                    return -parser(nextDigits.call(this));
         
     | 
| 
      
 131 
     | 
    
         
            +
                }
         
     | 
| 
      
 132 
     | 
    
         
            +
                return parser(nextDigits.call(this));
         
     | 
| 
      
 133 
     | 
    
         
            +
            }
         
     | 
| 
      
 134 
     | 
    
         
            +
             
     | 
| 
      
 135 
     | 
    
         
            +
            function nextInt32() {
         
     | 
| 
      
 136 
     | 
    
         
            +
                return nextNaturalNumber.call(this, function (str) {
         
     | 
| 
      
 137 
     | 
    
         
            +
                    return parseInt(str, 10);
         
     | 
| 
      
 138 
     | 
    
         
            +
                });
         
     | 
| 
      
 139 
     | 
    
         
            +
            }
         
     | 
| 
      
 140 
     | 
    
         
            +
             
     | 
| 
      
 141 
     | 
    
         
            +
            function nextInt64() {
         
     | 
| 
      
 142 
     | 
    
         
            +
                var Int64 = require("long");
         
     | 
| 
      
 143 
     | 
    
         
            +
                return nextNaturalNumber.call(this, function (str) {
         
     | 
| 
      
 144 
     | 
    
         
            +
                    return Int64.fromString(str);
         
     | 
| 
      
 145 
     | 
    
         
            +
                });
         
     | 
| 
      
 146 
     | 
    
         
            +
            }
         
     | 
| 
      
 147 
     | 
    
         
            +
             
     | 
| 
      
 148 
     | 
    
         
            +
             
     | 
| 
      
 149 
     | 
    
         
            +
            function nextPositiveFloat() {
         
     | 
| 
      
 150 
     | 
    
         
            +
                var str = nextDigits.call(this);
         
     | 
| 
      
 151 
     | 
    
         
            +
                if (this.pos < this.len) {
         
     | 
| 
      
 152 
     | 
    
         
            +
                    if (this.text.charAt(this.pos) === '.') {
         
     | 
| 
      
 153 
     | 
    
         
            +
                        this.pos += 1;
         
     | 
| 
      
 154 
     | 
    
         
            +
                        str += "." + nextDigits.call(this);
         
     | 
| 
      
 155 
     | 
    
         
            +
                    }
         
     | 
| 
      
 156 
     | 
    
         
            +
                }
         
     | 
| 
      
 157 
     | 
    
         
            +
                return parseFloat(str);
         
     | 
| 
      
 158 
     | 
    
         
            +
            }
         
     | 
| 
      
 159 
     | 
    
         
            +
             
     | 
| 
      
 160 
     | 
    
         
            +
            function nextFloat() {
         
     | 
| 
      
 161 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 162 
     | 
    
         
            +
                if (token.call(this) === '-') {
         
     | 
| 
      
 163 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 164 
     | 
    
         
            +
                    return -nextPositiveFloat.call(this);
         
     | 
| 
      
 165 
     | 
    
         
            +
                }
         
     | 
| 
      
 166 
     | 
    
         
            +
                return nextPositiveFloat.call(this);
         
     | 
| 
      
 167 
     | 
    
         
            +
            }
         
     | 
| 
      
 168 
     | 
    
         
            +
             
     | 
| 
      
 169 
     | 
    
         
            +
             
     | 
| 
      
 170 
     | 
    
         
            +
            function nextChar() {
         
     | 
| 
      
 171 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 172 
     | 
    
         
            +
                var c = token.call(this);
         
     | 
| 
      
 173 
     | 
    
         
            +
                if (c === '\'') {
         
     | 
| 
      
 174 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 175 
     | 
    
         
            +
                    var ret = token.call(this);
         
     | 
| 
      
 176 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 177 
     | 
    
         
            +
                    expect.call(this, '\'');
         
     | 
| 
      
 178 
     | 
    
         
            +
                    return ret;
         
     | 
| 
      
 179 
     | 
    
         
            +
                }
         
     | 
| 
      
 180 
     | 
    
         
            +
                this.pos += 1;
         
     | 
| 
      
 181 
     | 
    
         
            +
                return c;
         
     | 
| 
      
 182 
     | 
    
         
            +
            }
         
     | 
| 
      
 183 
     | 
    
         
            +
             
     | 
| 
      
 184 
     | 
    
         
            +
             
     | 
| 
      
 185 
     | 
    
         
            +
            function nextString() {
         
     | 
| 
      
 186 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 187 
     | 
    
         
            +
                expect.call(this, '"');
         
     | 
| 
      
 188 
     | 
    
         
            +
                var start = this.pos;
         
     | 
| 
      
 189 
     | 
    
         
            +
                while (true) {
         
     | 
| 
      
 190 
     | 
    
         
            +
                    if (this.pos >= this.len) {
         
     | 
| 
      
 191 
     | 
    
         
            +
                        raiseHere.call(this, "expecting a closing quote");
         
     | 
| 
      
 192 
     | 
    
         
            +
                    }
         
     | 
| 
      
 193 
     | 
    
         
            +
                    if (token.call(this) === '"') {
         
     | 
| 
      
 194 
     | 
    
         
            +
                        this.pos += 1;
         
     | 
| 
      
 195 
     | 
    
         
            +
                        var saved = this.pos;
         
     | 
| 
      
 196 
     | 
    
         
            +
                        spaces.call(this);
         
     | 
| 
      
 197 
     | 
    
         
            +
                        if (this.pos === this.len || 
         
     | 
| 
      
 198 
     | 
    
         
            +
                            this.text.charAt(this.pos) === ',' ||
         
     | 
| 
      
 199 
     | 
    
         
            +
                            this.text.charAt(this.pos) === ']') {
         
     | 
| 
      
 200 
     | 
    
         
            +
                            this.pos = saved;                
         
     | 
| 
      
 201 
     | 
    
         
            +
                            return this.text.substr(start, this.pos - 1 - start);
         
     | 
| 
      
 202 
     | 
    
         
            +
                        }
         
     | 
| 
      
 203 
     | 
    
         
            +
                    } else {
         
     | 
| 
      
 204 
     | 
    
         
            +
                        this.pos += 1;
         
     | 
| 
      
 205 
     | 
    
         
            +
                    }
         
     | 
| 
      
 206 
     | 
    
         
            +
                }
         
     | 
| 
      
 207 
     | 
    
         
            +
            }
         
     | 
| 
      
 208 
     | 
    
         
            +
             
     | 
| 
      
 209 
     | 
    
         
            +
             
     | 
| 
      
 210 
     | 
    
         
            +
            function nextElems(elemType, arr) {
         
     | 
| 
      
 211 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 212 
     | 
    
         
            +
                var c = token.call(this);
         
     | 
| 
      
 213 
     | 
    
         
            +
                if (c === ']') {
         
     | 
| 
      
 214 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 215 
     | 
    
         
            +
                    return ;
         
     | 
| 
      
 216 
     | 
    
         
            +
                } else if (c === ',') {
         
     | 
| 
      
 217 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 218 
     | 
    
         
            +
                    arr.push(this.next(elemType));
         
     | 
| 
      
 219 
     | 
    
         
            +
                    nextElems.call(this, elemType, arr);
         
     | 
| 
      
 220 
     | 
    
         
            +
                    return ;
         
     | 
| 
      
 221 
     | 
    
         
            +
                }
         
     | 
| 
      
 222 
     | 
    
         
            +
                raiseHere("expecting either <,> or <]>");
         
     | 
| 
      
 223 
     | 
    
         
            +
            }
         
     | 
| 
      
 224 
     | 
    
         
            +
             
     | 
| 
      
 225 
     | 
    
         
            +
            function nextArray(elemType) {
         
     | 
| 
      
 226 
     | 
    
         
            +
                var arr = [];
         
     | 
| 
      
 227 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 228 
     | 
    
         
            +
                expect.call(this, '[');
         
     | 
| 
      
 229 
     | 
    
         
            +
                spaces.call(this);
         
     | 
| 
      
 230 
     | 
    
         
            +
                if (token.call(this) === ']') {
         
     | 
| 
      
 231 
     | 
    
         
            +
                    this.pos += 1;
         
     | 
| 
      
 232 
     | 
    
         
            +
                    return arr;
         
     | 
| 
      
 233 
     | 
    
         
            +
                }
         
     | 
| 
      
 234 
     | 
    
         
            +
                arr.push(this.next(elemType));
         
     | 
| 
      
 235 
     | 
    
         
            +
                nextElems.call(this, elemType, arr);
         
     | 
| 
      
 236 
     | 
    
         
            +
                return arr;
         
     | 
| 
      
 237 
     | 
    
         
            +
            }
         
     | 
| 
      
 238 
     | 
    
         
            +
             
     | 
| 
      
 239 
     | 
    
         
            +
            module.exports = Reader;
         
     | 
| 
         @@ -0,0 +1,46 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            var tc = require("./errors");
         
     | 
| 
      
 2 
     | 
    
         
            +
             
     | 
| 
      
 3 
     | 
    
         
            +
            function Writer() {
         
     | 
| 
      
 4 
     | 
    
         
            +
                this.text = "";
         
     | 
| 
      
 5 
     | 
    
         
            +
            }
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            Writer.prototype.next = function(value, type) {
         
     | 
| 
      
 8 
     | 
    
         
            +
                if (typeof(value) === "undefined") {
         
     | 
| 
      
 9 
     | 
    
         
            +
                    this.text += ", "
         
     | 
| 
      
 10 
     | 
    
         
            +
                    return this;
         
     | 
| 
      
 11 
     | 
    
         
            +
                }
         
     | 
| 
      
 12 
     | 
    
         
            +
                if (type.substr(type.length - 2, 2) === "[]") {
         
     | 
| 
      
 13 
     | 
    
         
            +
                    var elemType = type.substr(0, type.length - 2);
         
     | 
| 
      
 14 
     | 
    
         
            +
                    this.text += '[';
         
     | 
| 
      
 15 
     | 
    
         
            +
                    for (var i = 0; i < value.length; ++i) {
         
     | 
| 
      
 16 
     | 
    
         
            +
                        this.next(value[i], elemType);
         
     | 
| 
      
 17 
     | 
    
         
            +
                        if (i < value.length - 1) {
         
     | 
| 
      
 18 
     | 
    
         
            +
                            this.next();
         
     | 
| 
      
 19 
     | 
    
         
            +
                        }
         
     | 
| 
      
 20 
     | 
    
         
            +
                    }
         
     | 
| 
      
 21 
     | 
    
         
            +
                    this.text += ']';
         
     | 
| 
      
 22 
     | 
    
         
            +
                    return this;
         
     | 
| 
      
 23 
     | 
    
         
            +
                }
         
     | 
| 
      
 24 
     | 
    
         
            +
                switch (type) {
         
     | 
| 
      
 25 
     | 
    
         
            +
                    case "boolean":
         
     | 
| 
      
 26 
     | 
    
         
            +
                    case "int":
         
     | 
| 
      
 27 
     | 
    
         
            +
                    case "long":
         
     | 
| 
      
 28 
     | 
    
         
            +
                    case "float":
         
     | 
| 
      
 29 
     | 
    
         
            +
                    case "double":
         
     | 
| 
      
 30 
     | 
    
         
            +
                        this.text += value.toString();
         
     | 
| 
      
 31 
     | 
    
         
            +
                        return this;
         
     | 
| 
      
 32 
     | 
    
         
            +
                    case "char":
         
     | 
| 
      
 33 
     | 
    
         
            +
                        this.text += "'" + value + "'";
         
     | 
| 
      
 34 
     | 
    
         
            +
                        return this;
         
     | 
| 
      
 35 
     | 
    
         
            +
                    case "String":
         
     | 
| 
      
 36 
     | 
    
         
            +
                        this.text += '"' + value + '"';
         
     | 
| 
      
 37 
     | 
    
         
            +
                        return this;
         
     | 
| 
      
 38 
     | 
    
         
            +
                }
         
     | 
| 
      
 39 
     | 
    
         
            +
                throw new tc.UnsupportedType(type);
         
     | 
| 
      
 40 
     | 
    
         
            +
            };
         
     | 
| 
      
 41 
     | 
    
         
            +
             
     | 
| 
      
 42 
     | 
    
         
            +
            Writer.prototype.toString = function() {
         
     | 
| 
      
 43 
     | 
    
         
            +
                return this.text;
         
     | 
| 
      
 44 
     | 
    
         
            +
            };
         
     | 
| 
      
 45 
     | 
    
         
            +
             
     | 
| 
      
 46 
     | 
    
         
            +
            module.exports = Writer;
         
     | 
| 
         @@ -1,3 +1,3 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            from topcoder.errors import  
     | 
| 
       2 
     | 
    
         
            -
            from topcoder.reader import  
     | 
| 
       3 
     | 
    
         
            -
            from topcoder.writer import write
         
     | 
| 
      
 1 
     | 
    
         
            +
            from topcoder.errors import UnsupportedType
         
     | 
| 
      
 2 
     | 
    
         
            +
            from topcoder.reader import ParseError, Reader
         
     | 
| 
      
 3 
     | 
    
         
            +
            from topcoder.writer import write
         
     | 
| 
         Binary file 
     | 
| 
         Binary file 
     | 
| 
         @@ -1,6 +1,6 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            from topcoder.errors import  
     | 
| 
      
 1 
     | 
    
         
            +
            from topcoder.errors import UnsupportedType
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
     | 
    
         
            -
            class  
     | 
| 
      
 3 
     | 
    
         
            +
            class ParseError(Exception):
         
     | 
| 
       4 
4 
     | 
    
         
             
                def __init__(self, text, pos, info = ""):
         
     | 
| 
       5 
5 
     | 
    
         
             
                    if (pos < len(text)) and (pos >= 0):
         
     | 
| 
       6 
6 
     | 
    
         
             
                        text = text[:pos] + "|" + text[pos] + "|" + text[(pos + 1):]
         
     | 
| 
         @@ -41,10 +41,10 @@ class ReaderInternal(object): 
     | 
|
| 
       41 
41 
     | 
    
         
             
                    if type.endswith("[]"):
         
     | 
| 
       42 
42 
     | 
    
         
             
                        return self.next_array(type[:-2])
         
     | 
| 
       43 
43 
     | 
    
         | 
| 
       44 
     | 
    
         
            -
                    raise  
     | 
| 
      
 44 
     | 
    
         
            +
                    raise UnsupportedType(type)
         
     | 
| 
       45 
45 
     | 
    
         | 
| 
       46 
46 
     | 
    
         
             
                def raise_here(self, message):
         
     | 
| 
       47 
     | 
    
         
            -
                    raise  
     | 
| 
      
 47 
     | 
    
         
            +
                    raise ParseError(self.text, self.pos, message)
         
     | 
| 
       48 
48 
     | 
    
         | 
| 
       49 
49 
     | 
    
         
             
                def check_pos(self):
         
     | 
| 
       50 
50 
     | 
    
         
             
                    if self.pos >= self.len:
         
     | 
| 
         Binary file 
     | 
| 
         @@ -1,4 +1,4 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            from topcoder.errors import  
     | 
| 
      
 1 
     | 
    
         
            +
            from topcoder.errors import UnsupportedType
         
     | 
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            def write(value, type):
         
     | 
| 
       4 
4 
     | 
    
         
             
                if type in ["int", "long", "float", "double", "boolean"]:
         
     | 
| 
         @@ -10,4 +10,4 @@ def write(value, type): 
     | 
|
| 
       10 
10 
     | 
    
         
             
                elif type.endswith("[]"):
         
     | 
| 
       11 
11 
     | 
    
         
             
                    elem_type = type[:-2]
         
     | 
| 
       12 
12 
     | 
    
         
             
                    return "[" + ", ".join(map(lambda elem: write(elem, elem_type), value)) + "]"
         
     | 
| 
       13 
     | 
    
         
            -
                raise  
     | 
| 
      
 13 
     | 
    
         
            +
                raise UnsupportedType(type)
         
     | 
| 
         Binary file 
     | 
| 
         @@ -6,7 +6,7 @@ module TopCoder 
     | 
|
| 
       6 
6 
     | 
    
         
             
                    def initialize text, pos, info = ""
         
     | 
| 
       7 
7 
     | 
    
         
             
                        message = text
         
     | 
| 
       8 
8 
     | 
    
         
             
                        if pos < text.size && pos >= 0
         
     | 
| 
       9 
     | 
    
         
            -
                            message = text[0..pos]
         
     | 
| 
      
 9 
     | 
    
         
            +
                            message = pos == 0 ? "" : text[0..(pos - 1)]
         
     | 
| 
       10 
10 
     | 
    
         
             
                            message << "|"
         
     | 
| 
       11 
11 
     | 
    
         
             
                            message << text[pos]
         
     | 
| 
       12 
12 
     | 
    
         
             
                            message << "|"
         
     | 
| 
         @@ -53,7 +53,7 @@ module TopCoder 
     | 
|
| 
       53 
53 
     | 
    
         
             
                            end
         
     | 
| 
       54 
54 
     | 
    
         
             
                        end
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
     | 
    
         
            -
                        raise  
     | 
| 
      
 56 
     | 
    
         
            +
                        raise UnsupportedType.new typ
         
     | 
| 
       57 
57 
     | 
    
         
             
                    end
         
     | 
| 
       58 
58 
     | 
    
         | 
| 
       59 
59 
     | 
    
         
             
                private
         
     | 
| 
         @@ -7,11 +7,23 @@ module TopCoder 
     | 
|
| 
       7 
7 
     | 
    
         
             
                        @text = ""
         
     | 
| 
       8 
8 
     | 
    
         
             
                    end
         
     | 
| 
       9 
9 
     | 
    
         
             
                    def next value = nil, typ = nil
         
     | 
| 
       10 
     | 
    
         
            -
                        if value.nil?  
     | 
| 
      
 10 
     | 
    
         
            +
                        if value.nil? || typ.nil?
         
     | 
| 
       11 
11 
     | 
    
         
             
                            @text << ", "
         
     | 
| 
       12 
     | 
    
         
            -
                            return
         
     | 
| 
      
 12 
     | 
    
         
            +
                            return self
         
     | 
| 
       13 
13 
     | 
    
         
             
                        end 
         
     | 
| 
       14 
14 
     | 
    
         | 
| 
      
 15 
     | 
    
         
            +
                        if typ.is_a? TArray
         
     | 
| 
      
 16 
     | 
    
         
            +
                            @text << ?[
         
     | 
| 
      
 17 
     | 
    
         
            +
                            value.each_index do |i|
         
     | 
| 
      
 18 
     | 
    
         
            +
                                self.next value[i], typ.subtype
         
     | 
| 
      
 19 
     | 
    
         
            +
                                if i < value.size - 1
         
     | 
| 
      
 20 
     | 
    
         
            +
                                    self.next
         
     | 
| 
      
 21 
     | 
    
         
            +
                                end 
         
     | 
| 
      
 22 
     | 
    
         
            +
                            end
         
     | 
| 
      
 23 
     | 
    
         
            +
                            @text << ?]
         
     | 
| 
      
 24 
     | 
    
         
            +
                            return self
         
     | 
| 
      
 25 
     | 
    
         
            +
                        end
         
     | 
| 
      
 26 
     | 
    
         
            +
             
     | 
| 
       15 
27 
     | 
    
         
             
                        case typ
         
     | 
| 
       16 
28 
     | 
    
         
             
                        when TBoolean, TInt, TLong, TFloat, TDouble
         
     | 
| 
       17 
29 
     | 
    
         
             
                            @text << value.to_s
         
     | 
| 
         @@ -20,19 +32,10 @@ module TopCoder 
     | 
|
| 
       20 
32 
     | 
    
         
             
                        when TString
         
     | 
| 
       21 
33 
     | 
    
         
             
                            @text << ?" << value << ?"
         
     | 
| 
       22 
34 
     | 
    
         
             
                        else 
         
     | 
| 
       23 
     | 
    
         
            -
                             
     | 
| 
       24 
     | 
    
         
            -
                                @text << ?[
         
     | 
| 
       25 
     | 
    
         
            -
                                value.each_index do |i|
         
     | 
| 
       26 
     | 
    
         
            -
                                    self.next value[i], typ.subtype
         
     | 
| 
       27 
     | 
    
         
            -
                                    if i < value.size - 1
         
     | 
| 
       28 
     | 
    
         
            -
                                        self.next
         
     | 
| 
       29 
     | 
    
         
            -
                                    end 
         
     | 
| 
       30 
     | 
    
         
            -
                                end
         
     | 
| 
       31 
     | 
    
         
            -
                                @text << ?]
         
     | 
| 
       32 
     | 
    
         
            -
                            else
         
     | 
| 
       33 
     | 
    
         
            -
                                raise UnrecognizedType.new typ
         
     | 
| 
       34 
     | 
    
         
            -
                            end
         
     | 
| 
      
 35 
     | 
    
         
            +
                            raise UnsupportedType.new typ
         
     | 
| 
       35 
36 
     | 
    
         
             
                        end
         
     | 
| 
      
 37 
     | 
    
         
            +
             
     | 
| 
      
 38 
     | 
    
         
            +
                        return self
         
     | 
| 
       36 
39 
     | 
    
         
             
                    end
         
     | 
| 
       37 
40 
     | 
    
         
             
                    def to_s
         
     | 
| 
       38 
41 
     | 
    
         
             
                        return @text
         
     | 
    
        data/dist/template/bin/runner.rb
    CHANGED
    
    | 
         @@ -87,6 +87,9 @@ class GettcRunner 
     | 
|
| 
       87 
87 
     | 
    
         
             
                    if ret != true
         
     | 
| 
       88 
88 
     | 
    
         
             
                        @errors << n
         
     | 
| 
       89 
89 
     | 
    
         
             
                        @log.debug "Error (cannot execute solver)\n"
         
     | 
| 
      
 90 
     | 
    
         
            +
                    elsif !File.exists? received
         
     | 
| 
      
 91 
     | 
    
         
            +
                        @errors << n
         
     | 
| 
      
 92 
     | 
    
         
            +
                        @log.debug "Error (solver did not produce an output file)\n"
         
     | 
| 
       90 
93 
     | 
    
         
             
                    else
         
     | 
| 
       91 
94 
     | 
    
         
             
                        system "#{@checker} #{expected} #{received}"
         
     | 
| 
       92 
95 
     | 
    
         
             
                        ret = $?.exitstatus
         
     | 
| 
         @@ -0,0 +1,30 @@ 
     | 
|
| 
      
 1 
     | 
    
         
            +
            #! /usr/bin/env node
         
     | 
| 
      
 2 
     | 
    
         
            +
            <% engine = JavascriptEngine.new func, vars %>
         
     | 
| 
      
 3 
     | 
    
         
            +
            var fs = require("fs");
         
     | 
| 
      
 4 
     | 
    
         
            +
            var path = require("path");
         
     | 
| 
      
 5 
     | 
    
         
            +
            var tc = null;
         
     | 
| 
      
 6 
     | 
    
         
            +
             
     | 
| 
      
 7 
     | 
    
         
            +
            function init() {
         
     | 
| 
      
 8 
     | 
    
         
            +
                var gettcHome = process.env.GETTC_HOME || path.join(process.env.HOME, ".gettc");
         
     | 
| 
      
 9 
     | 
    
         
            +
                var includeDir = path.join(gettcHome, "include", "javascript");
         
     | 
| 
      
 10 
     | 
    
         
            +
                tc = require(path.join(includeDir, "topcoder"));
         
     | 
| 
      
 11 
     | 
    
         
            +
            }
         
     | 
| 
      
 12 
     | 
    
         
            +
             
     | 
| 
      
 13 
     | 
    
         
            +
            function main() { try {
         
     | 
| 
      
 14 
     | 
    
         
            +
                var input = fs.readFileSync(process.argv[2], { encoding: "ascii" });
         
     | 
| 
      
 15 
     | 
    
         
            +
                var reader = new tc.Reader(input);
         
     | 
| 
      
 16 
     | 
    
         
            +
            <%= engine.input.gsub(/^/, " " * 4) %>
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                var <%= prob.name %> = require("./<%= prob.name %>");
         
     | 
| 
      
 19 
     | 
    
         
            +
                var result = <%= prob.name %>.<%= func.name %>(<%= engine.arglist %>);
         
     | 
| 
      
 20 
     | 
    
         
            +
                
         
     | 
| 
      
 21 
     | 
    
         
            +
                var writer = new tc.Writer();
         
     | 
| 
      
 22 
     | 
    
         
            +
                writer.next(result, "<%= func.type.to_s %>");
         
     | 
| 
      
 23 
     | 
    
         
            +
                fs.writeFileSync(process.argv[3], writer.toString(), { encoding: "ascii" });
         
     | 
| 
      
 24 
     | 
    
         
            +
            } catch (err) {
         
     | 
| 
      
 25 
     | 
    
         
            +
                console.log(err.toString());
         
     | 
| 
      
 26 
     | 
    
         
            +
                console.trace();
         
     | 
| 
      
 27 
     | 
    
         
            +
            }}
         
     | 
| 
      
 28 
     | 
    
         
            +
             
     | 
| 
      
 29 
     | 
    
         
            +
            init();
         
     | 
| 
      
 30 
     | 
    
         
            +
            main();
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,14 +1,14 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: gettc
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: '1. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: '1.10'
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Seri
         
     | 
| 
       8 
8 
     | 
    
         
             
            autorequire: 
         
     | 
| 
       9 
9 
     | 
    
         
             
            bindir: bin
         
     | 
| 
       10 
10 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       11 
     | 
    
         
            -
            date: 2015-05- 
     | 
| 
      
 11 
     | 
    
         
            +
            date: 2015-05-14 00:00:00.000000000 Z
         
     | 
| 
       12 
12 
     | 
    
         
             
            dependencies:
         
     | 
| 
       13 
13 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       14 
14 
     | 
    
         
             
              name: hpricot
         
     | 
| 
         @@ -76,6 +76,11 @@ files: 
     | 
|
| 
       76 
76 
     | 
    
         
             
            - dist/include/haskell/engine.rb
         
     | 
| 
       77 
77 
     | 
    
         
             
            - dist/include/java/TopCoder.jar
         
     | 
| 
       78 
78 
     | 
    
         
             
            - dist/include/java/engine.rb
         
     | 
| 
      
 79 
     | 
    
         
            +
            - dist/include/javascript/engine.rb
         
     | 
| 
      
 80 
     | 
    
         
            +
            - dist/include/javascript/topcoder.js
         
     | 
| 
      
 81 
     | 
    
         
            +
            - dist/include/javascript/topcoder/errors.js
         
     | 
| 
      
 82 
     | 
    
         
            +
            - dist/include/javascript/topcoder/reader.js
         
     | 
| 
      
 83 
     | 
    
         
            +
            - dist/include/javascript/topcoder/writer.js
         
     | 
| 
       79 
84 
     | 
    
         
             
            - dist/include/python/engine.rb
         
     | 
| 
       80 
85 
     | 
    
         
             
            - dist/include/python/topcoder/__init__.py
         
     | 
| 
       81 
86 
     | 
    
         
             
            - dist/include/python/topcoder/__init__.pyc
         
     | 
| 
         @@ -110,6 +115,9 @@ files: 
     | 
|
| 
       110 
115 
     | 
    
         
             
            - dist/template/solve/java/build.xml
         
     | 
| 
       111 
116 
     | 
    
         
             
            - dist/template/solve/java/{name}.java
         
     | 
| 
       112 
117 
     | 
    
         
             
            - dist/template/solve/java/{name}Solver.java
         
     | 
| 
      
 118 
     | 
    
         
            +
            - dist/template/solve/javascript/Makefile
         
     | 
| 
      
 119 
     | 
    
         
            +
            - dist/template/solve/javascript/{name}.js
         
     | 
| 
      
 120 
     | 
    
         
            +
            - dist/template/solve/javascript/{name}Solver.js
         
     | 
| 
       113 
121 
     | 
    
         
             
            - dist/template/solve/python/Makefile
         
     | 
| 
       114 
122 
     | 
    
         
             
            - dist/template/solve/python/{name}.py
         
     | 
| 
       115 
123 
     | 
    
         
             
            - dist/template/solve/python/{name}Solver.py
         
     |