Prog 2 4. verseny feladatsor

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.

0. feladat (z4f0): hármas szorzatösszeg

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.

z4f0be0 -> z4f0ki0

z4f0be1 -> z4f0ki1

z4f0be2 -> z4f0ki2

z4f0be3 -> z4f0ki3

1. feladat (z4f1): legmagasabb kettő széles téglalap

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

5
egy 5 sor magas téglalapot színnel megjelöltem a bemenetben.

További bemenetek.

z4f1be0 -> z4f1ki0

z4f1be1 -> z4f1ki1

z4f1be2 -> z4f1ki2

z4f1be3 -> z4f1ki3

z4f1be4 -> z4f1ki4

z4f1be5 -> z4f1ki5

2. feladat (z4f2): teszt pontozása

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.

z4f2be0 -> z4f2ki0

z4f2be1 -> z4f2ki1

z4f2be2 -> z4f2ki2

z4f2be3 -> z4f2ki3

3. feladat (z4f3): éttermi menük

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.

z4f3be0 -> z4f3ki0

z4f3be1 -> z4f3ki1

z4f3be2 -> z4f3ki2

z4f3be3 -> z4f3ki3

z4f3be4 -> z4f3ki4

z4f3be5 -> z4f3ki5

4. feladat (z4f4): madárnyelv

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.

z4f4be0 -> z4f4ki0

z4f4be1 -> z4f4ki1

5. feladat (z4f5): páros sokszor előforduló szavak

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

z4f5be0 -> z4f5ki0

z4f5be1 -> z4f5ki1

z4f5be2 -> z4f5ki2

z4f5be3 -> z4f5ki3

z4f5be4 -> z4f5ki4

z4f5be5 -> z4f5ki5

A versenyhez mindenkinek sok sikert kívánok.