Datatähti 2007 -kilpailu



Samankaltaiset tiedostot
Datatähti alkukilpailu

Datatähti kilpailu

Datatähti alkukilpailu

Datatähti-alkukilpailu 2005

Datatähti 2000: alkukilpailun ohjelmointitehtävä

Datatähti 2019 alku. task type time limit memory limit. A Kolikot standard 1.00 s 512 MB. B Leimasin standard 1.00 s 512 MB

Datatähti 2019 loppu

S: siirtää listan ensimmäisen luvun viimeiseksi V: vaihtaa keskenään listan kaksi ensimmäistä lukua

Kohdissa 2 ja 3 jos lukujen valintaan on useita vaihtoehtoja, valitaan sellaiset luvut, jotka ovat mahdollisimman lähellä listan alkua.

Merkkijono on palindromi, jos se säilyy samana, vaikka sen kääntää väärinpäin.

Sinulle on annettu bittijono, ja tehtäväsi on muuttaa jonoa niin, että jokainen bitti on 0.

Syötteen ainoalla rivillä on yksi positiivinen kokonaisluku, joka on alle = Luvussa ei esiinny missään kohtaa numeroa 0.

Toinen harjoitustyö. ASCII-grafiikkaa 2017

815338A Ohjelmointikielten periaatteet Harjoitus 3 vastaukset

Tiedonhaku ja varaaminen

Ohjelmoinnin perusteet Y Python

Tiedonhaku. Esim. kymenlaakso muutosjohtami* Laila Hirvisaari Tuntematon sotilas Ruksi tyhjentää hakukentän.

Ohjelmassa henkilön etunimi ja sukunimi luetaan kahteen muuttujaan seuraavasti:

Tehtävä: FIL Tiedostopolut

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

Maahan on pudonnut omenoita, ja Uolevi aikoo poimia niitä. Tiedät jokaisesta omenasta, kuinka painava se on.

c) 22a 21b x + a 2 3a x 1 = a,

Tietotekniikan valintakoe

Kaulaketju. Syöte. Tuloste. Esimerkki 1. Esimerkki 2

5. HelloWorld-ohjelma 5.1

Harjoitus 2 (viikko 45)

11.4. Context-free kielet 1 / 17

Uolevin reitti. Kuvaus. Syöte (stdin) Tuloste (stdout) Esimerkki 1. Esimerkki 2

Kirjoita oma versio funktioista strcpy ja strcat, jotka saavat parametrinaan kaksi merkkiosoitinta.

Syötteen ensimmäisellä rivillä on kokonaisluku n, testien määrä (1 n 10). Tämän jälkeen jokaisella seuraavalla rivillä on kokonaisluku x (0 x 1000).

Ohjelmoinnin perusteet Y Python

Ohjelmoinnin perusteet Y Python

4. Oheisessa 4x4 ruudukossa jokainen merkki tarkoittaa jotakin lukua. Mikä lukua salmiakki vastaa?

Puzzle SM Pistelasku

Numeropelissä 3x3-ruudukko sisältää luvut 1, 2,, 9. Tehtäväsi on järjestää ruudukko näin:

finnish BOI 2015, päivä 1. Muistiraja: 256 MB

Webforum. Version 15.1 uudet ominaisuudet. Päivitetty:

TAMPEREEN TEKNILLINEN YLIOPISTO Digitaali- ja tietokonetekniikan laitos. Harjoitustyö 4: Cache, osa 2

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

n! k!(n k)! n = Binomikerroin voidaan laskea pelkästään yhteenlaskun avulla käyttäen allaolevia ns. palautuskaavoja.

Task list Submit code Submissions Scoreboard View queue Edit contest

ITKP102 Ohjelmointi 1 (6 op)

Scratch ohjeita. Perusteet

Java-kielen perusteita

Ohjelmointitaito (ict1td002, 12 op) Kevät Java-ohjelmoinnin alkeita. Tietokoneohjelma. Raine Kauppinen

ITKP102 Ohjelmointi 1 (6 op)

ITKP102 Ohjelmointi 1 (6 op)

815338A Ohjelmointikielten periaatteet Harjoitus 6 Vastaukset

Ohjelmoinnin perusteet Y Python

ITKP102 Ohjelmointi 1 (6 op), arvosteluraportti

