(P) Rasse2¶
Tavoite: Harjoittelen STL:n säiliöiden ja iteraattoreiden käyttämistä sekä tiedostojen hallintaa. Myös ohjelman jakamista osiin funktioita käyttäen on syytä pohtia.
Erityisesti harjoittelen valitsemaan oikean tietorakenteen STL:n tietorakenteiden joukosta.
Ohjeita:
Hae ohjelmakoodipohja: templates/07/tramway2/
->
student/07/tramway2/
.
Tosin koodipohjasta saat vain raitiovaunun kuvan:
=====//==================//===
__<<__________________<<__
| ____ ____ ____ ____ ____ |
| | | | | | | | | | | |
|_|__|_|__|_|__|_|__|_|__|_|
.| RASSE |.
:|__________________________|:
___(o)(o)___(o)(o)___(o)(o)____
-------------------------------
Toteuta ohjelma, joka käynnistyessään lukee ratikkalinjoihin liittyviä tietoja tiedostosta, tallentaa ne sopivaan tietorakenteeseen ja antaa käyttäjälle mahdollisuuden tehdä hakuja, lisäyksiä ja poistoja kyseiseen tietorakenteeseen.
Tärkeää
Ennen kuin aloitat, lue huolellisesti koko tehtävänanto. Huomaa erityisesti vaaditut commitit.
Huomautus
Tämän projektin saa (mutta ei ole pakko) tehdä parityönä. Jos et ole vielä luonut ryhmää tai haluat vaihtaa työparia, niin pääset luomaan uuden ryhmän klikkaamalla vasemman reunan valikosta löytyvää linkkiä “Luo uusi ryhmä”. Ryhmän luomisen jälkeen sivun alaosan palautuslaatikkossa on näkyvissä kaksi vaihtoehtoa: “Palauta yksin” / “Palauta ryhmässä”. Ole tarkkana, että valitset oikean vaihtoehdon, koska valintaa ei voi myöhemmin perua. Palautuslaatikkoon tulee vain jommankumman jäsenen Git-repositorion osoite. Kirjoittakaa kooditiedoston kommentteihin molempien nimet ym. muut tiedot.
Ryhmää voi etsiä Kooditorion Discord-linkin kautta (ks. Aikataulu & linkit).
Alkukommentti ja palautteen kieli¶
Samoin kuin ensimmäisessä projektissa, tässäkin projektissa vaaditaan alkukommentti. Tällä kertaa alkukommenttia ei anneta valmiina, vaan sinun pitää kirjoittaa se itse. Mallia voit katsoa ensimmäisen projektin tehtävänannosta (4.6 (P) Muistipeli).
Palautteen kieli valitaan palautuslaatikossa (tämän sivun lopussa). Palautteen kielenä on oletuksena suomi, mutta voit vaihtaa sen, jos haluat assistenttien antaman palautteen englanniksi. Kielivalinta määräytyy sen perusteella, minkä kielivalinnan olet tehnyt viimeisimmän palautuksen palautuslaatikossa.
Jos teette parityötä, muistakaa lisätä molempien henkilökohtaiset tiedot.
Ohjelman käsittelemä data¶
Ohjelmalle annetaan syötteenä tiedosto, jonka kullakin rivillä on (enintään) kolme tietokenttää: linjan nimi, pysäkin nimi ja pysäkin etäisyys päätepysäkistä (lähtöpysäkistä). Nämä on eroteltu puolipisteellä toisistaan. Ohjelma hyväksymä syötetiedosto on rakenteeltaan esimerkiksi seuraava:
West;Pyynikintori;0
West;Tuulensuu;0.5
West;Keskustori;1.5
West;Koskipuisto;1.8
West;Rautatieasema;2.2
West;Tulli;2.5
West;Sammonaukio;2.8
East;Sammonaukio;
East;Kaleva;0.2
East;Uintikeskus;0.3
East;Kalevanrinne;0.6
East;Hakametsa;1
East;Turtola;3
East;Hallila;5
East;Hervanta;7
East;Hervannan kampus;7.1
South;Hervannan kampus
South;Etela-Hervanta;0.4
South;Hervantajarvi;0.7
Hospital;Sammonaukio
Hospital;Kalevan kirkko;0.1
Hospital;Hippos;0.4
Hospital;TAYS;0.6
Hospital;Kaupin kampus;0.7
Kuten yllä olevasta listasta nähdään, lähtöpysäkin voi antaa kolmella tavalla:
West;Pyynikintori;0
East;Sammonaukio;
South;Hervannan kampus
Lähtöpysäkin etäisyys lähtöpysäkistä on tietenkin nolla. Tämän voi antaa lukuna, tyhjänä kenttänä tai puuttuvana kenttänä. (Ohjelmakoodissa kannattaa kaikissa tapauksissa tallettaa nolla pysäkin tietoihin.)
Tässä linjan kaikki pysäkit on kerrottu peräkkäisillä riveillä, mutta eri linjojen pysäkit voisivat olla myös sekaisin. Kuitenkin jokaisen yksittäisen linjan pysäkit luetellaan syötetiedostossa siinä järjestyksessä, kuin ne esiintyvät reitillä. Voit siis myös olettaa, että linjan pysäkkien etäisyydet lähtöpysäkistä ovat nousevassa suuruusjärjestyksessä.
Sekä linjojen että pysäkkien nimissä voi olla useita sanoja. Jos näin on, kyselyissä pitää käyttää lainausmerkkejä, kuten on esitetty jäljempänä tulevissa esimerkeissä.
Tiedoston käsittelyyn liittyvät virhetarkistukset¶
Kun ohjelma käynnistyy, se tulostaa ratikan kuvan ja lukee käyttäjältä syötetiedoston nimen seuraavasti:
=====//==================//===
__<<__________________<<__
| ____ ____ ____ ____ ____ |
| | | | | | | | | | | |
|_|__|_|__|_|__|_|__|_|__|_|
.| RASSE |.
:|__________________________|:
___(o)(o)___(o)(o)___(o)(o)____
-------------------------------
Give a name for input file: data.txt
Mikäli syötetiedostoa ei saa avattua luettavaksi, tulostetaan käyttäjälle teksti:
Error: File could not be read.
Tämän jälkeen ohjelman suoritus päättyy ilman mitään muita tulosteita
paluuarvoon EXIT_FAILURE
.
Mikäli syötetiedosto saadaan avattua, mutta tiedosto ei ole yllä esitetyn määrittelyn mukainen, tulostetaan virheilmoitus:
Error: Invalid format in file.
ja lopetetaan ohjelman suoritus paluuarvoon EXIT_FAILURE
.
Näin käy, jos esimerkiksi
joltakin riviltä löytyy jotakin muuta kuin kaksi tai kolme tekstin pätkää
puolipisteellä eroteltuna.
Myöskään tyhjiä linjan tai pysäkin nimiä ei hyväksytä.
Ohjelma tarkistaa myös, että syötetiedostossa ei ole samannimistä pysäkkiä tai samoja pysäkkien etäisyyksiä samalla linjalla useampaan kertaan. Esimerkiksi jos syötetiedostossa olisi rivit:
West;Koskipuisto;1.8
West;Koskipuisto;1.9
tai:
West;Koskipuisto;1.8
West;Rosso;1.8
tulostetaan kummassakin tapauksessa virheilmoitus:
Error: Stop/line already exists.
ja lopetetaan ohjelman suoritus paluuarvoon EXIT_FAILURE
.
Vaikka syötetiedossa linjalla olisi sama pysäkki samalla etäisyydellä useampaan kertaan, yllä oleva virheilmoitus annetaan vain kerran.
Sama pysäkki voi kuitenkin esiintyä usealla eri linjalla.
Esimerkiksi edellä esitetyssä syötetiedostossa
pysäkki Sammonaukio
kuuluu linjoille West
, East
ja Hospital
.
Myös joihinkin komentoihin liittyy virheilmoituksia. Niistä kerrotaan kunkin komennon yhteydessä.
Yleistä komennoista ja virheilmoituksista¶
Seuraavassa kohdassa kuvataan toteutettavat komennot. Kullakin komennolla on 0-3 parametria. Jos parametreja on liian vähän, ohjelma antaa virheilmoituksen:
Error: Invalid input.
Jos parametreja on liikaa, ylimääräisistä parametreista ei välitetä. Niistä ei anneta virheilmoitusta, ne vain jätetään käyttämättä.
Parametrit ovat yleensä linjoja ja/tai pysäkkejä. Jos näistä halutaan esimerkiksi tulostaa jotakin, ohjelma tarkistaa, että kyseinen linja/pysäkki löytyy tietorakenteesta. Jos taas komennolla lisätään uusi linja tai pysäkki, ohjelma tarkistaa, ettei linjaa/pysäkkiä ole tietorakenteessa ennestään.
Ohjelmassa käytettävät komennot virheilmoituksineen¶
Ohjelma jäsentelee tiedostosta lukemansa rivit ja tallentaa tiedot linjoista ja pysäkeistä sopivaan sisäiseen tietorakenteeseen.
Kun tiedosto on luettu, ohjelma aloittaa varsinaisen suorituksensa. Aina kun käyttäjältä odotetaan syötettä, tulostetaan rivin alkuun:
tramway>
Tähän kehotteeseen ohjelman käyttäjä voi syöttää seuraavia käskyjä:
QUIT
- Ohjelman suoritus päätty paluuarvoonEXIT_SUCCESS
ilman, että ohjelma tulostaa mitään.LINES
- Komento tulostaa aakkosjärjestyksessä kaikki annetut linjat allekkain. Esimerkiksi:tramway> LINES All tramlines in alphabetical order: East Hospital South West tramway>
Tässä aakkosjärjestyksellä tarkoitetaan ASCII-koodien mukaista järjestystä. Se on muuten kuten aakkosjärjestys, mutta kaikki isot kirjaimet edeltävät kaikkia pieniä kirjaimia. Esimerkiksi jos edellä
East
olisi kirjoitettu pienellä alkukirjaimella (east
), se olisi tulostettu listan viimeiseksi.LINE <linja>
- Komento tulostaa linjalle<linja>
kuuluvat pysäkit allekkain ranskalaisilla viivoilla. Pysäkit tulostetaan reitin mukaisessa järjestyksessä, eli samassa järjestyksessä kuin ne esiintyivät syötetiedostossa. Esimerkiksi:tramway> LINE East Line East goes through these stops in the order they are listed: - Sammonaukio : 0 - Kaleva : 0.2 - Uintikeskus : 0.3 - Kalevanrinne : 0.6 - Hakametsa : 1 - Turtola : 3 - Hallila : 5 - Hervanta : 7 - Hervannan kampus : 7.1 tramway>
Jos linjalla ei olisi yhtään pysäkkiä, tulostettaisiin yllä olevasta tulosteesta vain ensimmäinen rivi. Tällainen tilanne tulee esiin komennon
ADDLINE
kohdalla vähän jäljempänä.Jos liukuluvun desimaaliosa on nolla, se jätetään tulostamatta. Esimerkiksi Hervannan etäisyydeksi tulostetaan
7
eikä7.0
. Tulostus on sama riippumatta siitä, kummassa muodossa etäisyys oli annettu syötetiedostossa. (Liukulukujen tulostus menee oletuksena tällä tavalla, joten tästä ei tarvitse erikseen huolehtia.)Komennolla pitää olla ainakin yksi parametri. Jos näin ei ole, tulostetaan virheilmoitus:
tramway> LINE Error: Invalid input. tramway>
Jos parametriksi annetaan tuntematon linja, ohjelma tulostaa virheilmoituksen:
tramway> LINE North Error: Line could not be found. tramway>
STOPS
- Komento tulostaa aakkosjärjestyksessä kaikki annetut pysäkit allekkain. (Tässäkin käytetään ASCII-koodijärjestystä kuten komennossaLINES
.) Esimerkiksi:tramway> STOPS All stops in alphabetical order: Etela-Hervanta Hakametsä Hallila Hervannan kampus Hervanta Hervantajarvi Hippos Kaleva Kalevan kirkko Kalevanrinne Kaupin kampus Keskustori Koskipuisto Pyynikintori Rautatieasema Sammonaukio TAYS Tulli Turtola Tuulensuu Uintikeskus tramway>
STOP <pysäkki>
- Komento tulostaa allekkain ranskalaisilla viivoilla ne linjat, joille pysäkki<pysäkki>
kuuluu. Linjat tulostetaan aakkosjärjestyksessä (ASCII-koodijärjestyksessä). Esimerkiksi:tramway> STOP Sammonaukio Stop Sammonaukio can be found on the following lines: - East - Hospital - West tramway>
Komennolla pitää olla ainakin yksi parametri. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon
LINE
yhteydessä vastaavassa tilanteessa.Jos parametriksi annetaan tuntematon pysäkki, ohjelma tulostaa virheilmoituksen:
tramway> STOP Iidesjarvi Error: Stop could not be found. tramway>
Pysäkin nimi voi koostua useasta sanasta. Jotta tällainen pysäkin nimi osattaisiin tulkita yhdeksi parametriksi, pitää käyttää lainausmerkkejä. Esimerkiksi:
tramway> STOP "Hervannan kampus" Stop Hervannan kampus can be found on the following lines: - East - South tramway>
Vaikka pysäkin nimessä olisi vain yksi sana, lainausmerkkejä saa silti käyttää. Esimerkiksi komennot
STOP Sammonaukio
jaSTOP "Sammonaukio"
tuottavat saman tuloksen.Edellä kerrotut asiat pätevät myös linjan nimeen, jos se koostuu useasta sanasta.
DISTANCE <linja> <pysäkki1> <pysäkki2>
- Komento laskee linjan<linja>
annettujen pysäkkien (<pysäkki1>
ja<pysäkki2>
) välisen etäisyyden. Pysäkit voi luetella kummassa tahansa järjestyksessä, ja etäisyytenä ilmoitetaan aina ei-negatiivinen luku. Esimerkiksi:tramway> DISTANCE East Sammonaukio Uintikeskus Distance between Sammonaukio and Uintikeskus is 0.3 tramway> DISTANCE West Tulli Tuulensuu Distance between Tulli and Tuulensuu is 2 tramway> DISTANCE West Tuulensuu Tulli Distance between Tuulensuu and Tulli is 2 tramway>
Kuten kerrottiin komennon
LINE
yhteydessä liukuluvun desimaaliosan nollaa ei tulosteta.Annetut kaksi pysäkkiä voivat olla myös samat, jolloin lasketaan pysäkin etäisyys itsestään. Tulos on tällöin tietenkin nolla.
Komennolla pitää olla ainakin kolme parametria. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon
LINE
yhteydessä vastaavassa tilanteessa.Jos parametriksi annetaan tuntematon linja, ohjelma tulostaa saman virheilmoituksen kuin komennon
LINE
tapauksessa eli:Error: Line could not be found.
Jos parametriksi annetaan tuntematon pysäkki, ohjelma tulostaa saman virheilmoituksen kuin komennon
STOP
tapauksessa eli:Error: Stop could not be found.
Jos sekä linja että pysäkki (toinen tai molemmat) ovat tuntemattomia, ilmoitetaan vain tuntemattomasta linjasta. Jos linja on olemassa, mutta molemmat pysäkit ovat tuntemattomia, ilmoitetaan tuntemattomasta pysäkistä vain kerran.
ADDLINE <linja>
- Komento lisää tietorakenteeseen linjan<linja>
(ilman pysäkkejä). Esimerkiksi:tramway> ADDLINE Pirkkala Line was added. tramway> LINES All tramlines in alphabetical order: East Hospital Pirkkala South West tramway> LINE Pirkkala Line Pirkkala goes through these stops in the order they are listed: tramway>
Yllä olevasta ajosta huomataan myös, miten tulostetaan linja, jolla ei ole (vielä) yhtään pysäkkiä.
Komennolla pitää olla ainakin yksi parametri. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon
LINE
yhteydessä vastaavassa tilanteessa.Jos uudeksi linjaksi annetaan olemassa oleva linja, tulostetaan virheilmoitus:
tramway> ADDLINE South Error: Stop/line already exists. tramway>
ADDSTOP <linja> <uusi pysäkki> <etäisyys>
- Komento lisää tietorakenteeseen linjalle<linja>
pysäkin<uusi pysäkki>
. Pysäkki<uusi pysäkki>
lisätään sellaiseen kohtaan reittiä, että pysäkkien etäisyyksien suuruusjärjestys säilyy. Esimerkiksi:tramway> ADDSTOP Hospital Teiskontie 0.2 Stop was added. tramway> ADDSTOP Hospital Teisko 30 Stop was added. tramway> LINE Hospital Line Hospital goes through these stops in the order they are listed: - Sammonaukio : 0 - Kalevan kirkko : 0.1 - Teiskontie : 0.2 - Hippos : 0.4 - TAYS : 0.6 - Kaupin kampus : 0.7 - Teisko 30 tramway>
Komennolla pitää olla ainakin kolme parametria. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon
LINE
yhteydessä vastaavassa tilanteessa.Jos ensimmäiseksi parametriksi annetaan tuntematon linja, tulostetaan sama virheilmoitus kuin komennon
LINE
yhteydessä vastaavassa tilanteessa.Jos lisättävä pysäkki on jo linjalla (esimerkiksi lisätty juuri edellä) tai jos linjalla on jo pysäkki samalla etäisyydellä, tulostetaan virheilmoitus:
tramway> ADDSTOP Hospital Teiskontie 0.3 Error: Stop/line already exists. tramway> ADDSTOP Hospital Kaleva 0.2 Error: Stop/line already exists. tramway> ADDSTOP Hospital Teiskontie 0.2 Error: Stop/line already exists. tramway>
Vaikka sekä pysäkki että etäisyys olisi ennestään, virheilmoitus annetaan vain kerran.
REMOVE <pysäkki>
- Komento poistaa pysäkin<pysäkki>
kaikilta linjoilta. Esimerkiksi:tramway> REMOVE "Hervannan kampus" Stop was removed from all lines. tramway>
Komennolla pitää olla ainakin yksi parametri. Jos näin ei ole, tulostetaan sama virheilmoitus kuin komennon
LINE
yhteydessä vastaavassa tilanteessa.Jos poistettavaksi pysäkiksi annetaan tuntematon pysäkki, tulostetaan virheilmoitus:
tramway> REMOVE Pohjois-Hervanta Error: Stop could not be found. tramway>
Edellä kuvatuissa lisäys- ja poistokomennoissa
(ADDLINE
, ADDSTOP
, REMOVE
) riittää tehdä muutos
tietorakenteeseen.
Vastaavaa muutosta ei tarvitse tehdä tiedostoon.
Jos käyttäjä antaa jonkin muun komennon kuin edellä luetellun, ohjelma tulostaa virheilmoituksen:
tramway> EXIT
Error: Invalid input.
tramway>
Kun käyttäjän syöttämä komento on suoritettu, ohjelma tulostaa
kehotteen uudelleen.
Tätä jatketaan kunnes käyttäjä syöttää käskyn QUIT
.
Komennoissa sallitaan sekä pienet että isot kirjaimet.
(Tässä voit käyttää char
-tyypin toupper
-funktiota.
Ennen kuin vertaat käyttäjän antamaa syötettä esim. sanaan LINES
,
muuta syötteessä olevan komennon kaikki kirjaimet isoiksi.)
Vihjeitä¶
- Voit käyttää syötetiedoston ja käyttäjän antamien syötteiden
paloitteluun viikkoharjoituksissa toteutettua
split
-funktiota. Toteutus on annettu myös koodipohjissa 6-kierroksen tehtävissä Vektorin alkioiden summa ja Verkostomarkkinointia. - Muistathan, että iteraattori muuttuu käyttökelvottamaksi, kun säiliöön lisätään alkioita tai niitä poistetaan.
- Muista, että oletuksena ohjelma käännetään build-hakemistoon. Testaamista varten kannattaa siirtää syötetiedosto samaan hakemistoon binäärin kanssa.
- Ennen ohjelman toteuttamista, mieti huolellisesti, miten rakennat ohjelman niin, että pystyt vastaamaan annettuihin vaatimuksiin. Huomaa, että pysäkki voi kuulua usealle eri linjalle, ja että joskus pitää tulostaa aakkosjärjestyksessä (ASCII-koodijärjestyksessä) ja joskus taas siinä järjestyksessä, missä sanat esiintyvät syötetiedostossa.
- Mieti myös, miten ohjelma kannattaa jakaa osiin. Halutessasi voit käyttää luokkia, mutta niiden käyttämättä jättämisestä ei sakoteta. Oleellisempaa on, että osaat jakaa koodin sopivankokoisiin funktioihin.
Ohjelman toteuttaminen osissa¶
Ohjelman toteutus muodostuu pääpiirteiltään kolmesta osasta:
- tietorakenteen valinta ja tiedoston lukeminen tietorakenteeseen
- käyttöliittymä
- hakualgoritmit.
Mieti tarkasti, missä järjestyksessä nuo kannattaa toteuttaa, jotta voit toteuttaa ja testata ne yksi kerrallaan, ennen kuin siirryt seuraavaan vaiheeseen. Vähimmäisvaatimuksena versionhallinnan käyttämiselle on, että nämä kolme osaa on toteutettu omina committeinaan, mutta parempi tietenkin olisi että committeja olisi enemmän.
Erityisvaatimukset¶
Seuraavia vaatimuksia on noudatettava, mikäli haluaa työstä hyväksytyn arvosanan:
- Syötetiedoston saa lukea vain kerran ohjelman suorituksen aikana.
- Tästä syystä sinun pitää lukea tiedoston tiedot STL:n tietorakenteisiin. Sen jälkeen kaikki haut, lisäykset ja poistot pitää kohdistua valittuihin tietorakenteisiin (eikä siis syötetiedostoon).
- Työssä pitää käyttää STL-kirjastoa, ei esim. Boost-kirjastoa.
Arviointi¶
Jotta työ päätyisi assistenttien arvioitavaksi, sen pitää ensin läpäistä automaattitestit. Jos saat automaattitesteistä 0 pistettä, myös lopullinen pistemääräsi on 0, eikä työ mene assistenttien arvioitavaksi.
Assistentti arvioi ja pisteyttää automaattitestit läpäisseistä (= 1 p) sekä tehtävänannon erikoisvaatimukset täyttävistä töistä viimeisen määräajan puitteissa tehdyn commitin seuraavien arviointikriteerien mukaan:
- Ratkaisun yleisperiaate: 0-30 pistettä:
- Tehtävän osaamistavoitteet on saavutettu.
- Ohjelmakoodi on jaettu funktioita, luokkia ja/tai metodeita käyttäen loogisiksi kokonaisuuksiksi, jotka ovat sopivan pituisia.
- Jos luokkia ja olioita on käytetty, ne on toteutettu olio-ohjelmoinnin periaatteita noudattaen (ks. 4-kierroksen Tyyliseikoista kohta Olio-ohjelmointi).
- Tietorakenne ei sisällä toisteista eikä turhaa tietoa. Valittuja tietorakenteita on käytetty järkevästi.
- Ohjelmakoodi ei sisällä turhaa toisteisuutta eikä muutakaan turhaa.
- Ohjelmakoodi ei sisällä tarpeettomia rajoitteita tai oletuksia tai muita väkinäisiä ratkaisuita.
- Ohjelmarakenteet on toteutettu helposti ymmärrettäviksi.
- Ohjelmakoodissa ei ole käytetty globaaleja muuttujia (globaalit
const
-vakiot ovat OK). - Ohjelman toimintaa ei lopeteta
exit
-funktiota käyttäen.
- Ohjelmointityyli: 0-10 pistettä:
- Muuttujat ja funktiot nimetty selkeästi ja kuvaavasti.
- Käytä nimettyjä vakioita taikanumeroiden sijasta.
- Ohjelmakoodi on asemoitu siististi.
- Koodirivien pituus on enintään 80 merkkiä.
- Jokaisen tiedoston alussa on kommentti, josta käy ilmi tiedoston tarkoitus, työn tekijä(t) ja muut tarvittavat tiedot. (ks. 1-projektin tehtävänanto kierrokselta 4).
- Jokaisen funktion/metodin alussa (otsikkotiedostossa jos mahdollista) on kommentti, joka kuvaa sen toiminnan, paluuarvon ja parametrit.
- Kommentteja on muutenkin tarpeellisissa kohdissa.
- Kaikki muuttujat on alustettu.
- Kääntäjä ei anna koodia käännettäessä varoituksia.
- Versionhallinnan käyttö: 0-10 pistettä:
- Committeja on riittävä määrä.
- Commit-viestien sisältö on selkeä ja kuvaava.
Huomautus
Automaattitestit eivät hyväksy ohjelmaa, jonka kääntäminen tuottaa varoituksia.
Viimeisen palautuksen tehtyäsi tarkasta TTY:n GitLabin web-käyttöliittymän kautta, että muutokset ovat menneet perille keskustietovarastoosi. Assistentti arvioi sen version ohjelmastasi, joka keskustietovarastosta löytyy viimeisestä eräpäivään mennessä tehdystä commitista.
A+ esittää tässä kohdassa tehtävän palautuslomakkeen.