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

• These problems will help you prepare for the upcoming quizzes, midterms, and final exam. They are optional and you are encouraged to collaborate when working on them.

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

• This week 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 assume 2d lists are rectangular unless explicitly stated otherwise.

1. 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.

2. 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.

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

4. 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.

5. isKnightsTour(board)
Background: A "knight's tour" in chess is a sequence of legal knight moves such that the knight visits every square exactly once. We can represent a (supposed) knight's tour as an NxN list of the integers from 1 to N2 listing the positions in order that the knight occupied on the tour. If it is a legal knight's tour, then all the numbers from 1 to N2 will be included and each move from k to (k+1) will be a legal knight's move. With this in mind, write the function isKnightsTour(board) that takes such a 2d list of integers and returns True if it represents a legal knight's tour and False otherwise.

6. 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.

7. 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: