Egy Smart Game Format formátumú string értelmezése.
Az SGF egy szabványos formátum táblajáték-fájlok, különösen a go tárolására.
Az SGF meglehetősen egyszerű formátum. Egy SGF-fájl általában egyetlen, csomópontokból álló fát tartalmaz, ahol minden csomópont egy tulajdonságlista. A tulajdonságlista kulcs-érték párokat tartalmaz; egy kulcs csak egyszer szerepelhet, de több értéke is lehet.
A feladatban egy SGF stringet kell értelmezned, és a tulajdonságokból álló fastruktúrát kell visszaadnod.
Egy SGF-fájl így nézhet ki:
(;FF[4]C[root]SZ[19];B[aa];W[ab])
Ez egy három csomópontból álló fa:
Amint elképzelheted, egy SGF-fájl sok egyetlen gyermekkel rendelkező csomópontot tartalmaz, ezért van rá egy rövidített jelölés.
Az SGF a játék változatait is képes kódolni. A go játékosai sokat lépkednek vissza az elemzéseik során (próbáljuk meg ezt, nem működik, próbáljuk meg azt), és az SGF támogatja a játéksorozatok változatait. Például:
(;FF[4](;B[aa];W[ab])(;B[dd];W[ee]))
Itt a gyökércsomópontnak két változata van. Az első (amely a konvenció szerint azt jelöli, ami valóban lejátszódik) az, ahol a fekete az 1-1 pontra lép. A feketének a tanára küldte el ezt a fájlt, aki rámutatott egy ésszerűbb lépésre a gyökércsomópont második gyermekében: B[dd] (4-4 pont, egy nagyon szabványos nyitás a sarok megszerzésére).
Egy kulcshoz több érték is tartozhat. Például:
(;FF[4];AB[aa][ab][ba])
Itt az AB (fekete hozzáadása) arra szolgál, hogy három fekete követ adjon a táblához.
Minden tulajdonságérték az SGF Text típus lesz. Semmilyen más értéktípust nem kell megvalósítanod. Bár elolvashatod a Text típus teljes dokumentációját, az alábbiakban összefoglaljuk a fontos pontokat:
\ után állnak, egyébként sortörésként maradnak meg.\ az escape-karakter.
Minden nem whitespace-karakter, amely egy \ után áll, változatlanul bekerül.
Minden whitespace-karakter, amely egy \ után áll, a fenti szabályokat követi.
Ne feledd, hogy az SGF-nek nincs escape-szekvenciája olyan whitespace-karakterekhez, mint a \t vagy a \n.Vigyázz, ne keverd össze a következő kettőt:
A stringliterálokban lévő escape-szekvenciákat a programozási nyelv értelmezője már feldolgozhatta, mielőtt azokat átadnák az SGF-értelmezőnek.
Az SGF-nek (és általában az értelmezésnek) van még néhány bonyolultsága, amelyeket nagyrészt figyelmen kívül hagyhatsz. Feltételezheted, hogy a bemenet UTF-8 kódolású, és hogy a tesztek nem tartalmaznak charset tulajdonságot, szóval emiatt ne aggódj. Továbbá feltételezheted, hogy minden sortörés unix stílusú (\n, a tesztekben nem lesz \r vagy \r\n), és hogy a tesztekben nem lesz opcionális whitespace a tulajdonságok, csomópontok stb. között.
Iratkozz fel az Exercism-re, hogy megtanuld és elsajátítsd a(z) F# nyelvet 18 fogalom148 feladat segítségével, valódi emberi mentorálással, mindez ingyen.