1. Müsteeria

Lossis nimega Müsteeria elab võlur. Võlur võib kas muuta ennast haldjaks või tekitada haldja enda kõrvale paremale. Haldjas võib muutuda võlujoogiks (vasakul) ja draakoniks (paremal) või võlujoogiks (vasakul), võluriks (keskel) ja draakoniks (paremal).

Järgmine tabel näitab nende võimalike teisenduste tulemusi:

Enne Pärast

Need maagilised muutused võivad toimuda kuitahes palju kordi ja mistahes järjekorras: iga võlur ja iga haldjas võivad igal ajal muutuda.

Küsimus

Millist järjekorda ei ole võimalik Müsteerias saada, kui alustada ühest võlurist?

[Raadionupud]

A.

B.

C.

D.

Vastus

Õige vastus on: B.

Vastuse selgitus

Nummerdame maagilised teisendused järgmiselt:

Number Enne Pärast
1
2
3
4

Valik A on võimalik, kui alustame ühest võlurist ja rakendame teisendusi 1, 4, 2 ja 3.

Valik C on võimalik, kui alustame ühest võlurist ja rakendame teisendusi 2, 2, 3, 4 ja 1.

Valik D on võimalik, kui alustame ühest võlurist ja rakendame teisendusi 2, 1, 3 ja 3.

Üks kiire viis tuvastada, et variant B pole võimalik, on tähele panna, et teisendusreeglid loovad alati samaaegselt nii võlujoogi kui ka draakoni. Seetõttu peab Müsteerias olema võlujookide arv alati võrdne draakonite arvuga, aga variandi B puhul see nii ei ole.

See on informaatika!

Maagilisi teisendusi võib käsitleda kui reeglite kogumit, mida kasutatakse Müsteeria objektidest mustrite loomiseks.

Arvutiteaduses on kontekstivaba grammatika tööriist, mida saab kasutada mustreid genereerivate reeglite kirjeldamiseks. Kontekstivabad grammatikad suudavad kirjeldada nii formaalseid kui loomulikke keeli: korduvalt grammatikareegleid rakendades saame me genereerida sõnu, mis moodustavadki keele.

Selles ülesandes pidime me sisuliselt otsustama, milline antud sõnadest ei kuulu "Müsteeria keelde".

Kategooriad

2. Palkide sorteerimine

Jõe ääres on rida palke, kõik erineva suurusega. Henriku ülesanne on panna palgid suuruse järjekorda nii, et kõige väiksem oleks rea vasakus ja kõige suurem rea paremas otsas. Henrik kõnnib mööda kallast, peatudes alati kahe palgi vahel. Ta võrdleb nende kahe palgi suurusi ja vajadusel vahetab nende asukohad.

Henrik teab, et sõltumata palkide algsest järjekorrast saab ta need alati õigesti sorteerida järgmisel viisil:

  1. seisa kõige vasakpoolsemast palgist paremale
  2. korda, kuni jõuad kõige parempoolsemast palgist paremale:
    • kui vasakpoolne palk on parempoolsest väiksem: astu ühe palgi võrra paremale
    • muidu:
      1. vaheta need palgid
      2. kui sa pole esimese ja teise palgi vahel: astu ühe palgi võrra vasakule

Vaatame, kuidas Henrik sel viisil palke sorteerib:

Selles näites peab Henrik astuma vasakule ja paremale kokku 17 korda.

Sammude arv, mida Henrik peab sorteerimisel tegema, sõltub palkide algsest järjekorrast. Kuue palgi korral peab ta halvimal juhul astuma 25 sammu.

Küsimus

Kui palju samme võib Henrikul kuluda 60 palgi sorteerimisel?

[Raadionupud]

A. [0...30]

B. [6...70]

C. [59...300]

D. [59...3600]

Vastus

Õige vastus on: D.

Vastuse selgitus

[0...30] on vale. Isegi parimal juhul, kui palgid on juba alguses õiges järjekorras, peab Henrik rea lõppu jõudmiseks astuma 59 sammu, mida on rohkem kui 30.

[6...70] ja [59..300] on samuti valed. Selle tõestamiseks peame uurima halvimat juhtu, kui palgid on algselt vajalikule vastupidises järjekorras. Sel juhul jõuab Henrik k-ndal positsioonil oleva palgini ja liigutab selle esimesse ehk vasakpoolseimasse positsiooni, seejärel läheb ta positsioonil k+1 oleva palgi juurde. Nii teeb Hendrik k-ndal positsioonil oleva palgi puhul k–2 sammu selleni jõudmiseks ning k–2 sammu selle viimiseks rea algusesse. Seega kulub tal kõigi palkide peale kokku 2·(0+1+2+...+58) sammu. Lõpuks kulub tal veel 59 sammu rea lõppu jõudmiseks. Sammude summa on täpselt 59^2=3481 ning see arv ei kuulu kumbagi neist kahest lõigust.

[59...3600] on õige. Selle nägemiseks peame tõestama, et väidetav halvim juhtum on tõesti halvim. Kui Henrik jõuab k-ndal positsioonil oleva palgi juurde, on kõik sellest vasakul olevad palgid juba omavahel õigesse järjekorda sorteeritud, nii et tal on vaja ainult uus palk eelmiste seas õigesse kohta panna. Selleks kulub tal aga seda rohkem samme, mida kaugemale vasakule see palk viia tuleb. Seejärel läheb ta positsioonil k+1 oleva palgi juurde, kus kordub sama loogika. Seega tõesti on halvim juht see, kui iga järgmine palk tuleb viia rea vasakusse otsa.

See on informaatika!

Sorteerimine ehk jadas olevate objektide kindlasse järjekorda paigutamine on arvutiteaduse klassikaline ülesanne. Kõige sagedamini kasutatavad järjestused on arvuline järjekord (arvude jaoks) ja tähestikuline järjekord (tekstide jaoks). Efektiivne järjestamine on oluline paljude teiste algoritmide (nt otsimisalgoritmide) jaoks, mis nõuavad järjestatud sisendandmeid. Samuti võib järjestamine olla kasulik andmete normaliseerimisel ja inimloetava väljundi loomisel.

