We hebben een afbeelding verknipt in smalle verticale stroken. Deze afbeeldingsstroken bevinden zich ergens op het Internet, elk met hun eigen URL (uniform resource locator1). Je opdracht (should you decide to accept it) bestaat erin de URLs van de afbeeldingsstroken te achterhalen en er de originele afbeelding mee te reconstrueren.

De URLs van de afbeeldingsstroken werden verborgen in een apache logbestand (de open source apache webserver is de meest gebruikte server op het Internet). Onderstaand voorbeeld geeft aan hoe de informatie in een apache logbestand er uitziet:

212.77.55.128 - - [06/Feb/2010:00:24:35 -0700] "GET spoj/problems/puzzel/eukuk-ruwpbl.jpg HTTP/1.1" 404 493104 "-" "googlebot-mscrawl-moma (enterprise; bar-XYZ; foo123@google.com,foo123@google.com,foo123@google.com,foo123@google.com)"
128.34.153.184 - - [06/Feb/2010:00:26:12 -0700] "GET uypys/bclkvy/tgtquo-rds-zmcps HTTP/1.0" 301 858367 "-" "Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6; Google-TR-5.1.706.29690-en) Gecko/20070725 Firefox/2.0.0.6"
163.196.162.170 - - [06/Feb/2010:00:33:25 -0700] "GET spoj/problems/puzzel/jwbsb-zcckx.jpg HTTP/1.0" 200 453671 "-" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.1) Gecko/20060111 Firefox/1.5.0.1"
174.76.115.140 - - [06/Feb/2010:00:36:17 -0700] "GET spoj/problems/puzzel/omkzx-idk.jpg HTTP/1.1" 200 855063 "-" "googlebot-mscrawl-moma (enterprise; bar-XYZ; foo123@google.com,foo123@google.com,foo123@google.com,foo123@google.com)"
5.254.189.77 - - [06/Feb/2010:00:46:03 -0700] "GET bgcic/cdx/nqegmo/pzdvszjanh-jhqbj-fxqbfw-wzb HTTP/1.0" 200 320132 "-" "Mozilla/5.0 (Macintosh; U; PPC Mac OS X Mach-O; en-US; rv:1.8.0.1; Google-TR-3) Gecko/20060111 Firefox/1.5.0.1"

De eerste reeks getallen stelt het IP-adres2 voor van de computer die een vraag heeft gericht aan de webserver. Het deel "GET pad HTTP" is voor ons het meest interessant, omdat daarin het pad voorkomt van de URL waarvoor een vraag gericht werd aan de webserver. Dit pad bevat zelf nooit spaties, en wordt gescheiden van GET en HTTP door spaties.

In het logbestand hebben de afbeeldingsstroken een padnaam die de term puzzel bevat. URLs die meerdere keren voorkomen, moeten ontdubbeld worden. De bestandsnaam van elke afbeeldingsstrook bevat één of meer koppeltekens (-). De afbeeldingsstroken moeten alfabetisch gerangschikt worden op basis van het gedeelte na het laatste koppelteken. Hierbij mag geen onderscheid gemaakt worden tussen hoofdletters en kleine letters. De sorteersleutel van de URL op de eerste regel in het voorbeeld apache bestand is dan bijvoorbeeld ruwbpl.jpg.

Opgave

Schrijf een functie puzzelstukken waaraan de locatie van een logbestand als argument moet doorgegeven worden. In dat logbestand zitten de stroken van een afbeelding verborgen. De functie moet een lijst met de URLs van de afbeeldingsstroken teruggeven, ontdubbeld en gesorteerd volgens de sleutel zoals die hierboven werd besproken.

Opmerking: Bij wijze van controle krijg je bij de feedback ook een grafische weergave te zien van de afbeeldingsstroken die je uit het logbestand hebt gehaald.

Voorbeeld

Bij onderstaande interactieve sessie gaan we ervan uit dat het bestand angkorwat.log3 zich in de huidige directory bevindt.

>>> puzzelstukken('angkorwat.log')
['spoj/problems/puzzel/iif-fpuo.jpg', 'spoj/problems/puzzel/xgfl-ftdzjc.jpg', 'spoj/problems/puzzel/ewktni-hhrir.jpg', 'spoj/problems/puzzel/omkzx-idk.jpg', 'spoj/problems/puzzel/lwpmuz-lmwp.jpg', 'spoj/problems/puzzel/srktu-nygk.jpg', 'spoj/problems/puzzel/xpyxjs-oocpc.jpg', 'spoj/problems/puzzel/eukuk-ruwpbl.jpg', 'spoj/problems/puzzel/mwyz-zalyj.jpg', 'spoj/problems/puzzel/jwbsb-zcckx.jpg']

Als we deze afbeeldingen afhalen vanaf de webserver http://users.ugent.be/~pdawyndt en naast elkaar plaatsen, dan vormen de stroken onderstaande afbeelding: