профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 01:56
Оценка: +1 -4 :)
goto? не, не слышал

bool AntiCaptcha::Analyse()
{
    // Differentiate between background and foreground
    for(unsigned int y = 0; y < height; ++y)
    {
        for(unsigned int x = 0; x < width; ++x)
        {
            if(image->pixels[y][x][0] >= 160 && image->pixels[y][x][1] >= 160
                    && image->pixels[y][x][2] >= 160)
            {
                image->pixels[y][x][0] = 0xFF;
                image->pixels[y][x][1] = 0xFF;
                image->pixels[y][x][2] = 0xFF;
            }
            else
            {
                image->pixels[y][x][0] = 0x00;
                image->pixels[y][x][1] = 0x00;
                image->pixels[y][x][2] = 0x00;
            }
        }
    }

    // Compare vectors with image
    unsigned int xa, ya;

    bool found = true;
    int nr = -1;
    int deg = 0;

    for(int digit = 0; digit < numDigits; ++digit)
    {
        for(unsigned int y = 0; y < height; ++y)
        {
            for(unsigned int x = 0; x < width; ++x)
            {

                for(deg = 0; deg < 11; ++deg)
                {
                    xa = x;
                    xout = x;
                    ya = y;
                    yout = y;

                    found = true;

                    for(int i = 0; i < lenDigits[digit]; ++i)
                    {
                        xa += transformed[digit][deg][i].first;
                        ya += transformed[digit][deg][i].second;

                        if(xa < 0 || xa >= width || ya < 0 || ya >= height)
                        {
                            found = false;
                            break;
                        }

                        if(!image->pixels[ya][xa][0] == 0x00)
                        {
                            found = false;
                            break;
                        }
                    }

                    if(found)
                    {
                        break;
                    }

                }

                if(found)
                {
                    break;
                }
            }

            if(found)
            {
                break;
            }
        }

        if(found)
        {
            nr = digit;
            break;
        }
    }

    // Mark detected digit
    if(nr != -1)
    {
        xa = xout;
        ya = yout;

        for(int i = 0; i < lenDigits[nr]; ++i)
        {
            xa += transformed[nr][deg][i].first;
            ya += transformed[nr][deg][i].second;

            image->pixels[ya][xa][0] = 0xFF;

        }
    }

    if(nr == -1)
    {
        return false;
    }

    // Select random point of digit
    int vec = random(0,lenDigits[nr]);
    for(int i=0; i < vec; ++i)
    {
        xout += transformed[nr][deg][i].first;
        yout += transformed[nr][deg][i].second;
    }

    return true;
}


тыц
Отредактировано 19.02.2015 2:22 jyuyjiyuijyu . Предыдущая версия .
Re: профи или упоротый
От: MaxRos  
Дата: 19.02.15 02:26
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>goto? не, не слышал


а нафига там goto, если у каждого цикла уже есть выражение для остановки, куда этот found и можно засунуть
Re[2]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 02:32
Оценка: +1 -2
Здравствуйте, MaxRos, Вы писали:

MR>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>>goto? не, не слышал


MR>а нафига там goto, если у каждого цикла уже есть выражение для остановки, куда этот found и можно засунуть


уже лучше но всё равно костыль, гото там то что доктор прописал
Re[3]: профи или упоротый
От: watchmaker  
Дата: 19.02.15 02:41
Оценка: +6
Здравствуйте, jyuyjiyuijyu, Вы писали:

J> гото там то что доктор прописал


Функцию там надо, а не goto. Вот прямо как в коде комментарии написаны, так в этих местах на функции и разбивать. И останется в функции CompareVectors один return из внутреннего цикла без всяких goto или break.
Re[4]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 02:49
Оценка: -1
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, jyuyjiyuijyu, Вы писали:


J>> гото там то что доктор прописал


W>Функцию там надо, а не goto. Вот прямо как в коде комментарии написаны, так в этих местах на функции и разбивать. И останется в функции CompareVectors один return из внутреннего цикла без всяких goto или break.