Üks tuntud sortimisalgoritme on nn päkapikumeetod (ingl gnome sort). See on lihtne ja opereerib korraga ühe jadaelemendiga, viies elemendi õigesse kohta elementide vahetamiste abil. Päkapikumeetodi (mida on samuti nimetatud rumalaks sorteerimiseks) pakkus välja Sharifi Tehnikaülikooli arvutiteaduse professor Hamid Sarbazi-Azad 2000. aastal.

Algoritmist rääkides tuleb alati mõelda, kui kiire see on, st millist operatsioonide arvu see nõuab sõltuvalt elementide arvust. Kui meil on N palki, kulub nende järjestamiseks päkapikumeetodil halvimal juhul ligikaudu N2 operatsiooni. Arvutiteaduses nimetatakse seda ruutkeerukuseks. Ülejäänud vastused selles ülesandes esindavad teisi võimalikke suhteid: konstantne keerukus [0..30] jaoks, lineaarne keerukus [6..70] jaoks ja lineaar-logaritmiline keerukus [59...300] jaoks.

Kategooriad

3. Miss Infinity

Ühe klassi õpilased suhtlevad oma klassikaaslastega vastavalt joonisele. Näiteks õpilane H suhtleb päeva jooksul ainult D, E ja F-ga.

Esmaspäeval tuli tööle uus matemaatikaõpetaja, keda kaks õpilast hakkasid tema soengu tõttu kohe kutsuma Miss Infinityks. Hüüdnimi levis õpilaste hulgas nii, et iga õpilane, kelle vestluskaaslastest rohkem kui pooled seda kasutasid, hakkas ka ise järgmisel koolipäeval uut õpetajat sel viisil hüüdma. Varsti kasutasid uut hüüdnime juba kõik klassi õpilased.

Küsimus

Kes olid need kaks õpilast, kellest hüüdnimi alguse sai?

(Kirjuta nende kahe õpilase tähised ilma muude märkideta, näiteks AB. Kui võimalikke lahendusi on mitu, sisesta ükskõik milline neist.)

[Tekstikast]

Vastus

Õige vastus on: CE või DE.

Vastuse selgitus

Esiteks paneme tähele, et hüüdnime levima hakkamiseks peab kahel hüüdnime kasutusele võtnud õpilasel olema mõni ühine sõber, kellel on kokku täpselt kolm sõpra. Kui ühisel sõbral on rohkem sõpru, pole kaks hüüdnime leiutajat nende hulgas enamuses. Kui ühisel sõbral on kaks sõpra, on need leiutajad ise ja siis hüüdnimi selle ühise sõbra kaudu kellelegi edasi ei levi. Täpselt kolme sõbraga on B, F ja H.

B sõpradest saame moodustada kolm paari: A ja C, A ja E, C ja E. Kui hüüdnime leiutaks A ja C, võtaks B selle küll järgmisel päeval kasutusele, aga pärast seda see edasi ei leviks. Kui hüüdnime leiutaks A ja E, võtaks selle järgmisel päeval kasutusele B ja F ning ülejärgmisel päeval H, aga rohkem see ei leviks. Kui hüüdnime võtaks kasutusele C ja E, leviks see nii:

Sarnaselt B juhuga saame F sõpradest paarid A ja E, A ja H, E ja H. Paari A ja E oleme juba analüüsinud. Kui hüüdnime leiutaks A ja H, võtaks selle järgmisel päeval kasutusele F, siis E ja siis B, aga edasi see ei leviks. Kui hüüdnime leiutaks E ja H, võtaks selle järgmisel päeval kasutusele F ja sellega asi lõpekski.

H sõpradest saame paarid D ja E, D ja F, E ja F. Kui hüüdnime leiutaks E ja F või D ja F, lõpeks selle levik jälle H juures. Kui hüüdnime võtaks kasutusele õpilased D ja E, leviks see nii:

Sellega oleme kõik võimalused ammendanud ja seega vastus on CE või DE.

See on informaatika!

Sotsiaalvõrgustikud mängivad info, ideede ja seisukohtade levitamisel suurt rolli. Mõte, mis ilmub sotsiaalvõrgustikku, kas levib kiiresti või kaob. Info sotsiaalvõrgustikes levimise kiiruse uurimine on väga populaarne suund informaatikas ja selle kiiruse suurendamine on kujunemas omaette oluliseks haruks reklaamimaailmas.

See ülesanne keskendub nn. lävendimudelile (ingl threshold model), milles igal isikul on lävend ehk kontaktide hulk, mis peab olema aktiivne (praegusel juhul tähendab see uue hüüdnime kasutamist), et ka isik ise muutuks aktiivseks (ehk hakkaks seda hüüdnime kasutama).

Kategooriad

  • Info mõistmine
  • Algoritmid
  • Graafid

4. Kopra Pagariäri küpsised

Kopra Pagariäris müüakse küpsiseid karpides, et inimestel oleks lihtsam neid teistele kinkida. Kasutatakse kahte tüüpi karpe: ühte mahub täpselt neli küpsist, teise seitse küpsist.

Pagariäri pannile mahub kuni 100 küpsist. Mõnikord küpsetatakse sellel küpsiseid selline arv, et neid ei saa nelja ja seitset küpsist mahutatavatesse karpidesse pakkida ilma, et mõni küpsis üle jääks. Näiteks ei saa sellistesse karpidesse täpselt pakkida 3 või 5 küpsist; ka mõned teised küpsisehulgad ei sobi.

Küsimus

Milline on suurim arv küpsiseid, mida saab sellel pannil küpsetada, aga mida ei saa nendesse karpidesse pakkida ilma, et mõni küpsis üle jääks?

[Täisarv]

Vastus

Õige vastus on: 17.

Vastuse selgitus

