patternpythonMinor
Selling shoes of the right size
Viewed 0 times
sellingthesizeshoesright
Problem
This is a question from HackerRank. I have solved it and want to know if it's the best answer I could have given in Python 3.
Sample code:
Task:
Raghu is a shoe shop owner. His shop has X number of shoes. He has a
list containing the size of each shoe he has in his shop. There are N
number of customers who are willing to pay \$X_i\$ amount of money
only if they get the shoe of their desired size.
Calculate how much Raghu earned.
Input format:
The first line contains the number of shoes.
The second line contains the space separated list of all the shoe
sizes in the shop.
The third line contains N, the number of customers.
The next N lines contain the space separated values of the shoe size
desired by the customer and Xi, the price of the shoe.
Output format:
Print the amount of money earned by Raghu.
Sample input:
Sample output:
Is this good? Where can I improve?
Sample code:
>>> from collections import Counter
>>>
>>> myList = [1,1,2,3,4,5,3,2,3,4,2,1,2,3]
>>> print Counter(myList)
Counter({2: 4, 3: 4, 1: 3, 4: 2, 5: 1})
>>>
>>> print Counter(myList).items()
[(1, 3), (2, 4), (3, 4), (4, 2), (5, 1)]
>>>
>>> print Counter(myList).keys()
[1, 2, 3, 4, 5]
>>>
>>> print Counter(myList).values()
[3, 4, 4, 2, 1]Task:
Raghu is a shoe shop owner. His shop has X number of shoes. He has a
list containing the size of each shoe he has in his shop. There are N
number of customers who are willing to pay \$X_i\$ amount of money
only if they get the shoe of their desired size.
Calculate how much Raghu earned.
Input format:
The first line contains the number of shoes.
The second line contains the space separated list of all the shoe
sizes in the shop.
The third line contains N, the number of customers.
The next N lines contain the space separated values of the shoe size
desired by the customer and Xi, the price of the shoe.
Output format:
Print the amount of money earned by Raghu.
Sample input:
10
2 3 4 5 6 8 7 6 5 18
6
6 55
6 45
6 55
4 40
18 60
10 50Sample output:
200Is this good? Where can I improve?
from collections import Counter
for _ in range(2):
shoes = map(int, input().strip().split())
shoes = Counter(shoes)
income = 0
for _ in range(int(input())):
query = list(map(int, input().split()))
if query[0] in shoes and shoes[query[0]] > 0:
shoes[query[0]] -= 1
income += query[1]
print(income)Solution
Repetition
Except the additional
You can write a function:
That you can use twice.
Tuple unpacking
Instead of
Skipping the first line
The first line contains useless information, you skip it weirdly using a
Except the additional
list these lines are identical: shoes = map(int, input().strip().split())
query = list(map(int, input().split()))You can write a function:
def read_integers_from_line(line):
"""
>>> list(read_integers_from_line("12 3 7"))
[12, 3, 7]
"""
return map(int, line.strip().split())That you can use twice.
Tuple unpacking
Instead of
query = read_integers_from_line(input()) you can use: shoe, price = read_integers_from_line(input()) so that the code becomes more self-descriptive.Skipping the first line
The first line contains useless information, you skip it weirdly using a
range but I would suggest a more explicit skip by using instead _ = input()Code Snippets
shoes = map(int, input().strip().split())
query = list(map(int, input().split()))def read_integers_from_line(line):
"""
>>> list(read_integers_from_line("12 3 7"))
[12, 3, 7]
"""
return map(int, line.strip().split())Context
StackExchange Code Review Q#141628, answer score: 2
Revisions (0)
No revisions yet.