6. Число

☰ Теория

Компаратор на Python

Что если для решения задачи необходимо сравнивать числа по каким-то особым правилам? В этом случае в Python можно определить пользовательскую функцию сравнения, также известную как компаратор. Для этого параметру key присвоим встроенную функцию cmp_to_key из модуля functools, а в качестве параметра передадим название нашей созданной функции сравнения. 
 

Принцип работы пользовательского компаратора

При создании пользовательского компаратора он, как правило, должен возвращать целое значение, которое следует следующей схеме:

  1. возвращать отрицательное значение (< 0), когда левый элемент должен располагаться перед правым элементом
  2. возвращать положительное значение (> 0), когда левый элемент должен располагаться  после правого элемента
  3. возвращать 0, когда и левый, и правый элемент имеют одинаковый вес и должны быть отсортированы "одинаково" без старшинства (в этом случае можно написать дополнительную логику на сортировку при равенстве значений, если такая нужна)

Пример, демонстрирующий, как написать пользовательскую функцию сравнения для сортировки списка чисел в порядке убывания:

from functools import cmp_to_key

def compare_numbers(a, b):
    if a < b:
        return 1
    elif a > b:
        return -1
    else:
        return 0

numbers = [5, 2, 8, 1, 9]
numbers.sort(key=cmp_to_key(compare_numbers))

print(numbers)  # Вывод: [9, 8, 5, 2, 1]

Компараторы используются для описания сложных правил сортировки. 

Вася написал на длинной полоске бумаги большое число и решил похвастаться своему старшему брату Пете этим достижением. Но только он вышел из комнаты, чтобы позвать брата, как его сестра Катя вбежала в комнату и разрезала полоску бумаги на несколько частей. В результате на каждой части оказалось одна или несколько идущих подряд цифр.

Теперь Вася не может вспомнить, какое именно число он написал. Только помнит, что оно было очень большое. Чтобы утешить младшего брата, Петя решил выяснить, какое максимальное число могло быть написано на полоске бумаги перед разрезанием. Помогите ему!

Формат входных данных
Входные данные состоят из одной или более строк, каждая из которых содержит последовательность цифр. Количество строк не превышает 100, каждая строка содержит от 1 до 100 цифр. Гарантируется, что хотя бы в одной строке первая цифра отлична от нуля.
Последняя строка входного потока содержит число -1 - признак окончания данных.

Формат выходных данных
Выведите одну строку – максимальное число, которое могло быть написано на полоске перед разрезанием.
Примеры
Входные данныеВыходные данные
1 2
20
004
66
-1
66220004
2 3
-1
3

Напишите программу
Auto
       

time 1000 ms
memory 256 Mb
Правила оформления программ и список ошибок при автоматической проверке задач

Статистика успешных решений по компиляторам
 Кол-во
С++ Mingw-w645
Python25
Комментарий учителя