[Orgyak] pótzh, csalók

kitlei at caesar.elte.hu kitlei at caesar.elte.hu
Tue May 22 11:58:48 CEST 2012


Sziasztok!

Csatoltam négy feladat szövegét, ebből a 3. még csak koncepció. Várom  
a lelkes hozzászólásokat. Ha jobb feladatod van, Artyom, küldd azt is.

Ezt a ZH-t meghajtom én az én beadórendszeremmel (AutoBead). Abban  
másodpercre visszakövethető a másolás, és triviálisan támogatja az  
alábbit is...

http://theory.stanford.edu/~aiken/moss/
A másolt kódrészleteket ezzel igen könnyen ki lehet szűrni. Balu,  
beküldenéd az összes megoldást bele az EBR-ből, aztán pedig ide a  
linket, amin mutatja az egyezéseket?

Robi

> Én elkezdtem írni egy feladatot, majd ha kész van beküldöm a listára!
>
> 2012-05-22 10:26 keltezéssel, Zaicsek Balázs írta:
>> Hi all!
>>
>>   Mi van a pótZH-val? Írja valaki? Lesz EBR? Ha kell, összerakom,  
>> már sokkal egyszerűbb, mert már csak az új feladatot kell  
>> feltölteni. Szóval, mi van a pótZH-val?
>>
>> Balu
>> _______________________________________________
>> Orgyak mailing list
>> Orgyak at plc.inf.elte.hu
>> https://plc.inf.elte.hu/mailman/listinfo/orgyak
>
> _______________________________________________
> Orgyak mailing list
> Orgyak at plc.inf.elte.hu
> https://plc.inf.elte.hu/mailman/listinfo/orgyak
>

-------------- next part --------------

KÊszítsd el a kÜvetkező jåtÊkot.

A jĂĄtĂŠk "tĂĄblĂĄja" egy olyan n elemĹą vektor,
amely az [1..n] intervallum elemeit tartalmazza pontosan egyszer,
azonban nem feltĂŠtlenĂźl sorrendben; itt n parancssori paramĂŠter.

A főprogram elindít egy szervert, amelynek portjåt parancssori paramÊterkÊnt kapja meg.
A főprogram vår kÊt kliensre.
Mindegyik jåtÊkos előszÜr egy sorban kÜzli a sajåt nevÊt,
majd felvĂĄltva kĂśvetkeznek lĂŠpĂŠsre.
A jĂĄtĂŠkosok egy lĂŠpĂŠsben megcserĂŠlhetik a vektor kĂŠt pozĂ­ciĂłjĂĄn talĂĄlhatĂł ĂŠrtĂŠkeket.
A jĂĄtĂŠk akkor ĂŠr vĂŠget, amikor a vektorban az ĂŠrtĂŠkek sorrendbe kerĂźlnek.

A jĂĄtĂŠkos minden lĂŠpĂŠs utĂĄn pontokat kapnak, az alĂĄbbiak kĂśzĂźl vĂŠletlenszerĹąen:
- +1 pont
- a megcserĂŠlt pozĂ­ciĂłk indexĂŠnek kĂźlĂśnbsĂŠge
- annyi pont, ahĂĄny olyan elem talĂĄlhatĂł a vektor megcserĂŠlt pozĂ­ciĂłi kĂśzĂśtt,
  amelyek a kĂŠt cserĂŠlt elem ĂŠrtĂŠke kĂśzĂŠ esnek

--------------------------------------------------------------------------------

+1. MentĂŠs/tĂśltĂŠs

Bårmelyik jåtÊkos adhassa ki a kÜvetkező utasítåst.

    ment FAJLNEV

        A rendszer mentse el a jĂĄtĂŠk aktuĂĄlis ĂĄllĂĄsĂĄt FAJLNEV fĂĄjlba.

    tolt FAJLNEV

        A rendszer tĂśltse vissza a jĂĄtĂŠkĂĄllĂĄst FAJLNEV fĂĄjlbĂłl.
        Ezt az utasítåst csak a legelső jåtÊkos adhatja ki a legelső lÊpÊskÊnt,
        ĂŠs csak akkor, ha a jĂĄtĂŠkosok szĂĄma megegyezik a mentĂŠsbelivel.

