Programming 1, 2022-23
Week 7: Exercises

1. Same Values

Write a function same_values(l, m) that returns True if the lists l and m contain the same values, i.e. every element of l is in m and every element of m is in l. You may assume that all list elements are immutable.

2. Most Common Characters

Write a program that reads a string and print out the five most common characters in the string along with their occurrence counts, e.g.

e 23

t 20

o 18

n 15

i 14

Write the characters in decreasing order of frequency. The string may contain any Unicode characters.

3. Duplicate Values

  1. Write a function that takes a list of integers and returns True if there are any duplicate values in the list. Use sorting to accomplish this task. Do not modify the original list.

  2. Write a function with the same behavior, using a set to accomplish the task.

  3. Which implementation do you think will be faster on a large list in the best case? In the worst case?

  4. As an experiment, generate a list of random 1,000,000 integers in the range from 1 to 1,000,000,000, then call both of the above functions on your list. How does the exection time compare?

  5. Modify the experiment so that all the integers your generated list are unique. Now run both functions on your list. How does the execution time compare?

4. Random Intersection

Write a program that creates two sets of 10,000 random numbers from 1 to 1,000,000, then computes and prints their intersection. How many values do you expect that the intersection will contain, approximately?

5. Words in Both Lists

Write a program that reads input as follows. The first line of standard input will contain an integer N. The next N lines will contain a list of words, one per line. The next line will contain an integer M. The next M lines will contain a second list of words, one per line. The program should print out all words that are contained in both lists. Write each word on a separate line. You may write the output words in any order.

Sample input:

3
donut
cookie
cake
4
cake
bread
jam
donut

Possible output:

cake
donut

6. Time Class

Write a class Time that represents a time of day with 1-second resolution, e.g. 11:32:07.

7. Polynomial Class

Write a class Polynomial representing a polynomial of a single variable. The class should support these operations:

8. Flatten

Write a function flatten that takes a list of lists and returns a list containing all the values from all sublists:

>>> flatten([[5, 2], [6], [8, 3]])
[5, 2, 6, 8, 3]

9. Deep Flatten

Write a function deep_flatten that takes a list that may contain sublists nested to any level. The function should return a list containing all the values from all the sublists:

>>> deep_flatten([ [[5, 2], 6], [8, 3], [[[[10]]]] ])
[5, 2, 6, 8, 3, 10]