Crates.io | life-backend |
lib.rs | life-backend |
version | 0.0.2 |
source | src |
created_at | 2023-06-16 13:00:21.430544 |
updated_at | 2023-06-25 22:45:31.918729 |
description | A backend implementation of Conway's Game of Life |
homepage | |
repository | https://github.com/masaki-wk/life-backend |
max_upload_size | |
id | 892207 |
size | 204,696 |
A backend implementation of Conway's Game of Life.
This library provides several functionalities for simulating Life-like cellular automata, including Conway's Game of Life.
The following operations are supported:
"B3/S23"
)It does not provide frontend functionality for viewing or editing patterns through a user interface.
The following code example demonstrates how to create a new game from a pattern file, advance the game and print its final state:
use life_backend::format;
use life_backend::{Board, Game, Position};
// Read a pattern file
let handler = format::open("patterns/glider.rle")?;
// Create a new game (the type parameter is `i16`)
let rule = handler.rule();
let board = handler
.live_cells()
.map(Position::try_from)
.collect::<Result<Board<i16>, _>>()?;
let mut game = Game::new(rule, board);
// Advance the generation
let generation = 4;
for _ in 0..generation {
game.advance();
}
// Print the last state
let bbox = game.board().bounding_box();
let population = game.board().iter().count();
println!("Generation {generation}: bounding-box = {bbox}, population = {population}");
println!("{game}");
examples/game.rs
is a simple Game of Life program. It creates a new game from
a pattern file, advances the game and prints its state to the standard output.
You can run this program like as:
$ cargo run --example game -- --generation=1 patterns/glider.rle
...
Generation 0: bounding-box = (x:[0, 2], y:[0, 2]), population = 5
.O.
..O
OOO
Generation 1: bounding-box = (x:[0, 2], y:[1, 3]), population = 5
O.O
.OO
.O.
Licensed under either of
at your option.
Unless you explicitly state otherwise, any contribution intentionally submitted for inclusion in the work by you, as defined in the Apache-2.0 license, shall be dual licensed as above, without any additional terms or conditions.