The Weekly Challenge - 262-1


TASK #1: Max Positive Negative
You are given an array of integers, @ints. Write a script to return the maximum number of either positive or negative integers in the given array.

Here my solution, without keyword 'my', without validating '@ints', without a module:


sub max_pos_neg {
   ( ($pos = scalar(grep { $_ > 0 } @_)) > ($neg = scalar(grep { $_ < 0} @_)) ) ? print("max positive integers: $pos\n") : print("max negative integers: $neg\n");
}

#assumption 1: no number 0
#assumption 2: number of positive and negative integers differ

@ints = qw(-3 1 2 -1 3 -2 4);
max_pos_neg(@ints); # max positive integers: 4

@ints = qw(-1 -2 -3 1);
max_pos_neg(@ints); # max negative integers: 3

@ints = qw(1 2);
max_pos_neg(@ints); # max positive integers: 2
Alternative:

assumption 1: no number 0
assumption 2: number of positive and negative integers differ, meaning
  - positive integers > negative integers: more than (scalar(@_)/2) is positive
  - negative integers > positive integers: less than (scalar(@_)/2) is positive

sub max_pos_neg {
   ( ($pos = scalar(grep { $_ > 0 } @_)) > (scalar(@_)/2) ) ? print("max positive integers: $pos\n") : print("max negative integers: ", (scalar(@_) - $pos) , "\n");
}