Module: Imglab::Sequence

Extended by:
Sequence
Included in:
Sequence
Defined in:
lib/imglab/sequence.rb

Constant Summary collapse

DEFAULT_SIZE =
16

Instance Method Summary collapse

Instance Method Details

#sequence(first, last, size = DEFAULT_SIZE) ⇒ Array<Integer>

Returns a geometric sequence of integer numbers inside an interval and with specific size as array.

Examples:

Specify an ascending sequence of default size

Imglab::Sequence.sequence(100, 8192) #=> [100, 134, 180, 241, 324, 434, 583, 781, 1048, 1406, 1886, 2530, 3394, 4553, 6107, 8192]

Specify an ascending sequence of size 1

Imglab::Sequence.sequence(100, 8192, 1) #=> [100]

Specify an ascending sequence of size 2

Imglab::Sequence.sequence(100, 8192, 2) #=> [100, 8192]

Specify an ascending sequence of size 4

Imglab::Sequence.sequence(100, 8192, 4) #=> [100, 434, 1886, 8192]

Specify a descending sequence of size 6

Imglab::Sequence.sequence(70, 60, 6) #=> [70, 68, 66, 64, 62, 60]

Parameters:

  • first (Integer)

    the first integer number of the sequence.

  • last (Integer)

    the last integer number of the sequence.

  • size (Integer) (defaults to: DEFAULT_SIZE)

    the size of the sequence.

Returns:

  • (Array<Integer>)

    a sequence of integer numbers as array.



23
24
25
26
27
28
29
30
31
# File 'lib/imglab/sequence.rb', line 23

def sequence(first, last, size = DEFAULT_SIZE)
  return [] if size <= 0
  return [first] if size == 1
  return [first, last] if size == 2

  ratio = (last / first.to_f) ** (1 / (size - 1).to_f)

  progression(first, ratio).take(size - 1).map(&:round).push(last)
end