Task1
We concatenate two string lists to strings and check for equality:
#!/usr/bin/env perl
use strict;
use warnings;
sub equal_list{
(join '',@{$_[0]}) eq (join '',@{$_[1]})
}
printf "%d\n",equal_list(['a','bc'],['ab','c']);
printf "%d\n",equal_list(['a','b','c'],['a','bc']);
printf "%d\n",equal_list(['a','bc'],['a','c','b']);
printf "%d\n",equal_list(['ab','c',''],['','a','bc']);
printf "%d\n",equal_list(['p','e','r','l'],['perl']);
Task2
We try to divide the list two equal parts as long as possible:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Show;
sub list_division{
my ($arr,$n) = @_;
my $sz = int(@$arr / $n);
return -1 if $n > @$arr;
my $rest = @$arr % $n;
my @res;
foreach my $i(1..$n){
push @res,[splice @$arr,0,$sz + ($i <= $rest)]
}
@res
}
show list_division([1..5],2);
show list_division([1..6],3);
show list_division([1..3],2);
show list_division([1..10],5);
show list_division([1..3],4);
show list_division([72,57,89,55,36,84,10,95,99,35],7);