Een tijdzone is een gebied op Aarde waarbinnen overal dezelfde tijd gebruikt wordt. Tijdzones volgen doorgaans de grenzen van landen of deelgebieden binnen landen, omdat het voor handel en communicatie binnen die gebieden handig is om overal dezelfde tijd te gebruiken.

Voor tijdszones op het vasteland wordt de standaard tijd doorgaans uitgedrukt als een delta $$\Delta$$ ten opzichte van de Coordinated Universal Time1 (UTC), waarbij $$\Delta$$ meestal een geheel aantal uren uitdrukt (UTC-12 tot UTC+14). Er zijn echter een aantal tijdzones die een delta van 30 of 45 minuten hebben. Zo is bijvoorbeeld de Newfoundland Standard Time2 gelijk aan UTC-03.30, de Nepal Standard Time3 gelijk aan UTC+05.45 en de Indian Standard Time4 gelijk aan UTC+05.30.

tijdzones
Verdeling van de Aarde in tijdzones.

Wereldwijd zijn er circa 70 landen die tijdens de zomermaanden overschakelen naar zomertijd (daylight saving time; DST). Het daglicht zou zo beter overeenkomen met de periode waarin de meeste mensen wakker zijn. De duur en periode van zomertijd kan per land verschillen. Ook die zomertijd wordt doorgaans uitgedrukt als een delta $$\Delta$$ ten opzichte van de Coordinated Universal Time5 (UTC).

Opgave

Gegeven is een tekstbestand timezones.txt6 dat informatie bevat over de standaard- en zomertijden die wereldwijd gebruikt worden. Elke regel van het bestand omschrijft de tijden die gebruikt worden in een land of een deelgebied van een land. Deze omschrijving bestaat uit de volgende vier velden, die van elkaar worden gescheiden door puntkomma's (;): i) naam land, ii) naam deelgebied van land, iii) standaardtijd en iv) zomertijd. De laatste twee velden worden doorgaans uitgedrukt als een delta $$\Delta$$ ten opzichte van UTC (UTC±$$\Delta$$). Je mag ervan uitgaan dat de velden zelf geen puntkomma's bevatten.

Gevraagd wordt om — gebruik makend van de teksteditors vi of vim — een reeks commando's op te stellen die achtereenvolgens de volgende opdrachten uitvoeren. Probeer voor elke opdracht zo weinig mogelijk commando's te gebruiken en zorg er voor dat elk van deze commando's bestaat uit zo weinig mogelijk tekens. Alle opdrachten moeten na elkaar uitgevoerd worden. Ter controle kan je gebruik maken van de meegeleverde bestanden timezones.i.txt (ZIP7), die telkens de inhoud van het bestand bevatten nadat de $$i$$-de opdracht werd uitgevoerd.

  1. In de tijden die relatief ten opzichte van UTC uitgedrukt worden, staan er vaak spaties tussen UTC en het plus of minteken van de delta. Zorg ervoor dat al deze spaties verwijderd worden. Zo moet

    Country;geographical area;DST;UTC
    Afghanistan;;UTC +4.30;UTC  +4.30
    Albania;;UTC  +2;UTC  +1
    Algeria;;UTC+1;UTC  +1
    American Samoa;;UTC  -11;UTC -11
    …

    bijvoorbeeld omgezet worden naar (timezones.1.txt8)

    Country;geographical area;DST;UTC
    Afghanistan;;UTC+4.30;UTC+4.30
    Albania;;UTC+2;UTC+1
    Algeria;;UTC+1;UTC+1
    American Samoa;;UTC-11;UTC-11
    …
  2. Zorg ervoor dat in de tijden die relatief ten opzichte van UTC uitgedrukt worden, het deel van de delta dat de uren uitdrukt altijd met twee cijfers geschreven wordt door vooraan eventueel een voorloopnul toe te voegen. We krijgen dan (timezones.2.txt9)

    Country;geographical area;DST;UTC
    Afghanistan;;UTC+04.30;UTC+04.30
    Albania;;UTC+02;UTC+01
    Algeria;;UTC+01;UTC+01
    American Samoa;;UTC-11;UTC-11
    …
  3. Verwijder alle regels waarvan het laatste veld niet begint met UTC. Dit levert het resultaat op dat je kan terugvinden in timezones.3.txt10.

  4. Voeg achteraan elke regel een nieuwe kolom toe die yes bevat als het gebied een zomertijd (derde kolom) gebruikt die verschilt van de standaard tijd (derde kolom), en no als dat niet het geval is. Zorg dat de eerste regel niet aangepast wordt. We krijgen dan (timezones.4.txt11)

    Country;geographical area;DST;UTC;yes
    Afghanistan;;UTC+04.30;UTC+04.30;no
    Albania;;UTC+02;UTC+01;yes
    Algeria;;UTC+01;UTC+01;no
    American Samoa;;UTC-11;UTC-11;no
    …
  5. Zet het volledige bestand om naar CSV formaat (comma separated values). Dat doe je door alle puntkomma's te vervangen door komma's en alle velden die zelf komma's bevatten in te sluiten tussen dubbele aanhalingstekens. We krijgen dan (timezones.5.txt12)

    Country,geographical area,DST,UTC,yes
    Afghanistan,,UTC+04.30,UTC+04.30,no
    Albania,,UTC+02,UTC+01,yes
    Algeria,,UTC+01,UTC+01,no
    American Samoa,,UTC-11,UTC-11,no
    …

Richtlijnen bij het indienen

Volg aandachtig onderstaande richtlijnen bij het indienen van je oplossing: