connect four (game)

namenobodywants at gmail.com namenobodywants at gmail.com
Sat Nov 25 15:26:52 EST 2017


On Friday, November 24, 2017 at 8:07:07 AM UTC-8, Chris Angelico wrote:

> This is the kind of function that needs a docstring and some comments.
> What exactly is this doing? What are the "lines" of the board? What's
> the difference between "linear" and "lines"? What exactly is it
> returning?

producing documentation is an extremely difficult task for me, but i've come up with the following:

"""
makelines(length,numrows,numcolumns) IS THE LIST OF ALL LISTS L, WITH LENGTH length, OF COORDINATES
FROM A numrows x numcolumns MATRIX, SUCH THAT THE ENTRIES OF L ALL LIE IN A LINE:

LET horizontal BE ALL THE APPROPRIATE-LENGTH LISTS WHOSE ENTRIES LIE IN A HORIZONTAL LINE
LET vertical BE ALL THE APPROPRIATE-LENGTH LISTS WHOSE ENTRIES LIE IN A VERTICAL LINE
LET downward BE ALL THE APPROPRIATE-LENGTH LISTS WHOSE ENTRIES LIE IN A DOWNWARD-SLOPING DIAGONAL LINE
LET upward BE ALL THE APPROPRIATE-LENGTH LISTS WHOSE ENTRIES LIE IN AN UPWARD-SLOPING DIAGONAL LINE
THEN makelines(length,numrows,numcolumns) IS THE UNION OF ALL THE AFOREMENTIONED SETS
"""

def makelines(length,numrows,numcolumns): 
    horizontal = [[(i, j+k) for k in range(length)] for i in range(numrows) for j in range(numcolumns)] 
    vertical = [[(i+k, j) for k in range(length)] for i in range(numrows) for j in range(numcolumns)] 
    downward = [[(i+k, j+k) for k in range(length)] for i in range(numrows) for j in range(numcolumns)] 
    upward = [[(i+k, j-k) for k in range(length)] for i in range(numrows) for j in range(numcolumns)] 
    linear = horizontal + vertical + downward + upward 
    return [line for line in linear if all(i in range(6) and j in range(7) for (i,j) in line)]

def getlines(board):
    coordlines = makelines(4,6,7) ## GLOBAL
    return [[board[square] for square in line] for line in coordlines


i tried to remove all the superfluous spaces from that, but lining up code vertically is very helpful to me, so i don't think i can really dispense with the practice

peace
stm



More information about the Python-list mailing list