Etteantud karpidesse saab pakkida 4, 7, 8, 11, 12, 14, 15, 16, 18, 19, 20, 21 jne küpsist. Kui meil on neli järjestikust arvu, mida saab pakkida (näiteks 18 kuni 21), siis kõik suuremad arvud saame pakkida, liites mõnele eelnevatest kombinatsioonidest piisava hulga 4-küpsiselisi karpe (7-küpsiseliste karpidega saame kuluvate karpide arvu vähendada, aga põhimõttelist "saab / ei saa" otsust see enam ei mõjuta). Suurim arv, mida ei saa nende karpidega kombineerida, on seega 17.

See on informaatika!

Mündiprobleem (ehk Frobeniuse probleem) on matemaatiline ülesanne, milles otsitakse suurimat summat (Frobeniuse arv), mida antud nimiväärtustega müntidega maksta ei saa. Kui meil on münt väärtusega 1, pole probleemi ühegi arvuga, kuid kui jätame selle mündi välja, siis mõnda summat ei saa enam täpselt maksta. Kui meil on mündid ainult kahe väärtusega A ja B, siis selle komplekti Frobeniuse arv on A·B–A–B.

Suvalise arvu nimiväärtuste jaoks nii lihtsat valemit ei ole, kuid on olemas algoritmid. Näiteks saab kasutada dünaamilist plaanimist: kõigepealt eeldame, et antud müntidega on võimalik maksta ainult summat 0, seejärel vaatame iga järgmise summa X puhul, kas leidub selline nimiväärtus Y, et summa X–Y on makstavate hulgas. Kui selline Y leidub, lisame ka X makstavate summade hulka.

Kategooriad

  • Diskreetne matemaatika
  • Kombinatoorika

5. Drooni teekond

Droon stardib näidatud ruudustiku mõnes valges lahtris tabeli servaga paralleelses suunas.

Seejärel külastab droon täpselt kaheksat valget ruutu selliste juhiste järgi:

  1. Liigu 2 ruutu edasi.
  2. Pööra 90 kraadi vasakule (jäädes samasse ruutu).
  3. Liigu 4 ruutu edasi.
  4. Pööra 90 kraadi paremale (jäädes samasse ruutu).
  5. Liigu 2 ruutu edasi.

Küsimus

Mitu võimalikku stardiruutu ruudustikus kokku on?

[Täisarv]

Vastus

Õige vastus on: 8.

Vastuse selgitus

Vastuse leidmiseks paneme esmalt tähele, et olemas on neli sobivat teekonda:

Nende võimaluste leidmiseks on kõige lihtsam alustada viie järjestikuse valge ruudu otsimisega ja seejärel proovida otspunkte laiendada mõlemas suunas. Et olla kindel, peaksime seda tegema süstemaatiliselt, alustades näiteks ruudustiku ülemisest vasakust nurgast ja liikudes alumisse parempoolsesse nurka. Seejuures peame otsima nii horisontaalseid kui ka vertikaalseid viie ruuduga ribasid.

Drooni teekond on sümmeetriline, seega võib droon alustada iga nelja teekonna puhul ükskõik kummast otsast, seetõttu on erinevaid võimalikke stardiruute kaks korda rohkem ehk kaheksa.

See on informaatika!

Antud probleem on lihtne näide mustrisobitamisest, mis on üks ülesanne pilditöötluse valdkonnas. Siin on probleem määratud malliga (sammud 1–5) ning testruudustiku ehk pildiga, millelt malli otsida. Mallide sobitamisel on palju rakendusi, neid kasutatakse nii näotuvastuses kui meditsiinilise pildimaterjali analüüsimisel. Paljudes mustrisobitusmeetodites on kirjeldatud malli trajektoorina sarnaselt selle ülesande kirjeldusele.

Kategooriad

  • Info mõistmine
  • Algoritmid

6. Lemmikfilm

Kuus sõpra valivad, millist seitsmest filmist vaadata. Sõbrad hindavad filme nii:

Hinnangud parimast halvimani on järgmised:

Filmi nimetatakse lemmikfilmiks sellisel juhul, kui kõik sõbrad annavad sellele oma parima hinnangu. Näiteks film nr 1 ei ole lemmikfilm, sest Charles andis oma parima hinnangu filmile 4.

Küsimus

Kui suur on väikseim võimalik arv muudatusi hinnangutes, et üks film saaks lemmikfilmiks?

[Täisarv]

Vastus

Õige vastus on: 2.

Vastuse selgitus

Pole võimalik muuta ainult üht hinnangut, et mõni tabelis olnud filmidest muutuks lemmikfilmiks. Iga filmi jaoks leidus vähemalt kaks sõpra, kes hindasid mingit teist filmi paremaks:

Film Muud filmi eelistanute arv
1 4: Berta, Charles, Debora ja Franz
2 3: Charles, Edgar ja Franz
3 3: Charles, Edgar ja Franz
4 3: Berta, Edgar ja Franz
5 4: Berta, Charles, Debora ja Edgar
6 2: Charles ja Franz
7 3: Charles, Debora ja Franz

Nüüd peab veenma Charlesi ja Franzi, et nad kumbki muudaks üht hinnangut nii, et film 6 oleks nende lemmikfilm. Ilmne lahendus ainult kahe muutusega on, et Charles ja Franz võivad parandada oma hinnanguid filmile 6. Aga teise võimalusena võivad nad ka alandada nende filmide hinnangut, millele nad panid parema hinde kui filmile 6, see tähendaks filme 4 (Charles) ja 5 (Franz). Paneme tähele, et teine lahendus ei oleks võimalik, kui ühel (või mõlemal) sõbral oleks rohkem kui üks filmist 6 kõrgemalt hinnatud film.

See on informaatika!

Kuidas ülesande lahendamiseks vajalikku tabelit koostada?