Kenguru 2012 Cadet (8. ja 9. luokka)

Hakuohjeet Haku Tiedonhaun tulokset

Tietorakenteet, laskuharjoitus 7, ratkaisuja

Ohjelmassa on käytettävä funktiota laskeparkkimaksu laskemaan kunkin asiakkaan maksu. Funktio floor pyöristää luvun lähimmäksi kokonaisluvuksi.

Hahmon etsiminen syotteesta (johdatteleva esimerkki)

Esimerkiksi jos käytössä ovat kirjaimet FFII, mahdolliset nimet ovat FIFI ja IFIF. Näistä aakkosjärjestykssä ensimmäinen nimi on FIFI.

Ohjelmoinnin perusteet Y Python

Peilaus pisteen ja suoran suhteen Pythonin Turtle moduulilla

Tehtävä 2: Loppuosataulukko

9.5. Turingin kone. Turingin koneen ohjeet. Turingin kone on järjestetty seitsikko

Esimerkkiprojekti. Mallivastauksen löydät Wroxin www-sivuilta. Kenttä Tyyppi Max.pituus Rajoitukset/Kommentit

Harjoitus 5 (viikko 48)

Ohjelmoinnin peruskurssi Y1

Ohjeistus opiskelijalle opinnäytetyön tallentamiseksi Theseus-verkkokirjastoon.

Algoritmit 2. Luento 6 To Timo Männikkö

Kenguru Student (lukion 2. ja 3. vuosi) sivu 1 / 6

Ohjelmoinnin perusteet, 1. välikoe

// Tulostetaan double-tyyppiseen muuttujaan "hinta" tallennettu // kertalipun hinta ja vaihdetaan riviä. System.out.printf("%.1f euros.

Toinen harjoitustyö. ASCII-grafiikkaa

SYDÄN-HÄMEEN RASTIT TULOSPALVELUN OHJEET v.2 1. LAITTEISTO 2. LAITTEISTON VALMISTELU 3. VALMISTELUT ENNEN TAPAHTUMAA

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin perusteet Y Python

Kenguru 2017 Cadet (8. ja 9. luokka)

Python-ohjelmointi Harjoitus 5

Ohjelmoinnin perusteet Y Python

TIEDONHAKU INTERNETISTÄ

Pong-peli, vaihe Koordinaatistosta. Muilla kielillä: English Suomi. Tämä on Pong-pelin tutoriaalin osa 2/7. Tämän vaiheen aikana

Lausekielinen ohjelmointi II Ensimmäinen harjoitustyö

Ohjelmoinnin perusteet Y Python

Tietorakenteet (syksy 2013)

VERKKOVELHO-YLLÄPITOTYÖKALUN KÄYTTÖOHJE

ITKP102 Ohjelmointi 1 (6 op)

Approbatur 3, demo 1, ratkaisut A sanoo: Vähintään yksi meistä on retku. Tehtävänä on päätellä, mitä tyyppiä A ja B ovat.

Johdatus lukuteoriaan Harjoitus 2 syksy 2008 Eemeli Blåsten. Ratkaisuehdotelma

Päivityspalvelu. Tietuekuvaus. Tietuekuvaus 1 (5) Päivityspalvelu. Julkinen - Public

Ohjelmoinnin perusteet, syksy 2006

Kenguru 2016 Cadet (8. ja 9. luokka)

1. Osoita, että joukon X osajoukoille A ja B on voimassa toinen ns. de Morganin laki (A B) = A B.

Harjoitus Olkoon olemassa luokat Lintu ja Pelikaani seuraavasti:

Kenguru 2017 Student lukio

Kenguru 2015 Ecolier (4. ja 5. luokka)

Ohjelmointi 2 / 2010 Välikoe / 26.3

Vasen johto S AB ab ab esittää jäsennyspuun kasvattamista vasemmalta alkaen:

MEM-O-MATIC järjestelmä

Yhdistäminen. Tietolähteen luominen. Word-taulukko. Joukkokirje, osoitetarrat Työvälineohjelmistot 1(5)

Ohjelmoinnin peruskurssi Y1

Ohjelmoinnin jatkokurssi, kurssikoe

Ohjelmoinnin peruskurssi Y1

