4. tekmovanje ijs v znanju računalništva

37
4. tekmovanje IJS v znanju računalništva Naloge in rešitve Janez Brank 28. marca 2009

Upload: bazyli

Post on 01-Feb-2016

51 views

Category:

Documents


0 download

DESCRIPTION

4. tekmovanje IJS v znanju računalništva. Naloge in rešitve Janez Brank 28. marca 2009. 1.1 Kolikokrat najmanjši. Dano je zaporedje števil Kolikokrat se v njem pojavi najmanjše število? Primer: 10, 5, 8, 7, 5, 5, 20, 7, 8, 8, 8, 6 Rezultat: 3 (ker se 5 pojavi trikrat) - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: 4. tekmovanje IJS  v znanju računalništva

4. tekmovanje IJS v znanju računalništva

Naloge in rešitve

Janez Brank28. marca 2009

Page 2: 4. tekmovanje IJS  v znanju računalništva

1.1 Kolikokrat najmanjši

• Dano je zaporedje števil• Kolikokrat se v njem pojavi

najmanjše število?– Primer: 10, 5, 8, 7, 5, 5, 20, 7, 8, 8, 8, 6– Rezultat: 3 (ker se 5 pojavi trikrat)

• Napiši program, ki prebere zaporedje in izpiše število pojavitev najmanjšega števila.

Page 3: 4. tekmovanje IJS  v znanju računalništva

1.1 Kolikokrat najmanjši

• Berimo števila eno po eno– V neki spremenljivki hranimo najmanjše število

doslej (recimo m)– V drugi spremenljivki pa število pojavitev m-ja– Če je naslednje število < m, postane novi m

(in števec postavimo na 1)– Sicer, če je naslednje število = m,

povečamo števec za 1

Page 4: 4. tekmovanje IJS  v znanju računalništva

1.2 Označevanje kovancev

• Izpiši 20 milijonov različnih 5-mestnih nizov, v katerih nastopajo le znaki 0123456789ABCDEFGHJKMNPRTVWXYZ

• Možnih je veliko različnih rešitev• Npr. 5 gnezdenih zank od 0 do 29

– V najbolj notranji zanki sestavimo iz vseh petih števcev naslednji niz in ga izpišemo

– V neki spremenljivki štejmo izpisane nize, če jih je že 20 mio, ne izpisujemo več

Page 5: 4. tekmovanje IJS  v znanju računalništva

1.3 Citati

• Dano je zaporedje številk strani: – 2 5 6 8 11 28 29 30 31 67

• Če se pojavlja več zaporednih številk, jih hočemo zapisati z vezajem– Vmes pa vejice– 2, 5-6, 8, 11, 28-31, 67

Page 6: 4. tekmovanje IJS  v znanju računalništva

1.3 Citati

• V spremenljivki si zapomnimo začetek in konec trenutne skupine več zaporednih številk (npr. 28, 29, 30, 31)

• Ko preberemo naslednjo številko, pogledamo, ali nadaljuje to skupino ali začenja novo skupino– Če začenja novo, staro skupino izpišemo– Če sta začetek in konec skupine enaka, izpišemo to

številko strani samo po sebi– Sicer pa začetek in konec, vmes pa vezaj

• V spremenljivki si zapomnimo, ali smo že kaj izpisali, tako da lahko pred vsako skupino razen prve postavimo še vejico in presledek

Page 7: 4. tekmovanje IJS  v znanju računalništva

1.4 Smrkci

• Imamo kvadrat 256 × 256 enot• Osemkrat ga razpolovimo

– Po vsaki razpolovitvi obdržimo S, J, Z ali V polovico

– Kakšne so koordinate ostanka po vseh osmih razpolavljanjih?

Page 8: 4. tekmovanje IJS  v znanju računalništva

1.4 Smrkci

• Rešitev:– Koordinate hranimo v spremenljivkah,

npr. xMin, xMax, yMin, yMax– V vsakem koraku eno od njih spremenimo– Npr. če obdržimo severno polovico:

yMax := (yMin + yMax) / 2– Če obdržimo vzhodno polovico:

xMin := (xMin + xMax) / 2– Ipd.

Page 9: 4. tekmovanje IJS  v znanju računalništva

1.5 Železnica

• Imamo dva optična senzorja, ki zaznata, ali je nad njima vagon ali ne

• Razmik med senzorjema je manjši kot med vagoni

• Vagoni lahko prihajajo levo ali desno(tir pa je en sam)

• Sistem te pokliče ob spremembi stanja senzorja

• Štej vagone v vsaki smeri vožnje

Page 10: 4. tekmovanje IJS  v znanju računalništva

1.5 Železnica

• Rešitev:– V neki spremenljivki si zapomnimo dosedanje

stanje senzorjev– Če sta bila prej oba žarka neprekinjena in je

