Utolsó módosítás: 2008. december 5.
Ez a feladatsor a második verseny második, december 5. péntek délelőtti turnusához tartozik.
Le lehet tölteni az összes példa be- és kimenetet és példa forráskódot egyben: z4p.tgz vagy z4p.zip.
A feladatok nem feltétlenül nehézségi sorrendben vannak.
Adott számok egy listája, a programnak ezeket hármas csoportokban összeszorozza, és a kapott szorzatokat összeadja.
A program bemenete egyetlen soros, ebben pontosan hatvan (60) nemnegatív egész szám áll (mindegyik legfeljebb 100), legyenek ezek a0, a1, … a59. A program kimenete egyetlen egész szám, mégpedig az a0·a1·a2 + a3·a4·a5 + … + a57·a58·a59 húsz tagú szorzatösszeg.
Például ha a bemenet a következő hosszú sor
69 7 8 28 18 92 61 41 24 9 72 56 64 70 22 78 88 100 36 49 53 70 53 85 35 87 18 72 99 74 30 99 19 72 10 100 59 9 99 80 27 56 42 71 94 51 64 47 12 23 9 30 13 91 71 61 18 5 4 60
akkor a kimenet
2775435
mivel az összeg első tagja 3864, második tagja 46368, harmadik tagja 60024, stb, ezek összege pedig éppen 2775435.
Még pár példa.
Ebben a feladatban egy táblázatban fogja megkeresni a legnagyobb két mező széles teli téglalapot egy táblában.
A program bemenetében az első sor egy N egész számot ad meg (1 <= N <= 300).
A maradék N sor mindegyikében N darab pont vagy kukac jel áll, majd egy újsor jel.
Ezek együtt egy N-szer N-es négyzetes táblázatot adnak meg,
aminek mindegyik mezője vagy teli, amit kukac (@
) jelöl,
vagy kikapcsolt, amit pont (.
) jelöl.
A program megkeresi a legmagasabb, egybefüggő téglalap alakú, két egymás melletti oszlop széles, csupa teli cellákból álló résztáblázatot a táblázatban. A program kimenete egyetlen egész szám, ennek a legmagasabb teli téglalapnak a magassága. (A kimenet végére újsor jelet kell írni.)
Például legyen a bemenet a következő.
11 .@@..@....@ @@@@...@@.. @@.@.....@@ @@@@@..@.@@ @@@@@..@... @.@@.@.@@.@ @@@@@@@..@@ .@@@@.@@@@. @.@..@@@.@. ...@@@.@@.. .@.@.@@@@@@
Ekkor a kimenet
5egy 5 sor magas téglalapot színnel megjelöltem a bemenetben.
További bemenetek.
Ebben a versenyben egy feleletválasztós tesztet fogunk kijavítani.
A bemenetnek néhány sora van, minden sorban ugyanannyi betű, a betűk lehetnek A, B, C, D, vagy E. Az első sor a teszt hivatalos megoldását adja meg, a többi sor egy-egy hallgató által beadott megoldást. (Mindenki minden kérdésre bejelölt valamit, a kérdések a hivatalos megoldásban és a beadott tesztlapokon ugyanolyan sorrendben szerepelnek.)
Egy beadott megoldás pontszáma egyenlő azon kérdések számával, amire a hallgató ugyanazt a betűt választotta, mint ami a hivatalos megoldásban is szerepel. A program a kimenetre eggyel kevesebb sort írjon ki, mint ahány a bemenetben van, mégpedig minden hallgatóhoz írja ki a pontszámát. (A bemenet első sorában a megoldókulcs szerepel, ezt értelemszerűen nem pontozzuk.)
Frissítés: a feladatsorban legfeljebb 40 tesztkérdés van, és legfeljebb 40 diák töltötte ki a tesztet.
Itt van egy kisebb méretű példa. Bemenet.
CEBEABBDDD EECECDEDAB CEDAABADAB DDCCDBDDBC CECDEBAAEB DEDEBCBEEA
Kimenet.
3 5 2 3 3
Itt van több példa is.
Ebben a feladatban egy egyetemi menza menüinek összetételét kell visszaállítania az egyes ételek árából.
A menzán háromféle menüre lehet előfizetni: az A menü 600 forintba, a B menü 800 forintba, a C menü pedig 1000 forintba kerül. Mindegyik menü három fogásból áll, mégpedig levesből, főételből, és desszertből. A három menühöz kilenc különböző fogás tartozik. A kilenc fogás mindegyikének van egy ára is, és a menükben lévő fogások ára összesen pontosan 600, 800, illetve 1000 forint.
A program bemenetként megkapja az egy napon elkészített három leves, három főétel, és három desszert árát, de azt nem mondjuk meg, hogy melyik étel melyik menühöz tartozik. Önnek ez alapján össze kell raknia a három menüt. (Minden ételt pontosan egy menühöz kell tehát felhasználni.) A bemenő adatokat úgy adjuk meg, hogy mindig egy és csak egy megoldás van.
A bemenet három sorból áll, mindegyikben három szám van. Az első sorban lévő három szám a három leves árát adja meg tetszőleges sorrendben. Hasonlóan a második sor a három főétel, a harmadik sor a három desszert árát adja.
A program kimenete is három sorból áll. Az első sor az A menüt (a legolcsóbb, 600 forintos menüt) írja le, a második sor a B menüt, a harmadik a C menüt. Minden sorban rendre három számnak kell állnia, az első a menüben lévő leves ára, a második a főételé, a harmadik a desszerté.
Íme egy példa. Legyen a bemenet a következő.
246 131 146 354 630 469 200 100 124
Tehát monduk a három leves gulyásleves 246 forintért, ízetlen csigatésztás leves 131 forintért, és borsóleves 146 forintért, stb. A helyes kimenet a következő.
146 354 100 131 469 200 246 630 124
Ez azt mutatja, hogy az A menü a 146 forintos borsólevesből, 354 forintos főételből, és 100 forintos desszertből áll, ez összesen valóban pontosan 600 forint.
Itt van több példa is.
Ebben a feladatban olyan programot kell írnia, ami egy magyar nyelvű szöveget madárnyelvre fordít le.
A madárnyelv egyszerűen azt jelenti, hogy minden magánhangzót megduplázunk, és beszúrunk közé egy v betűt. Példa madárnyelvű mondatra az, hogy „Tuvudsz ivígy beveszévélnivi?”
A program bemenete egy több soros szöveg, amiben azonban az egyszerűség kedvéért nincsenek ékezetes betűk. A programnak meg kell keresnie az összes magánhangzót (ezek az a, e, i, o, u, A, E, I, O, U), mindegyiket megduplázza, a két példány közé beszúr egy v betűt, és ha nagybetűt dupláz meg, akkor a második példányt kisbetűssé változtatja. A szöveg többi részén nem szabad változtatni.
Így például ha a bemenet a következő,
Alulirott, elismerem, hogy az alabb felsorolt adatokat tartalmazo, 2008. december 6-an kiallitott Europai Egeszsegbiztositasi Kartyat, a feltuntetett adatok attekintese es elfogadasa utan, az Orszagos Egeszsegbiztositasi Penztar budapesti kirendeltsegen atvettem.
akkor a kimenet ez lesz:
Avaluvulivirovott, evelivismeverevem, hovogy avaz avalavabb fevelsovorovolt avadavatovokavat tavartavalmavazovo, 2008. devecevembever 6-avan kiviavallivitovott Eveuvurovopavaivi Evegeveszsevegbiviztovosivitavasivi Kavartyavat, ava feveltuvuntevetevett avadavatovok avattevekivinteveseve eves evelfovogavadavasava uvutavan, avaz Ovorszavagovos Evegeveszsevegbiviztovosivitavasivi Pevenztavar buvudavapevestivi kivirevendeveltsevegeven avatvevettevem.
Letölthető példák a következők.
Ebben a feladatban szavak egy listájából meg kell keresni azon szavakat, amik páros sokszor szerepelnek, és ábécé sorrendben kiírni őket.
A program bemenete sok (legalább 1, legfeljebb 16000) sorból áll, minden sorban egy legfeljebb 15 betűs angol szó (és egy újsor jel) áll.
A kimenetben is soronként egy szó szerepel, mégpedig pontosan azok a szavak, amelyek a bemenetben páros sokszor, de legalább egyszer szerepelnek. A kimenetben ezeket a szavakat ábécé sorrendben kell felsorolni, mindegyik szót csak egyszer.
Figyelem, a legnagyobb bemenet nagy: 16000 soros. A megoldásnak a nagy bemenetre is le kell futnia ahhoz, hogy helyesnek számítson.
A programot ruby nyelven érdemes megírni. Először egy asszociatív tömbbe (Hash) jegyezze az egyes szavak gyakoriságát, ahol a kulcsok a szavak, az értékek az előfordulásuk száma. (Ha nem emlékszik, hogy működnek az asszociatív tömbök, az s2f6 mintafeladatnál van egy rövid magyarázat.) Ezután gyűjtse egy tömbbe (Array) a páros sokszor előforduló szavakat, és ezeket rendezze a tömb sort vagy sort! metódusával (az utóbbi megváltoztatja a tömböt, az előbbi új tömböt ad vissza).
Nézzünk egy példa bemenetet.
ebb ebb ebb type fast ebb fast type deflector ebb
Ebben a fast és a type kétszer szerepel, így ezeket írjuk ki, mégpedig a fast-ot előbb, mert az ábécé szerint előbb van. Az ebb szó ötször szerepel, ami páratlan, ezért ezt nem írjuk ki.
fast type
A versenyhez mindenkinek sok sikert kívánok.