ac-library-rb 0.5.2 → 0.6.1
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/.rubocop.yml +6 -0
- data/README.md +9 -2
- data/ac-library-rb.gemspec +1 -0
- data/bin/lock_lib.rb +5 -1
- data/document_en/dsu.md +2 -2
- data/document_en/max_flow.md +1 -1
- data/document_en/min_cost_flow.md +1 -1
- data/document_en/segtree.md +22 -5
- data/document_en/two_sat.md +1 -1
- data/document_ja/dsu.md +1 -3
- data/document_ja/lazy_segtree.md +9 -7
- data/document_ja/max_flow.md +1 -1
- data/document_ja/min_cost_flow.md +1 -1
- data/document_ja/scc.md +4 -3
- data/document_ja/segtree.md +42 -9
- data/document_ja/two_sat.md +1 -1
- data/lib/ac-library-rb/version.rb +1 -1
- data/lib/convolution.rb +21 -0
- data/lib/core_ext/all.rb +11 -0
- data/lib/crt.rb +3 -1
- data/lib/dsu.rb +11 -8
- data/lib/fenwick_tree.rb +22 -8
- data/lib/floor_sum.rb +33 -10
- data/lib/lazy_segtree.rb +29 -3
- data/lib/max_flow.rb +10 -4
- data/lib/min_cost_flow.rb +13 -7
- data/lib/scc.rb +21 -13
- data/lib/segtree.rb +28 -22
- data/lib/two_sat.rb +7 -5
- data/lib_helpers/ac-library-rb.rb +24 -0
- data/lib_lock/ac-library-rb/convolution.rb +21 -0
- data/lib_lock/ac-library-rb/core_ext/all.rb +11 -0
- data/lib_lock/ac-library-rb/core_ext/modint.rb +3 -3
- data/lib_lock/ac-library-rb/crt.rb +3 -1
- data/lib_lock/ac-library-rb/dsu.rb +11 -8
- data/lib_lock/ac-library-rb/fenwick_tree.rb +22 -8
- data/lib_lock/ac-library-rb/floor_sum.rb +33 -10
- data/lib_lock/ac-library-rb/lazy_segtree.rb +29 -3
- data/lib_lock/ac-library-rb/max_flow.rb +10 -4
- data/lib_lock/ac-library-rb/min_cost_flow.rb +13 -7
- data/lib_lock/ac-library-rb/scc.rb +21 -13
- data/lib_lock/ac-library-rb/segtree.rb +28 -22
- data/lib_lock/ac-library-rb/two_sat.rb +7 -5
- metadata +20 -4
- data/lib_lock/ac-library-rb.rb +0 -22
| @@ -3,14 +3,10 @@ module AcLibraryRb | |
| 3 3 | 
             
              class Segtree
         | 
| 4 4 | 
             
                attr_reader :d, :op, :n, :leaf_size, :log
         | 
| 5 5 |  | 
| 6 | 
            -
                # new(e){ |x, y|  }
         | 
| 7 6 | 
             
                # new(v, e){ |x, y|  }
         | 
| 8 7 | 
             
                # new(v, op, e)
         | 
