Hi, here’s is an update to my previous solutions to the Weekly Challenge 69. The task is to generate a sequence of the strings based on the following definition:
S0 = ‘’
Sn = concat(Sn-1, 0, reverse(XOR Sn-1))
I solved it using multi-functions, which are really good when you have different conditions for (usually) small initial numbers.
multi sub S(0) {''} multi sub S(1) {'0'} multi sub S($n) { my $prev = S($n - 1); $prev ~ '0' ~ $prev.flip.trans('01' => '10') }
On the other hand, the task defines the row of numbers as a sequence, and Raku’s Seq
can be used here!
my @s = '', { $^a ~ 0 ~ $^a.flip.trans('01' => '10') } ... *;
To print the numbers, you now directly access a lazy array:
.say for @s[^9];
If you want to keep the function, you can use a state
variable in it:
sub S($n) { state @s = '', { $^a ~ 0 ~ $^a.flip.trans('01' => '10') } ... *; @s[$n] } say S($_) for ^9;
What’s the morale of this story?
Don’t forget about the powerful three dots that you have for free in Raku! Sometimes it needs to change your mindset before you can think of it.
→ GitHub repository
→ Navigation to the Raku challenges post series
One thought on “Use sequences in Raku”