Un libraire possède des tons de livres classés en 26 catégories étiquetées A, B, … Z. Chaque livre a un code c de 3, 4, 5 caractères ou plus. Le 1er caractère d’un code est une lettre majuscule qui définit la catégorie du livre.
Dans la liste de inventory du libraire chaque code c est suivi d’un espace et d’un entier positif n (int n >= 0) qui indique la quantité de livres de ce code en inventory.
Par exemple, un extrait d’une liste de inventory pourrait être :
L = {"ABART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60"}.
ou
L = ("ABART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60") or ....
Vous recevrez une liste de inventory (ex : L) et une liste de catégories en majuscules ex :
M = {"A", "B", "C", "W"}
ou
M = ("A", "B", "C", "W") or ...
et votre tâche est de trouver tous les livres de L avec des codes appartenant à chaque catégorie de M et d’additionner leur quantité selon chaque catégorie.
Pour les listes L et M d’exemple il faut retourner la chaîne :
(A : 20) - (B : 114) - (C : 50) - (W : 0)
où A, B, C, W sont les catégories, 20 est la somme du livre distinctive de la catégorie A, 114 la somme correspondant à « BKWRK » et « BTSQZ », 50 correspondant à « CDXEF » et 0 à la catégorie ‘W’ puisqu’il n’y a pas de code commençant par W.
Si L
ou M
sont vides la chaîne de retour est « ».
Remarques:
- Dans les codes de résultat et leurs valeurs sont dans le même ordre que dans M.
- Voir « Échantillons de assessments » pour le retour.
La resolution en Python
Choice 1
def stock_list(listOfArt, listOfCat):
if (len(listOfArt) == 0) or (len(listOfCat) == 0):
return ""
end result = ""
for cat in listOfCat:
complete = 0
for guide in listOfArt:
if (guide(0) == cat(0)):
complete += int(guide.cut up(" ")(1))
if (len(end result) != 0):
end result += " - "
end result += "(" + str(cat) + " : " + str(complete) + ")"
return end result
Choice 2
from collections import Counter
def stock_list(listOfArt, listOfCat):
if not listOfArt:
return ''
codePos = listOfArt(0).index(' ') + 1
cnt = Counter()
for s in listOfArt:
cnt(s(0)) += int(s(codePos:))
return ' - '.be a part of('({} : {})'.format(cat, cnt(cat)) for cat in listOfCat)
Variante 3
def stock_list(stocklist, classes):
if not stocklist or not classes:
return ""
return " - ".be a part of(
"({} : {})".format(
class,
sum(int(merchandise.cut up()(1)) for merchandise in stocklist if merchandise(0) == class))
for class in classes)
Cas de check pour valider la resolution
from resolution import stock_list
import check
@check.describe("Testing")
def _():
@check.it("Checks")
def _():
b = ("BBAR 150", "CDXE 515", "BKWR 250", "BTSQ 890", "DRTY 600")
c = ("A", "B", "C", "D")
check.assert_equals(stock_list(b, c), "(A : 0) - (B : 1290) - (C : 515) - (D : 600)")
b = ("ABAR 200", "CDXE 500", "BKWR 250", "BTSQ 890", "DRTY 600")
c = ("A", "B")
check.assert_equals(stock_list(b, c), "(A : 200) - (B : 1140)")
b = ("CBART 20", "CDXEF 50", "BKWRK 25", "BTSQZ 89", "DRTYM 60")
c = ("A", "B", "C", "W")
check.assert_equals(stock_list(b, c), "(A : 0) - (B : 114) - (C : 70) - (W : 0)")
b = ("ROXANNE 102", "RHODODE 123", "BKWRKAA 125", "BTSQZFG 239", "DRTYMKH 060")
c = ("B", "R", "D", "X")
check.assert_equals(stock_list(b, c), "(B : 364) - (R : 225) - (D : 60) - (X : 0)")
b = ()
c = ("B", "R", "D", "X")
check.assert_equals(stock_list(b, c), "")
b = ("ROXANNE 102", "RHODODE 123", "BKWRKAA 125", "BTSQZFG 239", "DRTYMKH 060")
c = ()
check.assert_equals(stock_list(b, c), "")
b = ("ROXANNE 102", "RHODODE 123", "BKWRKAA 125", "BTSQZFG 239", "DRTYMKH 060")
c = ("U", "V", "R")
check.assert_equals(stock_list(b, c), "(U : 0) - (V : 0) - (R : 225)")