UniLecs #Task. Big number from string array

Albert Davletov
UniLecs
Published in
1 min readMar 2, 2020

Задача: На нескольких полосках бумаги написаны одна или несколько подряд идущих цифр. Необходимо определить максимальное число, которое можно составить из полосок бумаги.

Входные данные: массив из строк произвольной длины, в каждой строке записаны числа. Гарантируется, что хотя бы в одной строке первая цифра отлична от нуля.

Вывод: максимальное число, которое можно составить.

Пример:

  1. Input: [ “2”, “20”, “004”, “66” ]

Output: 66220004

2. Input: [ “2”, “54”, “31”, “7”, “1” ]

Output: 7543121

Разбор

Необходимо отсортировать данные части по убыванию элементов, однако если использовать стандартную сортировку, которая сравнивает элементы посимвольно, то ответ будет неправильным (см. 1 пример, из 2 и 20 на первом месте будет стоять 20 и только потом 2, что для нас неприемлемо).
Поэтому нужно написать свой компаратор, который будет принимать две строки и сравнивать уже непосредственно их конкатенацию.

Реализация

C#

https://gist.github.com/unilecs/78be1ec91dbb3451be81c26dace24b9a

Play-test

https://dotnetfiddle.net/rUu8kT

--

--