Напишите, пожалуйста, программу, которая составляет из цифр введённой строки число-палиндром максимальной длины (которое читается одинаково слева направо и справа налево). Если таких чисел несколько, нужно вывести минимальное из них. Все имеющиеся цифры использовать не обязательно, но количество цифр в ответе должно быть максимально возможным. Язык программирования Паскаль
Входная строка содержит цифры (по крайней мере, одну) и, возможно, другие символы.
Программа должна вывести число-палиндром максимальной длины, которое можно составить из цифр входной строки.
Примеры
Входные данные
for i:=99921 downto 2
Выходные данные
29192
Answers & Comments
PascalABC.NET 3.4.2, сборка 1864 от 11.11.2018
Внимание! Если программа не работает, обновите версию!
begin
var s := ReadlnString;
var s1 := s.Where(t -> t in ['0'..'9']).Sorted.GroupBy(t -> t)
.Select(c -> (c.Key, c.Count)).OrderBy(t -> t[0]).ToArray;
var s2 := s1.Where(t -> t[1] > 1).Select(t -> t[0] * (t[1] div 2))
.JoinIntoString('').Replace('0', '');
var s3 := s1.Where(t -> t[1] = 1);
if s3.Count > 0 then s2 := s2 + s3.Select(t -> t[0]).First + s2.Inverse
else s2 := s2 + s2.Inverse;
s2.Println
end.
Пример
for i:=99921 downto 2
29192