Üks võimalus on kontrollida iga filmi ja iga sõbra puhul eraldi, kas see sõber on mõnele teisele filmile parema hinnangu andnud. Kuid kas selline algoritm on ka optimaalne? Kui meil on S sõpra ja F filmi, peame vaatama kõiki lahtreid S*F suuruses tabelis ja igaühte neist võrdlema selle sõbra hinnangutega ülejäänud F–1 filmile. Kokku peame niimoodi naiivselt toimetades tegema S·F·(F–1) reitingute võrdlemist.

Tegelikult piisab selleks, et näha, kas ühe sõbra hinnang konkreetsele filmile tekitab probleeme, teadma ainult tema parimat hinnangut. Kui konkreetne hinnang on madalam kui selle sõbra üldine parim, ei saa hinnatud film olla lemmik. See tähendab, et kui me saame kõigepealt teada iga sõbra parimad hinnangud (vaadates läbi F·S reitingut), saame kontrollida kõigi F·S hinnangu puhul, kas need on madalamad kui vaadeldava sõbra parim. Kokkuvõttes tuleb sellise alternatiivse algoritmi puhul koos parimate hinnangute eelarvutusega vaadata läbi 2·F·S hinnangut.

Kui S=6 ja F=7 kulutab esimene algoritm 252 ja teine 84 operatsiooni. Mõlemad algoritmid annavad sama tulemuse, kuid teine on efektiivsem kui esimene.

Arvutiteadlaste üheks põhitegevuseks ongi probleemide lahendamine mitte ainult õigesti, vaid ka võimalikult efektiivselt. Arvutite riistvara läheb küll aina kiiremaks, kui sellest pole palju kasu, kui programmeerijad selle kiiruse kasvu ebaefektiivsete algoritmidega "ära söövad".

Kategooriad

  • Info mõistmine
  • Algoritmid

7. Salastatud telefoninumber

Berta küsis oma sõbrannalt Annalt telefoninumbrit. Kuna Anna ei taha, et teised teaksid tema telefoninumbrit, andis ta paberi, kus telefoninumber oli salastatud. Hiljem seletas Anna Bertale, et number on kodeeritud sellisel viisil:

  • Telefoninumbri numbrid on kirjutatud 1. reale.
  • Iga number 2. reas tähendab telefoninumbris selle kohal olevale numbrile vahetult järgnevat numbrit.
  • Telefoninumber on täpselt üheksakohaline.

Küsimus

Milline neist on Anna telefoninumber?

[Raadionupud]

A. 123 456 789

B. 785 691 342

C. 173 592 846

D. 173 859 246

Vastus

Õige vastus on: C.

Vastuse selgitus

Kui me järjestame tabeli veerud ümber järgmiste numbrite järgi (nii, et iga number 2. reas on sama nagu järgmise veeru 1. rea number), kuvatakse õige vastus 1. reale.

See on informaatika!

Isikuandmete krüpteerimine on meie elus väga oluline. Keegi ei taha, et teised teaksid tema PIN-koodi või pangakonto parooli, keegi ei soovi, et teised tema kirjavahetust loeksid. Meie kirju, isikuandmeid ja raha pankades tuleb kindlalt hoida. Õnneks oskavad arvutid väga hästi sõnumeid krüpteerida ja arvutiteadlased näevad palju vaeva, et leida uusi võimalusi digiandmete turvamiseks.

Kahjuks pole arvutitele mõeldud krüptoalgoritmid sobivad kasutamiseks, kui asi puudutab infot, mida inimesed peavad paberile kirjutama või paberilt lugema. Sel puhul tuleb leppida vähem arvutusi nõudvate meetoditega, mis pole küll nii turvalised, kuid kaitsevad siiski juhusliku piiluja eest.

Telefoninumbri numbrid salvestasime oma ülesandes erilisel viisil. Selle asemel, et paigutada need telefoninumbris ilmumise järjekorda, oleme lisanud igale neist viite, mis näitab, kus asub järgmine number. Sarnaseid arvutites kasutatavaid struktuure nimetatakse lihtahelateks (ingl linked list) ja neil on mitmeid eeliseid. Kui tahame sellesse loendisse mõnda elementi teiste vahele lisada, ei pea me teisi elemente liigutama, piisab vaid kahe viite muutmisest.

Kategooriad

  • Info mõistmine

8. Naabrite arvud

Siim ja Peeter on naabrid: nende tubade aknad on üle tänava teineteise vastas. Iga päev mängivad nad mängu: õhtul enne magamaminekut kirjutavad mõlemad paberile arvu ja kleebivad selle oma aknale. Hommikul vaatavad mõlemad vastasaknal olevat arvu, liidavad selle oma arvule ja kinnitavad uue paberi saadud summaga enda aknale. Võidab see, kelle aknal oleval paberil on lõpuks väiksem arv.

Siim ja Peeter ärkavad erinevatel päevadel erinevatel aegadel. Akendel olevad lõplikud arvud sõltuvad sellest, millal kumbki neist ärkab. Oletame näiteks, et Siim kirjutab enne magamaminekut 19 ja Peeter 23. Kui Siim ärkaks enne Peetrit, asendaks ta oma aknal oleva arvu 19 arvuga 42. Peeter näeks siis arvu 42 ja kirjutaks oma aknale 65. Seega Siim võidaks. Kui mõlemad ärkaksid samal ajal, kirjutaksid nad mõlemad 42 ja mäng lõpeks viigiga.

Küsimus

Oletame nüüd, et Siim kirjutab enne magamaminekut arvu 25 ja Peeter arvu 47.

Milline järgnevatest variantidest ei ole võimalik?

[Raadionupud]

A. Siim kirjutab 72 ja Peeter kirjutab 119, seega Siim võidab.

B. Siim kirjutab 97 ja Peeter kirjutab 119, seega Siim võidab.

C. Siim kirjutab 72 ja Peeter kirjutab 72, seega on mäng viigis.

D. Siim kirjutab 97 ja Peeter kirjutab 72, seega Peeter võidab.

Vastus

Õige vastus on: B.

Vastuse selgitus

Variant B pole võimalik. Kui nad ärkavad samal ajal, kirjutavad nad mõlemad 72. Kui Siim ärkab enne Peetrit, kirjutab Siim 72 ja Peeter 119. Kui Peeter ärkab enne, kirjutab Peeter 72 ja Siim 97. Selleks, et Siim kirjutaks 97 ja Peeter 119, peaks nad mõlemad nägema sõbra summat enne oma arvu uuendamist, aga see pole võimalik.

See on informaatika!

Paljud arvutisüsteemid toetavad paralleelsust, kui korraga töötab rohkem kui üks protsess. Kui need samaaegsed arvutused muudavad ühiseid muutujaid, peame tagama nende värskenduste õige järjekorra. Näiteks rongipiletite broneerimissüsteemis saab mitu kasutajat korraga pileteid broneerida. Kui vabade kohtade arv on väiksem kui broneerimistaotluste arv, peame tagama, et ühtegi kohta ei broneeritaks topelt. Samaaegsete arvutuste analüüsimine on keeruline, kuna peame uurima kõiki võimalikke järjestusi, milles üksikud protsessid võiksid edeneda.

Kategooria

  • Loogika
  • Algoritmid

9. Värvi konna!

Arvuti ekraanil on joonistus konnast. Konna värv pole teada.

Värvi muutmiseks on meil olemas neli programmi, kuid me võime käivitada neist vaid ühe. Tahame olla kindlad, et programmi töö lõppedes on konn kindlasti roheline sõltumata sellest, mis värvi ta oli alguses.

Küsimus

Milline programm ei taga, et selle täitmise lõpus oleks konn rohelist värvi?

[Raadionupud]

A.

Kui konn on punane, siis värvi ta kollaseks, muidu värvi ta roheliseks.
Kui konn on kollane, siis värvi ta punaseks.
Kui konn ei ole kollane, siis värvi ta roheliseks.

B.

Kui konn on punane, siis värvi ta kollaseks.
Kui konn ei ole punane, siis värvi ta roheliseks.
Kui konn on kollane, siis värvi ta punaseks, muidu värvi ta roheliseks.

C.

Kui konn on kollane, siis värvi ta roheliseks.
Kui konn ei ole kollane, siis värvi ta punaseks.
Kui konn on punane, siis värvi ta roheliseks, muidu värvi ta kollaseks.

D.

Kui konn on kollane, siis värvi ta roheliseks, muidu värvi ta punaseks.
Kui konn on punane, siis värvi ta roheliseks, muidu värvi ta kollaseks.

Vastus

Õige vastus on: D.

Vastuse selgitus

Programmi A käivitamisel on pärast esimese käsu täitmist konn kas kollane või roheline, pärast teise käsu täitmist on ta kas punane või roheline, seega kolmanda käsu täitmisel tingimus "konn ei ole kollane" kehtib ja ta värvitakse roheliseks.

Kui käivitame programmi B, siis teise käsu täitmisel peab kindlasti paika tingimus "konn ei ole punane", seega värvitakse konn roheliseks, mille järel kolmas käsk värvib ta uuesti roheliseks.

Kui käivitame programmi C, siis teise käsu täitmisel peab kindlasti paika tingimus "konn ei ole kollane", seega värvitakse konn punaseks, mille järel kolmandas käsk värvib ta roheliseks.

Kui programmi D täitmise alguses on konn kollane, siis esimese käsu täitmisel värvitakse see roheliseks; selle järel tingimus "konn on punane" ei kehti ja seetõttu saab ta jälle kollaseks värvitud.

See on informaatika!

Programmeerides (kui rääkida imperatiivsetest programmeerimiskeeltest) võime kirjutada rea tingimuslauseid, mida täidetakse antud järjekorras. Tingimuslaused on kujul "kui C, siis A, muidu B" (ingl "if C then A else B") või ka ainult "kui C, siis A" (ingl "if C then A"), diagrammil näevad need välja selliselt:

Paneme tähele, et kaks programmi

kui C, siis A, muidu B

ja

kui C, siis A
kui mitte C, siis B

pole üldiselt ekvivalentsed ehk neil pole alati sama tähendus. Nimelt võib teisel juhul (kui tingimust C kontrollitakse kaks korda) käsu A täitmine muuta süsteemi olekut selliselt, et tingimus C muutub vääraks, seega käivitatakse nii käsk A kui ka käsk B. Esimese variandi puhul täidetakse kindlasti ainult üks kahest käsust (A või B). Sellist erinevust näeme ka vastusevariantide C ja D võrdlemisel.

Kategooriad

  • Algoritmid
  • Loogika

10. Põrandarobot

Põrandal liikuva roboti küljes on pliiats, mis jätab joone alati, kui ta liigub. Robot alustab valge põranda keskelt ja järgib neid juhiseid:

Paneme tähele, et:

  • "liigu 100 punkti" tähendab, et robot liigub otse edasi umbes veerandi kogu põrandast.
  • "liigu –50 punkti" tähendab, et robot liigub otse tagasi.
  • "pööra paremale 90 kraadi" puhul pöörab robot kohapeal 90 kraadi paremale.

Küsimus

Millise allolevatest joonistustest selline robot joonistab?

[Raadionupud]

A.

B.

C.

D.

E.

Vastus

Õige vastus on: D.

Vastuse selgitus

Valede vastuste kõrvaldamiseks ja õige vastuse kindlaks tegemiseks on erinevaid viise. Üheks näiteks on joonte tõmbamise kordade loendamine (4 välimises ja igal korral omakorda 4 sisemises tsüklis, kokku seega 16), kuid tuleb olla ettevaatlik juhuks, kui joon tõmmatakse teise joone peale. See viitab kahele keerulisemale mustrile (pildid 3 ja 4 ülal). Seejärel võime vaadata 45-kraadiste pöörete arvu. See välistab pildi 3, jättes vastuseks pildi 4.

Teine viis selle probleemi lahendamiseks on proovida kõiki joonistusi algoritme järgides järele teha:

Programm Tulemus

See on informaatika!