--------------------------------------------------------------------------------

+1. PĂĄrhuzamossĂĄg

A jĂĄtĂŠkosok egymĂĄssal pĂĄrhuzamosan lĂŠphetnek.
Ha egy jĂĄtĂŠkos megprĂłbĂĄl megcserĂŠlni kĂŠt csĂşcsot,
az nem tĂśrtĂŠnik meg azonnal: a csĂşcsok zĂĄrolĂłdnak.
Ha a kÜzvetlenßl ezutån beÊrkező cserÊlÊssel
egy mĂĄsik jĂĄtĂŠkos is megprĂłbĂĄl hozzĂĄfĂŠrni valamelyik csĂşcshoz,
akkor az eredeti cserÊlő jåtÊkos kap egy pontot, a lÊpÊs megtÜrtÊnik,
ĂŠs a csĂşcs hĂĄrom lĂŠpĂŠs erejĂŠig befagy.
Befagyasztott csĂşcs cserĂŠlĂŠse azonnal megtĂśrtĂŠnik,
de a cserÊlő jåtÊkos kÊt pontot veszít.

A jĂĄtĂŠkosok a "zarolt" utasĂ­tĂĄssal lekĂŠrheti a zĂĄrolt (ĂŠs befagyasztott) csĂşcsok indexeit.

--------------------------------------------------------------------------------

+1. RMI

A jĂĄtĂŠkosok RMI hĂ­vĂĄsok segĂ­tsĂŠgĂŠvel lĂŠphetnek.
A jĂĄtĂŠkba belĂŠpĂŠskor a jĂĄtĂŠkosoknak meg kell adniuk a jelszavukat egy fĂźggvĂŠny meghĂ­vĂĄsĂĄval;
amíg mindkÊt jåtÊkos nem adott meg helyes jelszót, a jåtÊk nem kezdődhet el.
-------------- next part --------------

KÊszítsd el a kÜvetkező rendszert.
Az alapfeladatot Socket vagy RMI felhasznĂĄlĂĄsĂĄval oldhatod meg.

----------------

Alapfeladat.

KĂŠszĂ­ts olyan programot, amely az alĂĄbbi mĂłdon mĹąkĂśdik.
A program indulĂĄskor kĂŠt szervert indĂ­t el;
a szerverek ismerik egymĂĄs portjĂĄt.
MindkĂŠt szerverhez tartozik egy-egy (ezredmĂĄsodperceket ĂĄbrĂĄzolĂł) Ăłra is,
amelyek azonban nem mĹąkĂśdnek tĂśkĂŠletesen:
10 ezredmĂĄsodpercenkĂŠnt nĂśvelik a szĂĄmlĂĄlĂłjukat 8 ĂŠs 12 kĂśzĂśtti ĂŠrtĂŠkkel.
A szerverek (sajåt óraszåmlålójuk szerint) 1 Ês 3 måsodperc kÜzÜtti idő eltelte utån
szinkronizĂĄljĂĄk egymĂĄssal ĂłrĂĄikat,
azaz szĂśvegesen kĂźldjĂŠk ĂĄt egymĂĄsnak az ĂłrĂĄik aktuĂĄlis ĂĄllĂĄsĂĄt,
ĂŠs ĂĄllĂ­tsĂĄk be a sajĂĄt ĂłrĂĄjukat a nagyobbik ĂŠrtĂŠkre.
A program kimenete mutassa, hogy melyik ĂłrĂĄt mennyivel kellett ĂĄtĂĄllĂ­tani.

---------------------------------

+1. KĂŠszĂ­tsd el a feladat megoldĂĄsĂĄt a mĂĄsik technolĂłgiĂĄval: Socket <-> RMI.

+1. Legyen tĂśbb Ăłraszerver is, ĂŠs ezek vĂŠletlenszerĹąen vĂĄlasszĂĄk ki,
    hogy melyik mĂĄsik Ăłraszerverrel szinkronizĂĄlnak.
    Legyen tovĂĄbbĂĄ egy kĂśzponti szerver,
    amelynek egyszerĹą szĂśveges Ăźzenet kĂźldĂŠsĂŠvel
    hozzĂĄ lehet adni, illetve el lehet tĂĄvolĂ­tani egy Ăłraszervert.

+1. Ennek a feladatnak a megoldåsåhoz el kell kÊszíteni az előzőt.

    Minden szerver tartalmazzon egy logikai vĂĄltozĂłt,
    amely azt írja le, hogy szeretne-e vezető lenni (erről bővebben lejjebb).
    A våltozó tartalmåt vÊletlenszerŹ időkÜzÜnkÊnt ållítsåk åt a szerverek.
    A szervereknek legyen tovĂĄbbĂĄ egy azonosĂ­tĂłja, egy egĂŠsz szĂĄm,
    ami kĂźlĂśnbĂśzik a tĂśbbi szerver azonosĂ­tĂłjĂĄtĂłl.
    Az azonosĂ­tĂł minden mĂĄsik szerver szĂĄmĂĄra ismert.

    SzintÊn vÊletlenszerŹ időkÜzÜnkÊnt a szerverek dÜntsenek úgy,
    hogy vezetőt szeretnÊnek vålasztani. Ezt a kÜvetkezőkÊppen mŹvelik.
    A szerver megszĂłlĂ­t minden nĂĄla nagyobb azonosĂ­tĂłjĂş szervert
    azonosító szerint nÜvekvő sorrendben.
    A megszólított szerver vålaszol a sajåt belső ållapota szerint,
    Ês ha ő szeretne vezető lenni,
    akkor hasonlĂłan szĂłlĂ­tja meg a nĂĄla nagyobb azonosĂ­tĂłjĂş szervereket.

    Az a szerver lesz a vezető, aki senkitől sem kap igenlő vålaszt a kÊrdÊsre.
    A vezető minden måsik szervernek kßld egy ßzenetet,
    amelyben kihirdeti vezetői voltåt.
    A vezetői ßzenet fogadåsånak tÊnyÊt a szerverek kiírjåk a sztenderd kimenetßkre.



-------------- next part --------------

KĂŠszĂ­ts egyszerĹą webszervert az alĂĄbbiak alapjĂĄn.
A program indulĂĄskor elindĂ­t egy szervert a parancssorban megadott paramĂŠterĹą porton.
EzutĂĄn a szerver vĂĄrakozik egy kapcsolatra.
A bejÜvő kliens szÜvegesen kßld ßzeneteket az alåbbi formåtumban.
Az első sor tartalma a kÜvetkező (a sor eleji szókÜzÜk nÊlkßl):

    GET <lekĂŠrt-oldal-cĂ­me> HTTP/1.1

ahol <lekÊrt-oldal-címe> helyÊn tetszőleges szó ållhat, pl.

    GET / HTTP/1.1

A kliens kßldhet tovåbbi nem-ßres sorokat, amelyek formåtuma a kÜvetkező:

    <mező-neve>: <mező-tartalma>

PĂŠldĂĄul:

    User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:15.0) Gecko/15.0 Firefox/15.0a1

Ebben a pÊldåban a mező neve "User-Agent".

A kliens ĂźzenetĂŠnek a vĂŠgĂŠt az jelzi, ha egy Ăźres sort kĂźld.



A szerver kßldjÜn olyan szintÊn szÜveges vålaszt, amely a kÜvetkezőkÊppen nÊz ki.
Az ßzenet első sora legyen a kÜvetkező.

    HTTP/1.1 200 OK

EzutĂĄn kĂśvetkezzen egy Ăźres sor.



Date: Fri, 11 May 2012 12:17:47 GMT
Server: Apache/2.2.16 (Debian)
Script-Control: X-stream-mode
Vary: Accept-Encoding
Transfer-Encoding: chunked
Content-Type: text/html;charset=utf-8
-------------- next part --------------

