Kurzusok
/
F#
F#
/
Feladatok
/
SGF-elemzés
SGF-elemzés

SGF-elemzés

Nehéz

Utasítások

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:

  • A legfelső szintű csomópontnak három tulajdonsága van: FF[4] (kulcs = „FF”, érték = „4”), C[root](kulcs = „C”, érték = „root”) és SZ[19] (kulcs = „SZ”, érték = „19”). (Az FF az SGF verzióját jelöli, a C egy megjegyzés, az SZ pedig a tábla mérete.)
    • A legfelső szintű csomópontnak egyetlen gyermeke van, amelynek egyetlen tulajdonsága van: B[aa]. (A fekete az „aa”-ként kódolt pontra lép, ami az 1-1 pont.)
      • A B[aa] csomópontnak egyetlen gyermeke van, amelynek egyetlen tulajdonsága van: W[ab].

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:

  • A sortörések eltűnnek, ha közvetlenül egy \ után állnak, egyébként sortörésként maradnak meg.
  • A sortörésen kívül minden whitespace-karakter szóközzé alakul.
  • A \ 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:

  • Azt a stringet, ahogy egy stringliterálban szerepel a tesztekben
  • Azt a stringet, amelyet átadnak az SGF-értelmezőnek

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.

Szerkesztés GitHubon A hivatkozás új ablakban vagy lapon nyílik meg
F# Exercism

Készen állsz elkezdeni a(z) SGF-elemzés feladatot?

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.