Task1
We sort the array and return those indices where elements differ:
#!/usr/bin/env perl
use strict;
use warnings;
use Data::Show;
sub check_order{
my @sorted = sort{$a <=> $b} @{$_[0]};
map{$sorted[$_] != $_[0]->[$_] ? $_ : ()} 0..$#sorted
}
print show check_order([5,2,4,3,1]);
print show check_order([1,2,1,1,3]);
print show check_order([3,1,3,2,3]);
Task2
We find the anagrams by sorting each string and counting any differing two consecutive elements:
#!/usr/bin/env perl
use strict;
use warnings;
sub find_anagrams{
my ($arr) = @_;
my @sorted = map {join'',sort split ''} @$arr;
my $sum = 1;
map{$sum++ if $sorted[$_-1] ne $sorted[$_]} 1..$#sorted;
$sum
}
printf "%d\n",find_anagrams(['acca','dog','god','perl','repl']);
printf "%d\n",find_anagrams(['abba','baba','aabb','ab','ab']);
No comments:
Post a Comment