KÊszítsd el a kÜvetkező rendszert.
Az alapfeladatot Socket vagy RMI felhasznĂĄlĂĄsĂĄval oldhatod meg.
A tovĂĄbbi feladatok +1 jegyet ĂŠrnek,
azonban kettesnĂŠl jobb jegyĂŠrt RMI ĂŠs Socket alapĂş megoldĂĄst is kĂŠszĂ­tened kell.

----------------

Alapfeladat.

KĂŠszĂ­ts kĂŠt osztĂĄlyt: Server1 ĂŠs Server2.
Az osztĂĄlyok RMI esetĂŠn a ServerInterface interfĂŠszt valĂłsĂ­tjĂĄk meg,
Socket esetÊn pedig a szervereknek ugyanolyan ßzenetek kßldhetőek szÜvegesen.
A program futĂĄsa elejĂŠn egy parancssorban megadott porton (RMI esetĂŠn nĂŠven)
elindul az első fajta szerver.
A szerverek rÜgzített idő eltelte utån "cserÊlnek":
a måsik szerver kezd el futni Ês kezelni a portot (RMI: a måsik jegyződik be).
Socket hasznålatånål az Êppen levåltott szerver mÊg fogadhatja az utolsó bejÜvő hívåst,
ezutĂĄn kezdheti meg a mĂĄsik szerver a port hasznĂĄlatĂĄt.

A szerverek belső ållapotukban egy szåmot tårolnak (jelÜlÊs: m).
A szerverek a bejÜvő kliensektől egy szåmot (jelÜlÊs: n) vårnak
(Socket: szĂśvegesen, RMI: a sendNumber fĂźggvĂŠnnyel).
A szerverek åtållítjåk a belső ållapotukat: Server1 (n+m)-re, Server2 (max(n,m)+1)-re,
Ês ezt az új belső ållapotot kßldik vissza.

----------------

+1. A szerverek kßlÜnbÜző portokon/neveken legyenek elÊrhetőek.
    A server_location.txt fĂĄjl tartalmazzon portokat/neveket;
    minden alkalommal, amikor a szerverek megcserÊlődnek,
    a kÜvetkező szerver a megadott porton/nÊven fusson tovåbb.

    KĂŠszĂ­ts olyan szervert (szabadon vĂĄlaszthatĂłan RMI vagy Socket alapĂşt),
    amelytől le lehet kÊrdezni, hogy az Êppen futó szerver milyen nÊven/porton Êrhető el.

+1. Tarts fenn egy szĂĄmlĂĄlĂłt, amely azt tartalmazza,
    hogy a kĂŠtfajta szerverhez Ăśsszesen hĂĄny kĂŠrĂŠs ĂŠrkezett be.
    Ezt lehessen lekĂŠrdezni a clientCount mĹąvelettel (RMI),
    illetve Socket esetĂŠn Ăşgy, ha a kliens nem szĂĄmot kĂźld.
    A lekĂŠrdezĂŠs is szĂĄmĂ­tson bele a kĂŠrĂŠsek szĂĄma kĂśzĂŠ.

+1. KÊszíts kÊt, egymåst våltogató szerverpårt (Üsszesen tehåt nÊgy szerverből åll a rendszer,
    Ês egyszerre kettő vårja aktívan a kapcsolatokat).
    Oldd meg, hogy egyszerre csak egy szerver szolgĂĄlhasson ki klienst.
    Ha ekĂśzben a mĂĄsik aktĂ­v szerverhez kĂŠrĂŠs fut be,
    akkor az vagy dobja el azonnal a kapcsolatot (Socket),
    vagy vĂĄltson ki kivĂŠtelt (RMI).
    A kĂŠrĂŠseket vĂŠgrehajtĂł kĂłdba kerĂźljĂśn lassĂ­tĂĄs,
    hogy ki lehessen prĂłbĂĄlni a fent leĂ­rtakat.


More information about the Orgyak mailing list