I’ve been doing the Weekly
Challenges. The
latest
involved various list processing. (Note that this ends today.)
Task 1: Min Max
You are given an array of distinct integers.
Write a script to find all elements that is neither minimum nor
maximum. Return -1 if you can't.
So basically a list filter. I calculate and cache min and max values,
then filter. This is probably cheaper than sorting the list then
topping and tailing, and anyway that would destroy the order.
Kotlin:
fun notminmax(a: List<Int>): List<Int> {
val mn = a.minOrNull()!!
val mx = a.maxOrNull()!!
return a.filter {it != mn && it != mx}.toList()
}
Task 2: Senior Citizens
You are given a list of passenger details in the form
"9999999999A1122", where 9 denotes the phone number, A the sex, 1
the age and 2 the seat number.
Write a script to return the count of all senior citizens (age >= 60).
We could decode the whole thing, but all we need to look at is
character 11; 6+ is a hit.
This can be written verbosely (Raku):
sub seniorcitizens(@a) {
my $p = 0;
for @a -> $n {
my $c = substr($n, 11, 1);
if ($c ge '6') {
$p++;
}
}
return $p;
}
or with no variables at all (PostScript):
/seniorcitizens {
0 exch
{
11 get 16#36 ge {
1 add
} if
} forall
} bind def
Or compactly (Ruby):
def seniorcitizens(a)
return a.count {|x| x[11] >= "6"}
end
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.