Programozó versenyek

Programozási nyelvek 2, gyakorló feladatsor, 2020. október 15.

2020. október 15. 0:00 – 2020. december 1. 12:00

Futball

A futball a világ legnépszerűbb sportja. Ahogy azt mindenki tudja, Brazília büszkélkedhet a legtöbb világbajnoki címmel (szám szerint öttel: 1958, 1962, 1970, 1994 és 2002). Mivel a nemzeti bajnokságukban sok csapat vesz részt (sőt még a regionális bajnokságaikban is sok csapat van), nagyon nehéz feladat az állás nyomon követése ilyen sok csapat és lejátszott mérkőzés mellett!

A feladatod tehát nagyon egyszerű: írj egy programot, amely megkapja a bajnokság nevét, a csapatneveket és a lejátszott mérkőzéseket, és kiírja a bajnokság jelenlegi állását.

Egy csapat akkor nyer meg egy mérkőzést, ha több gólt szerez, mint az ellenfele. Nyilvánvalóan veszít egy csapat, ha kevesebb gólt szerez. Ha mindkét csapat ugyanannyi gólt szerez, akkor ezt döntetlennek nevezzük. Egy csapat minden győzelemért 3 pontot, minden döntetlenért 1 pontot és minden vereségért 0 pontot kap.

A csapatokat a következő szabályok alapján rangsoroljuk (ebben a sorrendben):

  1. A legtöbb megszerzett pont.
  2. A legtöbb győzelem.
  3. A legjobb gólkülönbség (azaz a rúgott gólok számából kivonva a kapott gólok számát).
  4. A legtöbb rúgott gól.
  5. A legkevesebb lejátszott mérkőzés.
  6. Lexikografikus sorrend.

A bemenet specifikációja

A bemenet első sora egy N egész számot tartalmaz önmagában (0 < N < 1000). Ezt N darab bajnokságleírás követi, amelyek mindegyike a bajnokság nevével kezdődik egyetlen sorban. A bajnokság neve tartalmazhat bármilyen betűt, számjegyet, szóközöket stb. A bajnokságnév legfeljebb 100 karakter hosszúságú lehet. A következő sorban egy T egész szám szerepel (1 < T ≤ 30), amely a bajnokságban részt vevő csapatok számát adja meg. Ezután T sor következik, amelyek egy-egy csapatnevet tartalmaznak. A csapatnevekben minden olyan karakter előfordulhat, amelynek az ASCII kódja nagyobb vagy egyenlő 32-nél (szóköz), kivéve a „#” és a „@” karaktereket, amelyek soha nem szerepelnek csapatnevekben. Egyik csapatnév sem áll 30-nál több karakterből.

A csapatneveket követően egy G nemnegatív egész szám áll egy sorban, amely a bajnokságban eddig lejátszott mérkőzések számát adja meg. G nem nagyobb, mint 1000. Ezt G sor követi a lejátszott mérkőzések eredményeivel. Ezek a sorok a következő formájúak:

csapatnév_1#gólok1@gólok2#csapatnév_2

Vegyük például a következő sort:

A csapat#3@1#B csapat

Ez azt jelenti, hogy az A csapat és a B csapat közötti mérkőzésen az A csapat 3 gólt szerzett, a B csapat pedig 1-et. Minden gólszám egy 20-nál kisebb nemnegatív egész. Felteheted, hogy nem szerepelnek nem létező csapatnevek (azaz minden csapatnév, amely előfordul a mérkőzéseredmények között, korábban előfordult a csapatnévlistában is), valamint hogy egyik csapat sem játszik saját maga ellen.

A kimenet specifikációja

Minden egyes bajnokság esetén ki kell írnod a bajnokság nevét egy sorban. A következő T sorban az állást kell kiírnod a fenti szabályoknak megfelelően. Ha a helyezést a lexikografikus sorrend dönti el, akkor a kis- és nagybetűket nem kell megkülönböztetni. A kiírandó sorok a következő formájúak:

[a]) Csapatnév [b]p, [c]g ([d]-[e]-[f]), [g]gd ([h]-[i])

A szögletes zárójelekbe írt betűk jelentése a következő:

  • [a] = a csapat helyezése
  • [b] = szerzett pontok
  • [c] = lejátszott mérkőzések
  • [d] = győzelmek
  • [e] = döntetlenek
  • [f] = vereségek
  • [g] = gólkülönbség
  • [h] = rúgott gólok
  • [i] = kapott gólok

A mezők között egyetlen szóköznek kell állnia, az egyes bajnokságokhoz tartozó kimeneteket pedig egyetlen üres sornak kell elválasztania egymástól (lásd a példa kimenetet).

Példa bemenet

  1. 2
  2. World Cup 1998 - Group A
  3. 4
  4. Brazil
  5. Norway
  6. Morocco
  7. Scotland
  8. 6
  9. Brazil#2@1#Scotland
  10. Norway#2@2#Morocco
  11. Scotland#1@1#Norway
  12. Brazil#3@0#Morocco
  13. Morocco#3@0#Scotland
  14. Brazil#1@2#Norway
  15. Some strange tournament
  16. 5
  17. Team A
  18. Team B
  19. Team C
  20. Team D
  21. Team E
  22. 5
  23. Team A#1@1#Team B
  24. Team A#2@2#Team C
  25. Team A#0@0#Team D
  26. Team E#2@1#Team C
  27. Team E#1@2#Team D
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. World Cup 1998 - Group A
  2. 1) Brazil 6p, 3g (2-0-1), 3gd (6-3)
  3. 2) Norway 5p, 3g (1-2-0), 1gd (5-4)
  4. 3) Morocco 4p, 3g (1-1-1), 0gd (5-5)
  5. 4) Scotland 1p, 3g (0-1-2), -4gd (2-6)
  6. Some strange tournament
  7. 1) Team D 4p, 2g (1-1-0), 1gd (2-1)
  8. 2) Team E 3p, 2g (1-0-1), 0gd (3-3)
  9. 3) Team A 3p, 3g (0-3-0), 0gd (3-3)
  10. 4) Team B 1p, 1g (0-1-0), 0gd (1-1)
  11. 5) Team C 1p, 2g (0-1-1), -1gd (3-4)
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.