# Perl Weekly Challenge 120: quick and dirt

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 120.

## PWC 120 - Task 1

The first task was about rotating, or better exchanging, bits position in abinary representation of a number: an odd bit has to be exchanged with its even pair and viceversa. I decided to do that with a temporary array where I store the exchanged bits:```
sub MAIN( Int $N where { 0 < $N < 255 } ) {
my @bits = '%08s'.sprintf( $N.base( 2 ) ).split( '', :skip-empty );
my @rotated-bits;
for my @bits -> $odd, $even {
@rotated-bits.push: $even, $odd;
}
@rotated-bits.join.Str.parse-base( 2 ).say;
}
```

I store the binrary representation of the number in the

`@bits`

array, already expanded to an eight bit representation. I then extract all the couples of elements and exchange them into `@rotted-bits`

, and finally I `join`

and reconvert by `parse(2)`

from binrary to decimal notation.
## PWC 120 - Task 2

In the second task there was the need to compute the minimal angle between clock arms, given a string representing the time:```
sub MAIN( Str $time where { $time ~~ / ^ \d ** 2 ':' \d ** 2 $ / } ) {
my ( $hour, $minute ) = $time.split( ':', :skip-empty );
$hour %= 12;
$minute %= 60;
$minute /= 5;
say abs( $hour - $minute ) * 30;
}
```

First of all, I do extract the numeric values for

`$hour`

and `$minute`

from the string representing the time. After that, I do convert the time so that the values are always within the range `1`

..`12`

and `1`

..`60`

, and then I compute the value of the minutes by its offset of `5`

minutes. This makes me find out what tick the `$hour`

and `$minute`

are pointing to.
Having the ticks, it does suffice to multiple the difference for the angle between the ticks to get the result.