Paljud looduses leiduvad mustrid sünnivad väga lihtsaid reegleid mitu korda korrates. Põrandaroboti või nn kilpkonnagraafikaga saab seda protsessi kasutada meid ennast huvitavate mustrite loomiseks. Selles ülesandes on selgelt näha programmeerimise ja antud juhul koodiplokkide kordamise jõud. Isegi mõned valed vastused on huvitavad ja on loodavad väikeste muudetuste abil.

Selle ülesande lahendamine eeldab kas programmi osadeks jagamist ja esitatud mustrite analüüsimist, et välistada need, mis antud programmiga ei kattu, või teise võimalusena programmi jälgimist sammhaaval, justkui me ise oleksime põrandarobotid. Need on mõlemad sobivad silumistehnikad, mida programmeerijad oma programmidest vigade otsimisel sageli kasutavad.

Kategooriad

  • Geomeetria
  • Algoritmid

11. Teksti vormistamine

Järgnevas tekstilõigus on tühikud tähistatud märgiga '·' ja lõiguvahetused märgiga ''. Tähistamata reavahetused on tekstitöötlusprogrammi poolt automaatselt lisatud.

Loogika·on·teadus·mõtlemise·reeglitest·,struktuuridest·ja·vormidest.¶

Sõna·"loogika"·pärineb·algselt·vanakreeka·omadussõnast·λογική·(·logikē),·mis·on·
sõna·λογικός·(logikos;·'kõnega·seonduv·;·mõtlemisega·seonduv')·naissoovorm.Seda·
sõna·kasutati·kas·eraldi·nimisõnana·või·fraasis·λογικὴ·τέχνη(logikē·technē)·
'mõtlemiskunsti'·tähenduses.¶

Küsimus

Mitmes sõnavahes on selle teksti vormistamisel tühikuid valesti kasutatud?

(Kui ühes sõnavahes on mitu viga, lugeda seda ainult üks kord.)

[Täisarv]

Vastus

Õige vastus on: 5.

Vastuse selgitus

Esimene viga on 'reeglitest·,struktuuridest', kus tühik peaks olema koma järel, mitte selle ees.

Teine viga on 'λογική·(·logikē)', kus sulu järel ei peaks tühikut olema.

Kolmas viga on 'kõnega·seonduv·;·mõtlemisega·seonduv', kus semikooloni ees ei peaks tühikut olema.

Neljas viga on 'naissoovorm.Seda', kus punkti järel peaks tühik olema.

Viies viga on 'τέχνη(logikē', kus sulu ees peaks tühik olema.

See on informaatika!

Lisaks sellele, et kirjavahemärkide valesti kasutamine on eksimine õigekirjareeglite vastu, võib see tekstide arvutis töötlemisel kaasa tuua ka ebameeldivusi automaatse reapoolitusega. Kui jätta koma või punkti järele tühik panemata, ei saa tekstitöötlusprogramm sellesse kohta vajadusel reavahetust lisada; sellega võib kannatada teksti joondamine. Kui panna tühik koma või punkti ette, võib tekstitöötlusprogramm sinna automaatse reavahetuse lisada ja nii satub kirjavahemärk üksikuna järgmise rea algusse; ka see näeb inetu välja.

Samadel põhjustel käivad tühikud algava sulu ja algavate jutumärkide ette ning lõpetava sulu ja lõpetavate jutumärkide järele, aga ei käi algava sulu ja algavate jutumärkide järele ning lõpetava sulu ja lõpetavate jutumärkide ette.

Õigekirja seisukohalt võib arutada, kas 'reeglitest·,struktuuridest' on üks viga (tühik ja koma on omavahel vales järjekorras) või kaks viga (koma ees liigne tühik, koma järel vajalik tühik puudu). Selleks, et oleks üheselt selge, ongi ülesandes küsitud vigade arvu asemel nende sõnavahede arvu, kus on midagi valesti. Samasugust täpsust on vaja paljudes olukordades, kus erinevad osapooled (olgu inimesed või arvutid) peavad mingit reeglit kõik ühtemoodi mõistma — näiteks siis, kui eesti keele eksami etteütluse osas on hindamine määratud vigade arvuga.

Kategooriad

  • Tekstitöötlus

12. Arvutustabel

Vaatame järgmist tabelarvutuse töölehte, mille mõnes lahtris on arvud ja mõnes valemid:

Töölehe funktsioon SUM arvutab antud piirkonna lahtrites olevate väärtuste summa, funktsioon MAX aga leiab antud piirkonna lahtrites olevatest väärtustest maksimaalse. Lahtrite piirkonnad on antud oma vasakpoolseima ülemise ja parempoolseima alumise lahtriga.

Küsimus

Milline väärtus tuleb tabeli lahtrisse C3?

[Täisarv]

Vastus

Õige vastus on: 21.

Vastuse selgitus

Lihtne viis vastuse leidmiseks on kõigi lahtrite väärtused välja arvutada. Nii saame

B2 = SUM(A1:A3) = A1+A2+A3 = 1+6+7 = 14
B3 = SUM(A2:A4) = A2+A3+A4 = 6+7+8 = 21
B4 = SUM(A3:A5) = A3+A4+A5 = 7+8+4 = 19
C3 = MAX(A1:A3) = MAX(14;21;19) = 21

Teine võimalus oleks panna tähele, et B3 väärtus erineb B2 väärtusest selle poolest, et summast jääb välja 1, aga lisandub 8; seega peab B3 väärtus olema suurem. Analoogiliselt saame, et B3 väärtus on suurem ka B4 omast. Seega on just B3 väärtus see maksimum, mille lahtris C3 olev valem valib ja võime piirduda ainult selle ühe summa väljaarvutamisega.

See on informaatika!

Tabelarvutuse töölehtede valemid võimaldavad korduvaid arvutusi automatiseerida ning sellega kasutajate aega kokku hoida ja käsitsi arvutamisest tulenevate vigade arvu vähendada.

