1 # **************************************************************************************************
\r
2 # Názov: PGN_Analyzer.rb
\r
4 # Verzia: 0.1 (prva verejna verzia)
\r
6 # Stav: rozpracovany/under development
\r
8 # Popis: program robi analyzu zapisu sachovej partie vo formate PGN
\r
10 # Vstup: nic na prikazovom riadku, vstupom od uzivatela je nazov
\r
11 # textoveho suboru, v ktorom je zapis partie ulozeny
\r
13 # Vystup: program vypise na vystup retazec "ok", ak je zapis sachovej partie
\r
14 # v poriadku, ak nie je vypise na vystup retazec "err"
\r
16 # Struktura volania metod:
\r
20 # ------ AnalyzujHlavicku
\r
21 # --------- AnalyzujRiadokHlavicky
\r
22 # ------ AnalyzujTahy
\r
23 # --------- is_result_token
\r
24 # --------- analyzuj_tah
\r
25 # ------------ dvojzntah
\r
26 # ------------ trojzntah
\r
27 # ------------ stvorzntah
\r
28 # ------------ patzntah
\r
30 # Poznamky: nateraz (v.0.1) je urobena len lexikalna analyza, teda kontroluje sa
\r
31 # ci je sachova partia formalne spravne zapisana vo formate PGN, nekontroluje sa
\r
32 # ci zapisane tahy su korektne z hladiska sachovych pravidiel, ani to, ake tagy
\r
33 # su ci nie su uvedene v hlavicke programu. Je implementovana zakladna funkcionalita
\r
34 # co sa tyka PGN formatu, nie je to plna implementacia PGN standardu.
\r
35 # Nie je urobena ani chybova diagnostika, v pripade chyby, program jednoducho
\r
36 # vypise "err" a skonci neindikujuc co, preco a na ktorom mieste je zle.
\r
37 # Nie su vytvorene ani testovacie procedury/skripty a dokumentacia.
\r
40 # 22.06.2007 - v.0.1 - Slavo FURMAN - prva verejna verzia
\r
41 # **************************************************************************************************
\r
43 # ==================================================================================================
\r
44 # metoda: Analyzuj.rb
\r
46 # Popis: metoda robi analyzu zapisu sachovej partie vo formate PGN
\r
48 # Vstup: retazec, v ktorom je cely zapis sachovej partie, ako sme ho precitali zo suboru
\r
50 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
51 # ==================================================================================================
\r
53 def analyzuj(pgnsubor)
\r
63 # postupne citame obsah vstupneho suboru (ktory sme dostali uz ako retazec)
\r
64 # riadok po riadku a do osobitnych retazcov ulozime cast s hlavicku partie
\r
65 # a cast s tahmi partie
\r
67 pgnsubor.each_line do |riadok|
\r
69 if (riadok.strip.length !=0)
\r
71 if (citamehlavicku == 0)
\r
73 hlavicka = hlavicka + riadok
\r
75 elsif (citamehlavicku == 1)
\r
77 hlavicka = hlavicka + riadok
\r
79 elsif ((citamehlavicku==2) and (citametahy==0))
\r
82 tahy = tahy + riadok
\r
84 elsif ((citamehlavicku==2) and (citametahy==1))
\r
86 tahy = tahy + riadok
\r
92 if (citamehlavicku == 1)
\r
94 elsif (citametahy == 1)
\r
109 #cast s hlavickou analyzujeme v metode "analyzujhlavicku"
\r
110 result = analyzujhlavicku(hlavicka)
\r
115 #cast s tahmi analyzujeme v metode "analyzujtahy" - volane len ak hlavicka je "ok"
\r
116 if (result == "ok")
\r
117 result = analyzujtahy(tahy)
\r
124 # ==================================================================================================
\r
125 # metoda: analyzujhlavicku.rb
\r
127 # Popis: metoda robi analyzu hlavicky zapisu sachovej partie vo formate PGN
\r
129 # Vstup: retazec, v ktorom je hlavicka zapisu sachovej partie
\r
131 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
132 # ==================================================================================================
\r
134 def analyzujhlavicku(hlavicka)
\r
138 # berieme postupne vsetky riadky hlavicky a analyzujeme ich v metode "analyzujriadokhlavicky"
\r
139 hlavicka.each_line do |riadok|
\r
140 result = analyzujriadokhlavicky(riadok.chomp)
\r
141 if (result == "err")
\r
149 # ==================================================================================================
\r
150 # metoda: analyzujhlavicku.rb
\r
152 # Popis: metoda robi analyzu riadku hlavicky zapisu sachovej partie vo formate PGN
\r
154 # Vstup: retazec, v ktorom je riadok z hlavicky zapisu sachovej partie vo formate PGN
\r
156 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
157 # ==================================================================================================
\r
159 def analyzujriadokhlavicky(riadok)
\r
162 dlzkar = riadok.length
\r
164 #puts "analyzujeme -> {" + riadok + "} "
\r
165 #puts "dlzkar -> {" + dlzkar.to_s + "} "
\r
169 #puts "riadok[0] -> {" + riadok[0].to_s + "} "
\r
170 #puts "riadok[dlzkar-1] -> {" + riadok[dlzkar-1].to_s + "} "
\r
172 # riadok musi zacinat a koncit hranatou zatvorkou
\r
173 if (riadok[0].chr.to_s != "[") or (riadok[dlzkar-1].chr.to_s != "]")
\r
174 #puts "arh-CHYBA1!"
\r
178 # preskocime pripadne biele znaky za otvaracou hranatou zatvorkou
\r
179 # (pri vsetkych citaniach testujeme aj to ci sa nedostaneme az na koniec
\r
180 # analyzivaneho retazca, co by bola chyba)
\r
182 while ((riadok[pos].chr.to_s ==" ") or (riadok[pos].chr.to_s == "\t"))
\r
184 if (pos > dlzkar-2)
\r
185 #puts "arh-CHYBA2!"
\r
190 #puts "pos -> {" + pos.to_s + "} "
\r
192 # precitame tagname do osobitnej premennej, moze sa hodit, ak v buducnosti budeme
\r
193 # testovat aj hodnotu/obsah/vyznam tagname
\r
195 while ((riadok[pos].chr.to_s !=" ") and (riadok[pos].chr.to_s != "\t"))
\r
197 #puts "riadok[" + pos.to_s + "] -> " + riadok[pos].to_s + "(" + riadok[pos].chr + ")"
\r
198 #puts "pos -> {" + pos.to_s + "}, tagname -> {" + tagname + "}"
\r
200 tagname = tagname + riadok[pos].chr.to_s
\r
202 if (pos > dlzkar-2)
\r
203 #puts "arh-CHYBA3!"
\r
208 #puts "tagname -> {" + tagname + "} "
\r
210 # preskocime biele znaky za tagname
\r
211 while ((riadok[pos].chr.to_s ==" ") or (riadok[pos].chr.to_s == "\t"))
\r
213 if (pos > dlzkar-2)
\r
214 #puts "arh-CHYBA4!"
\r
219 # hodnota tagname musi zacinat uvodzovkami
\r
220 if (riadok[pos].chr.to_s !="\"")
\r
221 #puts "arh-CHYBA5!"
\r
227 # precitame hodnotu tagvalue do osobitnej premennej
\r
229 while (riadok[pos].chr.to_s != "\"")
\r
231 tagvalue = tagvalue + riadok[pos].chr.to_s
\r
234 if (pos > dlzkar-2)
\r
235 #puts "arh-CHYBA6!"
\r
240 #puts "tagvalue -> {" + tagvalue + "} "
\r
242 # preskocime pripadne biele znaky pre zatvaracou hranatou zatvorkou
\r
243 while (pos > dlzkar-2)
\r
245 if ((riadok[pos].chr.to_s !=" ") or (riadok[pos].chr.to_s != "\t"))
\r
246 #puts "arh-CHYBA7!"
\r
251 #ak sme sa bez chyb dostali az tu, je analyzovany retazec ok
\r
255 # ==================================================================================================
\r
256 # metoda: analyzujtahy.rb
\r
258 # Popis: metoda robi analyzu tahov zapisu sachovej partie vo formate PGN
\r
260 # Vstup: retazec, v ktorom su tahy zo zapisu sachovej partie vo formate PGN
\r
262 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
263 # ==================================================================================================
\r
265 def analyzujtahy(tahy)
\r
268 dlzkat = tahy.length
\r
272 #puts "TAHY (" + dlzkat.to_s + "):"
\r
277 cislo_aktualne_sprac_tahu = 0
\r
278 nasledujuci_token = "nct"
\r
280 # prechadzame cely vstupny retazec a berieme jeden token za druhym
\r
281 # a posielame ich do prislusnych metod na analyzu. Tokeny su od seba
\r
282 # oddelene bielymi znakmi.
\r
284 # Druhy tokenov su:
\r
290 while (pos < dlzkat)
\r
292 # preskocime biele znaky
\r
293 while ((pos > dlzkat-1) or (tahy[pos].chr.to_s ==" ") or (tahy[pos].chr.to_s == "\t") or (tahy[pos].chr.to_s == "\n"))
\r
297 # precitame nasledujuci token
\r
301 while ((pos < dlzkat) and (tahy[pos].chr.to_s !=" ") and (tahy[pos].chr.to_s != "\t") and (tahy[pos].chr.to_s != "\n"))
\r
303 #puts "tahy[" + pos.to_s + "] -> " + tahy[pos].to_s + "(" + tahy[pos].chr + ")"
\r
304 #puts "pos -> {" + pos.to_s + "}, next_token -> {" + next_token + "}"
\r
306 next_token = next_token + tahy[pos].chr.to_s
\r
311 #puts "next_token -> {" + next_token + "}"
\r
314 #zistime ci dany token predstavuje zapis vysledku sachovej partie
\r
315 is_result = is_result_token(next_token)
\r
317 # ak ano, dalsi token uz nema nasledovat
\r
318 if (is_result == "result")
\r
320 nasledujuci_token == "nothing_more"
\r
324 # ak bol predtym zapis vysledku, tak je to chyba, lebo za vysledok uz nema byt nic
\r
325 if (nasledujuci_token == "nothing_more")
\r
330 # ak ma nasledovat token s cislo tahu, testujeme ci je to naozaj cislo tahu
\r
331 elsif (nasledujuci_token == "nct")
\r
333 ntoken = (cislo_aktualne_sprac_tahu + 1).to_s + "."
\r
335 #puts "ntoken -> {" + ntoken + "}"
\r
337 if (next_token != ntoken)
\r
341 cislo_aktualne_sprac_tahu = cislo_aktualne_sprac_tahu + 1
\r
342 nasledujuci_token = "tb"
\r
345 # ak ma nasledovat token "tah bieleho" alebo "tah cierneho", tak zmenime typ
\r
346 # nasledujuceho tokenu a testujeme ci je dany token koretne zapisany tah
\r
347 elsif (nasledujuci_token == "tb")
\r
349 nasledujuci_token = "tc"
\r
351 if (analyzuj_tah(next_token) == "err")
\r
357 elsif (nasledujuci_token == "tc")
\r
359 nasledujuci_token = "nct"
\r
361 if (analyzuj_tah(next_token) == "err")
\r
370 end # koniec vonkajsieho cyklu na spracovanie tahov
\r
372 # ak posledny token nebol vysledok je to chyba
\r
373 if (is_result != "result")
\r
383 # ==================================================================================================
\r
384 # metoda: is_result_token.rb
\r
386 # Popis: metoda robi analyzu tokenu (retazca, ktory obsahuje bud cislo tahu, tah, alebo zapis
\r
387 # vysledku sachovej partie). Konkretne zistuje ci dany token predstavuje zapis vysledku.
\r
388 # Zapis vysledku musi byt v formate:
\r
393 # Vstup: retazec, v ktorom analyzovany token
\r
395 # Vystup: vrati retazec "result", ak token predstavuje zapis vysledku, inak vrati retazec "noresult"
\r
396 # ==================================================================================================
\r
398 def is_result_token(token)
\r
402 if (token == "1-0")
\r
404 elsif (token == "0-1")
\r
406 elsif (token == "1/2-1/2")
\r
416 # ==================================================================================================
\r
417 # metoda: analyzuj_tah.rb
\r
419 # Popis: metoda robi analyzu tokenu predstavujuceho jeden tah v zapise sachovej
\r
420 # partie vo formate PGN. Nateraz sa robi len lexikalna analyza, teda zistuje
\r
421 # sa ci je tah formalne spravne zapisany, nekontroluje sa, ci je dany tah mozny/spravny
\r
422 # vhladom na pravidla sachu/aktualne postavenie figur na sachovnici. Je implementovana
\r
423 # zakladna funkcionalita co sa tyka PGN formatu, nie je to plna implementacia PGN standardu.
\r
424 # nerozlisuje ci ide o tah bieleho alebo cierneho, co by sme do buducnosti mohli - bud v jednej
\r
425 # alebo dvoch metodach. Umoznilo by to presnejsiu analyzu tahu, najma ak by islo aj o kontrolu
\r
426 # jeho spravnosti podla sachovych pravidiel.
\r
428 # Vstup: retazec, v ktorom analyzovany token
\r
430 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
431 # ==================================================================================================
\r
433 def analyzuj_tah(tah)
\r
438 # ak je za tahom znak oznacujuci sach alebo mat, tak ho z tokenu odstranime
\r
439 # kedze v pri terajsej analyze nema pre nas vyznam. Upraveny token/tah ulozime
\r
440 # do novej premennej "up_tah"
\r
441 if ((tah[dt-1].chr == "+") or (tah[dt-1].chr == "#"))
\r
446 up_tah = up_tah + tah[i].chr.to_s
\r
456 # ak ide o malu alebo velku rosadu, tak je vsetko "ok" a koncime
\r
457 if ((up_tah == "O-O") or (up_tah == "O-O"))
\r
464 # zistime dlzku tahu, a volame prislusnu metodu na jeho analyzu.
\r
465 # Dlhsie tahy ako 5-znakove (podla nasej analyzy) nemozu existovat.
\r
467 if (up_tah.length == 2)
\r
469 result = dvojzntah(up_tah)
\r
472 elsif (up_tah.length == 3)
\r
474 result = trojzntah(up_tah)
\r
477 elsif (up_tah.length == 4)
\r
479 result = stvorzntah(up_tah)
\r
482 elsif (up_tah.length == 5)
\r
484 result = patzntah(up_tah)
\r
489 puts "problem s tahom - [" + up_tah + "]"
\r
490 puts "nespravny pocet znakov v tahu"
\r
501 # ==================================================================================================
\r
502 # metoda: dvojzntah.rb
\r
504 # Popis: metoda robi analyzu tokenu predstavujuceho dvojznakovy tah v zapise sachovej
\r
505 # partie vo formate PGN. Nateraz sa robi len lexikalna analyza, teda zistuje
\r
506 # sa ci je tah formalne spravne zapisany, nekontroluje sa, ci je dany tah mozny/spravny
\r
507 # vhladom na pravidla sachu/aktualne postavenie figur na sachovnici. Je implementovana
\r
508 # zakladna funkcionalita co sa tyka PGN formatu, nie je to plna implementacia PGN standardu.
\r
510 # Pri dvojznakovom tokene ide o tah pesiakom (kde nie je branie ani premena pesiaka),
\r
511 # kde prvy znak musi byt "a-h" a druhy znak (2-7)
\r
513 # Vstup: retazec, v ktorom analyzovany token
\r
515 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
516 # ==================================================================================================
\r
519 def dvojzntah(akt_tah)
\r
523 #puts "dvojznakovy tah (2) - [" + akt_tah + "]"
\r
525 if ((akt_tah[0].chr.to_s < "a") or (akt_tah[0].chr.to_s > "h"))
\r
531 if ((akt_tah[1].chr.to_s < "2") or (akt_tah[1].chr.to_s > "7"))
\r
541 # ==================================================================================================
\r
542 # metoda: trojzntah.rb
\r
544 # Popis: metoda robi analyzu tokenu predstavujuceho trojznakovy tah v zapise sachovej
\r
545 # partie vo formate PGN. Nateraz sa robi len lexikalna analyza, teda zistuje
\r
546 # sa ci je tah formalne spravne zapisany, nekontroluje sa, ci je dany tah mozny/spravny
\r
547 # vhladom na pravidla sachu/aktualne postavenie figur na sachovnici. Je implementovana
\r
548 # zakladna funkcionalita co sa tyka PGN formatu, nie je to plna implementacia PGN standardu.
\r
550 # Pri trojznakovom tokene ide o tah pesiakom, ked sa premiena na inu figuru dosiahnuc
\r
551 # svoj posledny rad. Alebo moze ist o bezny tah figurou bez brania.
\r
553 # Vstup: retazec, v ktorom analyzovany token
\r
555 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
556 # ==================================================================================================
\r
558 def trojzntah(akt_tah)
\r
560 if ((akt_tah[0].chr.to_s >= "a") and (akt_tah[0].chr.to_s <= "h"))
\r
562 if ((akt_tah[1].chr.to_s != "1") and (akt_tah[1].chr.to_s != "8"))
\r
564 #puts "problem s trojznakovym tahom (1) - [" + akt_tah + "]"
\r
570 if ((akt_tah[2].chr.to_s != "N") and (akt_tah[2].chr.to_s != "B") and
\r
571 (akt_tah[2].chr.to_s != "R") and (akt_tah[2].chr.to_s != "Q"))
\r
573 #puts "problem s trojznakovym tahom (2) - [" + akt_tah + "]"
\r
579 #puts "trojznakovy tah (3) - [" + akt_tah + "]"
\r
587 elsif ((akt_tah[0].chr.to_s == "N") or (akt_tah[0].chr.to_s == "B") or
\r
588 (akt_tah[0].chr.to_s == "R") or (akt_tah[0].chr.to_s == "Q") or (akt_tah[0].chr.to_s == "K"))
\r
590 if ((akt_tah[1].chr.to_s < "a") or (akt_tah[1].chr.to_s > "h"))
\r
592 #puts "problem s trojznakovym tahom (4) - [" + akt_tah + "]"
\r
598 if ((akt_tah[2].chr.to_s < "1") or (akt_tah[2].chr.to_s > "8"))
\r
600 #puts "problem s trojznakovym tahom (5) - [" + akt_tah + "]"
\r
606 #puts "trojznakovy tah (6) - [" + akt_tah + "]"
\r
616 #puts "problem s trojznakovym tahom (7) - [" + akt_tah + "]"
\r
622 #puts "problem s trojznakovym tahom (8) - [" + akt_tah + "]"
\r
628 # ==================================================================================================
\r
629 # metoda: stvorzntah.rb
\r
631 # Popis: metoda robi analyzu tokenu predstavujuceho stvorznakovy tah v zapise sachovej
\r
632 # partie vo formate PGN. Nateraz sa robi len lexikalna analyza, teda zistuje
\r
633 # sa ci je tah formalne spravne zapisany, nekontroluje sa, ci je dany tah mozny/spravny
\r
634 # vhladom na pravidla sachu/aktualne postavenie figur na sachovnici. Je implementovana
\r
635 # zakladna funkcionalita co sa tyka PGN formatu, nie je to plna implementacia PGN standardu.
\r
637 # Pri stvorznakovom tokene ide o branie pesiakom, alebo branie figurou, alebo tah
\r
638 # figurou, ked na dane miesto mozu ist dve figury naraz.
\r
640 # Vstup: retazec, v ktorom analyzovany token
\r
642 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
643 # ==================================================================================================
\r
645 def stvorzntah(akt_tah)
\r
647 if ((akt_tah[0].chr.to_s >= "a") and (akt_tah[0].chr.to_s <= "h"))
\r
649 if (akt_tah[1].chr.to_s != "x")
\r
651 #puts "problem so stvorznakovym tahom (1) - [" + akt_tah + "]"
\r
657 if ((akt_tah[2].chr.to_s < "a") or (akt_tah[2].chr.to_s > "h"))
\r
659 #puts "problem so stvorznakovym tahom (2) - [" + akt_tah + "]"
\r
665 if ((akt_tah[3].chr.to_s < "2") and (akt_tah[3].chr.to_s > "7"))
\r
667 #puts "problem so stvorznakovym tahom (3) - [" + akt_tah + "]"
\r
673 #puts "stvorznakovy tah (4) - [" + akt_tah + "]"
\r
683 elsif ((akt_tah[0].chr.to_s == "N") or (akt_tah[0].chr.to_s == "B") or
\r
684 (akt_tah[0].chr.to_s == "R") or (akt_tah[0].chr.to_s == "Q") or (akt_tah[0].chr.to_s == "K"))
\r
686 if (akt_tah[1].chr.to_s == "x")
\r
688 if ((akt_tah[2].chr.to_s < "a") or (akt_tah[2].chr.to_s > "h"))
\r
690 #puts "problem so stvorznakovym tahom (5) - [" + akt_tah + "]"
\r
696 if ((akt_tah[3].chr.to_s < "1") or (akt_tah[3].chr.to_s > "8"))
\r
698 #puts "problem so stvorznakovym tahom (6) - [" + akt_tah + "]"
\r
704 #puts "stvorznakovy tah (7) - [" + akt_tah + "]"
\r
714 if ((akt_tah[1].chr.to_s >= "1") and (akt_tah[1].chr.to_s <= "8"))
\r
716 if ((akt_tah[2].chr.to_s < "a") or (akt_tah[2].chr.to_s > "h"))
\r
718 #puts "problem so stvorznakovym tahom (8) - [" + akt_tah + "]"
\r
724 if ((akt_tah[3].chr.to_s < "1") or (akt_tah[3].chr.to_s > "8"))
\r
726 #puts "problem so stvorznakovym tahom (9) - [" + akt_tah + "]"
\r
732 #puts "stvorznakovy tah (10) - [" + akt_tah + "]"
\r
740 elsif ((akt_tah[1].chr.to_s >= "a") and (akt_tah[1].chr.to_s <= "h"))
\r
742 if ((akt_tah[2].chr.to_s < "a") or (akt_tah[2].chr.to_s > "h"))
\r
744 #puts "problem so stvorznakovym tahom (11) - [" + akt_tah + "]"
\r
750 if ((akt_tah[3].chr.to_s < "1") or (akt_tah[3].chr.to_s > "8"))
\r
752 #puts "problem so stvorznakovym tahom (12) - [" + akt_tah + "]"
\r
758 #puts "stvorznakovy tah (13) - [" + akt_tah + "]"
\r
768 #puts "problem so stvorznakovym tahom (14) - [" + akt_tah + "]"
\r
779 #puts "problem s stvorznakovym tahom (15) - [" + akt_tah + "]"
\r
785 #puts "problem s stvorznakovym tahom (16) - [" + akt_tah + "]"
\r
791 # ==================================================================================================
\r
792 # metoda: patzntah.rb
\r
794 # Popis: metoda robi analyzu tokenu predstavujuceho patznakovy tah v zapise sachovej
\r
795 # partie vo formate PGN. Nateraz sa robi len lexikalna analyza, teda zistuje
\r
796 # sa ci je tah formalne spravne zapisany, nekontroluje sa, ci je dany tah mozny/spravny
\r
797 # vhladom na pravidla sachu/aktualne postavenie figur na sachovnici. Je implementovana
\r
798 # zakladna funkcionalita co sa tyka PGN formatu, nie je to plna implementacia PGN standardu.
\r
800 # Pri patznakovom tokene ide o tah figurou, ked na dane miesto mozu ist dve figury naraz,
\r
801 # a sucasne je to branie.
\r
803 # Vstup: retazec, v ktorom analyzovany token
\r
805 # Vystup: vrati retazec "ok" alebo "err", podla toho ako dopadla analyza
\r
806 # ==================================================================================================
\r
808 def patzntah(akt_tah)
\r
810 if ((akt_tah[0].chr.to_s >= "a") and (akt_tah[0].chr.to_s <= "h"))
\r
812 if (akt_tah[1].chr.to_s != "x")
\r
814 #puts "problem s patznakovym tahom (1) - [" + akt_tah + "]"
\r
820 if ((akt_tah[2].chr.to_s < "a") or (akt_tah[2].chr.to_s > "h"))
\r
822 #puts "problem s patznakovym tahom (2) - [" + akt_tah + "]"
\r
828 if ((akt_tah[3].chr.to_s != "1") and (akt_tah[3].chr.to_s != "8"))
\r
831 puts akt_tah[3].chr.to_s
\r
833 puts "problem s patznakovym tahom (3) - [" + akt_tah + "]"
\r
839 if ((akt_tah[4].chr.to_s != "N") and (akt_tah[4].chr.to_s != "B") and
\r
840 (akt_tah[4].chr.to_s != "R") and (akt_tah[4].chr.to_s != "Q"))
\r
842 puts "problem s patznakovym tahom (4) - [" + akt_tah + "]"
\r
848 puts "patznakovy tah (5) - [" + akt_tah + "]"
\r
861 elsif ((akt_tah[0].chr.to_s == "N") or (akt_tah[0].chr.to_s == "B") or
\r
862 (akt_tah[0].chr.to_s == "R") or (akt_tah[0].chr.to_s == "Q"))
\r
864 if ((akt_tah[1].chr.to_s >= "1") and (akt_tah[1].chr.to_s <= "8"))
\r
866 if (akt_tah[2].chr.to_s != "x")
\r
868 #puts "problem s patznakovym tahom (6) - [" + akt_tah + "]"
\r
874 if ((akt_tah[3].chr.to_s < "a") or (akt_tah[3].chr.to_s > "h"))
\r
876 #puts "problem s patznakovym tahom (7) - [" + akt_tah + "]"
\r
882 if ((akt_tah[4].chr.to_s < "1") or (akt_tah[4].chr.to_s > "8"))
\r
884 #puts "problem s patznakovym tahom (8) - [" + akt_tah + "]"
\r
890 #puts "patznakovy tah (9) - [" + akt_tah + "]"
\r
900 elsif ((akt_tah[1].chr.to_s >= "a") and (akt_tah[1].chr.to_s <= "h"))
\r
902 if (akt_tah[2].chr.to_s != "x")
\r
904 #puts "problem s patznakovym tahom (10) - [" + akt_tah + "]"
\r
910 if ((akt_tah[3].chr.to_s < "a") or (akt_tah[3].chr.to_s > "h"))
\r
912 #puts "problem s patznakovym tahom (11) - [" + akt_tah + "]"
\r
918 if ((akt_tah[4].chr.to_s < "1") or (akt_tah[4].chr.to_s > "8"))
\r
920 #puts "problem s patznakovym tahom (12) - [" + akt_tah + "]"
\r
926 #puts "patznakovy tah (13) - [" + akt_tah + "]"
\r
938 #puts "problem s patznakovym tahom (14) - [" + akt_tah + "]"
\r
947 #puts "problem s patznakovym tahom (15) - [" + akt_tah + "]"
\r
953 #puts "problem s stvorznakovym tahom (16) - [" + akt_tah + "]"
\r
959 # ==================================================================================================
\r
960 # metoda: <main> = hlavny program
\r
962 # Popis: v hlavnom programe precitame zo vstupu meno suboru, v ktorom je yapis partie,
\r
963 # ktoru mame analyzovat. Cely obsah suboru precitame do retazca, ktorz posleme
\r
964 # do metody "Analzyuj", vratenu hodnotu = vysledok analyzy = zobrazime na vystup
\r
966 # Vstup: nic na prikazovom riadku, vstupom od uzivatela je nazov
\r
967 # textoveho suboru, v ktorom je zapis partie ulozeny
\r
969 # Vystup: program vypise na vystup retazec "ok", ak je zapis sachovej partie
\r
970 # v poriadku, ak nie je vypise na vystup retazec "err"
\r
971 # ==================================================================================================
\r
974 #puts "zadaj meno suboru: "
\r
975 filename = "pgn.txt"
\r
976 myfile = File.open(filename,"r")
\r
977 pgnsubor = myfile.read
\r
981 vysledok=analyzuj(pgnsubor)
\r
982 puts "\n" + vysledok
\r