ordered_ds 1.0.0 → 1.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (3) hide show
  1. checksums.yaml +4 -4
  2. data/lib/ordered_ds.rb +20 -18
  3. metadata +2 -2
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: d6202df63f7be8dfd7e47c05b1f4df1fac04921f1aa8a5bfa551d07e76f36c6b
4
- data.tar.gz: 6b787b88249091dbbf956a4f9a93eecb74c3aa9d31f249cc49de191d069d0fe3
3
+ metadata.gz: d9a8a07dd46959758a348493a35f3320ecf7d39f03245c0c0a427e718e936a52
4
+ data.tar.gz: 0a37156519aa6313ee525a23c2b13eb0447f2d2456b6a7bafa2a7a1ce8d23ea4
5
5
  SHA512:
6
- metadata.gz: c133ea1c52fe17ab14c8e75e2ab785b1487ac6546bb3b5713c91e3e719519b2155258f187fd1dc613597a78b74381fbf31e98c11c1bd889233b531ed51374c4a
7
- data.tar.gz: '096d548ad2745206fb0e14097fbe893e097c44cad955e7429b6ce6b9f3accf54d27723c6564fa4fafd030ca7c3e4650a3faacfd92e690322b170b7dc73948583'
6
+ metadata.gz: 28540d59778755070c408e372ab9d12616cb08d1d695126d63edfb6c5fc9a16ae3fe7edf23d90f902c7cea4613423e764e05a32666859a1e4bf49f79cf374b2d
7
+ data.tar.gz: f516ae08fb145bede577be79ea6443fd167b26f27832be19da05895eff7f87889f200de7228c5e9d1f2fb77730470511ee9f16610fbddea59d365713f2ed11f8
data/lib/ordered_ds.rb CHANGED
@@ -1,25 +1,25 @@
1
1
  class PQ
2
2
 
3
3
  def initialize array = [], heapify = true, &is_unordered
4
- raise ArgumentError.new 'PQ init' unless array.class == Array &&
5
- (heapify == true || heapify == false) && block_given?
6
- @a, @z, @u = array, array.size, is_unordered
7
- return if @a.empty? || !heapify
8
- i = 1 << Math.log(@z, 2).floor
4
+ raise ArgumentError.new 'PQ init' unless
5
+ array.class == Array &&
6
+ (heapify == true || heapify == false) &&
7
+ block_given?
8
+ @a, @u = array, is_unordered
9
+ return unless heapify
10
+ i = @a.size / 2
9
11
  sink i while (i -= 1) >= 0
10
12
  end
11
13
 
12
- def size = @z
13
-
14
- def empty? = @z == 0
15
-
16
- def top = @z > 0 ? @a.first : nil
14
+ def size = @a.size
15
+ def empty? = @a.empty?
16
+ def top = @a.first
17
17
 
18
18
  def << x
19
- @a[i = @z] = x
20
- @z += 1
19
+ i = @a.size
20
+ @a << x
21
21
  while i > 0
22
- p = (i - (i[0] ^ 1)) / 2
22
+ p = (i - 1) / 2
23
23
  break unless @u.call @a[p], @a[i]
24
24
  @a[p], @a[i] = @a[i], @a[p]
25
25
  i = p
@@ -27,17 +27,19 @@ class PQ
27
27
  end
28
28
 
29
29
  def pop
30
- return nil unless r = top
31
- @a[0] = @a[@z -= 1]
30
+ return @a.pop if @a.size < 2
31
+ t, @a[0] = @a.first, @a.pop
32
32
  sink 0
33
- r
33
+ t
34
34
  end
35
35
 
36
36
  private
37
37
 
38
38
  def sink p
39
- while (c = p * 2 + 1) < @z
40
- c += 1 if c + 1 < @z && @u.(@a[c], @a[c + 1])
39
+ z = @a.size
40
+ while (c = p * 2 + 1) < z
41
+ r = c + 1
42
+ c = r if r < z && @u.(@a[c], @a[r])
41
43
  break unless @u.call @a[p], @a[c]
42
44
  @a[p], @a[c] = @a[c], @a[p]
43
45
  p = c
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ordered_ds
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.0
4
+ version: 1.0.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Viktor Reznov
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2023-10-27 00:00:00.000000000 Z
11
+ date: 2023-10-29 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description:
14
14
  email: