{"id":17070364,"url":"https://github.com/owainkenwayucl/racket-life","last_synced_at":"2026-02-09T03:01:33.040Z","repository":{"id":81522444,"uuid":"88517543","full_name":"owainkenwayucl/racket-life","owner":"owainkenwayucl","description":"Conway's Game of Life written in Racket","archived":false,"fork":false,"pushed_at":"2017-04-21T15:44:14.000Z","size":96,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":2,"default_branch":"master","last_synced_at":"2025-08-04T10:04:42.142Z","etag":null,"topics":["conway-s-game-of-life","pbm","racket","slow"],"latest_commit_sha":null,"homepage":null,"language":"Racket","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/owainkenwayucl.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2017-04-17T14:42:28.000Z","updated_at":"2017-07-21T10:55:44.000Z","dependencies_parsed_at":null,"dependency_job_id":"c1c54adc-8733-434c-a841-b65e027d20c9","html_url":"https://github.com/owainkenwayucl/racket-life","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/owainkenwayucl/racket-life","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owainkenwayucl%2Fracket-life","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owainkenwayucl%2Fracket-life/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owainkenwayucl%2Fracket-life/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owainkenwayucl%2Fracket-life/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/owainkenwayucl","download_url":"https://codeload.github.com/owainkenwayucl/racket-life/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/owainkenwayucl%2Fracket-life/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29255374,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-09T01:52:29.835Z","status":"online","status_checked_at":"2026-02-09T02:00:09.501Z","response_time":56,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["conway-s-game-of-life","pbm","racket","slow"],"created_at":"2024-10-14T11:30:43.256Z","updated_at":"2026-02-09T03:01:32.032Z","avatar_url":"https://github.com/owainkenwayucl.png","language":"Racket","funding_links":[],"categories":[],"sub_categories":[],"readme":"# racket-life\n## Conway's Game of Life written in Racket\n\nThis is a (fairly bad given this is the first large Racket program I've written) implementation of Conway's Game of Life.\n\nIt may be run in two modes - file output (which dumps frames to PBM files) and console output which prints frames to the console.  It reads PBM files as input files.  An example PBM file is shown in `input/glider.pbm`.\n\n## Compiling\n\nTo compile the package, enter `make` in the top level directory of the project.\n\n## Console mode\n\nTo run the code in console mode, run `life` with two arguments - the input file and the number of steps, so for example:\n\n```\n$ ./life input/glider.pbm 3\nReading pbm:\n\nP1\n(8 8)\n0 0 0 0 0 0 0 0 \n0 0 0 1 0 0 0 0 \n0 1 0 1 0 0 0 0 \n0 0 1 1 0 0 0 0 \n0 0 0 0 0 0 0 0 \n0 0 0 0 0 0 0 0 \n0 0 0 0 0 0 0 0 \n0 0 0 0 0 0 0 0 \n\nDone.\n╭────────╮\n│........│\n│...o....│\n│.o.o....│\n│..oo....│\n│........│\n│........│\n│........│\n│........│\n╰────────╯\nPopulation: 5\n\n1:\n╭────────╮\n│........│\n│..o.....│\n│...oo...│\n│..oo....│\n│........│\n│........│\n│........│\n│........│\n╰────────╯\nPopulation: 5\n\n2:\n╭────────╮\n│........│\n│...o....│\n│....o...│\n│..ooo...│\n│........│\n│........│\n│........│\n│........│\n╰────────╯\nPopulation: 5\n\n3:\n╭────────╮\n│........│\n│........│\n│..o.o...│\n│...oo...│\n│...o....│\n│........│\n│........│\n│........│\n╰────────╯\nPopulation: 5\n$\n```\n\n## File mode:\n\nYou can invoke file mode by running `life` with three arguments as follows:\n\n```\n$ ./life input/glider.pbm 32 glideout\nReading pbm:\n\nP1\n(8 8)\n0 0 0 0 0 0 0 0 \n0 0 0 1 0 0 0 0 \n0 1 0 1 0 0 0 0 \n0 0 1 1 0 0 0 0 \n0 0 0 0 0 0 0 0 \n0 0 0 0 0 0 0 0 \n0 0 0 0 0 0 0 0 \n0 0 0 0 0 0 0 0 \n\nDone.\nStep: 0  Population: 5\nWriting PBM: glideout00.pbm Done.\nStep: 1  Population: 5\nWriting PBM: glideout01.pbm Done.\nStep: 2  Population: 5\nWriting PBM: glideout02.pbm Done.\nStep: 3  Population: 5\nWriting PBM: glideout03.pbm Done.\nStep: 4  Population: 5\nWriting PBM: glideout04.pbm Done.\nStep: 5  Population: 5\nWriting PBM: glideout05.pbm Done.\nStep: 6  Population: 5\nWriting PBM: glideout06.pbm Done.\nStep: 7  Population: 5\nWriting PBM: glideout07.pbm Done.\nStep: 8  Population: 5\nWriting PBM: glideout08.pbm Done.\nStep: 9  Population: 5\nWriting PBM: glideout09.pbm Done.\nStep: 10  Population: 5\nWriting PBM: glideout10.pbm Done.\nStep: 11  Population: 5\nWriting PBM: glideout11.pbm Done.\nStep: 12  Population: 5\nWriting PBM: glideout12.pbm Done.\nStep: 13  Population: 5\nWriting PBM: glideout13.pbm Done.\nStep: 14  Population: 5\nWriting PBM: glideout14.pbm Done.\nStep: 15  Population: 5\nWriting PBM: glideout15.pbm Done.\nStep: 16  Population: 5\nWriting PBM: glideout16.pbm Done.\nStep: 17  Population: 5\nWriting PBM: glideout17.pbm Done.\nStep: 18  Population: 5\nWriting PBM: glideout18.pbm Done.\nStep: 19  Population: 5\nWriting PBM: glideout19.pbm Done.\nStep: 20  Population: 5\nWriting PBM: glideout20.pbm Done.\nStep: 21  Population: 5\nWriting PBM: glideout21.pbm Done.\nStep: 22  Population: 5\nWriting PBM: glideout22.pbm Done.\nStep: 23  Population: 5\nWriting PBM: glideout23.pbm Done.\nStep: 24  Population: 5\nWriting PBM: glideout24.pbm Done.\nStep: 25  Population: 5\nWriting PBM: glideout25.pbm Done.\nStep: 26  Population: 5\nWriting PBM: glideout26.pbm Done.\nStep: 27  Population: 5\nWriting PBM: glideout27.pbm Done.\nStep: 28  Population: 5\nWriting PBM: glideout28.pbm Done.\nStep: 29  Population: 5\nWriting PBM: glideout29.pbm Done.\nStep: 30  Population: 5\nWriting PBM: glideout30.pbm Done.\nStep: 31  Population: 5\nWriting PBM: glideout31.pbm Done.\nStep: 32  Population: 5\nWriting PBM: glideout32.pbm Done.\nStep: 33  Population: 5\nWriting PBM: glideout33.pbm Done.\n$ \n```\n\nYou can then use a tool like ImageMagick to convert the frames into an animated gif:\n\n```\n$ convert -delay 50 -scale 64x64 glideout*.pbm -loop 0 glider.gif\n```\n\nThis will produce an animated gif like this:\n\n![example animation](images/glider.gif)\n\n\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowainkenwayucl%2Fracket-life","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fowainkenwayucl%2Fracket-life","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fowainkenwayucl%2Fracket-life/lists"}