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
..k.....ppp.pppp.........R...B..................PPPPPPPPK.......rnbqkbnrpppppppp................................PPPPPPPPRNBQKBNRrnbqk.nrppp..ppp....p......p.....bPP.........N..PP..PPPPRNBQKB.R................................................................
letöltés szöveges állományként
A példa bemenethez tartozó kimenet
Game #1: black king is in check.Game #2: no king is in check.Game #3: white king is in check.
letöltés szöveges állományként