Je bent bijna 1,5km (bijna een mijl) onder het oppervlak van de oceaan. Zo diep dat je geen zonlicht meer kunt zien. Wat je echter wel kunt zien, is een reuzeninktvis die zich aan de buitenkant van je onderzeeër heeft vastgehecht.
Misschien wil het wel een spelletje bingo1 spelen?
Bingo wordt gespeeld op een reeks borden die elk bestaan uit een \(5 \times 5\) rooster met getallen. De getallen zijn willekeurig gekozen en een getal dat getrokken wordt, wordt gemarkeerd op alle borden waar dat getal voorkomt. (Getallen staan niet noodzakelijk op alle borden.) Als alle getallen op een rij of op een kolom van het bord gemarkeerd zijn, dan wint dat bord. (Diagonalen tellen niet mee.)
De onderzeeër heeft een bingo-subsysteem om passagiers (momenteel jij en de reuzeninktvis) te helpen om de tijd te doden. Het genereert automatisch een willekeurige volgorde waarin getallen getrokken worden, en een willekeurige set borden (de invoer van de opgave). Bijvoorbeeld:
7,4,9,5,11,17,23,2,0,14,21,24,10,16,13,6,15,25,12,22,18,20,8,19,3,26,1
22 13 17 11 0
8 2 23 4 24
21 9 14 16 7
6 10 3 18 5
1 12 20 15 19
3 15 0 2 22
9 18 13 17 5
19 8 7 25 23
20 11 10 24 4
14 21 16 12 6
14 21 17 24 4
10 16 15 9 19
18 8 23 26 20
22 11 13 6 5
2 0 12 3 7
Nadat de eerste vijf getallen getrokken zijn (7
, 4
, 9
, 5
, en 11
), zijn er nog geen winnaars, maar worden de borden als volgt gemarkeerd (hier naast elkaar weergegeven om plaats te besparen):
22 13 17 11 0 3 15 0 2 22 14 21 17 24 4
8 2 23 4 24 9 18 13 17 5 10 16 15 9 19
21 9 14 16 7 19 8 7 25 23 18 8 23 26 20
6 10 3 18 5 20 11 10 24 4 22 11 13 6 5
1 12 20 15 19 14 21 16 12 6 2 0 12 3 7
Nadat de volgende zes getallen getrokken zijn (17
, 23
, 2
, 0
, 14
, en 21
), zijn er nog altijd geen winnaars:
22 13 17 11 0 3 15 0 2 22 14 21 17 24 4
8 2 23 4 24 9 18 13 17 5 10 16 15 9 19
21 9 14 16 7 19 8 7 25 23 18 8 23 26 20
6 10 3 18 5 20 11 10 24 4 22 11 13 6 5
1 12 20 15 19 14 21 16 12 6 2 0 12 3 7
Ten slotte wordt het getal 24
getrokken:
22 13 17 11 0 3 15 0 2 22 14 21 17 24 4
8 2 23 4 24 9 18 13 17 5 10 16 15 9 19
21 9 14 16 7 19 8 7 25 23 18 8 23 26 20
6 10 3 18 5 20 11 10 24 4 22 11 13 6 5
1 12 20 15 19 14 21 16 12 6 2 0 12 3 7
Op dit moment wint het derde bord om het minstens één volledige rij of kolom met gemarkeerde getallen heeft (in dit geval is de bovenste rij volledig gemarkeerd: 14 21 17 24 4
).
Nu kan de score van het winnende bord berekend worden. Begin met de som van alle ongemarkeerde getallen op het bord te berekenen. In dit geval is de som 188
. Vermenigvuldig die som vervolgens met het getal dat zonet getrokken werd toen het bord won, 24
, om de eindscore te krijgen, \(188 \times 24 = 4512\).
Om je overwinning tegen de reuzeninktvis veilig te stellen, moet je uitzoeken wel bord als eerste zal winnen. Wat wordt je eindscore als je dat bord kiest? Bepaal dit op de volgende manier:
score
waaraan de padnaam (String
) moet doorgegeven worden van een tekstbestand dat een willekeurige volgorde waarin getallen getrokken worden, en een willekeurige set borden bevat. De functie moet de eindscore (Int
) van het winnende bord teruggeven.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden boards01.txt
2 en boards02.txt
3 zich in de huidige directory bevinden.
> score ("boards01.txt")
4512 :: Int
> score ("boards02.txt")
8580 :: Int