Nemes Tihamér OKSzTV'95

Döntő

11-13. osztályosok

1995. 03.18. 10.00-16.00


1. feladat: MIDI (25 pont)
 

A MIDI (Musical Instrument Digital Interface) számítógépek és szintetizátorok között adatcserére kidolgozott szabvány. A szabvány részben parancsokat tartalmaz a szintetizátor számára egy hang megszólaltatásának elkezdésére vagy befejezésére.
Ez a program például 3 hangot szólaltat meg egyszerre:
0  ON  60
0  ON  70
0  ON  80
10 OFF 60
10 OFF 80
10 OFF 70
10 ON  62
12 OFF 62
10 időegységig fog szólni a 60-as, a 70-es és a 80-as hang, majd két időegységig a 62-es. A program egy sora tehát a következő információkat tartalmazza: először azt az időpillanatot, amikor a parancsot végre kell hajtani, aztán magát a parancsot (ON esetén bekapcsoltni, OFF esetén kikapcsolni kel a hangot), majd annak a hangnak a sorszámát, amire a parancs vonatkozik
A MIDI programba ötféle probléma fordulhat elő:
a) Tekintsük az alábbi példát:
 0 ON  60
10 ON  60
12 OFF 60
20 OFF 60
Ha meghallgatjuk ezt a programot, akkor nem fogunk két különálló hangot hallani, csak egyet, mégpedig 12 időegységig. Ezen úgy segíthatünk, hogy OFF parancsot illesztünk a programba 1 időegységgel a második ON parancs elé, az eredeti OFF parancsok közül pedig csak a másodikat hagyjuk meg. Így egy rövid szünetet hallunk a két hang között.
b) Egy másik probléma adódik akkor, ha ugyanazon időponthoz tartozó ON és OFF parancs is van a programban:
 0 ON  60
10 ON  60
10 OFF 60
20 OFF 60
 0 ON  60
10 OFF 60
10 ON  60
20 OFF 60
A bal oldali példában 10 időegységig lesz hallható a hang, a jobb oldaliban 20 időegységig, folyamatosan. (Ebben a példában a problémát okozó utasítások egymás mellett találhatók, de nem kizárt az sem, hogy legyen közöttük ugyanehhez az időponthoz tartozó más utasítás.)
A megoldás mindkét esetben ugyanaz: a problémát okozó OFF parancsot 1 időegységgel a a megfelelő ON parancs elé kell áthelyezni. Ez is egy rövid szünetet eredményez a hang második megszólaltatása előtt.

c) Ha a program véget ér, és valamelyik hang még szól, akkor azt az utolsó időpont után 1 időegységgel ki kell kapcsolni.

d) Ha OFF parancsot nem előz meg neki megfelelő ON parancs, akkor az OFF-ot el kell hagyni.

e) Ha ugyanahhoz az időponthoz több ON parancs is tartozik, akkor közülük csak egyet kell megtartani.

Feladat:
Írj programot, ami tetszőleges számú MIDI programot beolvas a MIDI.BE nevű állományból, és a fenti változtatások elvégzése után kiírja MIDI.KI állományba. Az egyes MIDI programokat olyan sorok választják el egymástól, amik csak a sor elején álló -1 számot tartalmazzák. Az utolsó program után -2 áll. A kimenet formátuma a bemenetével egyező.
Bemenet:
Az időpont 0 és 65535 közötti egész szám lehet, a parancsokat (ON, OFF) mindig nagybetűvel írjuk, a hangok sorszámai 1 és 127 közötti egész számok. Egy soron belül az időpontot és a parancsot, valamint a parancsot és a hang sorszámát pontosan egy szóköz választja el.
A sorok az időpont szerint nem csökkenő rendben vannak, de az egy adott időponthoz tartozó parancsok sorrendje tetszőleges.
Kimenet:
A megoldás során feltehetjük, hogy kezdetben semmilyen hang nem szól, egy hiba kijavítása nem okoz újabb hibát, valamint, hogy nincs hiba a nulladik időpontban.
Példa:
Bemenet Kimenet
0 ON 60
10 ON 60
12 OFF 60
20 OFF 60
-1
0 ON 60
5 ON 70
10 ON 60
10 OFF 60
15 OFF 70
15 ON 70
15 OFF 80
15 ON 70
20 OFF 60
-2
0 ON 60
9 OFF 60
10 ON 60
20 OFF 60
-1
0 ON 60
5 ON 70
9 OFF 60
10 ON 60
14 OFF 70
15 ON 70
20 OFF 60
21 OFF 70
-2


2. feladat: 80 nap alatt a Föld körül (50 pont)

Bizonyára ismered Verne Gyula regényét, melyben Phileas Fogg, az angol lord fogadásból 80 nap alatt körülutazta a Földet. Ebben a feladatban az ő útját kell végigkövetned és segítened kell őt a fogadás megnyerésében.

Az egyes részfeladatok legyenek önállóan végrehajthatók egy menüből vezérelve.

1. rész: Szimuláció (25 pont)

A VAROSx.BE állomány a XIX. századi világtérkép néhány (<=10) nagyobb városát tartalmazza (nem feltétlenül azokat, amelyek az eredeti történetben szerepelnek, x egy 0 és 9 közötti számjegy, ez azonosítja az egy teszthez tartozó állományokat). Az állomány minden sora egy városra vonatkozó adatokat tartalmaz, egy-egy szóközzel elválasztva:
városnév hosszúsági_fok szélességi_fok

A hosszúsági, illetve szélességi fokokat az égtáj (K, É, Ny, D), valamint a fok (0 és +180 közötti egész szám) azonosítja.

Példa:
London K0 É51
A JARATx.BE nevű állományban megtalálhatók a városok között igénybe vehető közlekedési járatok. Minden sora egy járat adatait tartalmazza egy-egy szóközzel elválasztva:
indulás cél eszköz első_járat menetidő várakozás díj
Példa:
New-York London hajó 3 5 1 5000
Az első járat indulása, a várakozás és a menetidő (egész) napban értendő az egyszerűség kedvéért az utazó Phileas Fogg saját idejében mérve (a 0 időpont a Londonból történő elindulás). A járatok oda-vissza közlekednek, a végpontokon valamennyit várakozva. A fenti példában ez azt jelenti, hogy New-Yorkból Londonba a 3., 15., 27., ... napokon indul hajó, visszafelé pedig a 9., 21., 33., ... napokon. A járatok díja egységesen angol fontban van megadva. A járat mindig a két város közötti legrövidebb úton halad.
Phileas Fogg tervezett útját az UTITERVx.BE állomány tartalmazza:
cél eszköz
Példa:
Alexandria hajó
Szuez tevekaraván
Feladatod lépésenként végigkövetni Phileas Fogg útját, az eredményeket az UTx.KI állományba írva. Minden lépésben ki kell írnod az alábbi adatokat egy sorba:
cél eszköz érkezés készpénz
Példa:
London hajó 81 100
Az érkezési időpontot Phileas Fogg saját idejében mérve kell számítani. A készpénz Phileas Fogg, mint tudjuk 80000 font készpénzzel indul Londonból.
A szimuláció az alábbi üzenetekkel (állapotokban) érhet véget:
Készítsd el a VAROSx.BE ás a JARATx.BE adatainak ismeretében az optimális útitervet és írd ki az OPTTERVx.KI állományba. Ennek formátuma egyezzen meg az UTITERVx.BE formátumával.
Ha Phileas Fogg nem tud időben (80 nap alatt) célba érni, illetve útközben elfogy a pénze, akkor az állomány első sorába ki kell írni, hogy 'VESZTETT'.

Ha van 80 nap alatt célba vivő út, akkor közülük ki kell választani az optimálisat. Az optimális útiterv az alábbi követelményeknek kell, hogy eleget tegyen:

  • Ha több útiterv is kínálkozik, melyben 80 napnál hamarabb célba érhet, akkor ezek közül azt kell választani, amelyik a legolcsóbb (Phileas Fogg-nak a legtöbb készpénze marad).
  • Ha a készpénz megegyezik, akkor a leggyorsabb útitervet kell választani.

  • Elérhető összpontszám: 75 pont + 25 pont a 2. fordulóból