# Perl Weekly Challenge 119: numbers

One way to let me improve my knowledge about Raku (aka Perl 6) is to implement programs in it. Unluckily, I don’t have any production code to implement in Raku yet (sob!). So, why not try solving the Perl Weekly Challenge tasks?

In the following, the assigned tasks for Challenge 110.

## PWC 119 - Task 1

The first task was about rotating nibbles, that means convert an integer to a bit string, and switch the half-octect, printing out the resulting number. One constraint that makes it really simple is that the incoming number must be less than `256`, that means we have a single octet and thus two nibbles.

``````sub MAIN( Int \$N where { \$N < 256 && \$N >= 0 } ) {

# create an 8 digits binary string
'%08d'.sprintf( \$N.base( 2 ) )
# separate each digit into an array
.split( '', :skip-empty )
# rotate by four elements
.rotate( 4 )
# recombine
.join
# reparse as binary
.Str
.parse-base( 2 )
# and print
.say;

}

``````

A single line does it all:
• I convert the `SN` to binary by means of `base( 2 )`;
• I print it as an eight digit string, placing leading zeroes by means of `printf`;
• I split the string into a single array of digits;
• I use `rotate` that takes `4` elements of the array and rotate to the left the elements;
• I `join` the obtained digits and convert them as a string;
• I compute the base 10 value by means of `parse-base` and then I print out the result.

## PWC 119 - Task 2

The second task was about generating a strange sequence of numbers, and printing out only the selected one. I used the `gather` and `take` construct here to load a lazy array of numbers:

``````sub MAIN( Int \$N where { \$N > 0 } ) {

my @numbers = lazy gather {
for 1 .. Inf {
next if \$_ ~~ / (11)+ /;
next if \$_ ~~ / <[04..9]> /;

take \$_;

}
}

@numbers[ \$N - 1 ].say;
}

``````

I skip, by means of `next` the values that do not correspond to the requirements, those with repetitions of `1` and digits that are not `2`, `3` or `1` itself. In the last, I print the required number, even if it took me a while to figure out that the exercise was asking about a numbering starting from one and not from zero as per a regular array.

## Wait a minute: what about PWC 118?

I was on holiday, without any computer at all!

The article Perl Weekly Challenge 119: simpler than it seems has been posted by Luca Ferrari on June 28, 2021