Om een of andere reden komen jouw gesimuleerde resultaten niet overeen met wat de ingenieurs van de experimentele energiebron verwachtten. Blijkbaar bevinden de Conway Cubes zich in een vierdimensionale ruimte en geen driedimensionale.
Die ruimte is ingedeeld in een vierdimensionaal rooster. Op elke vierdimensionale gehele coördinaat (x,y,z,w
) staat er een kubus (eigenlijk een hyperkubus) die nog steeds ofwel actief of inactief is.
Elke kubus wordt enkel beïnvloed door zijn buren: elk van de 80 andere kubussen waarvan elk van de coördinaten maximaal 1
verschilt. De kubus op positie x=1,y=2,z=3,w=4
heeft bijvoorbeeld buren op positie x=2,y=2,z=3,w=3
, op positie x=0,y=2,z=3,w=4
, enzoverder.
De begintoestand van de Conway Cubes bestaat nog steeds uit een klein vlak gebied met kubussen. Bovendien zijn dezelfde regels voor het doorlopen van de cycli nog steeds van toepassing: houd tijdens elke cyclus rekening met het aantal actieve buren van elke kubus.
Neem bijvoorbeeld dezelfde begintoestand als in de vorige opgave. Ook al bevinden de Conway Cubes zich in een vierdimensionale ruimte, toch vertegenwoordigt deze begintoestand slechts een klein tweedimensionaal deel daarvan. (In het bijzonder definieert deze begintoestand een 3x3x1x1-gebied van de vierdimensionale ruimte.)
Het simuleren van een paar cycli vanuit deze begintoestand levert de volgende configuraties op, waarbij het resultaat van elke cyclus laag voor laag wordt weergegeven op elke gegeven z
- en w
-coördinaat:
Simulating a few cycles from this initial state produces the following configurations, where the result of each cycle is shown layer-by-layer at each given z
and w
coordinate:
Voor de eerste cyclus:
z=0, w=0
.#.
..#
###
Na 1 cyclus:
z=-1, w=-1
#..
..#
.#.
z=0, w=-1
#..
..#
.#.
z=1, w=-1
#..
..#
.#.
z=-1, w=0
#..
..#
.#.
z=0, w=0
#.#
.##
.#.
z=1, w=0
#..
..#
.#.
z=-1, w=1
#..
..#
.#.
z=0, w=1
#..
..#
.#.
z=1, w=1
#..
..#
.#.
Na 2 cycli:
z=-2, w=-2
.....
.....
..#..
.....
.....
z=-1, w=-2
.....
.....
.....
.....
.....
z=0, w=-2
###..
##.##
#...#
.#..#
.###.
z=1, w=-2
.....
.....
.....
.....
.....
z=2, w=-2
.....
.....
..#..
.....
.....
z=-2, w=-1
.....
.....
.....
.....
.....
z=-1, w=-1
.....
.....
.....
.....
.....
z=0, w=-1
.....
.....
.....
.....
.....
z=1, w=-1
.....
.....
.....
.....
.....
z=2, w=-1
.....
.....
.....
.....
.....
z=-2, w=0
###..
##.##
#...#
.#..#
.###.
z=-1, w=0
.....
.....
.....
.....
.....
z=0, w=0
.....
.....
.....
.....
.....
z=1, w=0
.....
.....
.....
.....
.....
z=2, w=0
###..
##.##
#...#
.#..#
.###.
z=-2, w=1
.....
.....
.....
.....
.....
z=-1, w=1
.....
.....
.....
.....
.....
z=0, w=1
.....
.....
.....
.....
.....
z=1, w=1
.....
.....
.....
.....
.....
z=2, w=1
.....
.....
.....
.....
.....
z=-2, w=2
.....
.....
..#..
.....
.....
z=-1, w=2
.....
.....
.....
.....
.....
z=0, w=2
###..
##.##
#...#
.#..#
.###.
z=1, w=2
.....
.....
.....
.....
.....
z=2, w=2
.....
.....
..#..
.....
.....
Nadat het volledige opstartproces van zes cycli is voltooid, bevinden er zich 848
kubussen in een actieve toestand.
Simuleer \(n\) cycli in een vierdimensionale ruimte, vertrekkend vanaf de gegeven begintoestand. Hoeveel kubussen bevinden zich in een actieve toestand na \(n\) cycli? Hiervoor ga je als volgt te werk:
activeCubes
waaraan twee argumenten moeten doorgegeven worden: i) de padnaam (String
) van een tekstbestand met de begintoestand van de Conway Cubes en ii) een getal \(n \in \mathbb{N}\) (Int
). De functie moet teruggeven hoeveel (Int
) kubussen er zich na \(n\) cycli in een actieve toestand bevinden.In deze interactieve sessie gaan we ervan uit dat het tekstbestand cubes.txt
1 zich in de huidige directory bevindt.
> activeCubes "cubes.txt" 0
5
> activeCubes "cubes.txt" 1
29
> activeCubes "cubes.txt" 2
60
> activeCubes "cubes.txt" 3
320
> activeCubes "cubes.txt" 4
188
> activeCubes "cubes.txt" 5
1056
> activeCubes "cubes.txt" 6
848