zdaj eden prekinjen, vemo, da je prišel nov vagon

– Če je zdaj prekinjen desni žarek, prihaja vagon z desne in se pelje proti levi, sicer pa je ravno obratno

– V še dveh globalnih spremenljivkah imamo števca vagonov (posebej za leve in za desne), ki ju povečamo, ko se pojavi nov vagon

Page 11: 4. tekmovanje IJS  v znanju računalništva

2.1 Soglasniški podnizi

• Dan je seznam besed• Zanima nas, katera vsebuje najdaljši

strnjeni soglasniški podniz– strjenka, besedna, skrbstvo, pristno

Page 12: 4. tekmovanje IJS  v znanju računalništva

2.1 Soglasniški podnizi

• Besede obdelujmo eno za drugo• V spremenljivki hranimo najboljšo dosedanjo

besedo (in dolžino njenega najdaljšega soglasniškega podniza)

• Za trenutno besedo pogledamo, kako dolg je njen najdaljši soglasniški podniz– Če je boljša od dosedanje najboljše, si jo zapomnimo

• Kako ugotoviti dolžino najdaljšega soglasniškega podniza?– Postavimo nek števec na 0– Gremo po črkah besede

• Pri soglasniku povečamo števec za 1• Pri samoglasniku ga postavimo na 0

– Zapomnimo si največjo vrednost števca.

strjenka012340120

Page 13: 4. tekmovanje IJS  v znanju računalništva

2.2 Kje sem že to posnel?

• Imamo seznam točk, posnetih z GPSom: (ti, xi, yi)

• In seznam slik, za vsako je tudi znan čas

• Oba seznama sta urejena po času• Radi bi vsaki sliki pripisali koordinate

tiste točke, ki ji je po času najbližja

Page 14: 4. tekmovanje IJS  v znanju računalništva

2.2 Kje sem že to posnel?

• V spremenljivkah hranimo časa (t1 in t2) in koordinati dveh zaporednih točk

• Naj bo t čas trenutne slike• Če je t1 ≤ t < t2, pripišimo tej sliki

koordinate ene od obeh točk in se pomaknimo na naslednjo sliko

• Sicer se pomaknimo naprej po zaporedju točk (preberimo naslednjo točko, ipd.)

• Posebej moramo paziti še na slike, ki so po času pred prvo ali za zadnjo točko

Page 15: 4. tekmovanje IJS  v znanju računalništva

2.3 Avtocesta

• Tovornjaki peljejo mimo dveh postaj na avtocesti:– Začetna postaja dodeli tovornjaku zaporedno

številko (1, 2, 3, …), on si jo zapomni– Končni postaji tovornjak sporoči svojo številko

(ki jo je dobil od začetne postaje)– Sistem nas pokliče v obeh primerih

in nam sporoči številko tovornjaka– Zanima nas, kateri tovornjaki so pot prevozili

prehitro– Varčevati moramo s časom in pomnilnikom

Page 16: 4. tekmovanje IJS  v znanju računalništva

2.3 Avtocesta• Imejmo seznam parov

(številka tovornjaka, čas prevoza prve postaje)– Urejeni so po zaporedni številki, kar hkrati pomeni tudi

po času• Ko pride mimo prve postaje, dodamo nov zapis na

konec• Sproti brišemo z začetka seznama stare zapise

(take, ki gotovo niso vozili prehitro)• Ko pride tovornjak T mimo druge postaje,

pogledamo zapis na začetku seznama; če ima večjo številko kot T, potem T-ja ni več v seznamu in ni vozil prehitro, sicer pa je

• Če je pomnilnika premalo, lahko najstarejše zapise brišemo tudi, če še niso prestari– Ampak potem lahko kakšnega prehitrega voznika spregledamo

Page 17: 4. tekmovanje IJS  v znanju računalništva

2.4 UTF-5

• 21-bitno številko znaka v standardu Unicode lahko takole razbijemo na več 5-bitnih:– Vrinimo na levi ničle, da bo število bitov večkratnik 4– Razbijemo na četverice bitov– Vsaki četverici vrinemo na začetku 0, razen zadnji, ki

dobi 1– Primer: 1 1100 0100 0111 00001 01110 00100 10111

• Po neki liniji prihajajo takšne peterice, naš podprogram jih sprejema

• Ko se jih nabere za cel znak, ga moramo sporočiti naprej

Page 18: 4. tekmovanje IJS  v znanju računalništva

2.4 UTF-5

• Doslej prebrani del znaka hranimo v neki globalni spremenljivki x

• Ko pride nova peterica, zamaknemo x za štiri bite v levo in v spodnje štiri bite skopiramo istoležne bite nove peterice

• Če ima nova peterica najvišji bit prižgan, znak izpišemo in postavimo x spet na 0

