ordered_ds 1.0.0 → 1.0.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.
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: