my $dest = 1000; my $start = 30; my $steps = 100; my $newScale = $start; my $ascent = 1; my $descent = 0; my $n = 9; # n is power of 2 to reach $steps my $i=1; print "start with $start\n"; print "Find $dest\n"; print "\n\nASCENT\n"; while ($ascent) { if ($newScale < $dest) { $i++; $newScale = $newScale + $steps; print "$newScale\n"; } else { $ascent = 0; $descent = 1; $newScale = $newScale - $steps; $i++; } } print "\n\nDESCENT\n"; while ($descent) { if ( $n < 0 ) { last; } if ($newScale > $dest) { $newScale = $newScale - 2**$n; print "$newScale\n"; $i++; } else { $newScale = $newScale + 2**$n; $i++; print "$newScale\n"; } if ($newScale == $dest) { print "\n\nGOT IT...\$newScale == \$dest --> $newScale == $dest \nTotal Iteration taken is $i \n"; last; } $n--; }