Task list Submit code Submissions Messages Scoreboard View queue Edit contest

5. HelloWorld-ohjelma 5.1

Transkriptio:

Datatähti 2007 -kilpailu Ohjelmointitehtävä 1/2: oolen AND -tyyppinen lausehaku HUOM: Tutustuthan huolellisesti tehtävien sääntöihin ja palautusohjeisiin (sivu 7) Hakusanojen esiintymiin perustuvat tiedonhakupalvelut, kuten Google, mahdollistavat usein ns. oolen logiikan käytön. Tällaisessa oolen haussa on mahdollista tarkentaa hakusanojen esiintymävaatimuksia loogisten operaattoreiden, kuten AND, OR ja NOT, avulla. Monet hakupalvelut soveltavat oletuksena AND-operaattoria kaikkiin hakusanoihin: haku palauttaa dokumentit, jotka sisältävät kaikki annetut hakusanat. Laadi tietokoneohjelma, joka toteuttaa tämänkaltaisen AND-operaattoria soveltavan oolen sanahaun, kun haun kohteina ovat annetun tekstitiedoston sisältämät lauseet. Syöte Ohjelmasi lukee syötteenä kaksi ASCII-tekstitiedostoa, joiden nimet ovat query.in ja text.in. Tiedosto query.in sisältää yhden tai useamman hakusanan. Jos hakusanoja on vähintään kaksi, on hakusanat erotettu toisistaan yhdellä välilyönnillä. Kukin hakusana on vähintään yhden ja korkeintaan 50 merkin pituinen, ja hakusanoja on korkeintaan 300. Yksinkertaisuuden vuoksi kukin hakusana koostuu englanninkielessä käytetyistä aakkosista tai numeroista, jolloin sallittujen merkkien joukko on {a,b,c,...,z,a,,c,...,z,0,1,2,...,9}. Tiedosto text.in sisältää yhden tai useamman lauseen. Jos lauseita on vähintään kaksi, on lauseet erotettu toisistaan yhdellä välilyönnillä. Kukin lause koostuu yhdestä tai useammasta sanasta sekä välittömästi lauseen viimeisen sanan perässä olevasta pisteestä (muita väli- tai erikoismerkkejä ei ole). Jos lauseessa on vähintään kaksi sanaa, on sanat erotettu toisistaan yhdellä välilyönnillä. Sanojen pituus- ja merkkirajoitukset ovat samat kuin hakusanojen kohdalla: 1-50 merkkiä, joista kukin on numero tai englanninkielen aakkoston kirjain. Niin lauseiden lukumäärälle kuin yksittäisen lauseen sisältämien sanojen lukumäärällekään ei ole omaa ylärajaa. Ainoa rajoite on, että tiedoston text.in koko on korkeintaan 10 000 000 tavua. Tuloste Ohjelmasi kirjoittaa haun tuloksen uuteen ASCII-tekstitiedostoon nimeltä query.out. Kyseessä on oolen AND -tyyppinen haku, joka tarkoittaa että lause täsmää haun kanssa jos ja vain jos se sisältää kaikki annetut hakusanat. Hakusanat voivat sisältää jonkin sanan useammin kuin kerran. Tällöin täsmäävän lauseen täytyy sisältää kyseinen sana vähintään yhtä monta kertaa. Sanojen pitää täsmätä kokonaan, mutta merkkien kokoa ei huomioda. Esimerkiksi hakusana auto ei täsmää sanassa autokauppa, mutta hakusana Koira täsmää sanan koira kanssa. Haun tuloste koostuu täsmäävien lauseiden järjestysnumeroista. Jos täsmääviä lauseita on vähintään kaksi, erotetaan tulostetut järjestysnumerot toisistaan yhdellä välilyönnillä. Jos mikään lause ei täsmää, tulostetaan luku 0. Esimerkiksi jos tekstitiedoston text.in ensimmäinen ja viides lause, ja ainoastaan ne, sisältävät kunkin tiedostossa query.in olevan sanan, kirjoitetaan tiedostoon query.out luvut 1 ja 5 niin, että niiden välissä on yksi välilyönti. 1

