Здравствуйте. Возможно мой вопрос на фоне остальных тем выглядит, крайне несерьёзным и мелким, но всё же. Есть задача - написать на паскале программу(без использования ассемблерных вставок, но прерывания дозволены) для заполнения матрицы размерностью от 2 до 9 по спирали, да не просто написать(это было бы слишком легко), а чтоб исполняемый файл(один из компиляторов паскаля под DOS) вышел как можно меньше по размеру. Меньше 3000 байт. Рекорд говорят был где-то в районе 1200 байт. Я написал самый оптимизированный алгоритм по размерам, какой только мог придумать. Сейчас с настроенными не по дефолту опциями компилятор выходит 2704 байта. И... вот тут я не знаю, что делать дальше. То ли в алгоритме что-нибудь ещё поупрощать и позаменять(есть мысль использовать одну переменную типа word для координат матрицы и обращаться к ним через функции Lo и Hi), То ли я что-то не знаю на счёт компилятора(может есть более эффективный что работает под DOS?) или уже как-то пытаться ввод заменить(Препод сказал, что можно использовать прерывания, но с ними при замене ввода и вывода программа становится больше. Подумываю об использовании процедуры interrupt, но нигде не могу найти толковой документации с примерами, как ей пользоваться этой директивой)? Вообще есть ли возможность имея в руках лишь DOSbox, компилятор и редактор кода - настрочить программу на паскале, чей исполняемый файл будет хотя бы меньше 2000 байт?
program spiral;
var
m: array [1..9, 1..9] of word;
n: byte;
i: byte;
j: byte;
c: byte;
l: byte;
s: shortint;
t: byte;
p: ^byte;
begin
readln(n);
l := n;
t := n;
s := 1;
i := 1;
p := @j;
repeat
p^ := p^ + s;
c := c + 1;
if p^ = t then begin
if p = @j
then begin
p := @i;
l := l - 1;
end else begin
p := @j;
s := -s;
end;
t := p^ + s*(l);
end;
m[i,j] := c;
until l = 0;
for i:=1 to n do begin
for j:=1 to n do write(m[i,j]:3);
writeln;
end;
end.