dgnovice1. Ход 21
Splain



Приветствую.

Извиняюсь за спам, но тут уже начали писать алгоритмы определения
новайсов :) Позволте и мне вмешаться в этот спор.

По первой части (до секретной функции): Все нормально, только вот как
быть, если я начну вдруг с самого первого хода биться с расой,
оказавшейся около меня? И если эта раса окажется матерым ветераном, и
мы разнесем друг друга в пух и прах :)
По секретной функции:
> mov bx, 0;
> mov cx, NumberOfPlanets
> mov dx, NumberOfStupiedQuestions
> lea si, PlayerTechs
> m1:add ax, [si]
странно мы как-то считаем ... техи храняться в массиве, из которого ты
извлекаешь их по четвертинкам, причем сначала дробную часть, а потом
еще и мантиссу считаешь :) Нелогично как-то ...
> cmp ax, 4
> jbe m2
> inc bx
> add bx, 48
а не легче сделать add bx,49?
> mul dx
> m2:cwd
> div bx
а вот здесь вроде бы exception выскакивает на первой итерации,
поскольку в стершей части real у тебя 0 хранится, а проверяешь ты
below or equal, и bx = 0.
> add bx, dx
> sub bx, ax
> inc si
> loop m1
> add K, bx
вот непонятно мне: пишешь на C, и делаешь вставки из asm. Зачем? На C
код хоть как-то читается :) Хотя идея хороша - писать хэш-фукнцию.
Только такие функции циклы имеют :)
Если хочешь написать что-нибудь полезное, то напиши dll для
определения номеров планет, между которыми может лететь неизвестная
группа. Математика такая:
a = (x2-x1,y2-y1) = (ax,ay) - направляющий вектор.
n = (ay, - ax) - вектор нормали.
Ax + By + C = 0 - уравнение прямой,
где A = ay, B = -ax
расстояние от прямой до точки (x3,y3)
d = (Ax3 + By3 + C)/sqrt(A*A+B*B)
Считаем точку принадлежащей прямой, если d<=0.005
Я хоть это в свой будущий клиент вставлю :)
Кстати, если кто хочет помочь, то opengalaxy.metacom.ru

С уважением,
Splain.

З.Ы. У меня на работе винт накрылся, так что не обижайтесь, если долго
отвечать не буду на письма.

З.З.Ы. Народ, с кем у меня договора, сообщите до какого хода, а то все
пропало :(