http://www.perlmonks.org?node_id=991839


in reply to Determine steps between two numbers

Since you always assemble your steps in increasing order, you could do this:

#!/usr/bin/perl use strict; use warnings; my ($first, $second, $steps) = @ARGV; $steps = int $steps; if ($first > $second) { ($first,$second) = ($second,$first); } my $increment = ($first - $second) / ($steps - 1); my @array = ($first); for (2..$steps) { push @array, $first -= $increment; } print join(", ", @array) . "\n";

Replies are listed 'Best First'.
Re^2: Determine steps between two numbers
by grizzley (Chaplain) on Sep 05, 2012 at 13:32 UTC
    IMHO in such case the variable name should be changed from 'increment' to 'decrement'. Or better - change algorithm to more intuitive:
    my $increment = ($second - $first) / ($steps - 1); ... push @array, $first += $increment;
    And one-line @array generator as alternative:

    my @array = map { $first + $increment * $_ } 0 .. $steps - 1;

      Thanks. I transferred this over from my Java implementation of it and didn't quite get it right, so I did some stuff to make it work. You helped me get it back to what it was originally. Not too confident in the one-line generator you have there, but it'd be a nice touch anyway.

        Not too confident in the one-line generator you have there, but it'd be a nice touch anyway.
        Why? Don't you trust mathematics?

        CountZero

        A program should be light and agile, its subroutines connected like a string of pearls. The spirit and intent of the program should be retained throughout. There should be neither too little or too much, neither needless loops nor useless variables, neither lack of structure nor overwhelming rigidity." - The Tao of Programming, 4.1 - Geoffrey James

        My blog: Imperial Deltronics