Module: Spruz::Minimize

### Home Classes Methods

### In Files

- lib/spruz/minimize.rb

### Methods

- #minimize
- #minimize!
- #unminimize
- #unminimize!

### Files

- README.rdoc

### Class/Module Index

Quicksearch

- Spruz
- Spruz::Attempt
- Spruz::Bijection
- Spruz::Blank
- Spruz::Blank::Array
- Spruz::Blank::FalseClass
- Spruz::Blank::Hash
- Spruz::Blank::NilClass
- Spruz::Blank::Numeric
- Spruz::Blank::Object
- Spruz::Blank::String
- Spruz::Blank::TrueClass
- Spruz::CountBy
- Spruz::DeepDup
- Spruz::FileBinary
- Spruz::FileBinary::ClassMethods
- Spruz::FileBinary::Constants
- Spruz::Full
- Spruz::GO
- Spruz::Generator
- Spruz::HashSymbolizeKeysRecursive
- Spruz::HashUnion
- Spruz::Limited
- Spruz::LinesFile
- Spruz::LinesFile::LineExtension
- Spruz::Memoize
- Spruz::Minimize
- Spruz::ModuleGroup
- Spruz::Null
- Spruz::Once
- Spruz::P
- Spruz::PartialApplication
- Spruz::RangePlus
- Spruz::Round
- Spruz::SecureWrite
- Spruz::Shuffle
- Spruz::StringCamelize
- Spruz::StringUnderscore
- Spruz::StringVersion
- Spruz::StringVersion::Version
- Spruz::Subhash
- Spruz::TimeDummy
- Spruz::TimeDummy::ClassMethods
- Spruz::ToProc
- Spruz::UniqBy
- Spruz::Write
- Array
- Enumerable
- File
- Float
- Hash
- IO
- IRB
- Integer
- Method
- Module
- Object
- Proc
- Range
- String
- Symbol
- Time

No matching classes.

# Spruz::Minimize

This module can be mixed into all classes, whose instances respond to the

  and size-methods, like for example Array. The returned elements from []

should respond to the succ method.

### Public Instance Methods

minimize() click to toggle source

Returns a minimized version of this object, that is successive elements are substituted with ranges a..b. In the situation ..., x, y,... and y != x.succ a range x..x is created, to make it easier to iterate over all the ranges in one run. A small example:

    [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ].minimize # => [ 'A'..'C', 'G'..'G', 'K'..'M' ]

If the order of the original elements doesn't matter, it's a good idea to first sort them and then minimize:

    [ 5, 1, 4, 2 ].sort.minimize # => [ 1..2, 4..5 ]

    # File lib/spruz/minimize.rb, line 15
    def minimize
      result = []
      last_index = size - 1
      size.times do |i|
        result << [ self[0] ] if i == 0
        if self[i].succ != self[i + 1] or i == last_index
          result[-1] << self[i]
          result << [ self[i + 1] ] unless i == last_index
        end
      end
      result.map! { |a, b| a..b }
    end

minimize!() click to toggle source

First minimizes this object, then calls the replace method with the result.

    # File lib/spruz/minimize.rb, line 30
    def minimize!
      replace minimize
    end

unminimize() click to toggle source

Invert a minimized version of an object. Some small examples:

    [ 'A'..'C', 'G'..'G', 'K'..'M' ].unminimize # => [ 'A', 'B', 'C', 'G', 'K', 'L', 'M' ]

and

    [ 1..2, 4..5 ].unminimize # => [ 1, 2, 4, 5 ]

    # File lib/spruz/minimize.rb, line 38
    def unminimize
      result = []
      for range in self
        for e in range
          result << e
        end
      end
      result
    end

unminimize!() click to toggle source

Invert a minimized version of this object in place.

    # File lib/spruz/minimize.rb, line 49
    def unminimize!
      replace unminimize
    end

[Validate]

Generated with the Darkfish Rdoc Generator 2.