Je betreedt een grote grot vol zeldzame bioluminescente dumbo octopussen1! Ze lijken de kerstverlichting op je onderzeeër niet leuk te vinden, dus zet je die voorlopig eventjes uit.
Er liggen 100 octopussen netjes gerangschikt in een 10 op 10 rooster. Elke octopus krijgt in de loop van de tijd langzaam energie en flitst kortstondig fel op wanneer zijn energie vol is. Hoewel je lichten uit zijn, zou je misschien door de grot kunnen navigeren zonder de octopussen te storen als je zou kunnen voorstellen wanneer de lichtflitsen zullen gebeuren.
Elke octopus heeft een energieniveau - je onderzeeër kan op afstand het energieniveau van elke octopus meten (de invoer van deze opgave). Bijvoorbeeld:
5483143223
2745854711
5264556173
6141336146
6357385478
4167524645
2176841721
6882881134
4846848554
5283751526
Het energieniveau van een octopus is een waarde tussen 0
en 9
. In dit voorbeeld heeft de octopus linksboven energieniveau 5
, de octopus rechtsonder heeft energieniveau 6
, enzoverder.
Je kunt de energieniveaus en lichtflitsen in stappen modelleren. Tijdens één enkele step gebeurt het volgende:
1
.9
. Dit verhoogt het energieniveau van alle aangrenzende octopussen met 1
, inclusief de diagonaal aangrenzende octopussen. Als hierdoor een octopus een energieniveau groten dan 9
krijgt, dan flitst die ook. Dit proces gaat door zolang er nieuwe octopussen zijn wiens energieniveau boven de 9
uitstijgt. (Een octopus kan maximaal één keer per stap flitsen.)0
, omdat hij al zijn energie gebruikte om te flitsen.Aangrenzende flitsen kunnen ervoor zorgen dat een octopus tijdens een stap flitst, zelfs al was hij die stap met weinig energie begonnen. Neem bijvoorbeeld de middelste octopus met energieniveau 1
in deze situatie:
Voor de eerste stap:
11111
19991
19191
19991
11111
Na stap 1:
34543
40004
50005
40004
34543
Na stap 2:
45654
51115
61116
51115
45654
Hierbij hebben we elke octopus die tijdens een stap geflitst heeft in het vet aangeduid.
Dit is hoe het grotere voorbeeld verloopt:
Voor de eerste stap:
5483143223
2745854711
5264556173
6141336146
6357385478
4167524645
2176841721
6882881134
4846848554
5283751526
Na stap 1:
6594254334
3856965822
6375667284
7252447257
7468496589
5278635756
3287952832
7993992245
5957959665
6394862637
Na stap 2:
8807476555
5089087054
8597889608
8485769600
8700908800
6600088989
6800005943
0000007456
9000000876
8700006848
Na stap 3:
0050900866
8500800575
9900000039
9700000041
9935080063
7712300000
7911250009
2211130000
0421125000
0021119000
Na stap 4:
2263031977
0923031697
0032221150
0041111163
0076191174
0053411122
0042361120
5532241122
1532247211
1132230211
Na stap 5:
4484144000
2044144000
2253333493
1152333274
1187303285
1164633233
1153472231
6643352233
2643358322
2243341322
Na stap 6:
5595255111
3155255222
3364444605
2263444496
2298414396
2275744344
2264583342
7754463344
3754469433
3354452433
Na stap 7:
6707366222
4377366333
4475555827
3496655709
3500625609
3509955566
3486694453
8865585555
4865580644
4465574644
Na stap 8:
7818477333
5488477444
5697666949
4608766830
4734946730
4740097688
6900007564
0000009666
8000004755
6800007755
Na stap 9:
9060000644
7800000976
6900000080
5840000082
5858000093
6962400000
8021250009
2221130009
9111128097
7911119976
Na stap 10:
0481112976
0031112009
0041112504
0081111406
0099111306
0093511233
0442361130
5532252350
0532250600
0032240000
Na 10 stappen zijn er in totaal 204
flitsen geweest. Als we doorspoelen, dan is dit de configuratie na elke 10 stappen:
Na stap 20:
3936556452
5686556806
4496555690
4448655580
4456865570
5680086577
7000009896
0000000344
6000000364
4600009543
Na stap 30:
0643334118
4253334611
3374333458
2225333337
2229333338
2276733333
2754574565
5544458511
9444447111
7944446119
Na stap 40:
6211111981
0421111119
0042111115
0003111115
0003111116
0065611111
0532351111
3322234597
2222222976
2222222762
Na stap 50:
9655556447
4865556805
4486555690
4458655580
4574865570
5700086566
6000009887
8000000533
6800000633
5680000538
Na stap 60:
2533334200
2743334640
2264333458
2225333337
2225333338
2287833333
3854573455
1854458611
1175447111
1115446111
Na stap 70:
8211111164
0421111166
0042111114
0004211115
0000211116
0065611111
0532351111
7322235117
5722223475
4572222754
Na stap 80:
1755555697
5965555609
4486555680
4458655580
4570865570
5700086566
7000008666
0000000990
0000000800
0000000000
Na stap 90:
7433333522
2643333522
2264333458
2226433337
2222433338
2287833333
2854573333
4854458333
3387779333
3333333333
Na stap 100:
0397666866
0749766918
0053976933
0004297822
0004229892
0053222877
0532222966
9322228966
7922286866
6789998766
Na 100 stappen zijn er in totaal 1656
flitsen geweest.
Simuleer 100 stappen, vertrekkende van de gegeven energieniveaus bij de start voor de dumbo-octopussen die in de grot liggen. Hoeveel flitsen zijn er na 100 stappen geweest? Bepaal dit op de volgende manier:
flashes
waaraan de padnaam (String
) moet doorgegeven worden van een tekstbestand dat het energieniveau bevat van elke octopus in een 10 op 10 rooster. De functie moet teruggeven hoeveel flitsen (Int
) er na 100 stappen geweest zijn.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden octopuses01.txt
2 en octopuses02.txt
3 zich in de huidige directory bevinden.
> flashes ("octopuses01.txt")
1656 :: Int
> flashes ("octopuses02.txt")
1739 :: Int
Jared Sprague (@caramelcode4) animeerde zijn oplossing.