Terwijl je vlucht langzaam door de lucht zweeft, nemen de Elfen van het Mythical Information Bureau op de Noordpool contact met je op. Ze willen wat hulp bij het opsporen van fouten in een defecte experimentele energiebron aan boord van één van hun supergeheime beeldsatellieten.

De experimentele energiebron is gebaseerd op de allernieuwste technologie: een reeks Conway Cubes in zakformaat! Als je hoort dat er problemen zijn, kan je niet anders dan instemmen om er eens naar te kijken.

De Conway Cubes bevinden zich in een oneindig driedimensionaal rooster. Op elke driedimensionale gehele coördinaat (x,y,z) staat er een kubus die actief of inactief is.

In de begintoestand van de Conway Cubes zijn bijna alle kubussen inactief. De enige uitzondering hierop is een klein vlak gebied met kubussen (de invoer van deze opgave). De kubussen in dit gebied beginnen in de opgegeven actieve (#) of inactieve (.) toestand.

De energiebron start vervolgens op door zes cycli uit te voeren.

Elke kubus wordt enkel beïnvloed door zijn buren: elk van de 26 andere kubussen waarvan elk van de coördinaten maximaal 1 verschilt. De kubus op positie x=1,y=2,z=3 heeft bijvoorbeeld buren op positie x=2,y=2,z=2, op positie x=0,y=2,z=3, enzoverder.

Tijdens één cyclus veranderen alle kubussen tegelijkertijd van toestand volgens de volgende regels:

De ingenieurs die verantwoordelijk zijn voor deze experimentele energiebron willen dat je de Conway Cubes opstelling simuleert en bepaalt wat de configuratie van de kubussen zal zijn aan het einde van het opstartproces van zes cycli.

Stel dat we bijvoorbeeld de volgende begintoestand zouden hebben:

.#.
..#
###

Ook al bevinden de Conway Cubes zich in een driedimensionale ruimte, toch vertegenwoordigt deze begintoestand slechts een klein tweedimensionaal deel daarvan. (In het bijzonder definieert deze begintoestand een 3x3x1-gebied van de driedimensionale 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-coördinaat (en het beeldkader volgt de actieve cellen in elke cyclus):

Voor de eerste cyclus:

z=0
.#.
..#
###


Na 1 cyclus:

z=-1
#..
..#
.#.

z=0
#.#
.##
.#.

z=1
#..
..#
.#.


Na 2 cycli:

z=-2
.....
.....
..#..
.....
.....

z=-1
..#..
.#..#
....#
.#...
.....

z=0
##...
##...
#....
....#
.###.

z=1
..#..
.#..#
....#
.#...
.....

z=2
.....
.....
..#..
.....
.....


Na 3 cycli:

z=-2
.......
.......
..##...
..###..
.......
.......
.......

z=-1
..#....
...#...
#......
.....##
.#...#.
..#.#..
...#...

z=0
...#...
.......
#......
.......
.....##
.##.#..
...#...

z=1
..#....
...#...
#......
.....##
.#...#.
..#.#..
...#...

z=2
.......
.......
..##...
..###..
.......
.......
.......

Nadat het volledige opstartproces van zes cycli is voltooid, bevinden er zich 112 kubussen in een actieve toestand.

Opgave

Simuleer \(n\) cycli, vertrekkend vanaf de gegeven begintoestand. Hoeveel kubussen bevinden zich in een actieve toestand na \(n\) cycli? Hiervoor ga je als volgt te werk:

Voorbeeld

In deze interactieve sessie gaan we ervan uit dat het tekstbestand cubes.txt1 zich in de huidige directory bevindt.

>>> active_cubes('cubes.txt')
5
>>> active_cubes('cubes.txt', 1)
11
>>> active_cubes('cubes.txt', 2)
21
>>> active_cubes('cubes.txt', 3)
38
>>> active_cubes('cubes.txt', 4)
58
>>> active_cubes('cubes.txt', 5)
101
>>> active_cubes('cubes.txt', 6)
112