| 9 | 
            -
                def initialize(a0, a1 | 
| 10 | 
            -
                  if  | 
| 11 | 
            -
                    @e, @op = a0, proc(&block)
         | 
| 12 | 
            -
                    v = []
         | 
| 13 | 
            -
                  elsif a2.nil?
         | 
| 8 | 
            +
                def initialize(a0, a1, a2 = nil, &block)
         | 
| 9 | 
            +
                  if a2.nil?
         | 
| 14 10 | 
             
                    @e, @op = a1, proc(&block)
         | 
| 15 11 | 
             
                    v = (a0.is_a?(Array) ? a0 : [@e] * a0)
         | 
| 16 12 | 
             
                  else
         | 
| @@ -38,7 +34,18 @@ module AcLibraryRb | |
| 38 34 | 
             
                end
         | 
| 39 35 | 
             
                alias [] get
         | 
| 40 36 |  | 
| 41 | 
            -
                def prod(l, r)
         | 
| 37 | 
            +
                def prod(l, r = nil)
         | 
| 38 | 
            +
                  if r.nil? # if 1st argument l is Range
         | 
| 39 | 
            +
                    if r = l.end
         | 
| 40 | 
            +
                      r += @n if r < 0
         | 
| 41 | 
            +
                      r += 1 unless l.exclude_end?
         | 
| 42 | 
            +
                    else
         | 
| 43 | 
            +
                      r = @n
         | 
| 44 | 
            +
                    end
         | 
| 45 | 
            +
                    l = l.begin
         | 
| 46 | 
            +
                    l += @n if l < 0
         | 
| 47 | 
            +
                  end
         | 
| 48 | 
            +
             | 
| 42 49 | 
             
                  return @e if l == r
         | 
| 43 50 |  | 
| 44 51 | 
             
                  sml = @e
         | 
| @@ -128,21 +135,20 @@ module AcLibraryRb | |
| 128 135 | 
             
                  @d[k] = @op.call(@d[2 * k], @d[2 * k + 1])
         | 
| 129 136 | 
             
                end
         | 
| 130 137 |  | 
| 131 | 
            -
                def inspect
         | 
| 132 | 
            -
             | 
| 133 | 
            -
             | 
| 134 | 
            -
             | 
| 135 | 
            -
             | 
| 136 | 
            -
             | 
| 137 | 
            -
             | 
| 138 | 
            -
             | 
| 139 | 
            -
             | 
| 140 | 
            -
             | 
| 141 | 
            -
             | 
| 142 | 
            -
             | 
| 143 | 
            -
                end
         | 
| 138 | 
            +
                # def inspect # for debug
         | 
| 139 | 
            +
                #   t = 0
         | 
| 140 | 
            +
                #   res = "Segtree @e = #{@e}, @n = #{@n}, @leaf_size = #{@leaf_size} @op = #{@op}\n  "
         | 
| 141 | 
            +
                #   a = @d[1, @d.size - 1]
         | 
| 142 | 
            +
                #   a.each_with_index do |e, i|
         | 
| 143 | 
            +
                #     res << e.to_s << ' '
         | 
| 144 | 
            +
                #     if t == i && i < @leaf_size
         | 
| 145 | 
            +
                #       res << "\n  "
         | 
| 146 | 
            +
                #       t = t * 2 + 2
         | 
| 147 | 
            +
                #     end
         | 
| 148 | 
            +
                #   end
         | 
| 149 | 
            +
                #   res
         | 
| 150 | 
            +
                # end
         | 
| 144 151 | 
             
              end
         | 
| 145 152 |  | 
| 146 | 
            -
              SegTree | 
| 147 | 
            -
              SegmentTree = Segtree
         | 
| 153 | 
            +
              SegTree = Segtree
         | 
| 148 154 | 
             
            end
         | 
| @@ -4,23 +4,25 @@ module AcLibraryRb | |
| 4 4 | 
             
              # TwoSAT
         | 
| 5 5 | 
             
              # Reference: https://github.com/atcoder/ac-library/blob/master/atcoder/twosat.hpp
         | 
| 6 6 | 
             
              class TwoSAT
         | 
| 7 | 
            -
                def initialize(n | 
| 7 | 
            +
                def initialize(n)
         | 
| 8 8 | 
             
                  @n = n
         | 
| 9 9 | 
             
                  @answer = Array.new(n)
         | 
| 10 | 
            -
                  @scc =  | 
| 10 | 
            +
                  @scc = SCC.new(2 * n)
         | 
| 11 11 | 
             
                end
         | 
| 12 12 |  | 
| 13 13 | 
             
                attr_reader :answer
         | 
| 14 14 |  | 
| 15 15 | 
             
                def add_clause(i, f, j, g)
         | 
| 16 | 
            -
                   | 
| 16 | 
            +
                  unless 0 <= i && i < @n and 0 <= j && j < @n
         | 
| 17 | 
            +
                    raise ArgumentError.new("i:#{i} and j:#{j} must be in (0...#{@n})")
         | 
| 18 | 
            +
                  end
         | 
| 17 19 |  | 
| 18 20 | 
             
                  @scc.add_edge(2 * i + (f ? 0 : 1), 2 * j + (g ? 1 : 0))
         | 
| 19 21 | 
             
                  @scc.add_edge(2 * j + (g ? 0 : 1), 2 * i + (f ? 1 : 0))
         | 
| 20 22 | 
             
                  nil
         | 
| 21 23 | 
             
                end
         | 
| 22 24 |  | 
| 23 | 
            -
                def satisfiable
         | 
| 25 | 
            +
                def satisfiable?
         | 
| 24 26 | 
             
                  id = @scc.send(:scc_ids)[1]
         | 
| 25 27 | 
             
                  @n.times do |i|
         | 
| 26 28 | 
             
                    return false if id[2 * i] == id[2 * i + 1]
         | 
| @@ -29,7 +31,7 @@ module AcLibraryRb | |
| 29 31 | 
             
                  end
         | 
| 30 32 | 
             
                  true
         | 
| 31 33 | 
             
                end
         | 
| 32 | 
            -
                alias satisfiable | 
| 34 | 
            +
                alias satisfiable satisfiable?
         | 
| 33 35 | 
             
              end
         | 
| 34 36 |  | 
| 35 37 | 
             
              TwoSat = TwoSAT
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: ac-library-rb
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version: 0. | 
| 4 | 
            +
              version: 0.6.1
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - universato
         | 
| 8 8 | 
             
            autorequire:
         | 
| 9 9 | 
             
            bindir: exe
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date: 2021- | 
| 11 | 
            +
            date: 2021-08-09 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: minitest
         | 
| @@ -38,6 +38,20 @@ dependencies: | |
| 38 38 | 
             
                - - ">="
         | 
| 39 39 | 
             
                  - !ruby/object:Gem::Version
         | 
| 40 40 | 
             
                    version: '0'
         | 
| 41 | 
            +
            - !ruby/object:Gem::Dependency
         | 
| 42 | 
            +
              name: simplecov
         | 
| 43 | 
            +
              requirement: !ruby/object:Gem::Requirement
         | 
| 44 | 
            +
                requirements:
         | 
| 45 | 
            +
                - - ">="
         | 
| 46 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 47 | 
            +
                    version: '0'
         | 
| 48 | 
            +
              type: :development
         | 
| 49 | 
            +
              prerelease: false
         | 
| 50 | 
            +
              version_requirements: !ruby/object:Gem::Requirement
         | 
| 51 | 
            +
                requirements:
         | 
| 52 | 
            +
                - - ">="
         | 
| 53 | 
            +
                  - !ruby/object:Gem::Version
         | 
| 54 | 
            +
                    version: '0'
         | 
| 41 55 | 
             
            description: |-
         | 
| 42 56 | 
             
              ac-library-rb is a ruby port of AtCoder Library (ACL).
         | 
| 43 57 | 
             
              DSU(UnionFind), FenwickTree, PriorityQueue, Segtree, SCC, 2-SAT, suffix_array, lcp_array, z_algorithm, crt, inv_mod, floor_sum, max_flow, min_cost_flow......
         | 
| @@ -90,6 +104,7 @@ files: | |
| 90 104 | 
             
            - document_ja/two_sat.md
         | 
| 91 105 | 
             
            - lib/ac-library-rb/version.rb
         | 
| 92 106 | 
             
            - lib/convolution.rb
         | 
| 107 | 
            +
            - lib/core_ext/all.rb
         | 
| 93 108 | 
             
            - lib/core_ext/modint.rb
         | 
| 94 109 | 
             
            - lib/crt.rb
         | 
| 95 110 | 
             
            - lib/dsu.rb
         | 
| @@ -108,9 +123,10 @@ files: | |
| 108 123 | 
             
            - lib/suffix_array.rb
         | 
| 109 124 | 
             
            - lib/two_sat.rb
         | 
| 110 125 | 
             
            - lib/z_algorithm.rb
         | 
| 126 | 
            +
            - lib_helpers/ac-library-rb.rb
         | 
| 111 127 | 
             
            - lib_helpers/ac-library-rb/all.rb
         | 
| 112 | 
            -
            - lib_lock/ac-library-rb.rb
         | 
| 113 128 | 
             
            - lib_lock/ac-library-rb/convolution.rb
         | 
| 129 | 
            +
            - lib_lock/ac-library-rb/core_ext/all.rb
         | 
| 114 130 | 
             
            - lib_lock/ac-library-rb/core_ext/modint.rb
         | 
| 115 131 | 
             
            - lib_lock/ac-library-rb/crt.rb
         | 
| 116 132 | 
             
            - lib_lock/ac-library-rb/dsu.rb
         | 
| @@ -151,7 +167,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 151 167 | 
             
                - !ruby/object:Gem::Version
         | 
| 152 168 | 
             
                  version: '0'
         | 
| 153 169 | 
             
            requirements: []
         | 
| 154 | 
            -
            rubygems_version: 3.2. | 
| 170 | 
            +
            rubygems_version: 3.2.22
         | 
| 155 171 | 
             
            signing_key:
         | 
| 156 172 | 
             
            specification_version: 4
         | 
| 157 173 | 
             
            summary: ac-library-rb is a ruby port of AtCoder Library (ACL).
         | 
    
        data/lib_lock/ac-library-rb.rb
    DELETED
    
    | @@ -1,22 +0,0 @@ | |
| 1 | 
            -
            module AcLibraryRb
         | 
| 2 | 
            -
            end
         | 
| 3 | 
            -
            include AcLibraryRb
         | 
| 4 | 
            -
             | 
| 5 | 
            -
            require_relative './ac-library-rb/convolution'
         | 
| 6 | 
            -
            require_relative './ac-library-rb/crt'
         | 
| 7 | 
            -
            require_relative './ac-library-rb/dsu'
         | 
| 8 | 
            -
            require_relative './ac-library-rb/fenwick_tree'
         | 
| 9 | 
            -
            require_relative './ac-library-rb/floor_sum'
         | 
| 10 | 
            -
            require_relative './ac-library-rb/inv_mod'
         | 
| 11 | 
            -
            require_relative './ac-library-rb/lazy_segtree'
         | 
| 12 | 
            -
            require_relative './ac-library-rb/lcp_array'
         | 
| 13 | 
            -
            require_relative './ac-library-rb/max_flow'
         | 
| 14 | 
            -
            require_relative './ac-library-rb/min_cost_flow'
         | 
| 15 | 
            -
            require_relative './ac-library-rb/modint'
         | 
| 16 | 
            -
            require_relative './ac-library-rb/pow_mod'
         | 
| 17 | 
            -
            require_relative './ac-library-rb/priority_queue'
         | 
| 18 | 
            -
            require_relative './ac-library-rb/scc'
         | 
| 19 | 
            -
            require_relative './ac-library-rb/segtree'
         | 
| 20 | 
            -
            require_relative './ac-library-rb/suffix_array'
         | 
| 21 | 
            -
            require_relative './ac-library-rb/two_sat'
         | 
| 22 | 
            -
            require_relative './ac-library-rb/z_algorithm'
         |