# ETOOBUSY đźš€ minimal blogging for the impatient

# PWC217 - Max Number

**TL;DR**

On with TASK #2 from The Weekly Challenge #217. Enjoy!

# The challenge

You are given a list of positive integers.

Write a script to concatenate the integers to form the highest possible value.

Example 1:`Input: @list = (1, 23) Output: 231`

Example 2:`Input: @list = (10, 3, 2) Output: 3210`

Example 3:`Input: @list = (31, 2, 4, 10) Output: 431210`

Example 4:`Input: @list = (5, 11, 4, 1, 2) Output: 542111`

Example 5:`Input: @list = (1, 10) Output: 110`

# The questions

I read â€śconcatenateâ€ť as â€śfirst consider the integers as strings, concatenate them, then turn them back to integers and consider their valueâ€ť. Pretty nitpicking.

# The solution

We have to put elements in the right order, so itâ€™s a sorting problem.
Luckily for us, there are *local* conditions that allow us establish whatâ€™s
globally better or worse; I mean, considering any pair of elements in the
sequence of concatenation, taking their order that maximizes value is going
to improve. Put it into another way, the elements of this game have an
ordering, and we can leverage it.

When we have elements X and Y, we can tell whether itâ€™s better to put X or Y before the other by concatenating them and comparing the results. If XY wins, then X goes first; otherwise, Y goes first.

Having this way of comparing elements means that we can offload the actual sorting to whatever the language makes available. Which is what we do here in Perl:

```
#!/usr/bin/env perl
print join('', sort { ($b . $a) <=> ($a . $b) } @ARGV), "\n";
```

This is easily translated into Raku:

```
#!/usr/bin/env raku
@*ARGS.sort({"$^b$^a".Int <=> "$^a$^b".Int}).join('').put;
```

I guess this is it, stay safe!

*Comments? Octodon, , GitHub, Reddit, or drop me a line!*