PROG0369 - Doodle

no tags 

Doodle is an online tool for scheduling activities (meetings, parties, …) that need to be attended by several people. All participants are polled to indicate on a calendar when they are available, so that the coordinator of the activity can fix a time and date for the activity that meets everyone's availabilities.

Doodle
Example of a doodle where three people have already indicated their availabilities for the first fortnight of December 2013. All participants are free for the first time on Monday December 2, 2013, and from Thursday December 5th all participants are available for the first time for two successive days.

Assignment

A text file contains the information of a doodle where $m$ people have indicates their availabilities for $n$ successive days. The file contains $m$ lines, where each line describes the availabilities of a single person. Each line contains $n$ letters that indicate whether (letter V) or not (letter X) that person $n$ is available on each of the successive days. The doodle that is graphically represented above is thus stored in a text format using the following format:

VVVXVVXXXXXXVV
XVVXVVXXXXXXVV
VVXXVVXXXXXXVV

Write a function activity that can be used to schedule an activity based on a filled up doodle. The location of the text file containing the information of the doodle must be passed as the first argument to the function. The function also has a second optional parameter days, that indicates how many days the activity lasts. If no explicit value is passed for this parameter, a one-day activity is assumed.

Based on the provided information, the function must look for the first period (spanning the given number of successive days) where all participants of the activity are available. If such a period has been found, the function must return the index of the first day of the period (doodle columns represent successive days, indexed from 1). If no such period was found, the function must return the value -1.

Example

In the following interactive session we assume that the text files doodle1.txt and doodle2.txt are located in the current directory.

>>> activity('doodle1.txt')
2
>>> activity('doodle1.txt', 2)
5
>>> activity('doodle2.txt', 3)
-1

Doodle is een online toepassing voor het inplannen van activiteiten (vergaderingen, feestjes, …) waaraan verschillende personen moeten deelnemen. Aan de deelnemers wordt gevraagd om op een kalender aan te geven wanneer ze vrij zijn, zodat de coördinator van de activiteit de datum en het uur kan vastleggen waarop iedereen zich kan vrijmaken.

Doodle
Voorbeeld van een doodle waarop reeds drie personen hun beschikbaarheid hebben opgegeven voor de eerste veertien dagen van december 2013. Alle deelnemers kunnen zich voor het eerst vrijmaken op maandag 2 december 2013, en vanaf donderdag 5 december kunnen alle deelnemers zich voor het eerst vrijmaken voor twee opeenvolgende dagen.

Opgave

Een tekstbestand bevat de informatie van een doodle waarop $m$ personen hun beschikbaarheid hebben opgegeven voor $n$ opeenvolgende dagen. Het bestand bevat $m$ regels, waarbij elke regel de beschikbaarheid van één persoon aangeeft. Elke regel bevat $n$ letters die aangeven of de persoon op elk van de $n$ opeenvolgende dagen beschikbaar is (letter V) of niet (letter X). De doodle die hierboven grafisch wordt weergegeven, wordt als volgt opgeslagen in een tekstbestand:

VVVXVVXXXXXXVV
XVVXVVXXXXXXVV
VVXXVVXXXXXXVV

Schrijf een functie activiteit waarmee op basis van een ingevulde doodle een activiteit kan ingepland worden. De locatie van een tekstbestand dat de informatie van de doodle bevat, moet als eerste argument aan de functie doorgegeven worden. De functie heeft ook nog een tweede optionele parameter dagen, die aangeeft over hoeveel opeenvolgende dagen de activiteit loopt. Indien geen expliciete waarde wordt doorgegeven voor deze parameter, dan wordt een activiteit van één dag verondersteld.

Op basis van de gegeven informatie moet de functie op zoek gaan naar de eerste periode (bestaande uit het opgegeven aantal opeenvolgende dagen) waarbinnen alle deelnemers aan de activiteit zich vrij kunnen maken. Indien een dergelijk periode gevonden wordt, dan moet de functie de index van de eerste dag van die periode teruggeven (de kolommen van de doodle corresponderen met opeenvolgende dagen, en deze worden geïndexeerd vanaf 1). Indien geen geschikte periode gevonden wordt, dan moet de functie de waarde -1 teruggeven.

Voorbeeld

Bij onderstaande voorbeeldsessie gaan we ervan uit dat de tekstbestanden doodle1.txt en doodle2.txt zich in de huidige directory bevinden.

>>> activiteit('doodle1.txt')
2
>>> activiteit('doodle1.txt', 2)
5
>>> activiteit('doodle2.txt', 3)
-1


Added by:Peter Dawyndt
Date:2013-04-04
Time limit:10s
Source limit:50000B
Memory limit:1536MB
Cluster: Cube (Intel G860)
Languages:PY_NBC
Resource:None