можно и функцию но тогда будет множество мелких функций, тут как я вижу одна функция не требующая её дробить еще на несколько функций
Re: профи или упоротый
От: __kot2  
Дата: 19.02.15 03:08
Оценка: +7
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>goto? не, не слышал
да какое там нафиг goto? там return должен быть из ф-ии
то же мне, нашли применение goto
Re[5]: профи или упоротый
От: __kot2  
Дата: 19.02.15 03:13
Оценка: +6 :))) :))) :))) :)))
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>можно и функцию но тогда будет множество мелких функций, тут как я вижу одна функция не требующая её дробить еще на несколько функций
одна фукнция делает одну вещь
здесь есть
— инициализация
— перебор
— вычисление условия в переборе
— маркировка обнаруженной фигни
— выбор рандомной точки

это все отдельные ф-ии должны быть по уму

пока что уровень этого кода — "старательный школьник"
если сюда еще добавить goto, то будет "старательный школьник-наркоман"
Re[2]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 03:13
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>goto? не, не слышал
__>да какое там нафиг goto? там return должен быть из ф-ии
__>то же мне, нашли применение goto

ну можно и ретурн но в основном когда так делают (как у автора) то должен еще какой то код выполнятся ниже циклов
Отредактировано 19.02.2015 3:14 jyuyjiyuijyu . Предыдущая версия .
Re[5]: профи или упоротый
От: watchmaker  
Дата: 19.02.15 03:14
Оценка: +2
Здравствуйте, jyuyjiyuijyu, Вы писали:


J>тут как я вижу одна функция не требующая её дробить еще на несколько функций

Да ты упоротый не профи
Именно такие функции дробить и надо.
Re[6]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 03:17
Оценка: :)
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>можно и функцию но тогда будет множество мелких функций, тут как я вижу одна функция не требующая её дробить еще на несколько функций
__>одна фукнция делает одну вещь
__>здесь есть
__>- инициализация
__>- перебор
__>- вычисление условия в переборе
__>- маркировка обнаруженной фигни
__>- выбор рандомной точки

__>это все отдельные ф-ии должны быть по уму


друг это перебор, ты реально так сам пишешь? здесь одно логическое действие на определенном уровне абстракции
Re[6]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 03:19
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, jyuyjiyuijyu, Вы писали:



J>>тут как я вижу одна функция не требующая её дробить еще на несколько функций

W>Да ты упоротый не профи
W>Именно такие функции дробить и надо.

сам упоротый

со мной даже автор кода согласен что это одна функция )))
Re[7]: профи или упоротый
От: watchmaker  
Дата: 19.02.15 03:23
Оценка: 2 (1) +2
Здравствуйте, jyuyjiyuijyu, Вы писали:



J>здесь одно логическое действие на определенном уровне абстракции

Вся программа — это тоже одно действие на своём уровне абстракции. Но это не означает, что всё программу нужно в единственную функцию main() впихнуть.
Тут же само действие слишком сложно, а функция слишком длинна. Разбивать её, конечно, надо. А на "логичность действия" это отрицательно не повлияет.

J>ты реально так сам пишешь?

Стараемся так писать.
Re[7]: профи или упоротый
От: __kot2  
Дата: 19.02.15 03:24
Оценка: +1
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>друг это перебор, ты реально так сам пишешь? здесь одно логическое действие на определенном уровне абстракции
вот представь себе что я автомеханик
ко мне заходят два школьника на Москвиче и один ржет на другим — мы потеряли гайки от колес и мы колеса пластелином прилепили. а надо-то было клеем! представляете какой мой друг тупой.

это такая фантастическая тупость, что я даже не знаю, что возразить. если тебе кажется, что это нормальный код — да пиши на здоровье
Re[8]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 03:30
Оценка:
Здравствуйте, watchmaker, Вы писали:

W>Здравствуйте, jyuyjiyuijyu, Вы писали:




J>>здесь одно логическое действие на определенном уровне абстракции

W>Вся программа — это тоже одно действие на своём уровне абстракции. Но это не означает, что всё программу нужно в единственную функцию main() впихнуть.
W>Тут же само действие слишком сложно, а функция слишком длинна. Разбивать её, конечно, надо. А на "логичность действия" это отрицательно не повлияет.

