Conways Spiel des Lebens


Figur: Gleiter

Das Spiel des Lebens (engl. Conway's Game of Life) ist ein vom Mathematiker John Horton Conway 1970 entworfenes System, basierend auf einem zweidimensionalen zellulären Automaten. Es ist eine einfache und bis heute populäre Umsetzung der Automaten-Theorie von Stanisław Marcin Ulam.

Das Spielfeld

Das Spielfeld ist in Zeilen und Spalten unterteilt und im Idealfall unendlich groß. Jedes Gitterquadrat ist ein Zellulärer Automat (Zelle), der einen von zwei Zuständen einnehmen kann, welche oft als lebendig und tot bezeichnet werden. Zunächst wird eine Anfangsgeneration von lebenden Zellen auf dem Spielfeld platziert. Jede lebende oder tote Zelle hat auf diesem Spielfeld genau acht Nachbarzellen, die berücksichtigt werden (Moore-Nachbarschaft). Die nächste Generation ergibt sich durch die Befolgung einfacher Regeln.

Das Spiel kann manuell auf einem Stück Papier oder mit Computerhilfe simuliert werden. Da ein reales Spielfeld immer einen Rand hat, muss das Verhalten dort festgelegt werden. Man kann sich den Rand zum Beispiel durch tote Zellen belegt denken, so dass manche Gleiter ihre Bewegungsrichtung dort ändern. Eine andere Möglichkeit ist ein Torus-förmiges Spielfeld, bei dem alles, was das Spielfeld nach unten verlässt, oben wieder herauskommt und umgekehrt, und alles, was das Spielfeld nach links verlässt, rechts wieder eintritt und umgekehrt.

Alternativ kann man auch nur lebendige Zellen und ihre direkte Umgebung simulieren und bei Bedarf mehr Speicher allozieren, da große tote Flächen tot bleiben. So hat man zumindest ein quasi unendliches Feld.

Anstatt auf einer quadratisch gerasterten Ebene kann die Simulation auch auf einer sechseckig gerasterten Ebene erfolgen. Dann beträgt die maximale Zahl der Nachbarn nicht acht, sondern sechs. Es gibt auch dreidimensionale Game of Life-Simulationen.

Eine weitere Variationsmöglichkeit ist die Vergrößerung der möglichen diskreten Zustände einer Gitterzelle.

Die Spielregeln

Die Folgegeneration wird für alle Zellen gleichzeitig berechnet und ersetzt die aktuelle Generation. Der Zustand einer Zelle, lebendig oder tot, in der Folgegeneration hängt nur vom Zustand der acht Nachbarzellen dieser Zelle in der aktuellen Generation ab.

Die von Conway zu Anfang verwendeten Regeln sind:

  • Eine tote Zelle mit genau drei lebenden Nachbarn wird in der Folgegeneration neu geboren.
 
 
 
  • rot: Tote Zelle, die in der nächsten Generation geboren wird
  • grün: Lebende Nachbarn der Zelle
    • Lebende Zellen mit weniger als zwei lebenden Nachbarn sterben in der Folgegeneration an Einsamkeit.
     
     
     
    • Eine lebende Zelle mit zwei oder drei lebenden Nachbarn bleibt in der Folgegeneration lebend.
     
     
     
    • Lebende Zellen mit mehr als drei lebenden Nachbarn sterben in der Folgegeneration an Überbevölkerung.
     
     
     


  • magenta: Lebende Zelle, die betrachtet wird
  • grün: Lebende Nachbarn der Zelle
  • Mit diesen vier einfachen Regeln entsteht aus bestimmten Anfangsmustern im Laufe des Spiels eine Vielfalt komplexer Strukturen. Einige bleiben unverändert, andere oszillieren und wieder andere wachsen oder vergehen. Manche Strukturen, sogenannte Gleiter, bewegen sich auf dem Spielfeld fort. Sogar für logische Funktionen wie UND und ODER lassen sich Anfangsmuster finden. Damit können dann sogar komplexe elektronische Funktionen nachgebaut werden.

    Es existieren weitere Varianten des Game of Life, bei denen Conways Regeln geändert oder ergänzt werden. Beispiele sind im Abschnitt Abweichende Regeln aufgeführt.

    Sichtweisen

    Die Beschäftigung mit Game of Life kann unter verschiedenen Sichtweisen erfolgen, wie etwa:

    1. Das Verhalten als Gesamtes:
      Für einen Teil der Leute ist es interessant, was für ein Verhalten bestimmte Regelwelten aufweisen, zum Beispiel ob sie explodieren oder implodieren, ob sie langsam schrumpfen oder ob sie langsam „aushärten“.
    2. Der biologische Aspekt: Game of Life als Mikrokosmos:
      Für einen anderen Teil ist Game of Life wie der Blick in ein Mikroskop. Man beobachtet die kleinen Strukturen, die man abzählen und bewerten kann. Für diesen Typus ist es immer eine Freude, wenn eine neue „Lebensform“ auftaucht. Explodierende, expandierende oder gar „aushärtende“ Regelwelten sind hierbei uninteressant.
    3. Der chemische Aspekt: Energie und Materie:
      Wenn man die Häufigkeit, die Komplexität der Game-of-Life-Objekte mit dem Aufwand an Energie und Zwischenschritten vergleicht, die benötigt werden, um eine bestimmte chemische Verbindung zu erhalten, so kann man die unterschiedlichen Life-Objekte auf unterschiedliche energetische Niveaus setzen. Objekte, die bei jedem Ablauf vorkommen, wären dann auf dem Niveau von Wasser, Kohlenstoffdioxid und Natriumchlorid. Objekte, wie Unruhe(2) und Fontäne, wären dann beispielsweise auf einem Niveau wie Salzsäure und Natronlauge, und Objekte wie die Segler (LWSS, MWSS und HWSS), die auch zufällig entstehen können, wären schon auf dem Niveau relativ komplexer Verbindungen.
    4. Der physikalische Aspekt: Kräfte und Anfangswertproblem:
      Selbst die einfachsten physikalischen Gesetze können beliebig komplexes Verhalten als Gesamtes zeigen. Rein deterministisch/mechanisch können (beliebig) kleine Abweichungen der Startbedingung zu ganz unterschiedlichen Ergebnissen führen. Somit lässt sich ein Anfangswertproblem formulieren, worauf chaotisches Verhalten folgt. Es folgen Endzustände, Schwingungen, Wachstum, aber auch dauerhaft unregelmäßiges Verhalten.
    5. Game of Life als Automat:
      Es gibt den Typus des Game-of-Life-Interessierten, der hauptsächlich an der Konstruktion von Automaten interessiert ist, also solchen Strukturen, die wie eine Maschine oder Fabrik arbeiten. Es gibt einen Verband aus Strukturen, der entfernt Ähnlichkeit mit einem Rollfeld eines Flughafens hat, auf dem ständig Flugzeuge starten, und dazwischen die Fahrzeuge, die den Betrieb aufrechterhalten, zu ihren Stationen fahren.
    6. In der Theoretischen Informatik ist das Game of Life als Entscheidungsproblem interessant:
      Man kann zeigen, dass es keinen Algorithmus gibt, der als Eingabe zwei beliebige Game-of-Life-Konfigurationen erhält und in allen Fällen entscheiden kann, ob eine Konfiguration aus der anderen entstehen kann oder nicht. Diese Frage ist damit unentscheidbar.

    Die Objekte

    Auf dem Spielfeld zeigt sich mit jedem Generationsschritt eine Vielfalt komplexer Strukturen. Einige typische Objekte lassen sich aufgrund eventuell vorhandener besonderer Eigenschaften in Klassen einteilen: sie verschwinden, bleiben unverändert, verändern sich periodisch (oszillieren), bewegen sich auf dem Spielfeld fort, wachsen unaufhörlich usw.

    Statische Objekte

    Statische Objekte bilden eine Klasse von Objekten, die sich im Spielverlauf ohne äußere Einflüsse nicht mehr verändern, also "stabile Zellsysteme" darstellen.

    Beispiele für statische Objekte sind:

    stabile Objekte

    Oszillierende Objekte

    Hierbei handelt es sich um Objekte, die sich nach einem bestimmten Schema periodisch verändern, d. h. nach einer endlichen, festen Anzahl von Generationen wieder den Ausgangszustand erreichen.

    Die einfachste zyklische Konfiguration ist eine horizontale oder vertikale Reihe von drei lebenden Zellen. Beim horizontalen Fall wird direkt ober- und unterhalb der Zelle in der Mitte eine lebende Zelle geboren, während die äußeren beiden Zellen sterben; so erhält man eine vertikale Dreierreihe.

    Eine Reihe von zehn horizontal oder vertikal aneinander hängenden Zellen entwickelt sich sogar zu einem Objekt, das einen Zyklus von fünfzehn Generationen hat, dem Pulsator.

    Beispiele oszillierender Objekte sind:

    Blinker Unruhe(1) Unruhe(2) 0-Laser 2-Laser Pulsator Fontäne 2g3 z5.gif
    Name Blinker Uhr Kröte Bipole Tripole Fünfzehnkämpfer Tümmler Oktagon
    Zyklen 2 2 2 2 2 15 14 5

    Der Fünfzehnkämpfer wird im englischen, aufgrund eines Zyklus aus 15 Schritten, Pentadecathlon genannt und ist ein Gleiter-Fresser. Der Tümmler, auch Stehaufmännchen genannt, wird im englischen als Tumbler bezeichnet.

    Raumschiffe und Gleiter

    Raumschiffe sind (zumeist oszillierende) Objekte, die eine feste Wegstrecke zurücklegen. Sie sind ein Beispiel der Emergenz-Erscheinungen des Spiels des Lebens; die wenigen Regeln des Spiels sagen nichts über Formen aus, die sich unendlich weit fortbewegen, und doch entstehen die Raumschiffe wegen dieser Regeln. Man kann zwischen den diagonalen Raumschiffen (zum Beispiel Gleiter und Qualle) und den vertikalen bzw. horizontalen Raumschiffen (zum Beispiel Segler) unterscheiden.

    Beispiele für Raumschiffe sind:

    Gleiter Gleiter Gleiter Animation
    Segler(1) (LWSS) (Light-Weight Spaceship) lightweight spaceship
    Segler(2) (MWSS) (Middle-Weight Spaceship) midleweight spaceship
    Segler(3) (HWSS) (Heavy-Weight Spaceship) heavyweight spaceship
    drei Segler
    Ablauf einer Animation dieser drei Segler

    Puffer

    Die Puffer kann man zu den Raumschiffen zählen, wobei die Puffer im Gegensatz zu den Raumschiffen eine Spur von Objekten hinterlassen. Bei diesen Objekten kann es sich durchaus um andere komplexe Objekte, wie Gleiter oder Segler handeln.

    Andere Objekte

    Daneben gibt es noch Anfangskonfigurationen, die innerhalb endlicher Zeitschritte ein „leeres“ Spielfeld erzeugen. Ein gutes Beispiel hierfür ist folgendes Startmuster:

    Datei:Game of life U.JPG

    Das Muster erzeugt innerhalb von 54 Generationen eine leere Welt:

    Game of life U.gif

    Eine weitere Möglichkeit sind völlig chaotische oder „explodierende“ Muster. Das f-Pentomino (auch r-Pentomino genannt) bewirkt trotz seiner Einfachheit ein Wachstum, welches über 1102 Generationen chaotisch erscheint, bis das Spielfeld vom 1103. Schritt an eine oszillierende Struktur bildet. (Ausgenommen ein paar wegfliegende Gleiter. Das Beispiel zeigt ein begrenztes Feld, in dem alles außerhalb immer tot ist.)

    r-Pentomino
    Game of life f pent.gif

    Ein anderes solches Objekt ist die Zahl 42 (mit jeder Zahl auf 3 mal 5 Kästchen), die nach 350 Schritten einige statische und einige oszillierende Objekte sowie 6 Gleiter produziert.[1]

    Entwicklung aus einer zufälligen Anfangsbedingung

    Die folgende Animation zeigt die ersten 1500 Entwicklungsschritte auf einem 100×100 torusförmigen Spielfeld. Die Anfangskonfiguration ist zufällig mit 31,25 % lebenden Zellen. Jeder Zustand wird 0,1 Sekunden angezeigt. Jedes Pixel steht für genau eine Zelle.

    Game of life torus 100 100 1500.gif

    Conways Herausforderung

    Conway bot demjenigen einen Preis von 50 US-Dollar, der nachweisen konnte, dass mit Conways Spiel des Lebens unbegrenztes Wachstum möglich ist. Da für einen eindeutigen Beweis ein geordnetes Wachstum notwendig ist, waren die chaotischen explosionsartigen Vermehrungen ungeeignet.

    Die erste Lösung für dieses Problem – eine so genannte Gleiterkanone, die in regelmäßigen Abständen einen Gleiter hervorbringt – wurde 1970 von dem amerikanischen Mathematiker Bill Gosper präsentiert. Der Gleiter erzeugt innerhalb von vier Generationen eine verschobene Kopie von sich selbst, und somit kann die Kanone an derselben Stelle den nächsten Gleiter erzeugen.

    Es ist möglich, aus Kollisionen von Gleitern eine Gleiterkanone zu erzeugen. Damit kann die Bewegungsrichtung der Gleiter geändert werden, und es besteht die theoretische Möglichkeit, selbstreplizierende Automaten zu konstruieren.

    GOSPERs Gleiterkanone mit Gleiter-Fresser

    In der oberen Bildhälfte befindet sich die Gleiter-Kanone, die in 30 Generationen einmal pulsiert und dabei einen Gleiter erzeugt. Im rechten, unteren Teil des Bildes befindet sich der Gleiter-Fresser, der in 15 Generationen einmal pulsiert und bei jeder zweiten Pulsation einen Gleiter zerstört. Die Gleiter bewegen sich von der Bildmitte nach rechts unten. Links unten läuft der Generationen-Zähler mit. In der Bildbeschreibung befinden sich Links zu dem die Animation erzeugenden GW-BASIC-Programm und zu den Startdaten.

    Mittlerweile wurden unüberschaubar viele Konstellationen gefunden, die ähnlich wie die einfache Gleiterkanone laufend Zellen produzieren. Neben Gleitern und verschiedenen Seglern sind sogar komplexe Kanonen gefunden worden, die selbst Gleiterkanonen „feuern“. Zusammen mit anderen nützlichen Gebilden, wie sich fortbewegende Kanonen, Gleiter-Reflektoren oder Relays (Gebilde, die etwa Gleiter für einige Generationen bremsen), bilden sie Werkzeuge für das Entwerfen komplexer Automaten wie etwa der Turingmaschine. Es ist somit bewiesen, dass Conway’s Game of Life Turing-vollständig ist.[2]

    Im Jahr 2012 wurde erstmalig eine Konstellation vorgestellt, die in der Lage war, ein Spielfeld zu simulieren, das den Regeln von Conways Spiel des Lebens entsprach (Selbstsimulation).[3][4]

    Abweichende Regeln

    Kopierwelt
    Zyklus 112

    Man kann sich abweichende Regeln zum klassischen „Game of Life“ vorstellen. Das folgende Regelwerk definiert beispielsweise ein sich reproduzierendes System, eine Kopierwelt.

    • Todes-Regel: Eine Zelle mit genau 0, 2, 4, 6 oder 8 Nachbarn stirbt.
    • Geburts-Regel: 1, 3, 5 oder 7 lebende Nachbarn erzeugen (oder erhalten) eine lebende Zelle.

    Wenn man in dieser Kopier-Welt eine Struktur in Form des Buchstaben H zeichnet, so werden lauter identische H-Buchstaben erzeugt.

    Bei größeren Ausgangsmustern sorgt dieses Regelwerk sogar selbständig für ein Auseinanderrücken der vorher kollidierenden Kopien.

    Die Kopien der Ausgangsmuster treten bei Zyklennummern auf, die ein Vielfaches von 4 sind.

    Bei größeren Ausgangsmustern treten sie aber nicht bei jedem Vielfachen von 4 auf.

    Um sich beim Vergleich verschiedener Regelwerke eine umständliche Umschreibung der Regeln zu ersparen, existiert eine Kurzschreibweise für die Regeln von Game of Life: Man setzt zunächst (in aufsteigender Reihenfolge) die Ziffern der Anzahl von Nachbarn aneinander, bei der eine Zelle überlebt, und anschließend, durch einen Schrägstrich abgetrennt, die Ziffern, die den Werten entsprechen, bei der eine Zelle geboren wird.

    Die klassische Conway-Welt wird durch 23/3 beschrieben, die oben beschriebene Kopierwelt durch 1357/1357.

    Es wurden auch Regeln für mehrdimensionale Räume entwickelt. Hier entstehen aber natürlich Darstellungsprobleme.

    Sehr dicht an das Verhalten nach dem klassische 23/3-Regelwerk von Conway (zwei oder drei Nachbarn erhalten eine Zelle, drei Nachbarn erzeugen eine neue Zelle) kommen die Regelwerke 34/3 und 35/3.

    Die Anzahl aller möglichen Regelwerke ergibt sich aus der Anzahl der Möglichkeiten, Ziffern zwischen 0 und 8 vor und nach dem Schrägstrich auszuwählen. Insgesamt sind daher $ {2^{9}}\cdot {2^{9}}=2^{18}=262144 $ Regelwerke denkbar, von denen die meisten jedoch uninteressant sind. Einige der interessanteren werden im Folgenden beschrieben.

    Die 3/3-Welt

    Statische Objekte: Bisher eines, nämlich der schon erwähnte 2*2-Block:

    Quadro.PNG
    Quadro

    Der der Conway-Welt zugeschriebene Block ist tatsächlich ein 3/3-Objekt, denn jede Zelle dieses Blocks hat 3 Nachbarn, und darum ist die Zwei-Nachbarn-Regel uninteressant.

    In der 3/3-Welt gibt es zum Beispiel diese oszillierenden Objekte:

    G3 pedal.gif G3 kegel.gif G3 unruhe.gif G3 strudel.gif
    Pedal Kegel Unruhe(1) Strudel

    Alle diese Objekte außer Unruhe(1) funktionieren auch in allen möglichen Variationen von Regelwelten bis 345678/3, also auch in den 34/3- und 35/3-Regelwelten. Unruhe(1) funktioniert in allen Variationen, in denen 3/3 enthalten ist und 0/0124 nicht, und damit auch in der Conway-Welt (23/3). Solche Objekte kann man als Wanderer bezeichnen.

    Die meisten Objekte können in dieser Regelwelt allerdings nicht überleben, so dass sich das Spielfeld bei zufälligen Startbedingungen meistens innerhalb von ein paar wenigen Generationen bis auf ein paar wenige Teile komplett leert.

    Die 13/3-Welt

    Dies ist eine Regelwelt mit wenigen oszillierenden Objekten. Die meisten Objekte sind "verkrüppelt".

    Wenigstens die drei folgenden, oszillierenden Objekte gibt es:

    1g3 pingpong.gif 1g3 o 02.gif
    Pingpong O1G3(2) (Zweites oszillierendes Objekt in der 1G3-Welt, auch als O13-3(2) schreibbar)
    PG 13G3.gif
    Pseudo-Gleiter

    Als eine Variante der 13/3-Regelwelt kann man die 135/35-Regelwelt betrachten.

    Die 34/3-Welt

    Oszillierende Objekte der 34/3-Welt:

    4g3 strange.gif 4g3 frog.gif 4g3 o 03.gif 4g3 o 04.gif G3 pedal.gif G3 kegel.gif G3 unruhe.gif G3 strudel.gif
    Strange Frosch O4G3(3) O4G3(4) Pedal Kegel Unruhe(1) Strudel

    Neben Strange und Frosch kommen auch die 3/3-Objekte Pedal, Kegel, Unruhe(1) und Strudel vor.

    Die 35/3-Welt

    In der 35/3-Welt gibt es zum Beispiel diese drei sich bewegenden Objekte:

    GOL 35 3 schwimmer.gif
    Schwimmer(1) und Schwimmer(2)
    Segler 5g3.gif
    35/3-Segler

    Ebenso wie in der 34/3-Regelwelt kommen die oszillierenden Objekte Pedal, Kegel, Unruhe(1) und Strudel in der 35/3-Regelwelt vor.

    Die 2/3-Welt

    Diese Regelwelt hätte eigentlich an die erste Stelle gehört, da sie ein wichtiges, oszillierendes Objekt enthält, das eigentlich der 23/3-Welt, also Conways Life zugeordnet wird, zu der es kompatibel ist:

    2-3 O1.gif 2-3 unruhe.gif
    O2-3(1) Unruhe(2)

    Damit existieren wenigstens drei oszillierende Objekte, inklusive Unruhe(1), die fälschlicherweise exklusiv Conway's Game of Life (23/3) zugeordnet werden.

    Die 24/3-Welt

    statische Objekte:

    Convay17615160.gif SDL 24G3 Stat1.Gif

    oszillierende Objekte:

    24 3 3.gif 24 3 1.gif 24 3 2.gif O 24-3 4.gif 24 3 5.gif
    O24-3(1) O24-3(3) Seegurke O24-3(4)

    Die 245/3-Welt

    Neben den oszillierenden Objekten, die auch in der 24/3-Regelwelt vorkommen, existieren hier auch noch ein paar andere oszillierende Objekte:

    245-3 O1.gif 245-3 O2.gif
    O245-3(1) O245-3(2)

    Das besondere aber ist das Vorkommen eines sich bewegenden 7-Zyklen-Objekts, das in seiner Art der Bewegung einer Qualle ähnelt:

    245-3 qualle.gif
    Qualle

    Die 125/36-Welt

    In der 125/36-Regelwelt existieren diese beiden oszillierenden Strukturen:

    125-36 o1.gif 125-36 o2.gif
    O125-36(1) O125-36(2)

    Antiwelten

    Zu jeder Regelwelt gibt es eine Antiregelwelt, in der Form, dass alles invertiert ist. Also alle Zellen, die sonst tot sind, leben, und alle Zellen, die sonst leben, sind tot. Dies zeigt sich im Ablauf durch ein schwarzes Feld, auf dem die Strukturen weiß sind.

    Um eine solche Antiregelwelt zu erzeugen, kann man die Regeln in Form eines Schalterfeldes darstellen:

    0 1 2 3 4 5 6 7 8
    G                  
    T                  
    • G steht für Geburt.
    • T steht für Tod.

    Die folgende Belegung bedeutet, dass bei drei Nachbarn eine tote Zelle lebendig wird und eine lebende Zelle bei keinem oder einem sowie bei vier bis acht Nachbarn stirbt und ansonsten der Zustand einer Zelle unangetastet bleibt:

    Conway-Regeln
    0 1 2 3 4 5 6 7 8
    G                  
    T                  

    Wenn man die Zustände des Schalterfelds um 180° rotiert (nicht spiegelt oder kippt), erhält man die Antiregeln:

    Anti-Conway-Regeln
    0 1 2 3 4 5 6 7 8
    G                  
    T                  

    Alternative Regel-Bezeichnung

    Regel-Bezeichnung Kommentar
    3/3 G3
    13/3 1G3
    23/3 2G3 Conways Original-Game of Life
    34/3 4G3
    35/3 5G3
    236/3 26G3 explodierend, teilweise mit den Strukturen aus 23/3
    135/35 1G35 erweitertes 13/3
    12345/3 1245G3 eine Welt, in der ein sich ausbreitendes, labyrinthartiges Muster entsteht
    1357/1357 G1357 ein Kopiersystem, wobei sich aus einfachen kleinen Strukturen komplexe Muster entwickeln können
    24/35
    0123/01234 eine blinkende Fleckenwelt
    Anti-Regeln Kommentar
    01234678/0123478 6G0123478 Anti-Conway
    01234678/0123678 4G0123678 Anti-4G3
    02468/02468 G02468 Anti-Kopiersystem


    Ineinander übergehende Regelwelten

    Denkbar sind "Game of Life"-Simulationen, bei denen abgegrenzte Bereiche (zum Beispiel linke und rechte Seite) jeweils einer anderen Regelwelt unterzogen werden. Dabei könnte man sich bewegende Wanderer, die in beiden Regelwelten existieren können, aufspüren.

    Beispielimplementierung in Haskell

    Eine Beispielimplementierung in Haskell benötigt ca. 30 Zeilen: <syntaxhighlight lang="haskell"> module Main where import Data.List (intersect) import Control.Concurrent (threadDelay) type Coordinate = (Int, Int) data Board = Board { aliveSpaces :: [(Int, Int)], xVal :: Int, yVal :: Int} main :: IO () main = life (Board ([(1,0),(2,1),(0,2),(1,2),(2,2)]++

           [(x,15)|x <- [41..50],x/=43,x/=49]++[(x,10) | x <- [10..13]]++
           [(x,y) |x<- [43,49], y <- [14,16]]) 80 23)
    

    life :: Board -> IO () life b = putStr "\ESC[2J" >> print b >> threadDelay 25 >> life (nextStage b)

    instance Show Board where

    show b = let lat =  x <- [0..xVal b -1 | y <- [0..yVal b -1]] 
                 showSpace b s | s `elem` aliveSpaces b = 'O'
                               | otherwise = ' ' in
                 unlines (map (map (showSpace b)) lat) 
    

    ns :: Board -> Coordinate -> [Coordinate] ns b t@(i,j) = let o = [(a,b) | a <- [i-1..i+1], b <- [j-1..j+1], (a,b) /= t] in

     intersect (map (\(x,y) -> (x `mod` xVal b, y `mod` yVal b)) o) (aliveSpaces b)
    

    nextStage :: Board -> Board nextStage b = let lat = [(x,y) | x <- [0..xVal b -1], y <- [0..yVal b -1]]

                     wba b s | length (ns b s) == 2 = s `elem` aliveSpaces b
                             | length (ns b s) == 3 = True
                             | otherwise = False in
             Board (filter (wba b) lat) (xVal b) (yVal b)
    

    </syntaxhighlight>

    Siehe auch

    Das Hacker-Emblem nach Eric Steven Raymond ist der Gleiter aus Conways Game of Life.

    Einzelnachweise

    Weblinks

    Commons: Game of Life – Album mit Bildern, Videos und Audiodateien

    Simulationen

    Java- und JavaScript-Applikationen

    Die News der letzten Tage