Поиск по этому блогу

среда, 17 октября 2018 г.

Шахматы

Шахматы
Совсем недавно Вася занялся программированием и решил реализовать собственную программу для игры в шахматы. Но у него возникла проблема определения правильности хода конем, который делает пользователь. Т.е. если пользователь вводит значение «C7-D5», то программа должна определить это как правильный ход, если же введено «E2-E4», то ход неверный. Так же нужно проверить корректность записи ввода: если например, введено «D9-N5», то программа должна определить данную запись как ошибочную. Помогите ему осуществить эту проверку!
Входные данные
В единственной строке входного файла INPUT.TXT записан текст хода (непустая строка), который указал пользователь. Пользователь не может ввести строку, длиннее 5 символов.
Выходные данные
В выходной файл OUTPUT.TXT нужно вывести «YES», если указанный ход конем верный, если же запись корректна (в смысле правильности записи координат), но ход невозможен, то нужно вывести «NO». Если же координаты не определены или заданы некорректно, то вывести сообщение «ERROR».
Примеры
INPUT.TXT
OUTPUT.TXT
1
C7-D5
YES
2
E2-E4
NO
3
BSN
ERROR







Решение
var
    m,n,r,k:integer;
    s,n1,n2:string;
   f,f1:text;
  begin
  n1:='ABCDEFGH';n2:='12345678';
    assign(f,'input.txt');
    reset(f);
     assign(f1,'output.txt');
     rewrite(f1);
    readln(f,s);
    if (length(s)<>5) or (pos(s[1],n1)=0) or (pos(s[4],n1)=0) or (pos(s[2],n2)=0) or (pos(s[5],n2)=0) or (s[3]<>'-') then write(f1,'ERROR') else
   begin
    m:=pos(s[1],n1); n:=pos(s[4],n1); r:=pos(s[2],n2); k:=pos(s[5],n2); write(s,' ',m,' ',n,' ',r,' ',k);
    if (abs(n-m)=1) and (abs(r-k)=2) or (abs(m-n)=2) and (abs(r-k)=1) then  write(f1,'YES') else  write(f1,'NO');
    end;
     close(f);
      close(f1);
 end.
Вопросы, замечания, свои вариант решения пишите в комментариях.

Комментариев нет:

Отправить комментарий