Кресты / Говнокод #28079 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
  8. 8
  9. 9
  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
  39. 39
  40. 40
  41. 41
  42. 42
  43. 43
  44. 44
  45. 45
  46. 46
  47. 47
  48. 48
  49. 49
  50. 50
  51. 51
  52. 52
  53. 53
  54. 54
  55. 55
  56. 56
  57. 57
  58. 58
  59. 59
  60. 60
  61. 61
  62. 62
  63. 63
  64. 64
  65. 65
  66. 66
  67. 67
  68. 68
  69. 69
  70. 70
  71. 71
  72. 72
  73. 73
  74. 74
  75. 75
  76. 76
int main() {

  ifstream input_file;

  input_file.open("DATA");
  
  string line;
  while (getline(input_file, line)) {
    size_t i = 0, j = 0;
    string fname, sname;
    float score;

    char c = line[0];
    while((c != ' ') && (j < line.size())) {
      c = line[j];
      j++;
    }
    fname = line.substr(i, j - i - 1);
    i = j;
    j += 1;

    c = line[i];
    while((c != ' ') && (j < line.size())) {
      c = line[j];
      j++;
    }
    sname = line.substr(i, j - i - 1);
    i = j;
    j += 1;

    score = stof(line.substr(i, line.size()));

    Data dat;
    dat.fname = fname;
    dat.sname = sname;
    dat.score = score;

    vec.push_back(dat);
  }
  
  const auto comp_fname = [](Data a, Data b){return a.fname >= b.fname;};
  const auto comp_sname = [](Data a, Data b){return a.sname >= b.sname;};
  const auto comp_score = [](Data a, Data b){return a.score >= b.score;};

  const auto dcomp_fname = [](Data a, Data b){return a.fname < b.fname;};
  const auto dcomp_sname = [](Data a, Data b){return a.sname < b.sname;};
  const auto dcomp_score = [](Data a, Data b){return a.score < b.score;};

  print(vec);
  char choice = 0, order = 0;
  cout << "Как сортировать (0 - Fфмилия, 1 - Iмя, 2 - CpegHuu_6aJlJl): ";
  cin >> choice;
  cout << "А в какмо порядке?7? (0 - по убыванию, 1 - по возрастанию)Ж ";
  cin >> order;
  
  if (choice == '0') {
    if (order == '0') {
      sort(vec.begin(), vec.end(), comp_fname);
    } else {
      sort(vec.begin(), vec.end(), dcomp_fname);
    }
  } else if (choice == '1') {
    if (order == '0') {
      sort(vec.begin(), vec.end(), comp_sname);
    } else {
      sort(vec.begin(), vec.end(), dcomp_sname);
    }
  } else if (choice == '2') {
    if (order == '0') {
      sort(vec.begin(), vec.end(), comp_score);
    } else {
      sort(vec.begin(), vec.end(), dcomp_score);
    }
  }

// и т.д. ...

Как вам? Зачёт? Незачёт? Удовлетворительно?

Запостил: JloJle4Ka JloJle4Ka, (Updated )

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

      • Технически, в строках 58, 64, 70, потому что используемые компараторы не обеспечивают Strict Weak Ordering.
        Ответить
          • Что, никто не знает?

            Strict Weak Ordering означает, что элементы сравнивают строгими неравенствами, т.е. < вместо <=, при этом из того, что отсутствуют a < b и b < a, не следует, что a == b.

            Как это может напитулить программу? Этого я не знаю...
            Ответить
          • С таким везением лотерейный билет, что ли купил.

            http://coliru.stacked-crooked.com/a/f2a69d8e7a6d94a0
            https://i.imgur.com/i0ZUJim.png
            Почему-то Wandbox крашится при попытке поделиться куском кода, приводящим к сегфолту.
            #include 
            
            int main()
            {
                    int arr[31] = {
                        7978558,    9241630,    65706826,   639636154,  1033996244, 
                        1225598536, 1231940272, 1252372402, 2019146042, 1520971906, 
                        1532931792, 1818609302, 1971583702, 2116478830, 883396844, 
                        1942092984, 1274626222, 333950222,  1265547464, 965867746,  
                        1471376532, 398997278,  1414926784, 1831587680, 813761492,  
                        138146428,  337412092,  329155246,  21320082,   1751867558,
                        1155173784
                    };
            
                    std::sort(std::begin(arr), std::end(arr),
                              [](int a, int b) { return a <= b; });
            }
            Код. Отлично крашится на Шланге с libc++.
            Ответить
            • GCC его нормально компилирует и запускает, как с <=, так и с <. Шлангобляди соснули?
              Ответить
              • Не, просто конкретно эта последовательность не складывается в нужном порядке, чтобы что-то стриггерить. В libstdc++ можно получить бесконечный цикл и повисшую программу, если найдёшь нужный порядок.
                Ответить
                  • Именно поэтому я за S" Forth", и максимально минимальный уровень абсракции.
                    Ответить
                  • Именно поэтому я за S" Forth", и максимально минимальный уровень абсракции.
                    Ответить
                  • Именно поэтому я за S" Forth", и максимально минимальный уровень абсракции.
                    Ответить
                  • Именно поэтому я за S" Forth", и максимально минимальный уровень абсракции.
                    Ответить
            • Для меня, как для не крестобляди, не понятно, откуда вылазит сегфолт?
              Ответить
              • Компараторы в крестах должны давать Strict Weak Ordering.
                Если C(a, b) == true → C(b, a) == false
                Ну и если ты ожидаешьт, что у тебя в условии окажется false, а оно там никогда не оказывается, получается плохо. В libc++ вроде проблема выхода из рекурсии, в libstdc++ — цикла.
                Грубо говоря, компаратор говорит, нужно ли эти два значения поменять местами, чтобы получился порядок. И если он всегда говорит «да», это может плохо кончится.
                Ответить
              • Компараторы в крестах должны давать Strict Weak Ordering.
                Если C(a, b) == true → C(b, a) == false
                Ну и если ты ожидаешьт, что у тебя в условии окажется false, а оно там никогда не оказывается, получается плохо. В libc++ вроде проблема выхода из рекурсии, в libstdc++ — цикла.
                Грубо говоря, компаратор говорит, нужно ли эти два значения поменять местами, чтобы получился порядок. И если он всегда говорит «да», это может плохо кончится.
                Ответить
              • Компараторы в крестах должны давать Strict Weak Ordering.
                Если C(a, b) == true → C(b, a) == false
                Ну и если ты ожидаешьт, что у тебя в условии окажется false, а оно там никогда не оказывается, получается плохо. В libc++ вроде проблема выхода из рекурсии, в libstdc++ — цикла.
                Грубо говоря, компаратор говорит, нужно ли эти два значения поменять местами, чтобы получился порядок. И если он всегда говорит «да», это может плохо кончится.
                Ответить
          • С таким везением лотерейный билет, что ли купил.

            http://coliru.stacked-crooked.com/a/f2a69d8e7a6d94a0
            https://i.imgur.com/i0ZUJim.png
            Почему-то Wandbox крашится при попытке поделиться куском кода, приводящим к сегфолту.
            #include <algorithm>
            
            int main()
            {
                    int arr[31] = {
                        7978558,    9241630,    65706826,   639636154,  1033996244, 
                        1225598536, 1231940272, 1252372402, 2019146042, 1520971906, 
                        1532931792, 1818609302, 1971583702, 2116478830, 883396844, 
                        1942092984, 1274626222, 333950222,  1265547464, 965867746,  
                        1471376532, 398997278,  1414926784, 1831587680, 813761492,  
                        138146428,  337412092,  329155246,  21320082,   1751867558,
                        1155173784
                    };
            
                    std::sort(std::begin(arr), std::end(arr),
                              [](int a, int b) { return a <= b; });
            }
            Код. Отлично крашится на Шланге с libc++.
            Ответить
          • С таким везением лотерейный билет, что ли купил.

            http://coliru.stacked-crooked.com/a/f2a69d8e7a6d94a0
            https://i.imgur.com/i0ZUJim.png
            Почему-то Wandbox крашится при попытке поделиться куском кода, приводящим к сегфолту.
            #include 
            
            int main()
            {
                    int arr[31] = {
                        7978558,    9241630,    65706826,   639636154,  1033996244, 
                        1225598536, 1231940272, 1252372402, 2019146042, 1520971906, 
                        1532931792, 1818609302, 1971583702, 2116478830, 883396844, 
                        1942092984, 1274626222, 333950222,  1265547464, 965867746,  
                        1471376532, 398997278,  1414926784, 1831587680, 813761492,  
                        138146428,  337412092,  329155246,  21320082,   1751867558,
                        1155173784
                    };
            
                    std::sort(std::begin(arr), std::end(arr),
                              [](int a, int b) { return a <= b; });
            }
            Код. Отлично крашится на Шланге с libc++.
            Ответить
          • С таким везением лотерейный билет, что ли купил.

            http://coliru.stacked-crooked.com/a/f2a69d8e7a6d94a0
            https://i.imgur.com/i0ZUJim.png
            Почему-то Wandbox крашится при попытке поделиться куском кода, приводящим к сегфолту.
            #include <algorithm>
            
            int main()
            {
                    int arr[31] = {
                        7978558,    9241630,    65706826,   639636154,  1033996244, 
                        1225598536, 1231940272, 1252372402, 2019146042, 1520971906, 
                        1532931792, 1818609302, 1971583702, 2116478830, 883396844, 
                        1942092984, 1274626222, 333950222,  1265547464, 965867746,  
                        1471376532, 398997278,  1414926784, 1831587680, 813761492,  
                        138146428,  337412092,  329155246,  21320082,   1751867558,
                        1155173784
                    };
            
                    std::sort(std::begin(arr), std::end(arr),
                              [](int a, int b) { return a <= b; });
            }
            Код. Отлично крашится на Шланге с libc++.
            Ответить
            • GCC его нормально компилирует и запускает, как с <=, так и с <. Шлангобляди соснули?
              Ответить
              • Не, просто конкретно эта последовательность не складывается в нужном порядке, чтобы что-то стриггерить. В libstdc++ можно получить бесконечный цикл и повисшую программу, если найдёшь нужный порядок.
                Ответить
          • С таким везением лотерейный билет, что ли купил.

            http://coliru.stacked-crooked.com/a/f2a69d8e7a6d94a0
            https://i.imgur.com/i0ZUJim.png
            Почему-то Wandbox крашится при попытке поделиться куском кода, приводящим к сегфолту.
            #include 
            
            int main()
            {
                    int arr[31] = {
                        7978558,    9241630,    65706826,   639636154,  1033996244, 
                        1225598536, 1231940272, 1252372402, 2019146042, 1520971906, 
                        1532931792, 1818609302, 1971583702, 2116478830, 883396844, 
                        1942092984, 1274626222, 333950222,  1265547464, 965867746,  
                        1471376532, 398997278,  1414926784, 1831587680, 813761492,  
                        138146428,  337412092,  329155246,  21320082,   1751867558,
                        1155173784
                    };
            
                    std::sort(std::begin(arr), std::end(arr),
                              [](int a, int b) { return a <= b; });
            }
            Код. Отлично крашится на Шланге с libc++.
            Ответить
            • GCC его нормально компилирует и запускает, как с <=, так и с <. Шлангобляди соснули?
              Ответить
            • Для меня, как для не крестобляди, не понятно, откуда вылазит сегфолт?
              Ответить
  • Лучше перепиши на Си без всего этого крестодерьма.
    Ответить
    • Человека который такое сможет с больше вероятностью вообще нахуй завернут из обычной евролавки с резюлюцией overqualified.
      В"озмешь такого,. он нарисует код от которого у остальных макак мозг полопается и хуй они смогут тянуть с ним вместе. И работа встанет.
      Ответить

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

Я, guest, находясь в здравом уме и твердой памяти, торжественно заявляю:

    А не использовать ли нам bbcode?


    8