уменьшить количество строк в коде язык программирования Паскаль оставив принцип роботы уже уменьшил с 486 до 255 либо подскажите как уменьшить количество строк
program krestiki_noliki;
uses
Crt, Graph;
var
g, key, i, s: Integer;
mas: array [1..9] of Integer;
procedure field;
begin
bar(100, 100, 620, 620);
bar(100, 273, 620, 446);
bar(273, 100, 446, 620);
end;
procedure reset;
begin
key := 2;
delay(1000);
cleardevice;
key := 0;
for i := 1 to 9 do
mas[i] := 0;
field
end;
procedure draw;
begin
for i := 1 to 9 do
s := s + mas[i];
if s = 13 then
begin
key := 2;
delay(1000);
reset;
end ;
end;
begin
InitGraph(detect, detect, '');
field;
while true do
begin
while key = 0 do
begin
g := readKey;
if (g = '1') and (mas[1] = 0) then
begin
line(130, 130, 243, 243);
line(243, 130, 130, 243);
key := 1;
mas[1] := 1;
end
else if (g = '2') and (mas[2] = 0) then
begin
line(303, 130, 416, 243);
line(416, 130, 303, 243);
key := 1;
mas[2] := 1;
end
else if (g = '3') and (mas[3] = 0) then
begin
line(476, 130, 590, 243);
line(590, 130, 476, 243);
key := 1;
mas[3] := 1;
end
else if (g = '4') and (mas[4] = 0) then
begin
line(130, 303, 243, 416);
line(243, 303, 130, 416);
key := 1;
mas[4] := 1;
end
else if (g = '5') and (mas[5] = 0) then
begin
line(303, 303, 416, 416);
line(416, 303, 303, 416);
key := 1;
mas[5] := 1;
end
else if (g = '6') and (mas[6] = 0) then
begin
line(476, 303, 590, 416);
line(590, 303, 476, 416);
key := 1;
mas[6] := 1;
end
else if (g = '7') and (mas[7] = 0) then
begin
line(130, 476, 243, 590);
line(243, 476, 130, 590);
key := 1;
mas[7] := 1;
end
else if (g = '8') and (mas[8] = 0) then
begin
line(303, 476, 416, 590);
line(416, 476, 303, 590);
key := 1;
mas[8] := 1;
end
else if (g = '9') and (mas[9] = 0) then
begin
line(476, 476, 590, 590);
line(590, 476, 476, 590);
key := 1;
mas[9] := 1;
end ;
s := 0;
if (mas[1] = 1) and (mas[2] = 1) and (mas[3] = 1) then
begin
line(130, 186, 590, 186);
reset;
end
else if (mas[4] = 1) and (mas[5] = 1) and (mas[6] = 1) then
begin
line(130, 359, 590, 359);
reset;
end
else if (mas[7] = 1) and (mas[8] = 1) and (mas[9] = 1) then
begin
line(130, 532, 590, 532);
reset;
end
else if (mas[1] = 1) and (mas[4] = 1) and (mas[7] = 1) then
begin
line(186, 130, 186, 590);
reset;
end
else if (mas[2] = 1) and (mas[5] = 1) and (mas[8] = 1) then
begin
line(359, 130, 359, 590);
reset;
end
else if (mas[3] = 1) and (mas[6] = 1) and (mas[9] = 1) then
begin
line(532, 130, 532, 590);
reset;
end
else if (mas[1] = 1) and (mas[5] = 1) and (mas[9] = 1) then
begin
line(130, 130, 590, 590);
reset;
end
else if (mas[3] = 1) and (mas[5] = 1) and (mas[7] = 1) then
begin
line(590, 130, 130, 590);
reset;
end ;
draw;
end;
while key = 1 do
begin
g := readkey;
if (g = '1') and (mas[1] = 0) then
begin
arc(186, 186, 0, 360, 56);
key := 0;
mas[1] := 2;
end
else if (g = '2') and (mas[2] = 0) then
begin
arc(359, 186, 0, 360, 56);
key := 0;
mas[2] := 2;
end
else if (g = '3') and (mas[3] = 0) then
begin
arc(532, 186, 0, 360, 56);
key := 0;
mas[3] := 2;
end
else if (g = '4') and (mas[4] = 0) then
begin
arc(186, 359, 0, 360, 56);
key := 0;
mas[4] := 2;
end
else if (g = '5') and (mas[5] = 0) then
begin
arc(359, 359, 0, 360, 56);
key := 0;
mas[5] := 2;
end
else if (g = '6') and (mas[6] = 0) then
begin
arc(532, 359, 0, 360, 56);
key := 0;
mas[6] := 2;
end
else if (g = '7') and (mas[7] = 0) then
begin
arc(186, 532, 0, 360, 56);
key := 0;
mas[7] := 2;
end
else if (g = '8') and (mas[8] = 0) then
begin
arc(359, 532, 0, 360, 56);
key := 0;
mas[8] := 2;
end
else if (g = '9') and (mas[9] = 0) then
begin
arc(532, 532, 0, 360, 56);
key := 0;
mas[9] := 2;
end ;
if (mas[1] = 2) and (mas[2] = 2) and (mas[3] = 2) then
begin
line(130, 186, 590, 186);
reset;
end
else if (mas[4] = 2) and (mas[5] = 2) and (mas[6] = 2) then
begin
line(130, 359, 590, 359);
reset;
end
else if (mas[7] = 2) and (mas[8] = 2) and (mas[9] = 2) then
begin
line(130, 532, 590, 532);
reset;
end
else if (mas[1] = 2) and (mas[4] = 2) and (mas[7] = 2) then
begin
line(186, 130, 186, 590);
reset;
end
else if (mas[2] = 2) and (mas[5] = 2) and (mas[8] = 2) then
begin
line(359, 130, 359, 590);
reset;
end
else if (mas[3] = 2) and (mas[6] = 2) and (mas[9] = 2) then
begin
line(532, 130, 532, 590);
reset;
end
else if (mas[1] = 2) and (mas[5] = 2) and (mas[9] = 2) then
begin
line(130, 130, 590, 590);
reset;
end
else if (mas[7] = 2) and (mas[5] = 2) and (mas[3] = 2) then
begin
line(590, 130, 130, 590);
reset;
end ;
end;
end;
end.
Инструменты:
A — Аэpогpаф (AirBrush)
В — Кисть (Brush)
С — Рамка (Crop)
E — Ластик (Eraser)
F — Режим (окно/весь экpан с меню/весь экpан без меню)
G — Гpадиент (Gradient)
H — Рyка (Hand)
I — Пипетка (Eyedropper)
K — Заливка (Paint Bucket)
L — Лассо (Lasso)
М — Область (Marquee)
N — Линия (Line)
O — Тониpование (Toning Tools)
P — Каpандаш (Pencil)
Q — Быстpая маска (Quick Mask)
R — Фокyс (Focus Tools)
S — Штамп (Stamp)
T — Палитpа контypы (Path)
U — Палец (Smudge Tool)
V — Пеpемещение (Move)
W — Волшебная палочка (Magic Wand)
Y — Текст (Text)
Z — Масштаб (Zoom)
X — Поменять местами фоновый и основной цвета
D — Сбросить цвет/фон в черный и белый
[ - Пpедyдыщая кисть
] — Следyющая кисть
Берем 4-й (самый правый) столбец: если 7+5 дают 0 (и 1 "в уме"), значит 7+5=12 - это и есть основание системы счисления. То есть у нас могут быть цифры 0123456789AB, где A соответствует десятичному 10, B - десятичному 11.
Теперь посмотрим на второй столбец. Тут есть два варианта:
1) y+1=5 и тогда y=4
2) после вычисления третьего столбца осталось "1 в уме" и тогда y+1+1=5 и тогда y=3
Надо проверить какой из этих вариантов. Смотрим на третий столбец:
y = x + 4 + "1 в уме" от 4-го столбца, то есть y = (x + 5). Так как y < 5, значит (x + 5) = (12 + y) или 1Y в 12-ричной записи. Отсюда x = y + 7
Находим x. Получается что если y=4, то x=11 (B), а если y=3, то x=10 (A).
При таких значениях X (что 10, что 11) при вычислении 3-го столбца (то есть x+5) будет переполнение (по модулю 12), то есть "1 в уме" всё таки будет. Это соответствует нашему допущению 2) - значит y = 3, а x = 10 (А в 12ричной записи).
Теперь смотрим на первый столбец (самый левый). Z+2 = X, то есть Z = X - 2 = 10 - 2 = 8.
ответ: в двенадцатеричной системе счисления, X=A, Y=3, Z=8
Проверка:
Перевод в десятичную систему счисления (12*12=144, 12*12*12=1728):
2345 = 2*1728+3*144+4*12+5 = 3941
81A7 = 8*1728+1*144+10*12+7 = 14095
A530 = 10*1728+5*144+3*12 = 18036
Теперь проводим сложение в привычной десятичной системе счисления и сравниваем ответ:
3941+14095=18036