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..
........
........
PPPPPPPP
K.......
rnbqkbnr
pppppppp
........
........
........
........
PPPPPPPP
RNBQKBNR
rnbqk.nr
ppp..ppp
....p...
...p....
.bPP....
.....N..
PP..PPPP
RNBQKB.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