Ka tabelarvutussüsteemid püüavad tehtava töö mahtu optimeerida. Kui me mingi lahtri väärtust muudame, siis arvutab süsteem üle ainult nende valemite väärtused, mis sellest lahtrist sõltuvad (ja siis need valemid, mis muutunud väärtustest sõltuvad jne). Meetod on küll erinev sellest, mida me eespool summade väljaarvutamise vältimiseks kasutasime, aga eesmärk on sama: teha vähem tühja tööd. Arvutid arvutavad küll kiiresti, aga väga suurte paljude valemitega töölehtede puhul on kokkuhoid ikka vajalik.

Kategooriad

  • Tabelitöötlus

13. Paroolide äraarvamine

Kobraste Detektiivibüroo peab viie kurjategija kontodele ligi pääsemiseks ära arvama nende paroolid. Nad teavad juba järgmist:

  • Anastassia parool on tema nimi, kuhu on tähtede vahele pandud üks kahekohaline arv, näiteks Ana99stassia, A40nastassia või Anastassi17a.
  • Bruno parool on ühe Kobrastoonia küla nimi, millele järgneb üks kaheksast erimärgist (% & * # ! @ + $), näiteks Kopralinn@, Kobrasburg* või Puumetropol!.
  • Clara parool koosneb neljast inglise tähestiku suurtähest, näiteks BRZT, AAAA või EZEZ.
  • Damieni parool koosneb tema nimetähtedest suvalises järjekorras, näiteks amiDen, neimaD või Dnmiea.
  • Ellena kasutab samuti paroolina oma nime, kuid iga täht selles võib olla kas suur- või väiketähena, näiteks ElLeNa, ELLena või Ellena.

Detektiivid püüavad paroole ära arvata, proovides iga kurjategija puhul ükshaaval kõiki võimalikke tema mustrile vastavaid paroole. Selleks on neil olemas ka nimekiri kõigist 312 Kobrastoonia külast.

Küsimus

Kelle parooli nad tõenäoliselt kõige väiksema arvu katsetega ära arvavad?

[Raadionupud]

A. Anastassia

B. Bruno

C. Clara

D. Damieni

E. Ellena

Vastus

Õige vastus on: E.

Vastuse selgitus

Tõenäoliselt arvavad detektiivid kõige kiiremini ära parooli, mille jaoks on kõige vähem võimalusi. Seetõttu arvutame, kui palju võimalusi on iga variandi puhul.

  • Anastassia nimi koosneb 10 tähest, seega on nende vahel arvu lisamiseks 9 kohta. Kahekohalisi arve on 90. Seega on võimalusi kokku 9·90=810.
  • Teame, et külade nimesid, mille hulgast Bruno ühe valis, on 312. Kui ta lisas paroolile ühe erisümboli kaheksast võimalikust, on variantide arv kokku 312·8=2496.
  • Kuigi Clara parool on kõige lühem, on tema parooli neljale kohale igaühele 26 variant, kokku on võimaluste arv seega 26·26·26·26=456976!
  • Damieni paroolivariantide arvu leidmine nõuab natuke rohkem süvenemist. Esimese sümboli jaoks on 6 kandidaati (D, a, m, i, e või n), teise sümboli jaoks jääb järele 5 varianti (kuna kuuest võimalikust tähest valiti üks välja esimesele kohale), kolmanda jaoks 4 jne. Kokku seega 6·5·4·3·2·1=720 varianti.
  • Ellena puhul on iga tähe jaoks kaks varianti: esimese jaoks e või E, teise jaoks l või L jne. Kokku on võimalusi ainult 2·2·2·2·2·2=64.

Seega on kõige väiksem variantide arv Ellenal.

Me arvutasime võimaluste arvu täpselt välja kõigi paroolide puhul, kuid piisaks ka sellest, kui teeksime seda ainult Ellena jaoks ja võrdleksime seda tulemust väga üldiselt teiste variantidega (näiteks 90 kahekohalist arvu, 312 küla jne).

See on informaatika!

Sellel ülesandel on vähemalt kaks seost informaatika ja arvutusliku mõtlemisega.

Esiteks kasutavad paljud inimesed mingit mustrit, kui nad peavad uue parooli välja mõtlema. Nagu sellest ülesandest näha: mida lihtsam on muster, seda lihtsam on kellelgi teisel kõiki võimalusi proovides parooli ära arvata. Ärge unustage, et arvutitega saab paroole proovida automaatselt, seega palju kiiremini kui inimesed, ilma et neil igav hakkaks.

Hea parool koosneb paljudest väiketähtedest, suurtähtedest, numbritest, erimärkidest, näiteks 2kb-C6xV!/<)^-U. Kui arvestame näiteks 26 väike- ja 26 suurtähe, 10 numbri ja 10 erimärgiga, siis on 15-märgilisi paroole kokku 7215=7244150201408990671659859968! On olemas rakendusi, mis genereerivad selliseid paroole ja aitavad neid kasutajal ka meeles pidada (või täpsemalt peavad neid kasutaja eest meeles).

Teine hea võimalus, kui kasutatav süsteem seda lubab, on võtta parooliks ühe lühikese sõna asemel mitmest sõnast koosnev fraas, näiteks correct horse battery staple. Kasutades 50000 sõnaga sõnaraamatut, saab selliseid neljasõnalisi fraase moodustada 500004=6250000000000000000. Seda on küll vähem kui eelmises näites, aga siiski päris palju. Samas on selliseid fraase oluliselt lihtsam meeles pidada ja seega sobivad nad ka siis, kui paroolitasku rakendust millegipärast kasutada ei saa.

Teiseks peab programmeerija oskama hinnata, kui kaua mingi arvutus tõenäoliselt aega võtab. Arvutiteadlased nimetavad seda "algoritmide arvutusliku keerukuse määramiseks". Kasutasime sõna "tõenäoline", sest teoreetiliselt on võimalik, et esimene parool, mida proovime, on õige, isegi neil juhtudel, kui võimalusi on miljardeid. Aga võib ka juhtuda, et meil ei vea üldse ja leiame õige parooli alles viimase võimaliku variandina. Keskmiselt leiame õige parooli poolel teel kõigi võimaluste kontrollimisel.

