Robbie Hatley's Perl Solutions To The Weekly Challenge #204

For those not familiar with "The Weekly Challenge", it is a weekly programming puzzle, usually with two parts, cycling every Sunday. You can find it here:

The Weekly Challenge

This week (2023-02-12 through 2023-02-18) is weekly challenge #204.

Task 1 is "determine if an array is monotonic". This is just a matter of using the "&&=", "<=", and ">=" operators:

sub is_mono (@a){
   my $mono;
   $mono = 1;
   for ( my $i = 1 ; $i <= $#a ; ++$i ){
      $mono &&= ($a[$i-1]<=$a[$i]);} # mono inc?
   if ( $mono == 1 ) {return 1;}
   $mono = 1;
   for ( my $i = 1 ; $i <= $#a ; ++$i ){
      $mono &&= ($a[$i-1]>=$a[$i]);} # mono dec?
   if ( $mono == 1 ) {return 2;}
   return 0;}

Task 2 is "reshape array". The approach I took was to first note the original shape, then record the elements in a flat array, then note the desired shape, then reshape if possible:

sub shape {
   my $r = shift @_;
   my $c = shift @_;
   my @flat = @_;
   if ($r*$c != scalar @flat){
      return ([0])}
   my @rows;
   my $i = 0;
   for (@flat){
      $rows[int $i/$c]->[$i%$c]=$_;
      ++$i}
   return @rows}

That's it for 204; looking forward to 205.

Comments

Popular posts from this blog

Robbie Hatley's Solutions To The Weekly Challenge #215

Robbie Hatley's Solutions To The Weekly Challenge #221

Robbie Hatley's Solutions To The Weekly Challenge #239