Programozó versenyek

Informatikai versenyfeladatok, gyakorló feladatsor, 2012. február 20.

2012. március 1. 0:00 – 2012. április 1. 0:00

Sakk!

A feladatod, hogy írj egy programot, amely beolvas egy sakktáblaállást, és megmondja, hogy támadás alatt (azaz „sakkban”) áll-e valamelyik király. Egy király akkor van sakkban, ha olyan mezőn áll, amelyet az ellenfél egy figurája támad (azaz olyan mezőn, amelyet az ellenfél egy figurája elfoglalhat a következő lépésében).

A világos figurákat nagybetűkkel, a sötéteket kisbetűkkel fogjuk reprezentálni. A világos oldal mindig a tábla alján lesz, a sötét pedig a tábla tetején.

Azok számára, akik nem ismerik a sakkot, íme az egyes figurák lépési lehetőségei:

  • Gyalog (p vagy P): csak egyenesen tud haladni, egyszerre egy mezőt. Ütni viszont átlósan üt (és ebben a feladatban erre van szükség).
  • Huszár (n vagy N): speciálisan lép, és ez az egyetlen figura, amely átugorhat más figurákat. A huszár lépése „L” alakúnak tekinthető. Lásd a példát lejjebb.
  • Futó (b vagy B): akárhány mezőt tud lépni átlósan (mindkét irányban).
  • Bástya (r vagy R): akárhány mezőt tud lépni vízszintesen vagy függőlegesen (mindkét irányban).
  • Vezér (q vagy Q): akárhány mezőt tud lépni bármely irányban (átlósan, vízszintesen vagy függőlegesen, mindkét irányban).
  • Király (k vagy K): egyszerre egy mezőt tud lépni bármely irányban (átlósan, vízszintesen vagy függőlegesen, mindkét irányban).

Példák a lépésekre ('*' jelöli azokat a mezőket, ahol egy figura leüthet más figurákat):

Gyalog Bástya Futó Vezér Király Huszár
........
........
........
........
...p....
..*.*...
........
........
...*....
...*....
...*....
...*....
***r****
...*....
...*....
...*....
.......*
*.....*.
.*...*..
..*.*...
...b....
..*.*...
.*...*..
*.....*.
...*...*
*..*..*.
.*.*.*..
..***...
***q****
..***...
.*.*.*..
*..*..*.
........
........
........
..***...
..*k*...
..***...
........
........
........
........
..*.*...
.*...*..
...n....
.*...*..
..*.*...
........

Ne felejtsd el, hogy a huszár az egyetlen olyan figura, amely átugorhat más figurákat! A gyalog lépése a színétől függ. Egy sötét gyalog egy mezőt léphet átlósan lefelé a táblán. Egy világos gyalog egy mezőt léphet átlósan felfelé a táblán. A fenti példa egy sötét gyalogot ábrázol, hiszen kis p-vel jelöltük. („Lépés” alatt azokat a mezőket értjük, ahová a gyalog akkor léphet, amikor leüt egy figurát.)

A bemenet specifikációja

A bemenetet tetszőleges számú táblaállás alkotja. Minden tábla 8 sorból áll, amelyek mindegyike 8 karaktert tartalmaz. A '.' karakter üres mezőt jelent. A nagybetűk és a kisbetűk jelölik a figurákat (a fent leírtaknak megfelelően). Érvénytelen karakterek (azaz figurák) nem fognak előfordulni, és nem lesz olyan állás, amelyben mindkét király sakkban áll. A bemenetet addig kell olvasni, amíg egy üres táblát nem találsz (azaz egy olyan táblát, amelyet csak '.' karakterek alkotnak), amelyet már nem kell feldolgozni. Az egyes táblaállásokat egy-egy üres sor választja el egymástól. Minden táblán (kivéve az utolsót, amely üres) a világos és a sötét király is szerepel (mindkettő pontosan egy példányban).

A kimenet specifikációja

Minden beolvasott táblaállásra a következő válaszok egyikét kell kiírni, ahol d az állás sorszámát jelöli (1-től indulva):

Game #d: white king is in check.
Game #d: black king is in check.
Game #d: no king is in check.

Az elsőt akkor kell kiírni, ha a világos király áll sakkban, a másodikat akkor, ha a sötét király áll sakkban, a harmadikat pedig akkor, ha egyik király sem áll sakkban.

Példa bemenet

  1. ..k.....
  2. ppp.pppp
  3. ........
  4. .R...B..
  5. ........
  6. ........
  7. PPPPPPPP
  8. K.......
  9. rnbqkbnr
  10. pppppppp
  11. ........
  12. ........
  13. ........
  14. ........
  15. PPPPPPPP
  16. RNBQKBNR
  17. rnbqk.nr
  18. ppp..ppp
  19. ....p...
  20. ...p....
  21. .bPP....
  22. .....N..
  23. PP..PPPP
  24. RNBQKB.R
  25. ........
  26. ........
  27. ........
  28. ........
  29. ........
  30. ........
  31. ........
  32. ........
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. Game #1: black king is in check.
  2. Game #2: no king is in check.
  3. Game #3: white king is in check.
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2024.09.30.