Toteutustiedosto ja pisteytys Ohjelmasi toteutuksen tulee olla yhdessä lähdekooditiedostossa. Tiedoston nimen tulee olla booleand.x, missä tiedostopääte x vastaa käyttämääsi ohjelmointikieltä (esim. booleand.c, katso ohjeet sivulla 7). Ohjelmaasi testataan 20 kertaa erilaisilla syötteillä. Ohjelmasi saa kutakin testiä varten 1 sekunnin keskusyksikköaikaa ja 16 megatavua keskusmuistia. Kunkin testin kohdalla oikea tuloste antaa 5 pistettä, ja väärä 0 pistettä. Aika- tai muistirajan ylittäminen tuottaa tulosteen oikeellisuudesta riippumatta 0 pistettä. Tehtävän maksimipistemäärä on siis 100 pistettä. Jos vähintään kaksi kilpailijaa päätyy samaan kokonaispistemäärään, päätetään kilpailijoiden järjestys lopputuloksissa vertailemalla ratkaisujen suoritusaikoja (nopeampi on parempi). Esimerkkejä syötetiedostoista sekä vastaavista tulostiedostoista Kukin esimerkki käyttää samaa tekstitiedostoa text.in, joka on annettu alla. text.in: Tilastokeskuksen verkkosivuilla voi tutustua monenlaiseen Suomea koskevaan tilastotietoon. Poimin esimerkiksi tilastotietoa keskiansioista. Naisten keskipalkka vuonna 2004 oli 2137 euroa kuukaudessa. Miesten keskipalkka oli 2655 euroa kuukaudessa. Vuoden 2004 keskipalkka kaikkien palkansaajien osalta oli 2397 euroa kuukaudessa. Vuonna 2005 kukin mainittu keskipalkka oli melkein 100 euroa korkeampi. Silloin naisten keskipalkka oli 2227 euroa ja miesten 2750 euroa kuukaudessa. Kaikkien palkansaajien keskipalkka vuonna 2005 oli 2492 euroa kuukaudessa. Esimerkkihaku 1 query.in: Keskipalkka Euroa query.out: 3 4 5 6 7 8 Esimerkkihaku 2 query.in: KESKIPALKKA 2005 euroa query.out: 6 8 Esimerkkihaku 3 query.in: tilasto query.out: 0 Esimerkkihaku 4 query.in: EUROA kuukaudessa Euroa query.out: 7 2

Datatähti 2007 -kilpailu Ohjelmointitehtävä 2/2: Minigolf HUOM: Tutustuthan huolellisesti tehtävien sääntöihin ja palautusohjeisiin (sivu 7) Tarkastellaan yksinkertaista pienois- eli minigolfin tietokoneversiota. Minigolf-rata kuvataan suorakaiteen muotoisena ruudukkona, ja kukin ruutu voi olla joko tyhjä, seinänpala, pallon alkuruutu, tai reikä (pallon tavoiteruutu). Lisäksi oletetaan, että ruudukko on kokonaan seinän ympäröimä. Pelin tavoite on lyödä pallo alkuruudusta reikään (loppuruutuun) mahdollisimman pienellä lyöntimäärällä. Kukin lyönti voi olla pituudeltaan vahintään yksi ja korkeintaan k ruutua, missä k on syötteessä annettu kokonaislukuparametri. Tehtäväsi on toteuttaa ohjelma, joka etsii parhaan tavan selvittää annettu minigolf-rata. Ratkaisu ei välttämättä ole yksikäsitteinen, vaan voi olla monta erilaista lyöntien kombinaatiota, jotka saavat pallon reikään samalla (ja minimaalisella) lyöntimäärällä. Syöte Ohjelmasi lukee syötteenä yhden ASCII-tekstitiedoston, jonka nimi on minigolf.in. Tiedoston minigolf.in ensimmäinen rivi sisältää yhden kokonaisluvun, joka kertoo lyönnin maksimipituuden k. Seuraavat m riviä, joista kukin sisältää tasan n merkkiä (sekä rivinvaihdon), kuvaavat m riviä ja n saraketta omaavan minigolf-ruudukon. Rivien ja sarakkeiden lukumäärille pätee 1 m 3500 ja 1 n 3500. Kukin ruudukon kuvaukseen sisältyvä merkki on jokin alla luetelluista vaihtoehdoista. Tyhjä: - Seinänpala: X Pallon alkuruutu: Reikä (pallon tavoiteruutu): H Luonnollisesti alkuruutu ja reikä ovat yksikäsitteisiä eli tiedostossa on täsmälleen yksi merkki sekä täsmälleen yksi merkki H. Lisäksi voit olettaa, että annetulle ruudukolle on olemassa ratkaisu (eli pallo on mahdollista liikuttaa alkuruudusta loppuruutuun tyhjiä ruutuja pitkin). Alla on esimerkki tiedostosta minigolf.in (katso myös Kuva 3). Tässä lyönti voi olla korkeintaan viiden ruutuaskeleen pituinen, ja ruudukossa on 5 riviä sekä 8 saraketta. 5 -------- -----X-- H-X--X-- XXX---- -------- Lyönti Yksittäinen lyönti on pituudeltaan vähintään 1 ja korkeintaan k ruutua, missä parametri k on annettu tiedoston minigolf.in ensimmäisellä rivillä. Lyönti voi suuntautua johonkin Kuvassa 1 luetelluista kahdeksasta pääsuunnasta. 3

