## Perl Weekly Challenge 281: Check Color

These are some answers to the Week 281, Task 1, of the Perl Weekly Challenge organized by Mohammad S. Anwar.

Spoiler Alert: This weekly challenge deadline is due in a few days from now (on August 11, 2024, at 23:59). This blog post provides some solutions to this challenge. Please don’t read on if you intend to complete the challenge on your own.

You are given coordinates, a string that represents the coordinates of a square of the chessboard as shown below:

Write a script to return true if the square is light, and false if the square is dark.

Example 1

``````Input: \$coordinates = "d3"
Output: true
``````

Example 2

``````Input: \$coordinates = "g5"
Output: false
``````

Example 3

``````Input: \$coordinates = "e6"
Output: true
``````

### Check Color in Raku

We could replace the abscissa letters with numbers from 1 to 8 (or 0 to 7), add the two values of the coordinates and check whether the sum is even or odd. But it is even simpler to assign 0 or 1 to a variable depending on whether the abscissa belong to the `[aceg]` or `[bdfh]` character class. We then add this variable to the ordinates and check whether the sum is even or odd.

``````sub check-color (\$in) {
my (\$abscissa, \$ordinate) = \$in.comb;`
my \$code;
given \$abscissa {
when /<[aceg]>/ {\$code = 0}
when /<[bdfh]>/ {\$code = 1}
}
return True if (\$code + \$ordinate) %% 2;
False;
}

for <a1 d3 g5 e6 h8> -> \$coordinates {
printf "%-2s => ", \$coordinates;
say check-color \$coordinates;
}
``````

This program displays the following output:

``````\$ raku ./check-color.raku
a1 => False
d3 => True
g5 => False
e6 => True
h8 => False
``````

### Check Color in Perl

This is a port to Perl of the above Raku program. Please refer to the previous section if you need explanations.

``````use strict;
use warnings;
use feature 'say';

sub check_color {
my (\$abscissa, \$ordinate) = split //, shift;
my \$code = 1;
\$code = 0 if \$abscissa =~ /[aceg]/;
return "True" if (\$code + \$ordinate) % 2 == 0;
return "False";
}

for my \$coordinates (qw<a1 d3 g5 e6 h8>) {
printf "%-2s => ", \$coordinates;
say check_color \$coordinates;
}
``````

This program displays the following output:

``````\$ perl ./check-color.pl
a1 => False
d3 => True
g5 => False
e6 => True
h8 => False
``````

## Wrapping up

The next week Perl Weekly Challenge will start soon. If you want to participate in this challenge, please check https://perlweeklychallenge.org/ and make sure you answer the challenge before 23:59 BST (British summer time) on August 18, 2024. And, please, also spread the word about the Perl Weekly Challenge if you can.