From 0e6c7a6c24fe8c7adc37bbfb137129675e1dde97 Mon Sep 17 00:00:00 2001 From: Love Billenius Date: Wed, 4 Sep 2024 16:14:04 +0200 Subject: [PATCH] Init --- .gitignore | 13 + Life.pro | 47 ++++ lib/StanfordCPPLib/grid.h | 540 ++++++++++++++++++++++++++++++++++++++ lib/lifeutil.cpp | 23 ++ lib/lifeutil.h | 14 + lib/readme.txt | 2 + res/diehard.txt | 31 +++ res/dinner-table.txt | 22 ++ res/fish.txt | 37 +++ res/flower.txt | 29 ++ res/glider-explosion.txt | 41 +++ res/glider-gun.txt | 37 +++ res/glider.txt | 26 ++ res/mycolony.txt | 5 + res/quilt-square.txt | 25 ++ res/rpent.txt | 52 ++++ res/seeds.txt | 27 ++ res/simple.txt | 13 + res/snowflake.txt | 26 ++ res/spiral.txt | 23 ++ res/stableplateau.txt | 15 ++ res/tictactoe.txt | 36 +++ src/life.cpp | 17 ++ src/readme.txt | 3 + 24 files changed, 1104 insertions(+) create mode 100755 .gitignore create mode 100755 Life.pro create mode 100755 lib/StanfordCPPLib/grid.h create mode 100755 lib/lifeutil.cpp create mode 100755 lib/lifeutil.h create mode 100755 lib/readme.txt create mode 100755 res/diehard.txt create mode 100755 res/dinner-table.txt create mode 100755 res/fish.txt create mode 100755 res/flower.txt create mode 100755 res/glider-explosion.txt create mode 100755 res/glider-gun.txt create mode 100755 res/glider.txt create mode 100755 res/mycolony.txt create mode 100755 res/quilt-square.txt create mode 100755 res/rpent.txt create mode 100755 res/seeds.txt create mode 100755 res/simple.txt create mode 100755 res/snowflake.txt create mode 100755 res/spiral.txt create mode 100755 res/stableplateau.txt create mode 100755 res/tictactoe.txt create mode 100755 src/life.cpp create mode 100755 src/readme.txt diff --git a/.gitignore b/.gitignore new file mode 100755 index 0000000..527b438 --- /dev/null +++ b/.gitignore @@ -0,0 +1,13 @@ +*~ + +.DS_Store + +*.pro.user.* +*.pro.user + +build-*/ +*.app +*.exe + + +build diff --git a/Life.pro b/Life.pro new file mode 100755 index 0000000..5079e73 --- /dev/null +++ b/Life.pro @@ -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() diff --git a/lib/StanfordCPPLib/grid.h b/lib/StanfordCPPLib/grid.h new file mode 100755 index 0000000..9b2399a --- /dev/null +++ b/lib/StanfordCPPLib/grid.h @@ -0,0 +1,540 @@ +/* + * File: grid.h + * ------------ + * This file exports the Grid class, which offers a + * convenient abstraction for representing a two-dimensional array. + */ + +#ifndef _grid_h +#define _grid_h + +#include +#include +#include +#include +/* + * Class: Grid + * ---------------------- + * This class stores an indexed, two-dimensional array. The following code, + * for example, creates an identity matrix of size n, in which + * the elements are 1.0 along the main diagonal and 0.0 everywhere else: + * + *
+ *    Grid<double> createIdentityMatrix(int n) {
+ *       Grid<double> matrix(n, n);
+ *       for (int i = 0; i < n; i++) {
+ *          matrix[i][i] = 1.0;
+ *       }
+ *       return matrix;
+ *    }
+ *
+ */ + +template +class Grid { + +public: + + /* Forward reference */ + class GridRow; + class ConstGridRow; + + /* + * Constructor: Grid + * Usage: Grid grid; + * Grid 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 resize 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 true 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 row/col + * position in this grid. This method signals an error if the + * row and col 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 row/col + * location in this grid with a new value. This method signals an error + * if the row and col arguments are outside + * the grid boundaries. + */ + + void set(int row, int col, ValueType value); + + /* + * Operator: [] + * Usage: grid[row][col] + * ---------------------- + * Overloads [] 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 row and col 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 row-major order, 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 + 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 { + + 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::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::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 +Grid::Grid() { + elements = NULL; + nRows = 0; + nCols = 0; +} + +template +Grid::Grid(int nRows, int nCols) { + elements = NULL; + resize(nRows, nCols); +} + +template +Grid::~Grid() { + if (elements != NULL) delete[] elements; +} + +template +int Grid::numRows() const { + return nRows; +} + +template +int Grid::numCols() const { + return nCols; +} + +template +void Grid::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 +bool Grid::inBounds(int row, int col) const { + return row >= 0 && col >= 0 && row < nRows && col < nCols; +} + +template +ValueType Grid::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 +const ValueType & Grid::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 +void Grid::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 Grid::GridRow Grid::operator[](int row) { + return GridRow(this, row); +} + +template +const typename Grid::ConstGridRow +Grid::operator[](int row) const { + return ConstGridRow(this, row); +} + +template +void Grid::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 +void Grid::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 +template +void Grid::mapAll(FunctorType fn) const { + for (int i = 0; i < nRows; i++) { + for (int j = 0; j < nCols; j++) { + fn(get(i, j)); + } + } +} + +template +std::string Grid::toString() { + std::ostringstream os; + os << *this; + return os.str(); +} + +template +std::ostream & operator<<(std::ostream & os, const Grid & 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 +std::istream & operator>>(std::istream & is, Grid & grid) { + std::vector> 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 diff --git a/lib/lifeutil.cpp b/lib/lifeutil.cpp new file mode 100755 index 0000000..204ed6d --- /dev/null +++ b/lib/lifeutil.cpp @@ -0,0 +1,23 @@ +#include +#include +#include +#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)); + } +} diff --git a/lib/lifeutil.h b/lib/lifeutil.h new file mode 100755 index 0000000..62a18e1 --- /dev/null +++ b/lib/lifeutil.h @@ -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 diff --git a/lib/readme.txt b/lib/readme.txt new file mode 100755 index 0000000..1fce875 --- /dev/null +++ b/lib/readme.txt @@ -0,0 +1,2 @@ +This directory contains any libraries that should be +linked to your project when it is built. diff --git a/res/diehard.txt b/res/diehard.txt new file mode 100755 index 0000000..b291d71 --- /dev/null +++ b/res/diehard.txt @@ -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. diff --git a/res/dinner-table.txt b/res/dinner-table.txt new file mode 100755 index 0000000..e18151f --- /dev/null +++ b/res/dinner-table.txt @@ -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. diff --git a/res/fish.txt b/res/fish.txt new file mode 100755 index 0000000..225c582 --- /dev/null +++ b/res/fish.txt @@ -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" diff --git a/res/flower.txt b/res/flower.txt new file mode 100755 index 0000000..a43a46e --- /dev/null +++ b/res/flower.txt @@ -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. diff --git a/res/glider-explosion.txt b/res/glider-explosion.txt new file mode 100755 index 0000000..2204d3c --- /dev/null +++ b/res/glider-explosion.txt @@ -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 diff --git a/res/glider-gun.txt b/res/glider-gun.txt new file mode 100755 index 0000000..e741e56 --- /dev/null +++ b/res/glider-gun.txt @@ -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. diff --git a/res/glider.txt b/res/glider.txt new file mode 100755 index 0000000..c1b4c0a --- /dev/null +++ b/res/glider.txt @@ -0,0 +1,26 @@ +20 +15 +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +--------------- +---X----------- +-X-X----------- +--XX----------- +--------------- +--------------- + +# Glider explosion +# Sends out 4 gliders, one to each +# corner which then stablize there diff --git a/res/mycolony.txt b/res/mycolony.txt new file mode 100755 index 0000000..2ea0375 --- /dev/null +++ b/res/mycolony.txt @@ -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. diff --git a/res/quilt-square.txt b/res/quilt-square.txt new file mode 100755 index 0000000..a328d21 --- /dev/null +++ b/res/quilt-square.txt @@ -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. diff --git a/res/rpent.txt b/res/rpent.txt new file mode 100755 index 0000000..6b9ccaa --- /dev/null +++ b/res/rpent.txt @@ -0,0 +1,52 @@ +47 +74 +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +----------------------------------XX-------------------------------------- +---------------------------------XX--------------------------------------- +----------------------------------X--------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- +-------------------------------------------------------------------------- + +# stepp +# An R-pentomino is a pattern that repeats every 1103 iterations. diff --git a/res/seeds.txt b/res/seeds.txt new file mode 100755 index 0000000..b4357bc --- /dev/null +++ b/res/seeds.txt @@ -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. diff --git a/res/simple.txt b/res/simple.txt new file mode 100755 index 0000000..8df01f9 --- /dev/null +++ b/res/simple.txt @@ -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. diff --git a/res/snowflake.txt b/res/snowflake.txt new file mode 100755 index 0000000..d13e49e --- /dev/null +++ b/res/snowflake.txt @@ -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. diff --git a/res/spiral.txt b/res/spiral.txt new file mode 100755 index 0000000..a485ad6 --- /dev/null +++ b/res/spiral.txt @@ -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. diff --git a/res/stableplateau.txt b/res/stableplateau.txt new file mode 100755 index 0000000..a0616d7 --- /dev/null +++ b/res/stableplateau.txt @@ -0,0 +1,15 @@ +10 +10 +--------XX +--------XX +---------- +-----X---- +----X-X--- +----X-X--- +-----X---- +---------- +XX-------- +XX-------- + +# jzelenski +# This file is a stable pattern. diff --git a/res/tictactoe.txt b/res/tictactoe.txt new file mode 100755 index 0000000..677ce2d --- /dev/null +++ b/res/tictactoe.txt @@ -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. diff --git a/src/life.cpp b/src/life.cpp new file mode 100755 index 0000000..16d6d1f --- /dev/null +++ b/src/life.cpp @@ -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 +#include "grid.h" +#include "lifeutil.h" +#include + + +int main() { + + // TODO: Finish the program! + + std::cout << "Have a nice Life! " << std::endl; + return 0; +} diff --git a/src/readme.txt b/src/readme.txt new file mode 100755 index 0000000..48a3be7 --- /dev/null +++ b/src/readme.txt @@ -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.