Reminder: To test your solutions, you need to create one or more text files. You can do so in Spyder, Notepad, or any other text editor.
Problem 1. Write a program that loads names of two files. Each file contains integers, one per each line. The program has to print a message describing if the sets of numbers contained in those files are equal, or the first one is a proper subset of the second one, or the second one is a proper subset of the first one, or neither.
Hint: Since the program needs to read from two files, make a function that reads a file into a set and returns that set.
Problem 2. Write a program that loads a name of a text file and reverses the order of its lines (overwriting the original file). You may assume that the file ends with an empty line (i.e., all lines end with a new line character).
Hint: Read the file, line by line, reverse it, and save it.
Problem 3. Write a program that loads an integer n and a file name, and then creates a text file with that name containing the multiplication table for all numbers between 1 and abs(n) (including both of them).
Save the table in the following format:
 *  | 1  | 2  | 3  | 4  | 5  
----|----|----|----|----|----
 1  | 1  | 2  | 3  | 4  | 5  
 2  | 2  | 4  | 6  | 8  | 10 
 3  | 3  | 6  | 9  | 12 | 15 
 4  | 4  | 8  | 12 | 16 | 20 
 5  | 5  | 10 | 15 | 20 | 25 
So, a * in the top left cell, a horizontal dashed line after the header, and all the numbers should be centered in 2 characters more than is needed to display $n^2$.
A note on the purpose of these tables (not part of the problem): Text formatted as required by this problem can be used in GFM as tables. For example, the above text is displayed like this:
| * | 1 | 2 | 3 | 4 | 5 | 
|---|---|---|---|---|---|
| 1 | 1 | 2 | 3 | 4 | 5 | 
| 2 | 2 | 4 | 6 | 8 | 10 | 
| 3 | 3 | 6 | 9 | 12 | 15 | 
| 4 | 4 | 8 | 12 | 16 | 20 | 
| 5 | 5 | 10 | 15 | 20 | 25 | 
A bit more advanced version is to replace each "----" with ":--:":
 *  | 1  | 2  | 3  | 4  | 5  
:--:|:--:|:--:|:--:|:--:|:--:
 1  | 1  | 2  | 3  | 4  | 5  
 2  | 2  | 4  | 6  | 8  | 10 
 3  | 3  | 6  | 9  | 12 | 15 
 4  | 4  | 8  | 12 | 16 | 20 
 5  | 5  | 10 | 15 | 20 | 25 
This achieves the centered display of the numbers when processed as GFM:
| * | 1 | 2 | 3 | 4 | 5 | 
|---|---|---|---|---|---|
| 1 | 1 | 2 | 3 | 4 | 5 | 
| 2 | 2 | 4 | 6 | 8 | 10 | 
| 3 | 3 | 6 | 9 | 12 | 15 | 
| 4 | 4 | 8 | 12 | 16 | 20 | 
| 5 | 5 | 10 | 15 | 20 | 25 |