I’ve been doing the Weekly
Challenges. The
latest
involved fiddling with strings. (Note that this ends today.)
Task 1: Circular
You are given a list of words.
Write a script to find out whether the last character of each word
is the first character of the following word.
This is pretty straightforward in most languages, for example Raku:
sub circular(@a) {
for @a.rotor(2 => -1) -> @p {
if (substr(@p[0], *-1, 1) ne substr(@p[1], 0, 1)) {
return False;
}
}
True;
}
though probably the shortest is Python, where strings are half-way to
character arrays already.
Task 2: Subsequence
You are given two string.
Write a script to find out if one string is a subsequence of
another.
A subsequence of a string is a new string that is formed from the
original string by deleting some (can be none) of the characters
without disturbing the relative positions of the remaining
characters.
this is quite reminiscent of #313 part 1, though slightly less fiddly.
JavaScript:
function subsequence(a, b) {
Put the longer string in l
and the shorter in s
.
let l = a;
let s = b;
if (a.length < b.length) {
l = b;
s = a;
}
We're looking for the characters in s
, in order.
const st = s.split("");
let si = 0;
Look through the characters of l
.
for (let c of l.split("")) {
If it matches the character in s
we're looking for,
if (c == st[si]) {
Increment the search counter and exit if we've found all characters.
si += 1;
if (si >= st.length) {
return true;
}
}
}
If that didn't happen, return fasle.
return false;
}
Full code on
github.