/**
**/
====== Practice 01: 1D Array and Matrix Problems ======
==== Overview ====
In this practice, you will create a single Python file ''main.py''.
In this file you will write (or complete) the following functions, each of which solves a particular problem:
* ''task01(items)''
* ''task02(items)''
* ''task03(listA, listB)''
* ''task04(items)''
* ''task05(matrix)''
* ''task06(matrix)''
Both filename and names of the functions have to be exactly the same as described.
When submitting your solution:
- Zip the file ''main.py'' into **.zip archive** with arbitrary name.
- Upload the .zip file to the [[https://cw.felk.cvut.cz/brute/|BRUTE]] evaluation system.
==== Grading ====
You can obtain maximum of **2 points**.
==== Testing Your Code Localy ====
In starter code which is provided bellow each function contains **docstring** with short desription.
Docstrings also contain examples of usage. Those examples can be used for testing your functions using **doctest** module.
To run those tests you can simply run the ''main'' module as main script.
==== Starter Code ====
Below is a **basic code structure** you can use. Copy-paste the following code and **complete** each function (''task01'', ''task02'', ''task03'', ...) according to description in the function docstring. Then submit your final ''main.py''.
import copy
def task01(items):
"""Counts the number of elements strictly smaller than the first element
:param items: list of integers
:return: integer, number of elements strictly smaller than the first element
Examples:
>>> task01([1, 2, 3])
0
>>> task01([3, 2, 1])
2
"""
pass
def task02(items):
"""Checks if number of leading values 0 in list is equal to the number of trailing values 0.
:param items: list of integers
:return: boolean value
Examples:
>>> task02([0, 0, 0, 2, 3, 0, 0, 4, 5, 6, 0, 0])
False
>>> task02([0, 10, 11, 12, 22, 0])
True
>>> task02([0, 0, 0, 0, 0])
True
"""
pass
def task03(listA, listB):
"""Creates copy of listB and modifies it using following rule:
All occurrences of maximum in listB are replaced by minimum of value of listA.
Original listB remains unmodified.
:param listA: list of integers
:param listB: list of integers
:return: list of integers, modified copy of listB
Example:
>>> listA = [2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5]
>>> listB = [55, 20, 33, 11, 55, 33, 11, 33, 44, 44, 55]
>>> task03(listA, listB)
[2, 20, 33, 11, 2, 33, 11, 33, 44, 44, 2]
"""
pass
def task04(items):
"""finds minimum of all values which appear in list exactly twice
If no value appears twice in the list return None.
:param items: list of integers
:return: integer or None, minimum of all values which appear in list exactly twice
Examples:
>>> task04([11, 20, 33, 11, 20, 33, 11, 33, 44, 44, 55])
20
>>> task04([2, 3, 4, 5, 2, 3, 4, 5, 2, 3, 4, 5]) is None
True
"""
pass
def task05(matrix):
""" Shrinks the size of the matrix by 2:
Removes the first and the last row of the matrix
and the first and the last column of the matrix.
Returns modified copy of original matrix.
Original matrix remains unchanged.
:param matrix: matrix containing integer values
:return: copy of original matrix shranked by 2
Example:
>>> inp_matrix = [
... [1, 1, 1, 1, 1, 1],
... [1, 2, 3, 2, 3, 1],
... [1, 3, 2, 3, 2, 1],
... [1, 2, 3, 2, 3, 1],
... [1, 3, 2, 3, 2, 1],
... [1, 1, 1, 1, 1, 1]
... ]
>>> out_matrix = [
... [2, 3, 2, 3],
... [3, 2, 3, 2],
... [2, 3, 2, 3],
... [3, 2, 3, 2]
... ]
>>> task05(inp_matrix) == out_matrix
True
"""
pass
def task06(matrix):
""" Exchange the contents of the diagonals of the matrix.
The items on the diagonals will stay in the same row,
but in each row, the item X in the main diagonal will be exchanged with the
item Y in the secondary diagonal (antidiagonal) in the same row.
:param matrix: matrix containing integer values
:return: modified copy of original matrix
Example:
>>> inp_matrix = [
... [1, 0, 0, 0, 2],
... [0, 1, 0, 2, 0],
... [0, 0, 3, 0, 0],
... [0, 2, 0, 1, 0],
... [2, 0, 0, 0, 1]
... ]
>>> out_matrix = [
... [2, 0, 0, 0, 1],
... [0, 2, 0, 1, 0],
... [0, 0, 3, 0, 0],
... [0, 1, 0, 2, 0],
... [1, 0, 0, 0, 2]
... ]
>>> task06(inp_matrix) == out_matrix
True
"""
pass
if __name__ == "__main__":
import doctest
doctest.testmod(verbose=True)