Je vliegtuig landt ruim op tijd. Het laatste deel van de reis verloopt met een veerboot die rechtstreeks naar het tropisch eiland gaat. Daar kan je vakantie eindelijk beginnen. Als je de wachtruimte bereikt om aan boord van de veerboot te stappen, besef je dat je zo vroeg bent dat er nog niemand is aangekomen!

Door het proces te simuleren dat mensen gebruiken om hun stoel in de wachtruimte te kiezen (of te verlaten), weet je vrij zeker dat je de beste zitplaats kunt voorspellen. Je maakt snel een plattegrond met de opstelling van de stoelen (de invoer van deze opgave).

De opstelling van de stoelen past netjes op een rooster. Daarin is elke positie ofwel grond (.), een lege stoel (L) of een bezette stoel (#). De beginopstelling van de stoelen kan er bijvoorbeeld als volgt uitzien:

L.LL.LL.LL
LLLLLLL.LL
L.L.L..L..
LLLL.LL.LL
L.LL.LL.LL
L.LLLLL.LL
..L.L.....
LLLLLLLLLL
L.LLLLLL.L
L.LLLLL.LL

Nu hoef je alleen nog maar te simuleren hoe de mensen binnenkort zullen binnenkomen. Gelukkig zijn mensen zeer voorspelbaar en volgen ze altijd eenvoudige regels. Al hun beslissingen zijn gebaseerd op het aantal bezette stoelen naast een bepaalde stoel (één van de acht posities direct omhoog, omlaag, links, rechts of diagnaal vanaf de stoel). De volgende regels worden tegelijkertijd op elke stoel toegepast:

Grond (.) verandert nooit. Stoelen bewegen niet en er zit nooit iemand op de grond.

Na één ronde van deze regels, wordt elke stoel in de voorbeeldopstelling bezet:

#.##.##.##
#######.##
#.#.#..#..
####.##.##
#.##.##.##
#.#####.##
..#.#.....
##########
#.######.#
#.#####.##

Na een tweede ronde, worden de stoelen met vier of meer bezette aangrenzende stoelen weer leeg:

#.LL.L#.##
#LLLLLL.L#
L.L.L..L..
#LLL.LL.L#
#.LL.LL.LL
#.LLLL#.##
..L.L.....
#LLLLLLLL#
#.LLLLLL.L
#.#LLLL.##

Dit proces gaat nog drie rondes door:

#.##.L#.##
#L###LL.L#
L.#.#..#..
#L##.##.L#
#.##.LL.LL
#.###L#.##
..#.#.....
#L######L#
#.LL###L.L
#.#L###.##
#.#L.L#.##
#LLL#LL.L#
L.L.L..#..
#LLL.##.L#
#.LL.LL.LL
#.LL#L#.##
..L.L.....
#L#LLLL#L#
#.LLLLLL.L
#.#L#L#.##
#.#L.L#.##
#LLL#LL.L#
L.#.L..#..
#L##.##.L#
#.#L.LL.LL
#.#L#L#.##
..L.L.....
#L#L##L#L#
#.LLLLLL.L
#.#L#L#.##

Op dit punt gebeurt er iets interessants: de chaos stabiliseert en verdere toepassing van de regels zorgt ervoor dat er geen enkele stoel meer van toestand verandert! Zodra mensen stoppen met bewegen, tel je 37 bezette stoelen.

Opgave

Simuleer de wachtruimte door de regels om op de stoelen te gaan zitten herhaaldelijk toe te passen, totdat geen enkele stoel nog van toestand verandert. Hoeveel stoelen zijn er dan bezet? Hiervoor ga je als volgt te werk:

Voorbeeld

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

> occupiedSeats "layout.txt"
37