-
Notifications
You must be signed in to change notification settings - Fork 0
/
Help the bookseller.py
50 lines (38 loc) · 1.7 KB
/
Help the bookseller.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
'''
Problem description:
A bookseller has lots of books classified in 26 categories labeled A, B, ... Z.
Each book has a code c of 3, 4, 5 or more characters. The 1st character of a code
is a capital letter which defines the book category.
In the bookseller's stocklist each code c is followed by a space and by a positive
integer n (int n >= 0) which indicates the quantity of books of this code in stock.
For example an extract of a stocklist could be:
L = {"ABART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60"}.
or
L = ["ABART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60"] or ....
You will be given a stocklist (e.g. : L) and a list of categories in capital letters e.g :
M = {"A", "B", "C", "W"}
or
M = ["A", "B", "C", "W"] or ...
and your task is to find all the books of L with codes belonging to each category of M and
to sum their quantity according to each category.
For the lists L and M of example you have to return the string (in Haskell/Clojure/Racket a
list of pairs):
(A : 20) - (B : 114) - (C : 50) - (W : 0)
where A, B, C, W are the categories, 20 is the sum of the unique book of category A,
114 the sum corresponding to "BKWRK" and "BTSQZ", 50 corresponding to "CDXEF" and 0 to
category 'W' since there are no code beginning with W.
If L or M are empty return string is "" (Clojure and Racket should return an empty
array/list instead).
'''
def stock_list(b, c):
b_splited = [x.split(' ') for x in b]
dic = {x: 0 for x in c}
i = 0
for e in b_splited:
if e[0][0] in c:
dic[e[0][0]] += int(e[1])
i =+ 1
if sum(dic.values()) > 0:
return ' - '.join(x for x in [f'({k} : {v})' for k, v in dic.items()])
else:
return ''