1. Ylös (YL) 5. Alas (AL) 8. 1. 2. 2. Ylös oikealle 45 (YO) 3. Oikealle (OI) 6. Alas vasemmalle 45 (AV) 7. Vasemmalle (VA) 7. 3. 4. Alas oikealle 45 (AO) 8. Ylös vasemmalle 45 (YV) 6. 5. 4. Kuva 1: Pallon mahdolliset lyöntisuunnat. Huomaa, että lyönnin pituutta mitataan ruutuaskeleilla. Esimerkiksi 3 askelta vasemmalle menevä lyönti katsotaan samanpituiseksi kuin 3 askelta vasemmalle yläviistoon menevä lyönti, vaikka euklidiseen etäisyyteen pohjautuen jälkimmäinen lyönti kulkeekin 2-kertaisen matkan. 1. 2. 3. 4. 5. 6. Kuva 2: Pallon reagoiminen seinäkosketuksiin. Pallo kimpoaa seinään osuessaan, mikäli osuma tapahtuu ennen kuin pallo on kulkenut lyönninpituuden määrittämän askelmäärän. Kimpoaminen ei vaikuta pallon kulkemien ruutuaskeleiden kokonaismäärään, vaan se ainoastaan muuttaa pallon kulkusuuntaa. Pallon kimpoaminen noudattaa Kuvassa 2 esitettyjä sääntöjä, jotka on selitetty alla. Pallon käyttäytymiseen vaikuttaa se, että se on pelissä tosiasiassa neliön muotoinen. 1. Pallon jokin muu kuin etenemissuunnan puoleinen sivu 1 koskettaa seinänpalaa 2. Tällöin pallon suunta ei muutu. 1 Merkitty kuvassa paksunnetulla viivalla. 2 Merkitty kuvassa tummanharmaalla. 4

2. Vaaka- tai pystysuoraan liikkuvan pallon etenemissuunnan puoleinen sivu törmää seinään. Tällöin pallo kimpoaa takaisin tulosuuntaansa. 3. Vaaka- tai pystysuoraan liikkuvan pallon etenemissuunnan puoleinen sivu törmää seinään, ja samalla myös toinen sivu koskettaa seinää. Pallo kimpoaa takaisin tulosuuntaansa. 4. 45 asteen kulmassa liikkuvan pallon toinen etenemissuunnasta näkyvä sivu osuu seinään. Pallo kimpoaa seinästä peilikuvana. 5. 45 asteen kulmassa liikkuvan pallon kumpikin etenemissuunnasta näkyvä sivu osuu seinään. Pallo kimpoaa seinästä takaisin tulosuuntaansa. 6. 45 asteen kulmassa liikkuvan pallon kumpikaan etenemissuunnasta näkyvä sivu ei osu seinään, mutta etenemissuunnan puoleinen kulma törmää seinän kulmaan. Pallo kimpoaa seinästä takaisin tulosuuntaansa. Minigolfrata on selvitetty pallon siirtyessä reiän sijaintiruutuun (riippumatta siitä, olisiko kyseisessä lyönnissä vielä askeleita käyttämättä). Kuva 3 näyttää esimerkin pallon kimpoamisesta. Muista että ruudukkoa ympäröi seinä, joten ruudukon ulkoreunus 3 käyttäytyy kimpoamisen suhteen samalla tavalla kuin yhtenäinen seinänpaloista koostuva reunus. - - - - - - - - - - - - - X - - H - X - - X - - X X X - - - - - - - - - - - - H H H Kuva 3: Esimerkki minigolfruudukosta ja sen ratkaisusta, kun k = 5. Vasemmalla ylhäällä on ruudukon tekstiesitys, oikealla ylhäällä on vastaava graafinen esitys, ja alarivin kuvat näyttävät tavan selvittää rata kahdella lyönnillä. 3 Esitetty kuvassa paksunnetulla viivalla. 5

