# CMU 15-112: Fundamentals of Programming and Computer Science Extra Practice for Unit 5 (Due never)

• These problems will help you prepare for test 2. They are optional and you are encouraged to collaborate when working on them.

• You may also wish to see extra-practice5-ct-and-roc.html.

• This unit we are not providing a starter file. You should now be able to make your own (though of course we are happy to help you get started!).
• Do not use recursion this week.
• Do not hardcode the test cases in your solutions.
• You may assumed 2d lists are rectangular unless explicitly stated otherwise.

1. isRectangular(L)
Write the function isRectangular(L) that takes a possibly-2d (or possibly not) list L and returns True if the list is in fact 2d, and if it is also rectangular, so each row has the same number of elements. Return False otherwise.

2. hasNoPrimes(L)
Write the function hasNoPrimes(L) that takes a 2d list L of integers, and returns True if L does not contain any primes, and False otherwise.

3. hasDuplicates(L)
Write the function hasDuplicates(L) that takes a 2d list L of arbitrary values, and returns True if L contains any duplicate values (that is, if any two values in L are equal to each other), and False otherwise.

4. fixMostlyMagicSquare(L)
First, understand what a magic square is. Say we have a mostly magic square L, but then we modify L by changing exactly one value in L so that it no longer is a mostly magic square. For this exercise, we assume we have just such a list L, and your task is to find and fix that change. So, given the list L, return a new list M such that M is the same as L, only with exactly one value changed, and M is a mostly magic square.

5. makeMagicSquare(n)
Write the function makeMagicSquare(n) that takes a positive odd integer n and returns an nxn magic square by following De La Loubere's Method as described here. If n is not a positive odd integer, return None.

6. isLatinSquare(board)
Write the function isLatinSquare(a) that takes a 2d list and returns True if it is a Latin square and False otherwise.

7. matrixMultiply(m1, m2)
Write the function matrixMultiply(m1, m2) that takes two 2d lists (that we will consider to be matrices) and returns a new 2d list that is the result of multiplying the two matrices. Return None if the two matrices cannot be multiplied for any reason.

8. nQueensChecker(board)
Background:  The "N Queens" problem asks if we can place N queens on an NxN chessboard such that no two queens are attacking each other. For most values of N, there are many ways to solve this problem. Here, you will write the function nQueensChecker(board) that takes a 2d list of booleans where True indicates a queen is present and False indicates a blank cell, and returns True if this NxN board contains N queens all of which do not attack any others, and False otherwise.

9. Games, games, games!
Have fun writing your own console-based 2d board games (human-human mainly, but maybe a simple human-computer game) such as: