Programozó versenyek

Magas szintű programozási nyelvek 1, 2018. május 14., H8 ZH

2018. május 14. 8:05 – 2018. május 14. 9:50

Kirakós kártyajáték

A póker a legnépszerűbb és legismertebb kártyajátékok egyike. A pókerben a játékosnak az a célja, hogy a birtokában lévő kártyalapokból a lehető legjobb kombinációt kihozva elvigye az asztal közepén lévő kasszát (angolul pot-ot). A játékot francia kártyával játsszák. Az egyes kártyalapokat a színük és értékük különbözteti meg egymástól, a pakliban (elvileg) nincs két olyan lap, amelynek egyszerre egyezne meg a színe és az értéke.

A színsor eredetén sok tudós törte már a fejét, de csak a találgatásokig jutottak el. A legnagyobb valószínűsége annak az elméletnek van, amely szerint a színek háborús értelműek. A kőr (coeur) – vagyis a szív – a bátorság jelképe volt, a harcos katonát jelentette. A pikk (pique) a régi lándzsa ásószerű végződését akarta ábrázolni, a káró (carreau) pedig annak a súlyos dárdának a négyszögletes vasvége volt, amelyet a lőpor feltalálása előtt hajítógépből zúdítottak az ellenségre. Végül a treff (trefle), vagyis lóhere, arra a takarmányra utalt, amely nélkül a lovasság nem tudott háborúskodni. Tehát ha maga a kártya nem is, a színei francia eredetűek. Bár mára már ezek az egykor tényként kezelt adatok a történelem homályába merültek, talán mégis érdemes volt felidézni őket, és megtudni, hogy mi a története az „ördög bibliájának”. (Forrás: https://archivum.ujszo.com/cimkek/nagyszunet/2004/05/11/kor-pikk-treff-es-karo.)

Írjon programot, amely a standard bemenet soraiból egy franciakártya-pakli lapjait olvassa be, soronként egyet-egyet! A kártyalapok színeit a kártyák színeinek angol elnevezése alapján C (clubs, treff), D (diamonds, káró), H (hearts, kőr) és S (spades, pikk) betűkkel, értékeit a 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A számokkal és betűkkel jelöljük. A színt és az értéket egy szóköz karakter választja el egymástól.

A bemenet első sorából olvasott kártyalap lesz a kezdő lap, ezt a lapot helyezzük az asztalra, és minden ezután lerakott lapot erre a lapra teszünk rá, egy halmot építve így. A további kártyákat a beolvasás sorrendjében próbáljuk meg a halom legfelső lapjához illeszteni. Egy lap akkor illeszthető a halom tetején lévőhöz, ha vagy a színe, vagy az értéke megegyezik azéval (de mindkettő egyszerre nem egyezhet meg vele). Amennyiben az illesztés sikeres, a vizsgált lapot lerakjuk a halom tetejére, innentől kezdve az lesz a halom legfelső lapja. Ha nem lehet a soron következő lapot a halom tetején lévőhöz illeszteni, akkor ez a lap a nyakunkon marad, ezzel a későbbiekben már nem tudunk mit kezdeni. Tevékenységünket mindaddig folytatjuk, míg az összes beolvasott kártyalapot végig nem néztük.

A programja írja a standard kimenetre azoknak a kártyalapoknak a számát, amelyek a nyakunkon maradtak, azaz amelyeket a pakli végignézése során nem lehetett hozzáilleszteni a fenti szabályok szerint a halom tetején lévő laphoz! Ne felejtse el a számot tartalmazó sort soremelés karakterrel zárni!

Példa bemenet

  1. C 8
  2. D T
  3. H A
  4. H 8
  5. H 9
  6. S K
  7. S 9
  8. D Q
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. 4
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.