Nemes Tihamér OKSzTV'98

Második forduló

11-13. osztályosok

1998. január 17. 900-1400


1. feladat: Szálloda (14 pont) /tesztadatok/
 

Egy szállodalánc nyilvántartást vezet a szakácsairól és a cukrászairól. Ebben a szakképzettségi szint és az életkor szerint lehet keresni.

A SZAKACSx.BE és a CUKRASZx.BE szöveges állományok soronként egy-egy személyről három adatot tartalmaznak, egy-egy szóközzel elválasztva: a szakképzettségi szintet (1 a legjobb, 10 a legrosszabb), az életkort (15 és 100 közötti egész) és a nevet (legfeljebb 40 karakter: az angol ábécé betűi, számjegyek és szóközök). Mindkét állományban legfeljebb 100 személy adatai vannak.

A megválaszolandó kérdések a KERDESx.BE állomány egy-egy sorában vannak xxxx:yyyy:zzzz alakban, ahol a mezőket : (kettőspont) választja el, és xxxx a szakképzettséget, yyyy a szakképzettségi szintre, zzzz pedig a korra vonatkozó követelményt adja meg.

xxxx = SZAKACS vagy CUKRASZ vagy BARMILYEN

BARMILYEN azt jelenti, hogy az illető akár szakács, akár cukrász lehet.

yyyy = <N vagy>Nvagy=Nvagy<=Nvagy>=N

Az yyyy a szakképzettségi szint és az N egész közötti relációt írja elő.

zzzz = MIN vagyMAX

A zzzz azt adja meg, hogy az előző két feltételt kielégítő személyek közül a legfiatalabb vagy a legidősebb adatait kérjük-e.

Az egyes kérdésekre válaszul kapott személyek nevét a VALASZx.KI állományba kell írni (soronként egy nevet). Ha egy kérdésre nincs megfelelő személy, az adott sorba a NINCS szöveget kell írni. Ha egynél több van, az ábécé szerinti első nevet kell megadni.

Példa:

SZAKACS0.BE CUKRASZ0.BE  KERDES0.BE VALASZ0.KI 
1 35 Nagy Lajos
4 49 Kiss Pal
1 37 Jo Istvan SZAKACS:=4:MAX
BARMILYEN:<2:MAX
CUKRASZ:>=3:MIN
Kiss Pal
Jo Istvan
NINCS

2. feladat: Radar (20 pont) /tesztadatok/
 

Egy légvédelmi bázist olyan speciális radarral szereltek fel, amely egy 1000*1000-es területet ellenőriz, és észleli, ha ellenséges rakéta közeledik. A terület bal felső pontjának koordinátája (1,1). A bázis a (496,496) és (505,505) pontok által kijelölt négyzetben van.





A radar időegységenként egyetlen 100*1000-es sávot "lát". (Az 1. sávval kezdi, majd a 2. sávval folytatja s.í.t.; a 10. sáv után újra az 1. következik). Csak olyan rakétát észlel, amelyik az éppen vizsgált sávban van.

A rakétákat a területen kívülről indítják. Egy-egy rakéta időegységenként mindig ugyanakkora utat tesz meg egyenes vonal mentén haladva, és mindkét koordinátája egész értékkel (legfeljebb 10-zel) változik meg. Ugyanazon a helyen több rakéta is lehet egy időben. A rakéta becsapódik, ha egy időegység kezdetén éppen a bázis területe fölött van. A rakéta repülés közben meg is semmisülhet (pl. lelőhetik).

A bázison állomásozó katonákat riasztani kell, ha olyan rakéta tart a bázis felé, amely a bázison csapódna be, és amelyet a radar már háromszor észlelt. Minden ilyen rakéta közeledését csak egyszer kell jelezni.

Feladat:

Írj programot, amely szükség esetén riasztja a katonákat!
Bemenet:
A RAKETAx.BE állományban legfeljebb 1000 sor, minden sorban egy-egy észlelés három adata van, három egész szám, amelyeket egy-egy szóköz választ el: az időegység sorszáma, az észlelt rakéta sorindexe és oszlopindexe.
Kimenet:
A program írja ki a képernyőre és a RAKETAx.KI állományba a riasztási adatokat! Minden sorba négy egész számot írjon, egy-egy szóközzel elválasztva: a riasztás idejét, a becsapódás várható idejét, sorindexét és oszlopindexét.


Példa:

RAKETA0.BE RAKETA0.KI
1 1 1 
7 506 5
11 21 21
17 526 35
21 41 41
27 546 65
31 61 61
37 566 95
41 81 81
48 588 128
51 101 101
61 121 121 
21 249 497 497

3. feladat: Járműkölcsönzés (11 pont) /tesztadatok/
 

