7th Homework
Download hw_7.tar.gz and extract it. Then add
your homework solutions to the directory. Rename the
directory according to the rules in the syllabus before submitting it as
compressed archive. Don't forget to add the correct subject to the email
when submitting.
Properly document the files you hand in to receive full credit. Each module
(file), class and function needs a docstring. The purpose of each function needs
to be summarized as a single sentence and then, if required, your intent and the
behavior of the function can be described in more detail.
All of the tasks below need to
- run with the provided input data without crashing
- produce correct results
- have a comprehensive amount of unit tests
- have proper docstrings
- be implemented without using non-English function and variable names,
docstrings etc.
in order to receive (full) points. The grader will only award a part of the
total points. The rest will be awarded if all your functions etc. have a
comprehensive amount of proper unit tests.
-
Austrian Social Security Numbers (1.5 points)
Your company requires a tool to validate Austrian
social security numbers (SSNs). As you wanted to save the company some
money while minimizing your own effort, you tried to find an existing
solution. Unfortunately, you couldn't find anything that really met your
companies needs. However, from one of your friends in Sweden you obtained
a part of a small GUI program (validate_ssn_gui.py) to
validate Swedish SSNs. Using this Python module allows you to reuse the GUI
and only implement the logic to validate an Austrian social insurance
number.
Such a number consists of 10 digits of which the 4th denotes a checksum
allowing simple validation. The format of such a number is "xxxCddmmyy"
where "xxx" are consecutively assigned digits, "C" is the checksum digit,
"dd" donates the day, "mm" the month and "yy" the year of birth. The
following formula for calculating the checksum uses the this notation:
"x1" is the first of the three "x" digits, "m2" is the second month digit,
and so on.
C =(x1*3 + x2*7 + x3*9 + d1*5 + d2*8 + m1*4 + m2*2 + y1*1 + y2*6) modulo 11
The required validation module (validate_ssn.py) should contain
at least one function is_valid(digit_list)
that returns
True
if the given list of digits represents a valid SSN.
Otherwise, the function must
return False
. Note that your code should not make any
assumptions about the correctness of the given input.
Name the module: validate_ssn.py
-
Flow Shop Scheduling (2.5 points)
Your boss used a little tool to calculate the scheduling for your company's
machines. As the IT department failed to realize a proper strategy for
backing up important data, parts of the program got lost. Apparently the UI
is still working, but when she wants to solve a particular problem the
program crashes with a weird error she doesn't understand. Please run
johnson_gui.py to understand what's going on and make the
program work again by implementing the missing file.
Your boss tried to collect all useful information for you. She found some
old tests for the missing file (the grader for hw7). She also said
she recalled that when she initially got the program, the techies had to
install some Python libraries to make the GUI work. Furthermore, she found
a part of the documentation of the lost file:
"""Return a flow shop schedule using Johnson's rule.
Args:
jobs: A dictionary of jobs. Job IDs are keys, a list of machine times
are the values.
E.g. {'3': [5, 7]} means that job '3' needs 5 time units on the
first machine and 7 time units on the second.
Returns:
A list of job IDs.
"""
Name the module: johnson.py
-
Tests (5 points)
Write a comprehensive suite of unittest for the previous tasks using
Python's unittest framework. Write enough tests to get comfortable that
your code works as expected.