Задать вопрос
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


но мне оно кажется чудовищным, а как улучшить - мозгов не хватает. Можно это сделать изящнее?
  • Вопрос задан
  • 644 просмотра
Подписаться 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)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы