Задать вопрос
phaggi
@phaggi
лужу, паяю, ЭВМы починяю

Как сократить однострочник?

Сыну задали по программированию задачку: на вход строка из 4 цифр ("4-значное число"), на выходе печатается через пробел два двузначных числа из цифр входного числа: наименьшее, не начинающееся с нуля, и наибольшее.

Причем пацанам кроме if ничего еще не преподали, поэтому они писали от 40 строк последовательных и вложенных if и более (до сотни).

Я ради интереса накарябал однострочник:
print((lambda x: (bool(int(x[0])) * 1 and '{0}{1} {3}{2}'.format(*x) or '{1}{0} {3}{2}'.format(*x)))(sorted(list(input()))))

для проверки - если на входе
6509

то на выходе
50 96


но мне оно кажется чудовищным, а как улучшить - мозгов не хватает. Можно это сделать изящнее?
  • Вопрос задан
  • 645 просмотров
Подписаться 2 Средний 5 комментариев
Решения вопроса 1
@dodo512
print((lambda x: (('{0}{1}', '{1}{0}')[x[0]=='0'] + ' {3}{2}').format(*x))(sorted(input())))
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
kshnkvn
@kshnkvn
yay ✌️ t.me/kshnkvn
Я конечно сам любитель писать в одну строку функции но ровно до тех пор, пока без вдумчивого взгляда можно понять че вообще происходит. Помимо того, что код должен выполнять возложенные на него задачи он должен быть читаемым.

def convert(str_nums):
    str_list = list(map(int, list(str_nums)))
    min_num =  min(filter(lambda x: x > 0, str_list))
    max_num = max(str_list)
    list(map(str_list.remove, (min_num, max_num)))
    return '{0}{2} {1}{3}'.format(min_num, max_num, *str_list)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы
Greenway Global Новосибирск
от 150 000 ₽
SpectrumData Екатеринбург
от 200 000 до 300 000 ₽
AST Москва
До 350 000 ₽