For some reason, your simulated results don’t match what the experimental energy source engineers expected. Apparently, the pocket dimension actually has four spatial dimensions, not three.
The pocket dimension contains an infinite 4-dimensional grid. At every integer 4-dimensional coordinate (x,y,z,w
), there exists a single cube (really, a hypercube) which is still either active or inactive.
Each cube only ever considers its neighbors: any of the 80 other cubes where any of their coordinates differ by at most 1
. For example, given the cube at x=1,y=2,z=3,w=4
, its neighbors include the cube at x=2,y=2,z=3,w=3
, the cube at x=0,y=2,z=3,w=4
, and so on.
The initial state of the pocket dimension still consists of a small flat region of cubes. Furthermore, the same rules for cycle updating still apply: during each cycle, consider the number of active neighbors of each cube.
For example, consider the same initial state as in the example above. Even though the pocket dimension is 4-dimensional, this initial state represents a small 2-dimensional slice of it. (In particular, this initial state defines a 3x3x1x1 region of the 4-dimensional space.)
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:
Before any cycles:
z=0, w=0
.#.
..#
###
After 1 cycle:
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
#..
..#
.#.
After 2 cycles:
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
.....
.....
..#..
.....
.....
After the full six-cycle boot process completes, 848
cubes are left in the active state.
Starting with your given initial configuration, simulate \(n\) cycles in a 4-dimensional space. How many cubes are left in the active state after \(n\) cycles? Determine this in the following way:
activeCubes
that takes two arguments: i) the pathname (String
) of a text file containing the initial state of a pocket dimension and ii) a number \(n \in \mathbb{N}\) (Int
). The function must return how many cubes (Int
) are left in the active state after \(n\) cycles.In this interactive session we assume the text file cubes.txt
1 to be located in the current directory.
> 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