De Forsyth-Edwards notatie (FEN) is een standaardnotatie waarmee een bepaalde spelsituatie van een schaakspel kan beschreven worden. FEN bevat alle informatie die nodig is om een schaakspel vanaf een bepaalde spelsituatie te kunnen hervatten. Het systeem werd ontwikkeld door David Forsyth — journalist van een Schotse krant — die het reeds in 19e eeuw populariseerde. Steven J. Edwards breidde FEN later uit zodat het ook door computers kon gebruikt worden.

schaakbord
Beginopstelling van een schaakspel vanuit het gezichtspunt van speler wit. Op de onderste rij staan vanaf links toren (R), paard (N), loper (B), dame (D) en koning (K). Op de tweede rij staan de pionnen.

In het eerste deel van FEN (we laten hier gemakshalve een aantal onderdelen van een spelsituatie vallen, zoals bijvoorbeeld wie als volgende aan zet is) wordt de plaatsing van de stukken op het schaakbord beschreven vanuit het gezichtspunt van speler wit. De rijen worden beschreven van boven naar onder, en de bezetting van de velden op elke rij wordt beschreven van links naar rechts. Volgens de Standaard Algebraïsche notatie1 (SAN) wordt elk schaakstuk omschreven met één enkele letter: K = koning, Q = dame/koningin, R = toren/kasteel, B = loper/raadsheer, N = paard, P = pion. Witte stukken worden aangeduid met een hoofdletter (KQRBNP) en zwarte stukken met een kleine letter (kqrbnp). Lege velden worden aangeduid met de cijfers 1 tot en met 8, die het aantal opeenvolgende lege velden aanduiden. Een schuine streep (/) wordt gebruikt om de rijen van elkaar te scheiden.

Opgave

Voorbeeld

>>> print(fen2grid('rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR'))
rnbqkbnr
pppppppp
********
********
********
********
PPPPPPPP
RNBQKBNR
>>> print(fen2grid('rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR', '.'))
rnbqkbnr
pppppppp
........
........
....P...
........
PPPP.PPP
RNBQKBNR
>>> print(fen2grid('rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR', '+'))
rnbqkbnr
pp+ppppp
++++++++
++p+++++
++++P+++
++++++++
PPPP+PPP
RNBQKBNR

>>> rooster = '''rnbqkbnr
... pppppppp
... ********
... ********
... ********
... ********
... PPPPPPPP
... RNBQKBNR'''
>>> print(grid2fen(rooster))
rnbqkbnr/pppppppp/8/8/8/8/PPPPPPPP/RNBQKBNR

>>> print(grid2fen(fen2grid('rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR')))
rnbqkbnr/pppppppp/8/8/4P3/8/PPPP1PPP/RNBQKBNR
>>> print(grid2fen(fen2grid('rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR', '.'), '.'))
rnbqkbnr/pp1ppppp/8/2p5/4P3/8/PPPP1PPP/RNBQKBNR
>>> print(grid2fen(fen2grid('rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R', '+'), '+'))
rnbqkbnr/pp1ppppp/8/2p5/4P3/5N2/PPPP1PPP/RNBQKB1R