Programozó versenyek

Magas szintű programozási nyelvek 1, egyéni verseny, 2014. április 13.

2014. április 13. 10:15 – 2014. április 13. 15:15

A Forsyth–Edwards-jelölés

A Forsyth–Edwards-jelölés (Forsyth–Edwards Notation, FEN) a sakkjáték egy konkrét táblaállásának leírására használt jelölésrendszer. A FEN célja, hogy minden olyan információt biztosítson, amelyek segítségével újraindítható egy játszma egy adott állásból.

A „FEN-rekord” egy konkrét játékállást ír le, egyetlen sorban, csak az ASCII karakterkészlet felhasználásával. A FEN-rekord hat mezőből áll, amelyeket egy-egy szóköz választ el egymástól. Az egyes mezők a következők:

  1. A figurák elhelyezkedése (világos szemszögéből). A figurák soronként vannak megadva, a nyolcadik sorral kezdve az első sorig; a sorokon belül az egyes mezők tartalma van megadva az a vonaltól a h vonalig. Az egyes figurákat – a szabványos algebrai jelölésnek megfelelően – egyetlen betűvel jelöljük, amelyek a megszokott angol elnevezéseket tükrözik: „P” jelöli a gyalogot (pawn), „N” a huszárt (knight), „B” a futárt (bishop), „R” a bástyát (rook), „Q” a vezért (queen) és „K” a királyt (king). A világos figurákat nagybetűkkel („PNBRQK”), a sötéteket kisbetűkkel („pnbrqk”) jelöljük. Az üres mezőket egy számjeggyel adjuk meg 1-től 8-ig (a szomszédos üres mezők számának megfelelően), a sorokat pedig „/” választja el egymástól.
  2. A lépni következő játékos színe. A „w” azt jelenti, hogy világos (white) következik, a „b” pedig, hogy sötét (black).
  3. Sáncolási lehetőségek. Ha egyik fél sem tud sáncolni, akkor „-”. Egyébként egy vagy több betűből áll: „K” (világos sáncolhat a királyoldalon), „Q” (világos sáncolhat a vezéroldalon), „k” (sötét sáncolhat a királyoldalon) és/vagy „q” (sötét sáncolhat a vezéroldalon).
  4. En passant célmező algebrai jelöléssel. Ha nincs en passant célmező, akkor „”. Ha egy gyalog éppen most lépett kettőt, akkor ez a gyalog „mögötti” mező. Ezt attól függetlenül feljegyezzük, hogy van-e olyan gyalog, amelyik végrehajthat en passant ütést.
  5. Féllépésszámláló. Az utolsó gyaloglépés vagy ütés óta eltelt féllépések száma. Arra használjuk, hogy eldönthessük, hogy kérhetnek-e döntetlent a játékosok az 50 lépéses szabály alapján.
  6. A teljes lépések száma. 1-ről indul, és sötét lépései után nő eggyel.

A feladatod egy olyan program írása, amely adott FEN-rekordok esetén kirajzolja a megfelelő sakktáblaállásokat.

A bemenet specifikációja

A bemenet soronként egy FEN-rekordot tartalmaz. A bemenetet fájlvégjelig kell olvasni.

A kimenet specifikációja

Minden FEN-rekord esetén az általa reprezentált sakktáblát kell a kimenetre írni. Minden sakktáblának 8 sorból, azoknak pedig 8 karakterből kell állnia. Az üres mezőket „.” karakter, a figurákat pedig nagybetűk és kisbetűk jelöljék (a fentieknek megfelelően)! Két egymást követő táblát egy-egy üres sor válasszon el egymástól!

Az utolsó sakktábla után ne legyen üres sor!

Példa bemenet

  1. rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR w KQkq - 0 1
  2. rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR b KQkq e3 0 1
  3. rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR w KQkq c6 0 2
  4. rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R b KQkq - 1 2
letöltés szöveges állományként

A példa bemenethez tartozó kimenet

  1. rnbqkbnr
  2. pppppppp
  3. ........
  4. ........
  5. ........
  6. ........
  7. PPPPPPPP
  8. RNBQKBNR
  9. rnbqkbnr
  10. pppppppp
  11. ........
  12. ........
  13. ....P...
  14. ........
  15. PPPP.PPP
  16. RNBQKBNR
  17. rnbqkbnr
  18. pp.ppppp
  19. ........
  20. ..p.....
  21. ....P...
  22. ........
  23. PPPP.PPP
  24. RNBQKBNR
  25. rnbqkbnr
  26. pp.ppppp
  27. ........
  28. ..p.....
  29. ....P...
  30. .....N..
  31. PPPP.PPP
  32. RNBQKB.R
letöltés szöveges állományként
Debreceni Egyetem, Informatikai Kar, v. 2019.03.01.