Init
This commit is contained in:
		
							
								
								
									
										13
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								.gitignore
									
									
									
									
										vendored
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
*~
 | 
			
		||||
 | 
			
		||||
.DS_Store
 | 
			
		||||
 | 
			
		||||
*.pro.user.*
 | 
			
		||||
*.pro.user
 | 
			
		||||
 | 
			
		||||
build-*/
 | 
			
		||||
*.app
 | 
			
		||||
*.exe
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
build
 | 
			
		||||
							
								
								
									
										47
									
								
								Life.pro
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										47
									
								
								Life.pro
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,47 @@
 | 
			
		||||
TEMPLATE = app
 | 
			
		||||
 | 
			
		||||
CONFIG += console
 | 
			
		||||
# Make sure we do not accidentally #include files placed in 'resources'
 | 
			
		||||
CONFIG += no_include_pwd
 | 
			
		||||
 | 
			
		||||
SOURCES = $$files($$PWD/src/*.cpp)
 | 
			
		||||
SOURCES += $$files($$PWD/lib/*.cpp)
 | 
			
		||||
 | 
			
		||||
HEADERS = $$files($$PWD/src/*.h)
 | 
			
		||||
HEADERS += $$files($$PWD/lib/StanfordCPPLib/*.h)
 | 
			
		||||
HEADERS += $$files($$PWD/lib/*.h)
 | 
			
		||||
 | 
			
		||||
QMAKE_CXXFLAGS += -std=c++11
 | 
			
		||||
 | 
			
		||||
INCLUDEPATH += $$PWD/lib/StanfordCPPLib/
 | 
			
		||||
INCLUDEPATH += $$PWD/lib/
 | 
			
		||||
 | 
			
		||||
# Copies the given files to the destination directory
 | 
			
		||||
defineTest(copyToDestdir) {
 | 
			
		||||
    files = $$1
 | 
			
		||||
 | 
			
		||||
    for(FILE, files) {
 | 
			
		||||
        DDIR = $$OUT_PWD
 | 
			
		||||
 | 
			
		||||
        # Replace slashes in paths with backslashes for Windows
 | 
			
		||||
        win32:FILE ~= s,/,\\,g
 | 
			
		||||
        win32:DDIR ~= s,/,\\,g
 | 
			
		||||
 | 
			
		||||
        !win32 {
 | 
			
		||||
            QMAKE_POST_LINK += cp -r '"'$$FILE'"' '"'$$DDIR'"' $$escape_expand(\\n\\t)
 | 
			
		||||
        }
 | 
			
		||||
        win32 {
 | 
			
		||||
            QMAKE_POST_LINK += xcopy '"'$$FILE'"' '"'$$DDIR'"' /e /y $$escape_expand(\\n\\t)
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    export(QMAKE_POST_LINK)
 | 
			
		||||
}
 | 
			
		||||
!win32 {
 | 
			
		||||
    copyToDestdir($$files($$PWD/res/*))
 | 
			
		||||
}
 | 
			
		||||
win32 {
 | 
			
		||||
    copyToDestdir($$PWD/res)
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
cache()
 | 
			
		||||
							
								
								
									
										540
									
								
								lib/StanfordCPPLib/grid.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										540
									
								
								lib/StanfordCPPLib/grid.h
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,540 @@
 | 
			
		||||
/*
 | 
			
		||||
 * File: grid.h
 | 
			
		||||
 * ------------
 | 
			
		||||
 * This file exports the <code>Grid</code> class, which offers a
 | 
			
		||||
 * convenient abstraction for representing a two-dimensional array.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
#ifndef _grid_h
 | 
			
		||||
#define _grid_h
 | 
			
		||||
 | 
			
		||||
#include <string>
 | 
			
		||||
#include <sstream>
 | 
			
		||||
#include <vector>
 | 
			
		||||
#include <stdexcept>
 | 
			
		||||
/*
 | 
			
		||||
 * Class: Grid<ValueType>
 | 
			
		||||
 * ----------------------
 | 
			
		||||
 * This class stores an indexed, two-dimensional array.  The following code,
 | 
			
		||||
 * for example, creates an identity matrix of size <code>n</code>, in which
 | 
			
		||||
 * the elements are 1.0 along the main diagonal and 0.0 everywhere else:
 | 
			
		||||
 *
 | 
			
		||||
 *<pre>
 | 
			
		||||
 *    Grid<double> createIdentityMatrix(int n) {
 | 
			
		||||
 *       Grid<double> matrix(n, n);
 | 
			
		||||
 *       for (int i = 0; i < n; i++) {
 | 
			
		||||
 *          matrix[i][i] = 1.0;
 | 
			
		||||
 *       }
 | 
			
		||||
 *       return matrix;
 | 
			
		||||
 *    }
 | 
			
		||||
 *</pre>
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
class Grid {
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    /* Forward reference */
 | 
			
		||||
    class GridRow;
 | 
			
		||||
    class ConstGridRow;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Constructor: Grid
 | 
			
		||||
 * Usage: Grid<ValueType> grid;
 | 
			
		||||
 *        Grid<ValueType> grid(nRows, nCols);
 | 
			
		||||
 * ------------------------------------------
 | 
			
		||||
 * Initializes a new grid.  The second form of the constructor is
 | 
			
		||||
 * more common and creates a grid with the specified number of rows
 | 
			
		||||
 * and columns.  Each element of the grid is initialized to the
 | 
			
		||||
 * default value for the type.  The default constructor creates an
 | 
			
		||||
 * empty grid for which the client must call <code>resize</code> to
 | 
			
		||||
 * set the dimensions.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    Grid();
 | 
			
		||||
    Grid(int nRows, int nCols);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Destructor: ~Grid
 | 
			
		||||
 * -----------------
 | 
			
		||||
 * Frees any heap storage associated with this grid.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    virtual ~Grid();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: numRows
 | 
			
		||||
 * Usage: int nRows = grid.numRows();
 | 
			
		||||
 * ----------------------------------
 | 
			
		||||
 * Returns the number of rows in the grid.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    int numRows() const;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: numCols
 | 
			
		||||
 * Usage: int nCols = grid.numCols();
 | 
			
		||||
 * ----------------------------------
 | 
			
		||||
 * Returns the number of columns in the grid.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    int numCols() const;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: resize
 | 
			
		||||
 * Usage: grid.resize(nRows, nCols);
 | 
			
		||||
 * ---------------------------------
 | 
			
		||||
 * Reinitializes the grid to have the specified number of rows
 | 
			
		||||
 * and columns.  Any previous grid contents are discarded.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    void resize(int nRows, int nCols);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: inBounds
 | 
			
		||||
 * Usage: if (grid.inBounds(row, col)) ...
 | 
			
		||||
 * ---------------------------------------
 | 
			
		||||
 * Returns <code>true</code> if the specified row and column position
 | 
			
		||||
 * is inside the bounds of the grid.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    bool inBounds(int row, int col) const;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: get
 | 
			
		||||
 * Usage: ValueType value = grid.get(row, col);
 | 
			
		||||
 * --------------------------------------------
 | 
			
		||||
 * Returns the element at the specified <code>row</code>/<code>col</code>
 | 
			
		||||
 * position in this grid.  This method signals an error if the
 | 
			
		||||
 * <code>row</code> and <code>col</code> arguments are outside
 | 
			
		||||
 * the grid boundaries.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    ValueType get(int row, int col);
 | 
			
		||||
    const ValueType & get(int row, int col) const;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: set
 | 
			
		||||
 * Usage: grid.set(row, col, value);
 | 
			
		||||
 * ---------------------------------
 | 
			
		||||
 * Replaces the element at the specified <code>row</code>/<code>col</code>
 | 
			
		||||
 * location in this grid with a new value.  This method signals an error
 | 
			
		||||
 * if the <code>row</code> and <code>col</code> arguments are outside
 | 
			
		||||
 * the grid boundaries.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    void set(int row, int col, ValueType value);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Operator: []
 | 
			
		||||
 * Usage:  grid[row][col]
 | 
			
		||||
 * ----------------------
 | 
			
		||||
 * Overloads <code>[]</code> to select elements from this grid.
 | 
			
		||||
 * This extension enables the use of traditional array notation to
 | 
			
		||||
 * get or set individual elements.  This method signals an error if
 | 
			
		||||
 * the <code>row</code> and <code>col</code> arguments are outside
 | 
			
		||||
 * the grid boundaries.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    GridRow operator[](int row);
 | 
			
		||||
    const ConstGridRow operator[](int row) const;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: toString
 | 
			
		||||
 * Usage: string str = grid.toString();
 | 
			
		||||
 * ------------------------------------
 | 
			
		||||
 * Converts the grid to a printable string representation.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    std::string toString();
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Method: mapAll
 | 
			
		||||
 * Usage: grid.mapAll(fn);
 | 
			
		||||
 * -----------------------
 | 
			
		||||
 * Calls the specified function on each element of the grid.  The
 | 
			
		||||
 * elements are processed in <b><i>row-major order,</i></b> in which
 | 
			
		||||
 * all the elements of row 0 are processed, followed by the elements
 | 
			
		||||
 * in row 1, and so on.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    void mapAll(void (*fn)(ValueType value)) const;
 | 
			
		||||
    void mapAll(void (*fn)(const ValueType & value)) const;
 | 
			
		||||
 | 
			
		||||
    template <typename FunctorType>
 | 
			
		||||
    void mapAll(FunctorType fn) const;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Additional Grid operations
 | 
			
		||||
 * --------------------------
 | 
			
		||||
 * In addition to the methods listed in this interface, the Grid
 | 
			
		||||
 * class supports the following operations:
 | 
			
		||||
 *
 | 
			
		||||
 *   - Stream I/O using the << and >> operators
 | 
			
		||||
 *   - Deep copying for the copy constructor and assignment operator
 | 
			
		||||
 *   - Iteration using the range-based for statement and STL iterators
 | 
			
		||||
 *
 | 
			
		||||
 * The iteration forms process the grid in row-major order.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    /* Private section */
 | 
			
		||||
 | 
			
		||||
    /**********************************************************************/
 | 
			
		||||
    /* Note: Everything below this point in the file is logically part    */
 | 
			
		||||
    /* of the implementation and should not be of interest to clients.    */
 | 
			
		||||
    /**********************************************************************/
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Implementation notes: Grid data structure
 | 
			
		||||
 * -----------------------------------------
 | 
			
		||||
 * The Grid is internally managed as a dynamic array of elements.
 | 
			
		||||
 * The array itself is one-dimensional, the logical separation into
 | 
			
		||||
 * rows and columns is done by arithmetic computation.  The layout
 | 
			
		||||
 * is in row-major order, which is to say that the entire first row
 | 
			
		||||
 * is laid out contiguously, followed by the entire second row,
 | 
			
		||||
 * and so on.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    /* Instance variables */
 | 
			
		||||
 | 
			
		||||
    ValueType *elements;  /* A dynamic array of the elements   */
 | 
			
		||||
    int nRows;            /* The number of rows in the grid    */
 | 
			
		||||
    int nCols;            /* The number of columns in the grid */
 | 
			
		||||
 | 
			
		||||
    /* Private method prototypes */
 | 
			
		||||
 | 
			
		||||
    void checkRange(int row, int col);
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Hidden features
 | 
			
		||||
 * ---------------
 | 
			
		||||
 * The remainder of this file consists of the code required to
 | 
			
		||||
 * support deep copying and iteration.  Including these methods
 | 
			
		||||
 * in the public interface would make that interface more
 | 
			
		||||
 * difficult to understand for the average client.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Deep copying support
 | 
			
		||||
 * --------------------
 | 
			
		||||
 * This copy constructor and operator= are defined to make a
 | 
			
		||||
 * deep copy, making it possible to pass/return grids by value
 | 
			
		||||
 * and assign from one grid to another.  The entire contents of
 | 
			
		||||
 * the grid, including all elements, are copied.  Each grid
 | 
			
		||||
 * element is copied from the original grid to the copy using
 | 
			
		||||
 * assignment (operator=).  Making copies is generally avoided
 | 
			
		||||
 * because of the expense and thus, grids are typically passed
 | 
			
		||||
 * by reference, however, when a copy is needed, these operations
 | 
			
		||||
 * are supported.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    void deepCopy(const Grid & grid) {
 | 
			
		||||
        int n = grid.nRows * grid.nCols;
 | 
			
		||||
        elements = new ValueType[n];
 | 
			
		||||
        for (int i = 0; i < n; i++) {
 | 
			
		||||
            elements[i] = grid.elements[i];
 | 
			
		||||
        }
 | 
			
		||||
        nRows = grid.nRows;
 | 
			
		||||
        nCols = grid.nCols;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
public:
 | 
			
		||||
 | 
			
		||||
    Grid & operator=(const Grid & src) {
 | 
			
		||||
        if (this != &src) {
 | 
			
		||||
            delete[] elements;
 | 
			
		||||
            deepCopy(src);
 | 
			
		||||
        }
 | 
			
		||||
        return *this;
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    Grid(const Grid & src) {
 | 
			
		||||
        deepCopy(src);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Iterator support
 | 
			
		||||
 * ----------------
 | 
			
		||||
 * The classes in the StanfordCPPLib collection implement input
 | 
			
		||||
 * iterators so that they work symmetrically with respect to the
 | 
			
		||||
 * corresponding STL classes.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    class iterator : public std::iterator<std::input_iterator_tag, ValueType> {
 | 
			
		||||
 | 
			
		||||
    public:
 | 
			
		||||
 | 
			
		||||
        iterator(const Grid *gp, int index) {
 | 
			
		||||
            this->gp = gp;
 | 
			
		||||
            this->index = index;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        iterator(const iterator & it) {
 | 
			
		||||
            this->gp = it.gp;
 | 
			
		||||
            this->index = it.index;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        iterator & operator++() {
 | 
			
		||||
            index++;
 | 
			
		||||
            return *this;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        iterator operator++(int) {
 | 
			
		||||
            iterator copy(*this);
 | 
			
		||||
            operator++();
 | 
			
		||||
            return copy;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool operator==(const iterator & rhs) {
 | 
			
		||||
            return gp == rhs.gp && index == rhs.index;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        bool operator!=(const iterator & rhs) {
 | 
			
		||||
            return !(*this == rhs);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ValueType & operator*() {
 | 
			
		||||
            return gp->elements[index];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ValueType *operator->() {
 | 
			
		||||
            return &gp->elements[index];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        const Grid *gp;
 | 
			
		||||
        int index;
 | 
			
		||||
    };
 | 
			
		||||
 | 
			
		||||
    iterator begin() const {
 | 
			
		||||
        return iterator(this, 0);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    iterator end() const {
 | 
			
		||||
        return iterator(this, nRows * nCols);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Private class: Grid<ValType>::GridRow
 | 
			
		||||
 * -------------------------------------
 | 
			
		||||
 * This section of the code defines a nested class within the Grid template
 | 
			
		||||
 * that makes it possible to use traditional subscripting on Grid values.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    class GridRow {
 | 
			
		||||
    public:
 | 
			
		||||
        GridRow() {
 | 
			
		||||
            /* Empty */
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ValueType & operator[](int col) {
 | 
			
		||||
            if (!gp->inBounds(row, col)) {
 | 
			
		||||
                throw std::out_of_range("Grid index values out of range");
 | 
			
		||||
            }
 | 
			
		||||
            return gp->elements[(row * gp->nCols) + col];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ValueType operator[](int col) const {
 | 
			
		||||
            if (!gp->inBounds(row, col)) {
 | 
			
		||||
                throw std::out_of_range("Grid index values out of range");
 | 
			
		||||
            }
 | 
			
		||||
            return gp->elements[(row * gp->nCols) + col];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        GridRow(Grid *gridRef, int index) {
 | 
			
		||||
            gp = gridRef;
 | 
			
		||||
            row = index;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        Grid *gp;
 | 
			
		||||
        int row;
 | 
			
		||||
        friend class Grid;
 | 
			
		||||
    };
 | 
			
		||||
    friend class ConstGridRow;
 | 
			
		||||
 | 
			
		||||
    /*
 | 
			
		||||
 * Private class: Grid<ValType>::ConstGridRow
 | 
			
		||||
 * -------------------------------------
 | 
			
		||||
 * This section of the code defines a nested class within the Grid template
 | 
			
		||||
 * that makes it possible to use traditional subscripting on Grid values for
 | 
			
		||||
 * const versions of the Grid.
 | 
			
		||||
 */
 | 
			
		||||
 | 
			
		||||
    class ConstGridRow {
 | 
			
		||||
    public:
 | 
			
		||||
        ConstGridRow() {
 | 
			
		||||
            /* Empty */
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        ValueType operator[](int col) const {
 | 
			
		||||
            if (!gp->inBounds(row, col)) {
 | 
			
		||||
                throw std::out_of_range("Grid index values out of range");
 | 
			
		||||
            }
 | 
			
		||||
            return gp->elements[(row * gp->nCols) + col];
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
    private:
 | 
			
		||||
        ConstGridRow(const Grid *gridRef, int index) {
 | 
			
		||||
            gp = gridRef;
 | 
			
		||||
            row = index;
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        const Grid *gp;
 | 
			
		||||
        int row;
 | 
			
		||||
        friend class Grid;
 | 
			
		||||
    };
 | 
			
		||||
    friend class GridRow;
 | 
			
		||||
 | 
			
		||||
};
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
Grid<ValueType>::Grid() {
 | 
			
		||||
    elements = NULL;
 | 
			
		||||
    nRows = 0;
 | 
			
		||||
    nCols = 0;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
Grid<ValueType>::Grid(int nRows, int nCols) {
 | 
			
		||||
    elements = NULL;
 | 
			
		||||
    resize(nRows, nCols);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
Grid<ValueType>::~Grid() {
 | 
			
		||||
    if (elements != NULL) delete[] elements;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
int Grid<ValueType>::numRows() const {
 | 
			
		||||
    return nRows;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
int Grid<ValueType>::numCols() const {
 | 
			
		||||
    return nCols;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
void Grid<ValueType>::resize(int nRows, int nCols) {
 | 
			
		||||
    if (nRows < 0 || nCols < 0) {
 | 
			
		||||
        throw std::invalid_argument("Attempt to resize grid to invalid size ("
 | 
			
		||||
                                    + std::to_string(nRows) + ", "
 | 
			
		||||
                                    + std::to_string(nCols) + ")");
 | 
			
		||||
    }
 | 
			
		||||
    if (elements != NULL) delete[] elements;
 | 
			
		||||
    this->nRows = nRows;
 | 
			
		||||
    this->nCols = nCols;
 | 
			
		||||
    elements = new ValueType[nRows * nCols];
 | 
			
		||||
    ValueType value = ValueType();
 | 
			
		||||
    for (int i = 0; i < nRows * nCols; i++) {
 | 
			
		||||
        elements[i] = value;
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
bool Grid<ValueType>::inBounds(int row, int col) const {
 | 
			
		||||
    return row >= 0 && col >= 0 && row < nRows && col < nCols;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
ValueType Grid<ValueType>::get(int row, int col) {
 | 
			
		||||
    if (!inBounds(row, col)) throw std::out_of_range("get: Grid indices out of bounds");
 | 
			
		||||
    return elements[(row * nCols) + col];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
const ValueType & Grid<ValueType>::get(int row, int col) const {
 | 
			
		||||
    if (!inBounds(row, col)) throw std::out_of_range("get: Grid indices out of bounds");
 | 
			
		||||
    return elements[(row * nCols) + col];
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
void Grid<ValueType>::set(int row, int col, ValueType value) {
 | 
			
		||||
    if (!inBounds(row, col)) throw std::out_of_range("set: Grid indices out of bounds");
 | 
			
		||||
    elements[(row * nCols) + col] = value;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
typename Grid<ValueType>::GridRow Grid<ValueType>::operator[](int row) {
 | 
			
		||||
    return GridRow(this, row);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
const typename Grid<ValueType>::ConstGridRow
 | 
			
		||||
Grid<ValueType>::operator[](int row) const {
 | 
			
		||||
    return ConstGridRow(this, row);
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
void Grid<ValueType>::mapAll(void (*fn)(ValueType value)) const {
 | 
			
		||||
    for (int i = 0; i < nRows; i++) {
 | 
			
		||||
        for (int j = 0; j < nCols; j++) {
 | 
			
		||||
            fn(get(i, j));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
void Grid<ValueType>::mapAll(void (*fn)(const ValueType & value)) const {
 | 
			
		||||
    for (int i = 0; i < nRows; i++) {
 | 
			
		||||
        for (int j = 0; j < nCols; j++) {
 | 
			
		||||
            fn(get(i, j));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
template <typename FunctorType>
 | 
			
		||||
void Grid<ValueType>::mapAll(FunctorType fn) const {
 | 
			
		||||
    for (int i = 0; i < nRows; i++) {
 | 
			
		||||
        for (int j = 0; j < nCols; j++) {
 | 
			
		||||
            fn(get(i, j));
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
std::string Grid<ValueType>::toString() {
 | 
			
		||||
    std::ostringstream os;
 | 
			
		||||
    os << *this;
 | 
			
		||||
    return os.str();
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
std::ostream & operator<<(std::ostream & os, const Grid<ValueType> & grid) {
 | 
			
		||||
    os << "{";
 | 
			
		||||
    int nRows = grid.numRows();
 | 
			
		||||
    int nCols = grid.numCols();
 | 
			
		||||
    for (int i = 0; i < nRows; i++) {
 | 
			
		||||
        if (i > 0) os << ", ";
 | 
			
		||||
        os << "{";
 | 
			
		||||
        for (int j = 0; j < nCols; j++) {
 | 
			
		||||
            if (j > 0) os << ", ";
 | 
			
		||||
             os << grid.get(i, j);
 | 
			
		||||
        }
 | 
			
		||||
        os << "}";
 | 
			
		||||
    }
 | 
			
		||||
    return os << "}";
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
template <typename ValueType>
 | 
			
		||||
std::istream & operator>>(std::istream & is, Grid<ValueType> & grid) {
 | 
			
		||||
    std::vector<std::vector<ValueType>> vec2d;
 | 
			
		||||
    is >> vec2d;
 | 
			
		||||
    int nRows = vec2d.size();
 | 
			
		||||
    int nCols = (nRows == 0) ? 0 : vec2d[0].size();
 | 
			
		||||
    grid.resize(nRows, nCols);
 | 
			
		||||
    for (int i = 0; i < nRows; i++) {
 | 
			
		||||
        for (int j = 0; j < nCols; j++) {
 | 
			
		||||
            grid[i][j] = vec2d[i][j];
 | 
			
		||||
        }
 | 
			
		||||
    }
 | 
			
		||||
    return is;
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
#endif
 | 
			
		||||
							
								
								
									
										23
									
								
								lib/lifeutil.cpp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								lib/lifeutil.cpp
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
#include <cstdlib>
 | 
			
		||||
#include <chrono>
 | 
			
		||||
#include <thread>
 | 
			
		||||
#include "lifeutil.h"
 | 
			
		||||
 | 
			
		||||
void clearConsole()
 | 
			
		||||
{
 | 
			
		||||
#if defined(_WIN32) || defined (_WIN64)
 | 
			
		||||
        std::system("CLS");
 | 
			
		||||
#else
 | 
			
		||||
        // assume POSIX
 | 
			
		||||
        std::system("clear");
 | 
			
		||||
#endif
 | 
			
		||||
}
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
void pause(int ms)
 | 
			
		||||
{
 | 
			
		||||
    if (ms > 0)
 | 
			
		||||
    {
 | 
			
		||||
        std::this_thread::sleep_for(std::chrono::milliseconds(ms));
 | 
			
		||||
    }
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										14
									
								
								lib/lifeutil.h
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										14
									
								
								lib/lifeutil.h
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,14 @@
 | 
			
		||||
#ifndef LIFEUTIL_H
 | 
			
		||||
#define LIFEUTIL_H
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Erases all currently visible test from the output console.
 | 
			
		||||
 */
 | 
			
		||||
void clearConsole();
 | 
			
		||||
 | 
			
		||||
/*
 | 
			
		||||
 * Causes the program to halt execution for the given number of milliseconds.
 | 
			
		||||
 */
 | 
			
		||||
void pause(int ms);
 | 
			
		||||
 | 
			
		||||
#endif // LIFEUTIL_H
 | 
			
		||||
							
								
								
									
										2
									
								
								lib/readme.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										2
									
								
								lib/readme.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,2 @@
 | 
			
		||||
This directory contains any libraries that should be
 | 
			
		||||
linked to your project when it is built.
 | 
			
		||||
							
								
								
									
										31
									
								
								res/diehard.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										31
									
								
								res/diehard.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,31 @@
 | 
			
		||||
25
 | 
			
		||||
20
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
-------------X------
 | 
			
		||||
-------XX-----------
 | 
			
		||||
--------X---XXX-----
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
# Stephen Silver
 | 
			
		||||
# Starts with 7 cells and lasts 130 generations
 | 
			
		||||
# before all cells die out.
 | 
			
		||||
							
								
								
									
										22
									
								
								res/dinner-table.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										22
									
								
								res/dinner-table.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,22 @@
 | 
			
		||||
15
 | 
			
		||||
15
 | 
			
		||||
---------------
 | 
			
		||||
--X------------
 | 
			
		||||
--XXX-------XX-
 | 
			
		||||
-----X------X--
 | 
			
		||||
----XX----X-X--
 | 
			
		||||
----------XX---
 | 
			
		||||
---------------
 | 
			
		||||
------XXX------
 | 
			
		||||
------XXX------
 | 
			
		||||
---XX----------
 | 
			
		||||
--X-X----XX----
 | 
			
		||||
--X------X-----
 | 
			
		||||
-XX-------XXX--
 | 
			
		||||
------------X--
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
# by Robert Wainwright.
 | 
			
		||||
# A spiderly looking creation with a
 | 
			
		||||
# spinner in the middle that cycles
 | 
			
		||||
# every 12 generations.
 | 
			
		||||
							
								
								
									
										37
									
								
								res/fish.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								res/fish.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
30
 | 
			
		||||
45
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
--X----X-------------------------------------
 | 
			
		||||
--------X------------------------------------
 | 
			
		||||
--X-----X------------------------------------
 | 
			
		||||
---XXXXXX------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------X---X-
 | 
			
		||||
--------------------------------------X------
 | 
			
		||||
--------------------------------------X----X-
 | 
			
		||||
--------------------------------------XXXXX--
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
--X--X----------------------X--X-------------
 | 
			
		||||
------X-------------------------X------------
 | 
			
		||||
--X---X---------------------X---X------------
 | 
			
		||||
---XXXX----------------------XXXX------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------X----X------
 | 
			
		||||
--------------------------------X------------
 | 
			
		||||
--------------------------------X-----X------
 | 
			
		||||
--------------------------------XXXXXX-------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Welcome to Julie's fish aquarium.
 | 
			
		||||
# These little guys swim back and forth.
 | 
			
		||||
# In the lingo of Life, these guys are 
 | 
			
		||||
# called "spaceships"
 | 
			
		||||
							
								
								
									
										29
									
								
								res/flower.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										29
									
								
								res/flower.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,29 @@
 | 
			
		||||
19
 | 
			
		||||
27
 | 
			
		||||
---------------------------
 | 
			
		||||
---------------------------
 | 
			
		||||
---------------------------
 | 
			
		||||
---XX-----------------XX---
 | 
			
		||||
---XX--------X--------XX---
 | 
			
		||||
------------X-X------------
 | 
			
		||||
----------X-----X----------
 | 
			
		||||
------X-X---XXX---X-X------
 | 
			
		||||
-------X-X---X---X-X-------
 | 
			
		||||
-------X-X---X---X-X-------
 | 
			
		||||
-------X-X---X---X-X-------
 | 
			
		||||
------X-X---XXX---X-X------
 | 
			
		||||
----------X-----X----------
 | 
			
		||||
------------X-X------------
 | 
			
		||||
---XX--------X--------XX---
 | 
			
		||||
---XX-----------------XX---
 | 
			
		||||
---------------------------
 | 
			
		||||
---------------------------
 | 
			
		||||
---------------------------
 | 
			
		||||
 | 
			
		||||
# jzelenski
 | 
			
		||||
# I just made this one up. If you start 
 | 
			
		||||
# with symmetric colonies, you tend to
 | 
			
		||||
# get interesting kaleidoscopic effects.
 | 
			
		||||
# This one evolves to a repetitive colony
 | 
			
		||||
# after a burst of energy out of the
 | 
			
		||||
# starting gate. 
 | 
			
		||||
							
								
								
									
										41
									
								
								res/glider-explosion.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										41
									
								
								res/glider-explosion.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,41 @@
 | 
			
		||||
35
 | 
			
		||||
38
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
-----------------XXXX-----------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
---------------XXXXXXXX---------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
-------------XXXXXXXXXXXX-------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
---------------XXXXXXXX---------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
-----------------XXXX-----------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
--------------------------------------
 | 
			
		||||
 | 
			
		||||
# Glider explosion
 | 
			
		||||
# Sends out 4 gliders, one to each
 | 
			
		||||
# corner which then stablize there
 | 
			
		||||
							
								
								
									
										37
									
								
								res/glider-gun.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										37
									
								
								res/glider-gun.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,37 @@
 | 
			
		||||
30
 | 
			
		||||
45
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
--------------------X------------------------
 | 
			
		||||
--------------------X-X----------------------
 | 
			
		||||
---------------------X-X-------X-------------
 | 
			
		||||
--------XX-----------X--X------XX------------
 | 
			
		||||
--------XX-----------X-X--XX----XX-----------
 | 
			
		||||
--------------------X-X---XX----XXX-------XX-
 | 
			
		||||
--------------------X-----XX----XX--------XX-
 | 
			
		||||
-------------------------------XX------------
 | 
			
		||||
-------------------------------X-------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
 | 
			
		||||
# Gosper's Glider Gun.
 | 
			
		||||
# The "gun" at the top will repeatedly fire off gliders that
 | 
			
		||||
# head southwest.  With it, Gosper claimed a $50 prize offered 
 | 
			
		||||
# by Conway for the discovery of a Life pattern which grows without bound. 
 | 
			
		||||
							
								
								
									
										26
									
								
								res/glider.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								res/glider.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
20
 | 
			
		||||
15
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
---X-----------
 | 
			
		||||
-X-X-----------
 | 
			
		||||
--XX-----------
 | 
			
		||||
---------------
 | 
			
		||||
---------------
 | 
			
		||||
 | 
			
		||||
# Glider explosion
 | 
			
		||||
# Sends out 4 gliders, one to each
 | 
			
		||||
# corner which then stablize there
 | 
			
		||||
							
								
								
									
										5
									
								
								res/mycolony.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										5
									
								
								res/mycolony.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,5 @@
 | 
			
		||||
# This file is empty for now, but you should delete this initial text
 | 
			
		||||
# and replace it with your own creative input file representing a
 | 
			
		||||
# starting state for the Game of Life simulation.
 | 
			
		||||
# The file should be your own creation that is different from the
 | 
			
		||||
# other provided starter grid files.
 | 
			
		||||
							
								
								
									
										25
									
								
								res/quilt-square.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										25
									
								
								res/quilt-square.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,25 @@
 | 
			
		||||
20
 | 
			
		||||
20
 | 
			
		||||
--------------------
 | 
			
		||||
-----XX------XX-----
 | 
			
		||||
----X--X----X--X----
 | 
			
		||||
----X-X-X--X-X-X----
 | 
			
		||||
--XX--X-XXXX-X--XX--
 | 
			
		||||
-X-----X----X-----X-
 | 
			
		||||
-X-XX----------XX-X-
 | 
			
		||||
--X--X--------X--X--
 | 
			
		||||
---XX----------XX---
 | 
			
		||||
----X----------X----
 | 
			
		||||
----X----------X----
 | 
			
		||||
---XX----------XX---
 | 
			
		||||
--X--X--------X--X--
 | 
			
		||||
-X-XX----------XX-X-
 | 
			
		||||
-X-----X----X-----X-
 | 
			
		||||
--XX--X-XXXX-X--XX--
 | 
			
		||||
----X-X-X--X-X-X----
 | 
			
		||||
----X--X----X--X----
 | 
			
		||||
-----XX------XX-----
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
# From Computer Magaazine 2001, Eric Weisstein
 | 
			
		||||
# Flower-like pattern that cycles endlessly.
 | 
			
		||||
							
								
								
									
										52
									
								
								res/rpent.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										52
									
								
								res/rpent.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,52 @@
 | 
			
		||||
47
 | 
			
		||||
74
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
----------------------------------XX--------------------------------------
 | 
			
		||||
---------------------------------XX---------------------------------------
 | 
			
		||||
----------------------------------X---------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
--------------------------------------------------------------------------
 | 
			
		||||
 | 
			
		||||
# stepp
 | 
			
		||||
# An R-pentomino is a pattern that repeats every 1103 iterations.
 | 
			
		||||
							
								
								
									
										27
									
								
								res/seeds.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										27
									
								
								res/seeds.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,27 @@
 | 
			
		||||
20
 | 
			
		||||
30
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
-------------X----------------
 | 
			
		||||
-------------X----------------
 | 
			
		||||
-------------X----------------
 | 
			
		||||
---------XXX---XXX------------
 | 
			
		||||
-------------X----------------
 | 
			
		||||
-------------X----------------
 | 
			
		||||
-------------X----------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
------------------------------
 | 
			
		||||
 | 
			
		||||
# jzelenski
 | 
			
		||||
# A symmetric pattern that takes about 30
 | 
			
		||||
# steps to evolve to the same repeating
 | 
			
		||||
# cycle as the Snowflake pattern.
 | 
			
		||||
							
								
								
									
										13
									
								
								res/simple.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										13
									
								
								res/simple.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,13 @@
 | 
			
		||||
5
 | 
			
		||||
9
 | 
			
		||||
---------
 | 
			
		||||
---------
 | 
			
		||||
---XXX---
 | 
			
		||||
---------
 | 
			
		||||
---------
 | 
			
		||||
 | 
			
		||||
# jzelenski
 | 
			
		||||
# This is a very simple colony, good for a first test case. 
 | 
			
		||||
# It is a 5x9 world, with no live cells on the border and
 | 
			
		||||
# length 3 bar in the middle that will alternate between
 | 
			
		||||
# horizontal and vertical.
 | 
			
		||||
							
								
								
									
										26
									
								
								res/snowflake.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										26
									
								
								res/snowflake.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,26 @@
 | 
			
		||||
20
 | 
			
		||||
31
 | 
			
		||||
-------------------------------
 | 
			
		||||
-------------------------------
 | 
			
		||||
-------------------------------
 | 
			
		||||
-----------XXX---XXX-----------
 | 
			
		||||
-------------------------------
 | 
			
		||||
---------X----X-X----X---------
 | 
			
		||||
---------X----X-X----X---------
 | 
			
		||||
---------X----X-X----X---------
 | 
			
		||||
-----------XXX---XXX-----------
 | 
			
		||||
-------------------------------
 | 
			
		||||
-----------XXX---XXX-----------
 | 
			
		||||
---------X----X-X----X---------
 | 
			
		||||
---------X----X-X----X---------
 | 
			
		||||
---------X----X-X----X---------
 | 
			
		||||
-------------------------------
 | 
			
		||||
-----------XXX---XXX-----------
 | 
			
		||||
-------------------------------
 | 
			
		||||
-------------------------------
 | 
			
		||||
-------------------------------
 | 
			
		||||
-------------------------------
 | 
			
		||||
 | 
			
		||||
# jzelenski
 | 
			
		||||
# This cool pattern infinitely repeats
 | 
			
		||||
# between three symmetric configurations.
 | 
			
		||||
							
								
								
									
										23
									
								
								res/spiral.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										23
									
								
								res/spiral.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,23 @@
 | 
			
		||||
15
 | 
			
		||||
20
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
----------XX--------
 | 
			
		||||
-----------X--------
 | 
			
		||||
------XXX--XX-------
 | 
			
		||||
----XXX-X---X-------
 | 
			
		||||
----X----X-XX-------
 | 
			
		||||
--------X-X---------
 | 
			
		||||
------XX-X----X-----
 | 
			
		||||
------X---X-XXX-----
 | 
			
		||||
------XX--XXX-------
 | 
			
		||||
-------X------------
 | 
			
		||||
-------XX-----------
 | 
			
		||||
--------------------
 | 
			
		||||
--------------------
 | 
			
		||||
 | 
			
		||||
# jzelenski
 | 
			
		||||
# This nifty colony infinitely repeats in
 | 
			
		||||
# a cycle of about 10 different symmetric
 | 
			
		||||
# patterns that each resemble some sort of
 | 
			
		||||
# spiral.
 | 
			
		||||
							
								
								
									
										15
									
								
								res/stableplateau.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										15
									
								
								res/stableplateau.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,15 @@
 | 
			
		||||
10
 | 
			
		||||
10
 | 
			
		||||
--------XX
 | 
			
		||||
--------XX
 | 
			
		||||
----------
 | 
			
		||||
-----X----
 | 
			
		||||
----X-X---
 | 
			
		||||
----X-X---
 | 
			
		||||
-----X----
 | 
			
		||||
----------
 | 
			
		||||
XX--------
 | 
			
		||||
XX--------
 | 
			
		||||
 | 
			
		||||
# jzelenski
 | 
			
		||||
# This file is a stable pattern. 
 | 
			
		||||
							
								
								
									
										36
									
								
								res/tictactoe.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										36
									
								
								res/tictactoe.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,36 @@
 | 
			
		||||
31
 | 
			
		||||
45
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
------X--------------XXX--------------X------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
-------------------X-----X-------------------
 | 
			
		||||
--XXX---XXX--------X-----X--------XXX---XXX--
 | 
			
		||||
-------------------X-----X-------------------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
------X--------------XXX--------------X------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
----------------------X----------------------
 | 
			
		||||
-----XXX--------------X--------------XXX-----
 | 
			
		||||
----------------------X----------------------
 | 
			
		||||
---X-----X-------------------------X-----X---
 | 
			
		||||
---X-----X--------XXX---XXX--------X-----X---
 | 
			
		||||
---X-----X-------------------------X-----X---
 | 
			
		||||
----------------------X----------------------
 | 
			
		||||
-----XXX--------------X--------------XXX-----
 | 
			
		||||
----------------------X----------------------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
------X--------------XXX--------------X------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
-------------------X-----X-------------------
 | 
			
		||||
--XXX---XXX--------X-----X--------XXX---XXX--
 | 
			
		||||
-------------------X-----X-------------------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
------X--------------XXX--------------X------
 | 
			
		||||
------X-------------------------------X------
 | 
			
		||||
---------------------------------------------
 | 
			
		||||
 | 
			
		||||
# jzelenski
 | 
			
		||||
# A 3x3 grid of alternating +/0 shapes.
 | 
			
		||||
							
								
								
									
										17
									
								
								src/life.cpp
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										17
									
								
								src/life.cpp
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,17 @@
 | 
			
		||||
// This is the CPP file you will edit and turn in.
 | 
			
		||||
// Also remove these comments here and add your own.
 | 
			
		||||
// TODO: remove this comment header
 | 
			
		||||
 | 
			
		||||
#include <iostream>
 | 
			
		||||
#include "grid.h"
 | 
			
		||||
#include "lifeutil.h"
 | 
			
		||||
#include <string>
 | 
			
		||||
 | 
			
		||||
 | 
			
		||||
int main() {
 | 
			
		||||
 | 
			
		||||
    // TODO: Finish the program!
 | 
			
		||||
 | 
			
		||||
    std::cout << "Have a nice Life! "  << std::endl;
 | 
			
		||||
    return 0;
 | 
			
		||||
}
 | 
			
		||||
							
								
								
									
										3
									
								
								src/readme.txt
									
									
									
									
									
										Executable file
									
								
							
							
						
						
									
										3
									
								
								src/readme.txt
									
									
									
									
									
										Executable file
									
								
							@@ -0,0 +1,3 @@
 | 
			
		||||
This directory contains the source code files (*.cpp, *.h)
 | 
			
		||||
that you will write as you complete the assignment.
 | 
			
		||||
We will also put any instructor-provided code here.
 | 
			
		||||
		Reference in New Issue
	
	Block a user