Kategooriad

  • Varia
  • Turvalisus
  • Kombinatoorika

14. Mustrid

Programmeerimises kasutatakse for-kordust mingite tegevuste etteantud arv kordi kordamiseks.

Allolevas näites pannakse i väärtuseks järjest arvud 1, 2 ja 3 ning iga kord täidetakse korduse kehas (taandega osas) olev käsk; paneme tähele, et selles käsus saab i väärtust kasutada:

for i from 1 to 3
    print(i)

väljastab tulemuse

1
2
3

Operaator * (tärn) tähistab arvude puhul korrutamist, teksti puhul selle kordamist:

for i from 1 to 3
    print(i * "x")

väljastab tulemuse

x
xx
xxx

Küsimus

Millise mustri saame, kui kasutame allolevat koodilõiku?

for i from 1 to 5
    print(((6 - i) * 2) * "x")
for i from 1 to 5
    print((i * 2) * "x")

[Raadionupud]

A.

xxxxxxxxxx
xxxxxxxx
xxxxxx
xxxx
xx
xx
xxxx
xxxxxx
xxxxxxxx
xxxxxxxxxx

B.

xxxxxxxxxx
 xxxxxxxx
  xxxxxx
   xxxx
    xx
    xx
   xxxx
  xxxxxx
 xxxxxxxx
xxxxxxxxxx

C.

    xx
   xxxx
  xxxxxx
 xxxxxxxx
xxxxxxxxxx
xxxxxxxxxx
 xxxxxxxx
  xxxxxx
   xxxx
    xx

D.

    xx
   x  x
  x    x
 x      x
x        x
x        x
 x      x
  x    x
   x  x
    xx

Vastus

Õige vastus on: A.

Vastuse selgitus

Kõik teised variandid saame kiiresti välistada, pannes tähele, et programm ei trüki tühikuid (" ") ning vastusevariant A on ainus, mis neid ei sisalda.

See on informaatika!

Siin tutvustatud for-kordus esineb peaaegu kõigis programmeerimiskeeltes. Korduseid kasutatakse, nagu nimigi ütleb, programmiosade korduvaks täitmiseks; for-kordus sobib siis, kui korduste arv on ette teada.

Operaatorite kasutamist erinevatel eesmärkidel olenevalt andmete tüübist nimetatakse operaatorite ülelaadimiseks või polümorfismiks. Polümorfismi kasutatakse programmeerimiskeeltes enamasti selle tõttu, et operaatorite arv on piiratud ja võimalike operatsioonide arv ületab tunduvalt saadaolevate operaatorite arvu.

Hea tava on operaatorite ülelaadimisel anda neile "tavalisega" võimalikult sarnane tähenduse. Nii on loogiline, et * tähistab arvude puhul korrutamist ja teksti puhul selle kordamist, samas kui + tähistab arvude puhul liitmist ja tekstide puhul nende kokkukleepimist:

print("a" + "b")

väljastab

ab

Kategooriad

  • Algoritmid

15. Ahelkood

Ahelkood on kokkuhoidlik viis must-valgel pildil olevate kontuuride (piirjoonte) esitamiseks. Põhimõte on valida üks must piksel ja salvestada igal sammul suund liikumiseks järgmise musta pikslini kontuuri päripäeva (kellaosuti liikumise suunas) läbimisel.

Suunad on tähistatud numbritega selliselt:

Näiteks kui valime alloleval pildil esimeseks sinise raamiga tähistatud piksli, saame edasi liikuda punaste nooltega näidatud suundades ja tulemuseks on ahelkood 1, 0, 0, 7, 7, 5, 5, 4, 3, 3, 2.

Vaatame nüüd sellist pilti:

Küsimus

Milline järgmistest ei ole selle pildi ahelkood?

[Raadionupud]

A. 1, 1, 1, 0, 7, 7, 7, 6, 5, 5, 5, 4, 3, 3, 3, 2

B. 7, 6, 5, 5, 5, 5, 4, 3, 3, 2, 1, 1, 1, 1, 0, 7

C. 5, 5, 5, 4, 3, 3, 3, 2, 1, 1, 1, 0, 7, 7, 7, 6

D. 3, 3, 2, 1, 1, 1, 0, 7, 7, 7, 6, 5, 5, 5, 4, 3

Vastus

Õige vastus on: B.

Vastuse selgitus

Järgnevad joonised illustreerivad vastusevariantides olevate ahelkoodide saamist:

A. B.

C. D.

See on informaatika!

Ahelkood on üks meetod objektide esitamiseks nende kontuuride abil. Ahelkood on määratud stardipiksli määramisega ja suunavektorite jadaga vastavalt sellele, kas igal sammul suundutakse kontuuri järgmise musta pikslini vasakul, paremal, üleval, all või diagonaalis. Ahelkoodi eeliseks on vajaliku info säilitamine ja samas andmemahu väga suur kokkuhoid. Esimesena esitles ahelkoodi ideed Freeman 1961. aastal ning seepärast on see tuntud ka kui Freemani ahelkood (ingl Freeman Chain Code, FCC).

Ahelkoodi üks kasutusala on numbrituvastus. Esiteks võimaldab see kood objekte kompaktselt esitada, teiseks on ahelkoodide võrdlemine lihtsam kui piltide võrdlemine. Lisaks sellele on ahelkoodist võimalik välja lugeda ka kujutatava objekti üksikuid omadusi. Ahelkoodid esindavad kadudeta tihendamist ja säilitavad kogu info, mis on vajalik kiireks ja efektiivseks mustrite analüüsiks.

Kategooriad

  • Info mõistmine
  • Geomeetria
  • Varia

Copyright © 2022 Bebras – International Challenge on Informatics and Computational Thinking.
Licensed under Creative Commons Attribution-ShareAlike 4.0 International License.

Flag icons by GoSquared.