Tuloste Ohjelmasi kirjoittaa syötteenä annetun radan optimiratkaisun uuteen ASCII-tekstitiedostoon nimeltä minigolf.out. Tiedoston ensimmäiselle riville tulostetaan yksi kokonaisluku h, joka kertoo minimimäärän lyöntejä, jolla annettu rata saadaan selvitettyä. Seuraavat h riviä luettelevat järjestyksessä sellaiset h lyöntiä, jotka samassa järjestyksessä suoritettuna siirtävät pallon alkuruudusta reikään. Kukin näistä riveistä kuvaa yhden lyönnin. Yksittäisen lyönnin kuvaus koostuu lyönnin lähtösuunnan kaksikirjaimisesta lyhenteestä sekä lyönnin pituuden kertovasta kokonaisluvusta. Lyhenteen ja lyönnin pituuden välissä on yksi välilyönti. Lyöntisuuntien kaksikirjaimiset lyhenteet on esitetty suluissa Kuvassa 1. Toteutustiedosto ja pisteytys Ohjelmasi toteutuksen tulee olla yhdessä lähdekooditiedostossa. Tiedoston nimen tulee olla minigolf.x, missä tiedostopääte x vastaa käyttämääsi ohjelmointikieltä (esim. minigolf.c, katso ohjeet sivulla 7). Ohjelmaasi testataan 20 kertaa erilaisilla syötteillä. Ohjelmasi saa kutakin testiä varten 1 sekunnin keskusyksikköaikaa ja 16 megatavua keskusmuistia. Kunkin testin kohdalla oikea tuloste antaa 5 pistettä, ja väärä 0 pistettä. Aika- tai muistirajan ylittäminen tuottaa tulosteen oikeellisuudesta riippumatta 0 pistettä. Tehtävän maksimipistemäärä on siis 100 pistettä. Jos vähintään kaksi kilpailijaa päätyy samaan kokonaispistemäärään, päätetään kilpailijoiden järjestys lopputuloksissa vertailemalla ratkaisujen suoritusaikoja (nopeampi on parempi). Esimerkkejä syötetiedostoista sekä vastaavista tulostiedostoista Esimerkkiruudukko 1 (vastaa Kuvaa 3) minigolf.in: 5 -------- -----X-- H-X--X-- XXX---- -------- minigolf.out: 2 VA 4 YO 5 Esimerkkiruudukko 2 minigolf.in: 6 -X----X---- ---------XXX ----X-XX---- XXXXX-X----- ------X-XX-- --XX--X----- ------------ --X-----X-Hminigolf.out: 3 AO 5 AL 5 AO 5 6

