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

## Leave a comment