J>>ты реально так сам пишешь?

W>Стараемся так писать.

ну естественно я имел ввиду уровень абстракции соответствующий разбиению на функции

а функция тут длинна из за авторского ноу-хау с обходом гото)))
Re[8]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 03:33
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>друг это перебор, ты реально так сам пишешь? здесь одно логическое действие на определенном уровне абстракции
__>вот представь себе что я автомеханик
__>ко мне заходят два школьника на Москвиче и один ржет на другим — мы потеряли гайки от колес и мы колеса пластелином прилепили. а надо-то было клеем! представляете какой мой друг тупой.

__>это такая фантастическая тупость, что я даже не знаю, что возразить. если тебе кажется, что это нормальный код — да пиши на здоровье


неубедительно, пацаны могут под фуру залететь а мой код будет работать не хужее твоего и возможно даже проще пониматься
Re[9]: профи или упоротый
От: __kot2  
Дата: 19.02.15 03:40
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>неубедительно, пацаны могут под фуру залететь а мой код будет работать не хужее твоего и возможно даже проще пониматься
возможно этот код взкрывает сервер Пентагона

но если говорить не гипоттетически, а на пальцах.
вот есть, например Жигули 6ка и Bmw 6ка. Вот этот код — Жигули 6ка. Нормальные люди на таком гавне не ездят. Они даже не подойдут к нему. И если вдруг такое достанется, то просто выкинут на помойку, а не будут разбираться, что оно там, прет ничуть не хуже BMW и возможно даже надежнее или жрет меньше. Даже свое время тратить не будут на проверку этих вещей.
Re[10]: профи или упоротый
От: jyuyjiyuijyu  
Дата: 19.02.15 03:53
Оценка:
Здравствуйте, __kot2, Вы писали:

__>Здравствуйте, jyuyjiyuijyu, Вы писали:

J>>неубедительно, пацаны могут под фуру залететь а мой код будет работать не хужее твоего и возможно даже проще пониматься
__>возможно этот код взкрывает сервер Пентагона

__>но если говорить не гипоттетически, а на пальцах.

__>вот есть, например Жигули 6ка и Bmw 6ка. Вот этот код — Жигули 6ка. Нормальные люди на таком гавне не ездят. Они даже не подойдут к нему. И если вдруг такое достанется, то просто выкинут на помойку, а не будут разбираться, что оно там, прет ничуть не хуже BMW и возможно даже надежнее или жрет меньше. Даже свое время тратить не будут на проверку этих вещей.

примеры всё убедительнее и убедительнее

незнаю как у вас на рублёвке а у нас и жигули в почёте и даже на запорожцах ездят )))
Re[11]: профи или упоротый
От: __kot2  
Дата: 19.02.15 04:15
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:
J>примеры всё убедительнее и убедительнее

J>незнаю как у вас на рублёвке а у нас и жигули в почёте и даже на запорожцах ездят )))

вот и я говорю — если всё и так устраивает, то на здоровье
Re: ленивый
От: bazis1 Канада  
Дата: 19.02.15 04:18
Оценка:
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>goto? не, не слышал

поленился, по ходу, выделить кусок фукции и сделать refactor->extract function.

J>
J>bool AntiCaptcha::Analyse()
J>

а, все ясно, школота
Re: профи или упоротый
От: andy1618 Россия  
Дата: 19.02.15 04:33
Оценка: +1
Здравствуйте, jyuyjiyuijyu, Вы писали:

J>goto? не, не слышал


Похоже, что как раз "слышал"
.. ибо с goto ситуация интересная:
1) Начинающий программист пишет код с goto по незнанию.
2) Продолжающий программист в курсе, что goto — моветон, и старается избежать
его любыми способами. Что мы и наблюдаем в данном случае.
3) Профессионал тоже избегает goto, только способы уже не "любые", а "изящные"

Резюме:
Ни goto, ни break тут не нужны — нужна отдельная функция с return. Заодно и читабельность кода улучшится.
Ещё резануло глаз присутствие магических чисел (160, 11) — обычно это тоже признак п.1
goto
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.