-
Notifications
You must be signed in to change notification settings - Fork 1
/
largest_number.py
86 lines (61 loc) · 1.81 KB
/
largest_number.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
# Maximum Salary
# Author: jerrybelmonte
# Input: First line contains an integer n.
# Second line contains integers separated by a space.
# Output: The largest number that can be composed out of a1,a2,...,an.
import sys
def greater_or_equal(d: str, m: str):
"""
Checks if the digit is greater or equal than the max digit.
:param d: the current digit
:param m: the max digit
:return: True if d >= m
>>> greater_or_equal('2', '21')
True
>>> greater_or_equal('21', '2')
False
>>> greater_or_equal('33', '3')
True
>>> greater_or_equal('3', '33')
True
"""
digit_max, max_digit = d + m, m + d
left, right = int(digit_max), int(max_digit)
return left >= right
def largest_number(digits: list):
"""
Composes the largest number out of a set of integers.
:param digits: the set of numbers
:return: the largest number that can be composed
>>> largest_number(['2', '3', '9'])
'932'
>>> largest_number(['21', '2'])
'221'
>>> largest_number(['2', '21'])
'221'
>>> largest_number(['9', '4', '6', '1', '9'])
'99641'
>>> largest_number(['9', '4', '6', '10', '9'])
'996410'
>>> largest_number(['23', '39', '92'])
'923923'
>>> largest_number(['6', '61', '68'])
'68661'
>>> largest_number(['4', '42', '46', '427', '465'])
'46546442742'
>>> largest_number(['5', '52', '57', '517', '532', '569', '581'])
'58157569553252517'
"""
res = ""
while digits:
max_digit = ''
for i in range(len(digits)):
if greater_or_equal(digits[i], max_digit):
max_digit = digits[i]
res += max_digit
digits.remove(max_digit)
return res
if __name__ == '__main__':
data = sys.stdin.read().split()
a = data[1:]
print(largest_number(a))