10 November 2023 | Challenge 242 |
Missing Reversed Inversions
Task 1: Missing Members
You are given two arrays of integers. Write a script to find out the missing members in each other arrays.
In set theory, given two sets A and B, this task asks for the difference sets A \ B and B \ A.
There are many approches to solve this with Perl. The most basic way would be to use hashes as representations of sets. Hash slices come very handy when an array shall be convertet to as set:
my @a = (...);
my %ha;
@ha{@a} = ();
Now %h
is a hash with all members of @a
as keys.
Taking the set difference A \ B to a second array @b
is as easy as:
@b = (...);
delete @ha{@b};
However, I prefer a more functional approach. Using PDL ndarrays of unique sorted numbers as set representations. Then we may use PDL set operation in a natural way to solve the task:
$m1 = long(...)->uniq;
makes $m1
a 1-d ndarray representing a set and
setdiff_sorted($m1, $m2);
gives M1 \ M2. Same result, but better readable.
Task 2: Flip Matrix
You are given
n x n
binary matrix. Write a script to flip the given matrix as below.
Again, with PDL this task is almost trivial.
Using PDL::NiceSlice
we may reverse a dimension using the notation (-1:0)
.
Reverting a value is done with the unary negation operator !
.
Performing the “flip matrix” operation on a 2-d ndarray $m
thus is as easy as:
!$m->(-1:0)
If you have a question about this post or if you like to comment on it, feel free to open an issue in my github repository.