## Perl Weekly Challenge 245: Largest of Three

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

## Task 2: Largest of Three

You are given an array of integers `>= 0`.

Write a script to return the largest number formed by concatenating some of the given integers in any order which is also a multiple of 3. Return -1 if none found.

Example 1

``````Input: @ints = (8, 1, 9)
Output: 981

981 % 3 == 0
``````

Example 2

``````Input: @ints = (8, 6, 7, 1, 0)
Output: 8760
``````

Example 3

``````Input: @ints = (1)
Output: -1
``````

We will use the Raku built-in combinations routine to generate the various possibilities. Note that if any number is a multiple of 3, then, any permutation of its digits is also a multiple of 3. So sorting the input array in descending order will provide us with combinations leading to the largest concatenations of integers.

### Largest of Three in Raku

Using the above comments, we arrive at the following Raku solution:

``````sub largest-three (@ints) {
my \$max = -1;
my @sorted = @ints.sort.reverse;
for @sorted.combinations: 1..@ints.elems -> @seq {
my \$val = [~] @seq;
next unless \$val %% 3;
\$max = \$val if \$val > \$max;
}
return \$max > 0 ?? \$max !! -1;
}

my @tests = <8 1 9>, <8 1 9 3>, <8 6 7 1 0>, (0,);
for @tests -> @test {
printf "%-10s => ", "@test[]";
say largest-three @test;
}
``````

This program displays the following output:

``````\$ raku ./largest-three.raku
8 1 9      => 981
8 1 9 3    => 9831
8 6 7 1 0  => 8760
0          => -1
``````

### Largest of Three in Perl

Not enough time this week for a solution to this challenge in Perl. Sorry.

## 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 December 10, 2023. And, please, also spread the word about the Perl Weekly Challenge if you can.