I’ve been doing the Weekly
Challenges. The
latest
involved list searching and directory evaluation. (Note that this is
open until 12 February 2023.)
Task 1: Special Quadruplets
You are given an array of integers.
Write a script to find out the total special quadruplets for the given array.
Special Quadruplets are such that satisfies the following 2 rules.
- nums[a] + nums[b] + nums[c] == nums[d]
- a < b < c < d
So this is basically the same pattern as challenges 187 part 2 and 188 part 1,
similarly without any possibilities of short-cuts to avoid inner
loops. Some languages have a readily-accessible combinations
generator; others don't.
Raku:
sub specialquads(@l) {
my $ct = 0;
for @l.combinations(4) -> @c {
if (@c[0] + @c[1] + @c[2] == @c[3]) {
$ct++;
}
}
return $ct;
}
PostScript:
/specialquads {
5 dict begin
/l exch def
0
0 1 l length 4 sub {
/ai exch def
ai 1 add 1 l length 3 sub {
/bi exch def
bi 1 add 1 l length 2 sub {
/ci exch def
ci 1 add 1 l length 1 sub {
/di exch def
l ai get l bi get add l ci get add l di get eq {
1 add
} if
} for
} for
} for
} for
end
} bind def
Task 2: Copy Directory
You are given path to two folders, $source
and $target
.
Write a script that recursively copy the directory from $source
to $target
except any files.
In other words, replicate the directory structure. I only felt
enthusiasm for this in Perl and Raku: Perl using File::Find
:
sub copydir($src, $dst) {
my @ds;
my $l = 1 + length($src);
find(sub{
if (-d $_) {
push @ds,substr($File::Find::name, $l);
}
}, $src);
foreach my $d (@ds) {
if (defined $d && length($d) > 0) {
mkdir "$dst/$d";
}
}
}
and Raku using recursion:
sub getdirs($src) {
my @a;
for dir($src) -> $e {
if ($e.d) {
@a.push($e);
@a.append(getdirs($e))
}
}
return @a;
}
sub copydir($src, $dst) {
my $l = 1 + $src.chars;
for map {$_.substr($l)}, getdirs($src) -> $o {
mkdir "$dst/$o";
}
}
Full code on
github.
Comments on this post are now closed. If you have particular grounds for adding a late comment, comment on a more recent post quoting the URL of this one.