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



  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)
    In this week's writing session, we wrote isMostlyMagicSquare(L). Here, 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. 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.

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

  10. 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:
    1. Checkers
    2. Chess
    3. Isola
    4. Fox and Hounds
    5. Backgammon
    6. Stratego
    7. Or many, many others...