Page 19: 4. tekmovanje IJS  v znanju računalništva

2.5 Break considered harmful

• Mislimo si preprost programski jezik, ki podpira med drugim stavke while, if/else, continue, break

• Radi bi se znebili stavka break• Opiši postopek, ki predela dani program

tako, da bo deloval enako, ne bo pa vseboval breaka

Page 20: 4. tekmovanje IJS  v znanju računalništva

2.5 Break considered harmful

• Zanke obdelujmo od notranjih proti zunanjim • Namesto break lahko uporabimo continue• Preprečiti pa moramo, da bi se zanka nadaljevala

z naslednjo iteracijo• Na primer: iz while (Pogoj) Stavek

naredimo{ B = false; while (! B && Pogoj) Stavek' }

• Pri tem smo Stavek' dobili iz Stavek tako, da smo vsak break spremenili v { B = true; continue; }

• Spremenljivka B ne sme biti ena sama za vse zanke, pač pa po ena za vsak nivo gnezdenja

Page 21: 4. tekmovanje IJS  v znanju računalništva

3.1 Undo

• Dani sta operaciji WRITE(s) in UNDO(n), pri čemer undo razveljavi tudi prejšnje razveljavitvene ukaze

• Primer:– WRITE(danes); WRITE(je); UNDO(1);

WRITE(lep); UNDO(2); WRITE(dan) danesjedan

• Preberi dolgo zaporedje takih operacij in izpiši končni rezultat

Page 22: 4. tekmovanje IJS  v znanju računalništva

3.1 Undo

• Učinkovita rešitev je npr. ta, da pregledamo zaporedje od konca proti začetku

• Ko vidimo UNDO(n), preskočimo prejšnjih n ukazov

• Pri vsakem označimo, ali smo ga preskočili ali ne

• Na koncu izpišemo nize iz nepreskočenih ukazov WRITE(…)

Page 23: 4. tekmovanje IJS  v znanju računalništva

3.2 Žaba in lokvanji

• Dano je zaporedje lokvanjev 1..nv ravni vrsti, v enakomernih presledkih

• Po njih skače žaba• Včasih se lokvanj, s katerega se

odrine žaba, potopi• Kdaj je žaba prvič na takem lokvanju,

da k enot levo in desno od njega ni nobenega drugega lokvanja?

Page 24: 4. tekmovanje IJS  v znanju računalništva

3.2 Žaba in lokvanji

• Naivna rešitev: imejmo tabelo potopljen[1..n], v vsakem koraku poglejmo k sosednjih v vsaki smeri, če so vsi potopljeni

• Bolj učinkovito: za vsak lokvanj i vzdržujmo številki najbližjega nepotopljenega v vsaki smeri (recimo L[i] in D[i])

• Ko se i potopi, popravimo:D[L[i]] := D[i];L[D[i]] := L[i]

• Posebej moramo seveda paziti na začetku/koncu zaporedja ali pa postaviti stražarje

Page 25: 4. tekmovanje IJS  v znanju računalništva

3.3 Otoki

• Dan je zemljevid, predstavljen s črno-belo karirasto mrežo (pike = otoki, # = kopno)

• Zanima nas največja globina gnezdenja otokov

....................................................

............................#######........######...

........#############.......########.....###....###.

.......#####..###.######.....#########...##..#...##.

......####............######..####..###..##....###..

....#####..########..######.....#######..########...

....#####..#.....##..#####..........###..########...

.####.....##.###..#.....#####..#.##.###....###..###.

...####...#..#.#..##..#################......#####..

..###....##.####..##..................###.....####..

....##..##..###...#....########...##..#####.....##..

....#..###......###....##.###.#######.######...##...

..###.#############..###########..##..######..##....

..#...#######...########..............####..........

..#.......................#################.........

..###########################.......................

....................................................

Page 26: 4. tekmovanje IJS  v znanju računalništva

3.3 Otoki• Rešitev: barvanje (npr. z iskanjem v širino)

– Dodaj začetno polje v vrsto in ga pobarvaj v ciljno barvo– Dokler vrsta ni prazna:

• Vzemi polje z začetka vrste, recimo mu p• Tiste p-jeve sosede, ki so primernega tipa (vodni/kopni) in jih še

nismo pobarvali, pobarvaj v ciljno barvo in dodaj v vrsto.

• Pobarvajmo vsa vodna polja, dosegljiva z zunanjega roba, z barvo 0 (to je morje)

• Pobarvajmo z barvo 1 vsa kopna polja, dosegljiva s polj barve 0

• Nato z barvo 2 vsa vodna polja, dosegljiva s polj barve 1• Nato z barvo 3 vsa kopna polja, dosegljiva s polj barve 2• Ipd.

Page 27: 4. tekmovanje IJS  v znanju računalništva

3.4 Strupi

• Dani so strupi 1..n (n ≤ 15)• Nekatere od njih ima pacient že v telesu• Nekatere kombinacije strupov povzročijo

takojšnjo smrt• Nekatere kombinacije strupov se med

seboj izničijo in izginejo iz telesa• Radi bi postopoma dodajali v telo strupe

tako, da bi se sčasoma vsi izničili med sabo, ne da bi pacient med tem kdaj umrl

Page 28: 4. tekmovanje IJS  v znanju računalništva

3.4 Strupi

• To je v bistvu iskanje najkrajših poti v grafu– Za vsako možno kombinacijo strupov je ena točka

• Npr. z iskanjem v širino:– Dodaj začetno kombinacijo strupov v vrsto– Dokler vrsta ni prazna:

• Poberi kombinacijo z začetka vrste, npr. A• Za vsak strup s od 1 do n:

– Če vsebuje A {s} kakšno smrtonosno kombinacijo then continue– Pobriši iz A {s} strupe vseh tistih kombinacij, ki so vsebovane v

njem in se izničijo.– Dobimo neko novo kombinacijo B.– Če je še nismo nikoli dodali v vrsto,

jo dodajmo zdaj in si zapomnimo dolžino poti do nje

Page 29: 4. tekmovanje IJS  v znanju računalništva

3.5 EPS

• Dan je majhen nabor ukazov za obdelavo podatkov na skladu– Nimamo pa spremenljivk, zank ipd.; imamo pa pogojni

skok

• Napiši program, ki obrne vrhnjih n elementov sklada.

Page 30: 4. tekmovanje IJS  v znanju računalništva

3.5 EPS

• Glavni izziv je, kako imeti ves čas pri roki na vrhu sklada tisto, kar tisti hip potrebujemo, ostale stvari pa odmakniti tako, da nam niso v napoto, vendar pa da bomo obenem še vseeno znali spet priti do njih, ko jih bomo potrebovali

• Možnih je več rešitev, tale je razmeroma preprosta:

Page 31: 4. tekmovanje IJS  v znanju računalništva

Robot v labirintu

(tekmovanje programov)

Page 32: 4. tekmovanje IJS  v znanju računalništva

Opis naloge• Karirasta mreža, nekatera polja so prosta, druga zazidana• Na prostem polju lahko stoji kocka• Po mreži se giblje robot

– Kocke ne loči od zidu– Kocke lahko pobira in odlaga (na prosta polja)– Vidi le pod kotom 45 stopinj in omejeno daleč

• Iščemo izhod iz labirinta• Možne poteze: naprej, levo, desno, u-obrat, poberi, odloži.

Page 33: 4. tekmovanje IJS  v znanju računalništva

Možna rešitev• Obnašanje robota opišimo na dveh ravneh:

– Na katero polje hoče robot priti?– Kako naj pride do tja?

• Na katero polje hočemo priti?– Če vemo za kakšno izhodno polje, pojdimo tja– Sicer, če vemo za kakšno polje, s katerega bi lahko videli

kakšen del labirinta, ki ga še nismo videli, pojdimo tja– Sicer, če vemo za kakšno polje, ki je ali kocka ali zid, ne

vemo pa, kaj od tega dvojega je, pojdimo tja in ga skušajmo pobrati (da bomo videli, ali je kocka ali zid)

– Če nič od tega ne gre, pomeni, da smo zazidani in ne moremo ven (v naših testnih primerih tega ni bilo)

Page 34: 4. tekmovanje IJS  v znanju računalništva

Možna rešitev

• Kako priti do želenega ciljnega polja?– Kot problem najkrajše poti po grafu

(graf = že znani del labirinta)– Korak od enega polja je lahko sestavljen

iz 1 ali več potez robota• Če nam je v napoto kocka, moramo mogoče

narediti kaj takega: poberi, naprej, u-obrat, odloži, u-obrat

Page 35: 4. tekmovanje IJS  v znanju računalništva

Robot v labirintu

Rezultati

Page 36: 4. tekmovanje IJS  v znanju računalništva

Izvedba tekmovanja

• Prejeli smo 3 rešitve– 1 v pascalu, 2 v C++

• Ocenjevanje:– 31 labirintov– Ocena tekmovalca pri posameznem labirintu =

(cena najboljšega zaporedja potez)/(cena njegovega zaporedja potez)

– Če robot ni prišel iz labirinta, ima pri njem oceno 0

– Na koncu seštejemo ocene po vseh 31 labirintih

Page 37: 4. tekmovanje IJS  v znanju računalništva

Rezultati

Avtor Točke

Št. pravilno rešenih

labirintov

Rok Kralj 28,405 31

Matjaž Leonardis 14,713 18

Gašper Medved 4,430 9

(naključni robot) 0,131 11