Sääntöjä ja ohjeita Mitä palautetaan? Kunkin ohjelmointitehtävien vastaus koostuu tehtävän yhteydessä mainitulla tavalla nimetystä yhdestä lähdekooditiedostosta. Siis kummallekin tehtävälle oma tiedosto. Älä lähetä esimerkiksi käännettyä ohjelmatiedostoa. Sallitut ohjelmointikielet Kunkin ohjelmointitehtävän vastauksessa sallitut ohjelmointikielet ovat C, C++ ja Pascal. Lähdekooditiedostot Lähdekooditiedoston nimen tiedostopääte määräytyy seuraavasti: kieli C C++ Pascal tiedostopääte c cpp pas Kunkin lähdekooditiedoston alussa pitää olla kommenttiosio, joka sisältää seuraavat tiedot: 1. Otsikkoteksti Datatähti 2007 -alkukilpailu 2. Tehtävän numero 3. Oma nimesi 4. Oma syntymäaikasi Ohjelmakoodin kirjoitusasu on muuten vapaa (esim. koodin selkeyttä ei arvostella). Ohjelman toiminta Ohjelmasi on noudatettava alla lueteltuja vaatimuksia, tai muuten seurauksena saattaa olla pistemenetyksiä. Ohjelma saa lukea ja kirjoittaa vain tehtävässä nimettyjä tiedostoja. Erityisesti näppäimistöltä lukeminen tai näytölle tulostaminen on kiellettyä. Tulostiedoston täytyy aina päättyä rivinvaihtoon. Ohjelmointikielissä C ja C++ pääohjelman main suorituksen pitää päättyä lauseeseen return 0; (Pascal-kääntäjä huolehtii tästä puolestasi). Ohjelmointikielessä pitää rajoittua vain sen standardoituihin peruspiirteisiin, ja välttää laite- tai kääntäjäkohtaisia erikoisuuksia. Ohjelmointikielissä C ja C++ on käytössä standardoitu matematiikkakirjasto (eli käännettäessä annetaan valitsin -lm). Ohjelmointikielessä C++ on käytössä myös kirjasto Standard Template Library (STL), koska se on osa kielen standardia. 7

Resurssirajat Tehtävissä viitattiin seuraaviin resurssirajoihin: Työmuisti Keskusyksikköaika Koodin ajoympäristö Käsittää kaiken muun ohjelmasi käyttämän muistin paitsi sen suorituskelpoista ohjelmakoodia. Sisältää sen ajan, jonka tietokoneen keskusyksikkö käyttää suorittaessaan sinun omaa ohjelmakoodiasi sekä sen kutsumia kirjastoaliohjelmia. Se ei sisällä sitä aikaa, jonka keskusyksikkö käyttää suorittaessaan käyttöjärjestelmäpalveluita, kuten tiedostojen avaamisia ja sulkemisia. Keskusyksikköajan mittaarina toimii Linux/Unix ympäristön ns. user time. Testitietokoneen nopeutta voit arvioida sen pohjalta, että siinä on AMD Athlon 3200+ -prosessori. Testitietokoneessa on Linux-käyttöjärjestelmä, ja kunkin ohjelmointikielen kanssa käytetään seuraavia kääntäjiä: Kieli Kääntäjä Versio Kielistandardi (valitsimet) Optimointitaso C gcc 4.0 ANSI/ISO C89/90 (-ansi) -O2 -static C++ g++ 4.0 ISO C++ (-ansi) -O2 -static Pascal Free Pascal 2.0 orland Turbo Pascal 7.0 (-Mtp -Sg) -O2 -XS Ohjelmointitehtävien vastausten palautus Jos samalta henkilöltä tulee kilpailuaikana useita eri ratkaisuja, niin viimeinen niistä arvostellan. Jos kilpailija lähettää vastauksensa myöhästyneenä, niin järjestäjillä on oikeus jättää se huomiotta. Ratkaisujen palautus tapahtuu sähköpostitse osoitteeseen heikki.hyyro@cs.uta.fi. Viestin rakenne on seuraava: Kirjoita sähköpostin otsikkokenttään (subject) teksti Datatähti 2007 -alkukilpailun vastaukset. Kirjoita viestin rungoksi omat yhteystietosi: 1. Nimesi 2. Syntymäaikasi 3. Postiosoitteesi 4. Puhelinnumerosi 5. Sähköpostiosoitteesi Kumpikin lähdekooditiedosto laitetaan sähköpostin mukaan erillisenä liitetiedostona. Sähköpostiohjelmissa tämän toiminnon nimi on yleensä Liitä tiedosto, Attach File tai vastaava. Sähköpostivastauksen katsotaan lähteneen ajoissa, jos sen aikaleima on kilpailuajan sisällä. Tämä aikaleima katsotaan sähköpostin välittäneestä palvelinkoneesta. Kysymyksiä (ja vastauksia) Voit esittää sähköpostitse täsmennyskysymyksiä ohjelmointitehtäviin tai niiden palautukseen liittyen. Käytä edellä annettua vastausten palautusosoitetta. Kysymykset ja vastaukset laitetaan näkyviin kisasivustolle ilman kysyjän nimeä. 8