1. C++ / Говнокод #11625

    +27

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    // до рефакторинга
    if(!y) {
        if(!x) {
            if(grid[pos+1] || grid[pos+fieldWidth])
                ret = true;
        } else if(x == fieldWidth - 1) {
            if(grid[pos - 1] || grid[pos+fieldWidth])
                ret = true;
        } else {
            if(grid[pos-1] || grid[pos+1] || grid[pos+fieldWidth])
                ret = true;
        }
    } else if(y == fieldHeigth - 1) {
        if(!x) {
            if(grid[pos+1] || grid[pos-fieldWidth])
                ret = true;
        } else if(x == fieldWidth - 1) {
            if(grid[pos - 1] || grid[pos-fieldWidth])
                ret = true;
        } else {
            if(grid[pos-1] || grid[pos+1] || grid[pos-fieldWidth])
                ret = true;
        }
    } else {
        if(!x) {
            if(grid[pos+1] || grid[pos+fieldWidth] || grid[pos-fieldWidth])
                ret = true;
        } else if(x == fieldWidth - 1) {
            if(grid[pos - 1] || grid[pos+fieldWidth] || grid[pos+fieldWidth])
                ret = true;
        } else {
            if(grid[pos - 1] || grid[pos+fieldWidth] || grid[pos-fieldWidth] || grid[pos + 1])
                ret = true;
        }
    }
    
    // после рефакторинга
    bool ret = getGridPoint(x-1, y) || getGridPoint(x+1, y) || getGridPoint(x, y-1) || getGridPoint(x, y+1))

    Код одного из моих друзей. Проверяет закрашена ли хотя бы одна клеточка вокруг указанной...

    Запостил: bormand, 20 Августа 2012

    Комментарии (13) RSS

    • одного из моих друзей
      Ответить
      • Сохраняю анонимность так сказать. А что?
        Ответить
        • да так
          если по существу - странная задача, в "клеточке" хранится чуть ли не bool, отсутствие клетки эквивалентно пустому значению в оной, соседние диагональные клетки не рассматриваются
          да и стиль исходного ГК, кхм, автору даже было западло скопипастить 26 строку в 29 (явный косяк в третьем условии) - он это все руками набивал
          ставлю диагноз, внимание на экран - @bormand занимается репетиторством по информатике
          Ответить
          • > странная задача, в "клеточке" хранится чуть ли не bool, отсутствие клетки эквивалентно пустому значению в оной, соседние диагональные клетки не рассматриваются
            Валидация поля для кроссворда. В клетках именно bool, на диагональное соседство всем пофиг, а клетки за границами с чистой совестью можно считать равными false.

            > автору даже было западло скопипастить 26 строку в 29
            Хм, вот внимательность то... а я даже до половины не дочитал.

            > занимается репетиторством по информатике
            Только для друзей и только бесплатно ;)
            Ответить
            • Отдаленно напоминает кусок волнового алгоритма или игры "Жизнь".
              Ответить
              • Life или волновой алгоритм с такой проверкой границ смотрелись бы гораздо веселее ;) Ведь там не просто res = true.
                Ответить
            • Странные у вас друзья, один юзает system(pause) в VS, другой и того лише...
              Ответить
              • Вы так говорите, как будто это что-то плохое.

                system("pause") в тестовых проектах или лабах - ну а почему бы и нет, главное чтобы в продакшен не попало, и других людей этому не учили.

                А в данном случае хватило подсказки "а почему бы тебе не запилить метод get(), который будет возвращать false при выходе за границы, и ячейку массива в противном случае".
                Ответить
    • getGridPoint(x,y) только возвращает grid[x+fieldWidth*y] ?
      Ответить
      • И еще возвращает false если координаты выходят за пределы массива.
        Ответить
    • Диагональные клетки ([x+1,y+1], например) не проверяем?
      Ответить
      • тред не читай
        @
        сразу отвечай

        сказали же - ипонский кроссворд, не нужны там диагональные клетки
        Ответить
    • Г-детектор: если в исходниках вместо height написано heigth, то вероятность говнокода повышается в 2 раза.
      Ответить

    Добавить комментарий