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

    +1001

    1. 1
    2. 2
    3. 3
    4. 4
    5. 5
    6. 6
    bool f = true;
      short c0 = a0, c1 = a1, c2 = a2, c3 = a3;
      if (a0 < c1) { f = false; a0 = c1; a1 = c0 - c1; a2 = c1 - c2; a3 = c1 - c3; }
      if (a0 < c2) { f = false; a0 = c2; a1 = c2 - c1; a2 = c0 - c2; a3 = c2 - c3; }
      if (a0 < c3) { f = false; a0 = c3; a1 = c3 - c1; a2 = c3 - c2; a3 = c0 - c3; }
      if (f)                  { a0 = c0; a1 = c0 - c1; a2 = c0 - c2; a3 = c0 - c3; }

    Чувак не знает про else / else if. :(

    Запостил: pewpew, 07 Декабря 2011

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

    • >Чувак не знает про else / else if
      А про абстрактные вычислительные машины слышал?
      Ответить
      • А про массивы и циклы? Вроде ж не пхп.
        Ответить
        • та ладно ни всё так запущена на пэхэпэ пока что есчо не программируют мышкай
          Ответить
    • Реквестирую код через else if (т.е. без переменной f), который будет давать те же результаты и будет короче исходного.
      Ответить
      • short c0 = a0, c1 = a1, c2 = a2, c3 = a3,d = 0;
          if (a0 < c1) { ++d; 	a0 = c1; a1 = c0 - c1; a2 = c1 - c2; a3 = c1 - c3; }
          if (a0 < c2) { ++d; 	a0 = c2; a1 = c2 - c1; a2 = c0 - c2; a3 = c2 - c3; }
          if (a0 < c3) { 	a0 = c3; a1 = c3 - c1; a2 = c3 - c2; a3 = c0 - c3; }
          else if (d==0){ 	a0 = c0; a1 = c0 - c1; a2 = c0 - c2; a3 = c0 - c3; }

        Вот. Распишитесь в получении.
        Ответить
    • дык там a0 вроде может в вышестоящем условии измениться, повидимому так и было задумано
      Ответить
    • А еще про дескриптив идентификаторы и форматирование кода.
      Ответить
    • А таки где тут С++?
      Ответить
    • гавно потому, что код сложен и написан "непофеншую"... и реализация через else if, как уже сказали не эквивалентна... можно было бы циклом от 0 до 4 записать, если бы операции внутри цикла поддавались общему закону, но...
      Ответить
    • Вы все говнокодеры, ваш код компилятор шатал! Ни хуя не шарите!11 гсом!
      Ответить
    • А каков геометрический смысл этого кода? Сортировка трёх чисел?
      Ответить
    • только мне очевидно, что среди c0..c3 выбирается максимальный и от этого зависит таинственная работа с числами?
      Ответить
      • Дружище, если тебе очевиден весь алгоритм - ты не держи это в себе, поделись с нами.

        Если же тебе очевидно, например, что все переменные кроме f - имеют тип short, а f - это флаг от которого зависит последняя стадия - то этим никого тут не удивишь.
        Полагаю алгоритм - для работы с матрицами, потому правильная реализация ОБЯЗАННА содержать массивы, циклы.
        Ответить
    • показать все, что скрытоshort c0 = a0, c1 = a1, c2 = a2, c3 = a3;
      (a0 < c1) ? a0 = c1, a1 = c0 - c1, a2 = c1 - c2, a3 = c1 - c3 :
      (a0 < c2) ? a0 = c2, a1 = c2 - c1, a2 = c0 - c2, a3 = c2 - c3 :
      (a0 < c3) ? a0 = c3, a1 = c3 - c1, a2 = c3 - c2, a3 = c0 - c3 :
      a0 = c0, a1 = c0 - c1, a2 = c0 - c2, a3 = c0 - c3;
      Ответить
      • Где здесь С++, gudvin?!
        Ответить
      • Факир был пьян и фокус не удался.
        Ответить
      • Говно. На няшной сишечке:
        void transform(short a[4], short c[4]) {
          int i = max_index(c, 4);
          a[0] = c[i];
          a[1] = c[(i > 1) ? i : 0] - c[1];
          a[2] = c[odd(i)  ? i : 0] - c[2];
          a[3] = c[(i < 3) ? i : 0] - c[3];
        }
        Работающий пример тут: http://codepad.org/PKMg33YW
        Ответить
        • p.s. (i < 3) ? i : 0 можно заменить на (i % 3)
          Ответить
        • Я бы написал
          for(int j = 1; j < 4; ++j)
              a[j] = c[(i != 0 && i != j) ? i : 0] - c[j];
          Ответить
          • Да, так вообще круто. Возможно, это аналог той формулы, по которой был написан код в топике.
            Ответить
            • Даже
              for(int j = 1; j < 4; ++j)
                  a[j] = c[i != j ? i : 0] - c[j];
              Ответить
              • Итоговый код можно уложить в три строки:
                void transform(short a[4], short c[4]) {
                    int i = max_index(c, 4), j = 0;
                    a[0] = c[i];
                    while (++j < 4) a[j] = c[i != j ? i : 0] - c[j];
                }
                Автор, вот так-то, else if тут не при чём.
                http://codepad.org/DGudbjsS
                Ответить
                • > else if тут не при чём.
                  Я еще позавчера об энтом сказал
                  http://govnokod.ru/8758#comment124211

                  Остается главный вопрос: что за алгоритм?
                  Ответить
    • показать все, что скрытозато сколько плюсов наставили морозу, смотрю тут одни знатоки собрались...
      Ответить
    • Чувак не знает про #define MACRO_NAME(x)
      =\ Жаль что комментирование здесь часто сводится к срачам типа "Я Д'Артаньян, а вы - толпа быдлокодеров!". Интересные замечания и адекватные решения неумело решенных задач - большая редкость...
      Ответить
    • показать все, что скрытоITT илита питухи с гамнокода снова шутят
      Ответить

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