PROBLEMA 2:           SAH
    DEADLINE:             Miercuri, 10 februarie 1999
    PUNCTAJ:              65 Dexteri
    TIMP DE IMPLEMENTARE: 2 ore
    DOMENII:              Gasirea unui algoritm pentru calculator;
                          Interactiunea cu un modul Onor. Comisii
    
    Pe o tabla de sah se gasesc trei piese: regele alb, dama alba si
    regele negru. Albul este la mutare. Pozitia initiala este corecta
    (regii nu se afla unul langa altul, iar regele negru nu se afla in
    sah). Scrieti un program care da mat regelui negru. Aveti la
    dispozitie 30 de mutari.
    
    Regele negru va fi comandat de modulul SAH.H / SAH.TPU, care se
    declara astfel in codul sursa:
    
    Pascal:         uses Sah;
    C:              #include "sah.h"
    
    Modulul va pune la dispozitie urmatoarele proceduri si functii:
    
    Pascal:         function init:String;
    C:              char *init(void)
    
    Aceasta functie returneaza un string de 9 caractere indicand
    configuratia initiala a tablei prin pozitia respectiv a regelui alb, a
    damei albe si a regelui negru. Stringul are forma: "RlcDlcRlc", unde l
    este un caracter cuprins intre 'A' si 'H', iar c este un caracter
    cuprins intre '1' si '8'. De exemplu, sirul "RA1DE3RD7" inseamna ca
    regele alb este asezat la A1, dama alba la E3, iar regele negru la D7.
    
    Pascal:         procedure whitemove(S:String);
    C:              void whitemove(char *S)
    
    Cu aceasta procedura comunicati modulului mutarea pe care doriti sa o
    efectuati. Stringul S trebuie sa aiba trei caractere:
    - Primul este 'R' sau 'D' dupa cum doriti sa mutati regele sau dama;
    - Al doilea este un caracter intre 'A' si 'H'
    - Al treilea este un caracter intre '1' si '8'. Ultimele trei
    caractere reprezinta coordonatele unde doriti sa mutati piesa. De
    exemplu (Pascal) whitemove('RB1'); inseamna ca doriti sa mutati regele
    alb la B1.
    
    Pascal:         function blackmove:String;
    C:              char *blackmove(void)
    
    Aveti datoria sa apelati aceasta functiue ori de cate ori este randul
    negrului sa mute. Ea va returna un sir de trei caractere cu acelasi
    format ca mai sus, cu mentiunea ca primul caracter este intotdeauna
    'R', dat fiind ca negrul nu are alte piese. De exemplu, daca blackmove
    intoarce 'RC8', inseamna ca negrul doreste sa mute regele la C8.
    Calculatorul efectueaza intotdeauna mutari corecte, nu intra in sah
    etc.
    
    Observatii:
    1. Toate literele care apar in trimiterea de parametri sunt litere mari.
    2. Functia init trebuie apelata o singura data, inainte de orice apel
       al lui whitemove sau blackmove.
    3. Un test se considera picat in oricare din urmatoarele situatii:
    
    - Apelati la un moment nepotrivit o procedura (de exemplu apelati de
      doua ori consecutiv whitemove fara un apel intermediar al lui
      blackmove) sau ii trimiteti parametri incorecti;
    - Incercati sa efectuati o mutare gresita (mutare in L cu regele,
      tentativa de a lipi regele de regele advers etc);
    - Depasiti limita de 30 de mutari.
    - Pierdeti dama sau faceti pat si partida se incheie remiza.
    
    In cazul fericit in care reusiti sa dati mat, de oprirea programului
    vostru se va ocupa modulul. Deci nu aveti nevoie sa scrieti nimic pe
    ecran.
    
    TIMP DE RULARE: o secunda. Se garanteaza ca apelul functiei init si
    cate 30 de apeluri ale functiilor whitemove si blackmove dureaza sub
    0.1 secunde.