Je bereikt een ander vulkanisch actief deel van de grot. Het zou leuk zijn als je een thermisch beeld zou kunnen maken, zodat je van tevoren kunt zien welke grotten te heet zijn om veilig te betreden.
Gelukkig blijkt je onderzeeër uitgerust te zijn met een thermische camera! Wanneer je die activeert, wordt je begroet met:
Gefeliciteerd met uw aankoop! Voer alstublieft de code in die U vindt op
pagina 1 van de handleiding om deze infrarood thermische camera te activeren.
Blijkbaar hebben de Elfen deze camera nog nooit gebruikt. Tot je verbazing weet je de handleiding te vinden. Als je die opent, valt pagina 1 eruit. Het is een groot vel transparant papier1! Het transparant papier staat vol met willekeurig geplaatste stippen en bevat instructies om het op te vouwen (de invoer van deze opgave). Bijvoorbeeld:
6,10
0,14
9,10
0,3
10,4
4,11
6,0
6,12
4,1
0,13
10,12
3,4
3,0
8,4
1,10
2,14
8,10
9,0
fold along y=7
fold along x=5
Het eerste deel is een lijst met stippen op het transparante papier. 0,0
stelt de coördinaat van de linkerbovenhoek voor. De eerste waarde, x
, neemt naar rechts toe. De tweede waarde, y
, neemt naar beneden toe. Dus ligt de coördinaat 3,0
rechts van 0,0
, en de coördinaat 0,7
ligt onder 0,0
. De coördinaten in dit voorbeeld vormen het volgende patroon, waarbij #
een stip voorstelt op het papier en .
een lege, niet gemarkeerde positie:
...#..#..#.
....#......
...........
#..........
...#....#.#
...........
...........
...........
...........
...........
.#....#.##.
....#......
......#...#
#..........
#.#........
Daarna volgt er een lijst van vouwinstructies. Elke instructie geeft een lijn op het transparante papier aan, en wil dat je ofwel het paper omhoog vouwt (over de horizontale lijn y=...
) of naar links (over de verticale lijn x=...
). In dit eerste voorbeeld is de eerste vouwinstructie fold along y=7
, wat de lijn aangeeft die gevormd wordt door alle posities waarvoor y
gelijk is aan 7
(hier aangeduid met -
):
...#..#..#.
....#......
...........
#..........
...#....#.#
...........
...........
-----------
...........
...........
.#....#.##.
....#......
......#...#
#..........
#.#........
Omdat dit een horizontale lijn is, vouw je de onderste helft omhoog. Sommige stippen kunnen elkaar overlappen nadat je het papier gevouwen hebt, maar stippen zullen nooit precies op een vouwlijn liggen. Na het vouwen ziet het transparante papier er als volgt uit:
#.##..#..#.
#...#......
......#...#
#...#......
.#.#..#.###
...........
...........
Nu zijn er nog slechts 17
stippen zichtbaar.
Merk bijvoorbeeld op dat de twee stippen in de linkerbenedenhoek voordat het transparante papier gevouwen wordt, na het vouwen in de linkerbovenhoek verschijnen (op posities 0,0
en 0,1
). Omdat het papier transparant is, blijft de stip er net onder (op positie 0,3
) na het vouwen ook zichtbaar, omdat die door het transparante papier heen kan gezien worden.
Merk ook op dat sommige stippen na het vouwen kunnen overlappen. In dat geval smelten de stippen samen en worden ze één enkele stip.
De tweede vouwinstructie is fold along x=5
, waardoor we langs deze lijn vouwen:
#.##.|#..#.
#...#|.....
.....|#...#
#...#|.....
.#.#.|#.###
.....|.....
.....|.....
Omdat dit een verticale lijn is, vouwen we naar links.
#####
#...#
#...#
#...#
#####
.....
.....
De vouwinstructies hebben een vierkant opgeleverd!
Het transparante papier is behoorlijk groot, dus concentreer je je voorlopig op het uitvoeren van de eerste vouwinstructie. Na een eerste keer vouwen, zijn er in het voorgaande voorbeeld nog 17
stippen zichtbaar - stippen die elkaar overlappen na het vouwen, tellen als één enkele stip.
Hoeveel stippen zijn er zichtbaar op het transparante papier, nadat je een eerste keer gevouwen hebt? Bepaal dit op de volgende manier:
dots
waaraan de padnaam (String
) moet doorgegeven worden van een tekstbestand met daarin een lijst met stippen op een transparant vel papier, gevolgd door een lege regel en een lijst met vouwinstructies. De functie moet teruggeven hoeveel stippen (Int
) er zichtbaar zijn op het transparante papier, nadat je een eerste keer gevouwen hebt.In deze interactieve sessie gaan we ervan uit dat de tekstbestanden paper01.txt
2 en paper02.txt
3 zich in de huidige directory bevinden.
> dots ("paper01.txt")
17 :: Int
> dots ("paper02.txt")
716 :: Int