Egy közlekedési vállalat járműveket ad bérbe. Egyik különleges szállítójárművére nagy az igény, ezért a megrendeléseket a következő évre előre összegyűjtik. A megrendelést az A B számpárral adják meg, ami azt jelenti, hogy a megrendelő a járművet az év A-adik napjától a B-edik napjáig akarja bérbe venni. A vállalat a járművet a lehető legjobban akarja hasznosítani, ezért olyan megrendeléseket fogad el, amelyeket teljes egészükben úgy tud teljesíteni, hogy a jármű a lehető legtöbb napra ki legyen adva.

Feladat:

Írj programot, amely kiszámítja, hogy a megrendelések alapján a jármű a legjobb esetben hány napra lesz bérbe adva.
Bemenet:
A JARMU0.BE állomány tartalmazza a megrendeléseket. Az első sorban a megrendelések N száma van (1<=N<=1000). A következő N sor mindegyikében egy-egy megrendelés, azaz egy-egy A B számpár van, egyetlen szóközzel elválasztva (1<=A,B<=365).
Kimenet:
A megoldást a képernyőre és a JARMU0.KI állományba kell kiírni.
Példa:
JARMU0.BE JARMU0.KI
9
1 23
6 37
24 43
46 71
12 54
44 66
13 25
22 33
5 10
69

4. feladat: Robot (12 pont) /tesztadatok/
 

Egy üzemben a gyártást automatizálták. A szerszámgépek egy nagy gépcsarnokban négyzetrács mentén vannak elhelyezve. A műszak végén robotok gyűjtik össze a szerszámgépek gyártotta alkatrészeket. A robotok négyzetrács alakú pályán mozognak a szerszámgépek fölötti térben. A négyzetrács bal felső sarkából, az (1,1) pontból indulnak, és a jobb alsó sarokba viszik el az alkatrészeket. A robotokat úgy tervezték, hogy csak jobbra és "lefelé" haladhatnak.

Feladat:

Írj olyan programot, amely kiszámítja, hogy minimálisan hány robotot kell elindítani az összes alkatrész begyűjtéséhez, feltéve hogy minden robot tetszőleges számú alkatrészt szállíthat.
A feladat megoldásához rendelkezésre áll az üzemcsarnok térképe, amely egy 0 és 1 elemeket tartalmazó M*N-es mátrix (M a sorok, N az oszlopok száma). A 0 jelöli az üres helyet gépcsarnokban, az 1 pedig azt, hogy azon a helyen szerszámgép van.
Bemenet:
A ROBOTx.BE állomány első sorában az M és N értékek vannak, egyetlen szóközzel elválasztva (1<=M,N<=100). A következő M sor mindegyike a térkép egy-egy sora, azaz minden sorban N szám (0 vagy 1) van, a számokat ismét egyetlen szóköz választja el.
Kimenet:
A feladat megoldásaként egyetlen számot kell írni a ROBOTx.KI állományba.
Példa:
ROBOTx.BE ROBOTx.KI
10 12
0 1 1 1 0 0 1 0 1 0 0 0
0 1 0 0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 1 0 0 0
1 0 0 0 0 1 0 0 0 0 0 0
0 0 0 1 0 0 0 0 0 0 0 0
0 1 0 0 1 0 0 0 0 0 0 0
1 0 0 0 0 1 1 1 1 0 0 0
1 1 1 1 1 1 0 0 0 1 0 0
1 0 0 0 0 0 0 0 0 1 0 0
1 0 0 0 0 0 0 0 0 1 0 0
5

5. feladat: Fordítóprogram (18 pont) /tesztadatok/
 

Az alábbi programozási nyelven írt programokkal egy tár legfeljebb 1024 db 8 bites rekeszét adatokkal tölthetjük fel (az 1. rekesztől kezdve):
  A Cimke: maximum hat, az angol ábécé betűiből álló karaktersorozat, amelyet kettőspont követ. A Cimke: el is maradhat. A számok és címkék belsejét kivéve mindenütt tetszőleges számú szóköz lehet.

Írj olyan programot, amely beolvassa a lefordítandó, biztosan helyes programot a PROGRAMx.BE állományból, és kiírja a képernyőre és a PROGRAMx.KI állományba a fordítás eredményét (a tár rekeszeinek tartalmát)! A PROGRAMx.BE állományban minden utasítás külön sorban van.

Példa:
PROGRAM0.BE PROGRAM0.KI
A: 12 (2) 
'a'(3)
B: "bcd"
[A]
< A >
<C >
C: [B] 
12 12 97 97 97 98 99 100 12 1 0 14 0 98

Elérhető összpontszám: 75 pont + 25 pont az 1. fordulóból