Project

golr

0.0
No commit activity in last 3 years
No release in over 3 years
Offers methods to initialize and evolve a grid of cells, implementing the rules of Conway's Game of Life
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 1.3.8
~> 4.4.4
~> 2.14.1
~> 0.7.1
 Project Readme

golr

Build Status Code Climate Coverage Status Dependency Status Gem Version

Ruby implementation of Conway's Game of Life initiated at Global Day of Coderetreat 2012 Berlin

Installation

In case you do not use a Ruby version manager such as RVM or rbenv, the installation will require admin rights and using 'sudo' to install it.

The gem can be installed in the usual ways. Either let bundler take care of it and add to your Gemfile like this:

gem 'golr'

Or install it directly from your command line

gem install golr

Usage

An executable ships with this gem, it is called 'golr'.

You can run Golr by specifying a file that contains the initial state of the game. Please find examples of initial game definitions in the folder named 'examples'.

To evolve the game from an initial state given in 'game-file' for e.g. 5 generations, call the executable like this:

golr <game-file> -g5

So for the examples contained in this repo, you could run

golr examples/glider -g500

or

golr examples/lwss -g300

another nice example is the "Pulsar"

golr examples/pulsar

If you do not specify a number of generations, its value will default to 100.

In case you are interested only in the time spent on calculating a certain number of generations, you can add the --time-only option

golr --time-only -g1000 examples/lwss
4.777137s elapsed for 1000 generations

On Unix-like systems, you can combine this with the 'time' command to get more insight into how the elapsed time is split up between User Time and System Time

time golr --time-only -g1000 examples/lwss
4.695895s elapsed for 1000 generations

real	0m5.162s
user	0m5.115s
sys	  0m0.037s

Find out more about the options of the 'golr' script by calling

golr -h

Dependencies / Ruby versions

The gem has no runtime dependencies. It has been developed in Ruby 1.9.3 and is being continuously integrated in MRI 2.0.0, 1.9.3, 1.8.7 plus jruby-head in 1.9-mode.

What's next?

  • using Arrays for Keys still sub-prime: switch to bin (2s complement)
  • use 2-dimensional Array instead of Map -> faster?
  • use 1-dimensional Array and Key based on width of Board -> faster? Could use a window (subarray?)
  • document setup and validation of grid (gamereader, gameprinter, game)
  • Visualization (ncurses, macruby, processing)
  • alternative game rules
  • Performance benchmarks and optimization (find hotspots, different key types and data structures, exploit sparseness)