-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathweight_for_weight.py
More file actions
59 lines (48 loc) · 2.09 KB
/
Copy pathweight_for_weight.py
File metadata and controls
59 lines (48 loc) · 2.09 KB
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
def order_weight(strng):
"""My friend John and I are members of the "Fat to Fit Club (FFC)".
John is worried because each month a list with the weights of members is
published and each month he is the last on the list which means he is the
heaviest.
I am the one who establishes the list so I told him: "Don't worry any more,
I will modify the order of the list". It was decided to attribute a
"weight" to numbers. The weight of a number will be from now on the sum of
its digits.
For example 99 will have "weight" 18, 100 will have "weight" 1 so in the
list 100 will come before 99. Given a string with the weights of FFC
members in normal order can you give this string ordered by "weights" of
these numbers?
Example:
"56 65 74 100 99 68 86 180 90" ordered by numbers weights becomes:
"100 180 90 56 65 74 68 86 99"
When two numbers have the same "weight", let us class them as if they were
strings and not numbers: 100 is before 180 because its "weight" (1) is less
than the one of 180 (9) and 180 is before 90 since, having the same
"weight" (9) it comes before as a string.
All numbers in the list are positive numbers and the list can be empty.
Notes
Don't modify the input
For C: The result is freed.
"""
check = strng.split()
def total(n):
n = int(n)
tot = 0
while n > 0:
digit = n % 10
tot += digit
n = n // 10
return tot
sorted = False
while not sorted:
sorted = True
for i in range(len(check) - 1):
if total(check[i]) > total(check[i + 1]):
sorted = False
check[i], check[i + 1] = check[i + 1], check[i]
elif total(check[i]) == total(check[i + 1]):
if str(check[i]) > str(check[i + 1]):
sorted = False
check[i], check[i + 1] = check[i + 1], check[i]
return ' '.join(str(e) for e in check)
# other solutions
# return ' '.join(sorted(sorted(_str.split(' ')), key=lambda x: sum(int(c) for c in x)))