## Problems

1. Write a Python function histogram(l) that takes as input a list of integers with repetitions and returns a list of pairs as follows:

• For each number n that appears in l, there should be exactly one pair (n,r) in the list returned by the function, where r is is the number of repetitions of n in l.
• The final list should be sorted in ascending order by r, the number of repetitions. For numbers that occur with the same number of repetitions, arrange the pairs in ascending order of the value of the number.

For instance:

```>>> histogram([13,12,11,13,14,13,7,7,13,14,12])
[(11, 1), (7, 2), (12, 2), (14, 2), (13, 4)]

>>> histogram([7,12,11,13,7,11,13,14,12])
[(14, 1), (7, 2), (11, 2), (12, 2), (13, 2)]

>>> histogram([13,7,12,7,11,13,14,13,7,11,13,14,12,14,14,7])
[(11, 2), (12, 2), (7, 4), (13, 4), (14, 4)]```

2. A college maintains academic information about students in three separate lists.

• Course details: A list of pairs of form (coursecode,coursename), where both entries are strings.
For instance, [(“MA101″,”Calculus”),(“PH101″,”Mechanics”),(“HU101″,”English”)]
• Student details: A list of pairs of form (rollnumber,name), where both entries are strings.
For instance, [(“UGM2018001″,”Rohit Grewal”),(“UGP2018132″,”Neha Talwar”)]
• Grades: A list of triples of the form (rollnumber,coursecode,grade), where all entries are strings.
For instance, [(“UGM2018001”, “MA101”, “AB”), (“UGP2018132”, “PH101”, “B”), (“UGM2018001”, “PH101”, “B”)].
You may assume that each roll number and course code in the grade list appears in the student details and course details, respectively.

Your task is to write a function transcript(coursedetails,studentdetails,grades) that takes these three lists as input and produces consolidated grades for each student. Each of the input lists may have its entries listed in arbitrary order.

Each entry in the returned list should be a tuple of the form(rollnumber, name,[(coursecode_1,coursename_1,grade_1),…,(coursecode_k,coursename_k,grade_k)]) where the student has grades for k >= 1 courses reported in the input list grades.The output list should be organized as follows.

-> The tuples should be sorted in ascending order by rollnumber.
-> Each student’s grades should sorted in ascending order by coursecode

## Solution

Special thanks to Yash Mhadgut for commenting and helping us in the second solution.

```def histogram(l):
d={}
for i in l:
if i in d.keys():
d[i] +=1
else:
d[i] = 1
ans = []
for a in d.keys():
number_of_times = d[a]
ans.append((a, number_of_times))

ans = sorted(ans, key=lambda x : x)
ans = sorted(ans, key=lambda x : x)
return ans
#print(ans)

list = []
studentdetails.sort()
coursedetails.sort()
for studentdet in studentdetails:
tuple = studentdet
inlist = []
for cdetail in coursedetails:
intuple = cdetail
inlist.append(intuple)
tuple = tuple + (inlist,)
list.append(tuple)
return list```

Explanation :

Tracing:- (Looping through each element in the list passed in histogram)
`{13: 1}`
`{13: 1, 12: 1}`
`{13: 1, 12: 1, 11: 1}`
`{13: 2, 12: 1, 11: 1}`
`{13: 2, 12: 1, 11: 1, 14: 1}`
`{13: 3, 12: 1, 11: 1, 14: 1}`
`{13: 3, 12: 1, 11: 1, 14: 1, 7: 1}`
`{13: 3, 12: 1, 11: 1, 14: 1, 7: 2}`
`{13: 4, 12: 1, 11: 1, 14: 1, 7: 2}`
`{13: 4, 12: 1, 11: 1, 14: 2, 7: 2}`
`{13: 4, 12: 2, 11: 1, 14: 2, 7: 2}`

As we see in the solution of Histogram problem, we have created a dictionary ‘d’ which stores the count of a particular integer in the dictionary.
It creates a key for each integer found and increases the value of key whenever an integer is repeated.

```d={}
for i in l:
if i in d.keys():
d[i] +=1
else:
d[i] = 1```

This following three lines of code converts the dictionary form into tuple form, which is the required type of output :

```for a in d.keys():
number_of_times = d[a]
ans.append((a, number_of_times))```

Finally, we sort the tuple in ascending order by the following code

```ans = sorted(ans, key=lambda x : x)
ans = sorted(ans, key=lambda x : x)```
Categories: NPTEL solution #### Skylark · March 4, 2018 at 3:02 PM

Correct return’s indentation. #### Ritesh · March 4, 2018 at 3:33 PM #### Jarwish Roshan.J · March 4, 2018 at 4:19 PM

can you please send the correct solution for transcript problem in week 4 the provided solution is wrong #### Vivek · March 4, 2018 at 6:05 PM

3/5 Passes,
test case 4 and test case 5 says wrong answer.
thank you #### Gaurav · March 4, 2018 at 6:29 PM

Last 2 cases are incorrect… #### Sreeram · March 5, 2018 at 11:47 AM

Thanks a lot, will you update exam answers during the exam #### Darshan · March 5, 2018 at 11:50 AM

Last 2 test case is not passed by this code sir can u plz tell me whats the problem in this #### shubham garg · March 5, 2018 at 1:03 PM

Answer no.2 is generating error so plz correct it #### Sreeram · March 5, 2018 at 1:47 PM

Good work sir but the return statement in q2 will be outside of all the loops. #### Swarnava Saha · March 5, 2018 at 2:14 PM

Last 2 test case is not passed by this code sir can u plz tell me whats the problem in this #### Darshan · March 7, 2018 at 9:17 AM

Anyone tell me what we have to do last two test cases not completed #### shubham garg · March 12, 2018 at 2:40 PM

For Nptle python week 5 programming assignment solution

https://youtu.be/JWxQB4_f1WQ