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

    +3

    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
    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
    // A sample standard C++20 program that prints
    // the first N Pythagorean triples.
    #include <iostream>
    #include <optional>
    #include <ranges>   // New header!
     
    using namespace std;
     
    // maybe_view defines a view over zero or one
    // objects.
    template<Semiregular T>
    struct maybe_view : view_interface<maybe_view<T>> {
      maybe_view() = default;
      maybe_view(T t) : data_(std::move(t)) {
      }
      T const *begin() const noexcept {
        return data_ ? &*data_ : nullptr;
      }
      T const *end() const noexcept {
        return data_ ? &*data_ + 1 : nullptr;
      }
    private:
      optional<T> data_{};
    };
     
    // "for_each" creates a new view by applying a
    // transformation to each element in an input
    // range, and flattening the resulting range of
    // ranges.
    // (This uses one syntax for constrained lambdas
    // in C++20.)
    inline constexpr auto for_each =
      []<Range R,
         Iterator I = iterator_t<R>,
         IndirectUnaryInvocable<I> Fun>(R&& r, Fun fun)
            requires Range<indirect_result_t<Fun, I>> {
          return std::forward<R>(r)
            | view::transform(std::move(fun))
            | view::join;
      };
     
    // "yield_if" takes a bool and a value and
    // returns a view of zero or one elements.
    inline constexpr auto yield_if =
      []<Semiregular T>(bool b, T x) {
        return b ? maybe_view{std::move(x)}
                 : maybe_view<T>{};
      };
     
    int main() {
      // Define an infinite range of all the
      // Pythagorean triples:
      using view::iota;
      auto triples =
        for_each(iota(1), [](int z) {
          return for_each(iota(1, z+1), [=](int x) {
            return for_each(iota(x, z+1), [=](int y) {
              return yield_if(x*x + y*y == z*z,
                make_tuple(x, y, z));
            });
          });
        });
     
        // Display the first 10 triples
        for(auto triple : triples | view::take(10)) {
          cout << '('
               << get<0>(triple) << ','
               << get<1>(triple) << ','
               << get<2>(triple) << ')' << '\n';
      }
    }

    «C++20»: ещё больше модерна! Ещё больше шаблонов! Ещё больше ебанутых конструкций! Ещё больше блядского цирка!
    s: http://aras-p.info/blog/2018/12/28/Modern-C-Lamentations/

    Запостил: gost, 30 Декабря 2018

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

    • Самый главный плюс современного «C++»: программиста, который будет на этом писать хоть сколько-нибудь рабочие программы, уж точно не уволят.
      Ответить
      • Особенно умиляет «std::iota()». Как же нам назвать функцию, которая заполняет диапазон увеличивающимися значениями? «fill_increasing»? «generate_increasing»? Подумать ещё минут пять и придумать что-нибудь простое и понятное? Нет, блядь, так тупые плебеи могут хоть что-то понять! Непорядок!
        Ответить
        • В каком-нибудь APL оно случаем не йота?
          Ответить
          • Именно так:
            The function is named after the integer function ⍳ from the programming language APL.
            Ответить
            • Чтобы программировать на "C++" нужно знать "APL". Поняли! Учите, суки, "APL"!!!
              Ответить
      • > программиста, который будет на этом писать хоть сколько-нибудь рабочие программы, уж точно не уволят.

        А зачем на этом вообще писать, если на этом так сложно писать хоть сколько-нибудь рабочие программы? Может набрейнфак сразу тогда?
        Ответить
        • > А зачем на этом вообще писать
          Чтобы не уволили же!
          Ответить
          • Ну так давайте тогда на брейнфаке писать же. Там тоже писать сложно, но зато синтаксис проще, стандарт не занимает овердохрена страниц, и вообще!
            Ответить
            • «Brainfuck» и «C++» — по-разному сложные языки. Первый сложен ограниченностью выразительных средств, а второй — их избытком. Поэтому если программы на первом кажутся непосвящённым каким-то баловством (ну а чем ещё все эти «++++++++++++++++----------------» могут быть?), то вот программа на «Modern C++» тянет как минимум на докторскую диссертацию!

              А ещё выбор языка надо как-то обосновывать начальству, и если в случае «C++» можно наплести про скорость, современность, надёжность и вообще миллионы мух, то обосновать «Brainfuck» будет проблематично. А если начальства нет — так и увольнять некому, надо на нормальном языке писать.
              Ответить
              • > Поэтому если программы на первом кажутся непосвящённым каким-то баловством (ну а чем ещё все эти «++++++++++++++++----------------» могут быть?), то вот программа на «Modern C++» тянет как минимум на докторскую диссертацию!

                > А ещё выбор языка надо как-то обосновывать начальству, и если в случае «C++» можно наплести про скорость, современность, надёжность и вообще миллионы мух, то обосновать «Brainfuck» будет проблематично. А если начальства нет — так и увольнять некому, надо на нормальном языке писать.

                Ну да, это как сравнивать больного олигофренией в степени имбецильности с какими-нибудь поехавшим психом, считающим что его рептилоиды с планеты Нибиру похитили и вживили ему чип в анус. У первого нет вообще никаких шансов кого-либо в чем-либо убедить т.к. он полный дебил, а второй может создать псевдорелигиозную секту с ящериками и Иисусами, в которую наберет таких же ебанутых психов.

                В общем от брейнфака (от имбецилов) вреда явно меньше, чем от modern C++ (реально поехавших ебанавтов, агитирущих других людей тоже этот в этот пиздец уверовать)
                Ответить
                • > рептилоиды с планеты Нибиру
                  Какая глупость, всем давно уже известно что рептилоиды не из нашей солнечной системы.
                  Ответить
            • Брейнфак можно ещё упростить, убрать "+" или "-", а если зациклить память, то ещё и "<" или ">". Можно ещё сделать ввод/вывод через память (это где-то уже обсуждалось) и убрать "," и ".". Ещё больше ебли моска.
              Ответить
              • А как без + и - числа менять?
                Ответить
                • Я имею ввиду одну из них.
                  Ответить
                  • А как отрицнуть число имея только одну из операций?
                    Ответить
                    • Что значит "отрицнуть"? Ну если у тебя uint8_t и ты можешь только прибавлять единичку, то чтобы отнять единичку, надо прибавить единичку 255 раз
                      Ответить
                      • А как отсчитать 255 раз?
                        Ответить
                        • Меня нагнал рукав мантии Амаяка Акопяна, выполняющего трюк по телепортации своей спермы в пёзды Ваших матушек...

                          На листах одной старой книжки было написано, что-то про "выполнить логический сдвиг...". Там ещё высохший комар лежал между страниц.
                          Ответить
                          • Пока ты трепал уши верблюдам, я шёл-шёл-шёл... Мы проделали огромный путь и теперь находимся в опочивальне матушки Bormand-а.
                            Ответить
                        • наанроллить
                          Ответить
                    • А все, я затупил. [>+<+] как раз отрицнет. Тогда все ок.
                      Ответить
        • Писать их легко, а вот читать...
          Ответить
    • Ничего не понимаю. Переведи на "Python".
      Ответить
      • import itertools
        def triples():
            for z in itertools.count(start=1):
                for x in range(1, z + 1):
                    for y in range(x, z + 1):
                        if (x**2 + y**2 == z**2):
                            yield (x, y, z)
        
        for triple in itertools.islice(triples(), 10):
            print(triple)
        Ответить
        • Какой лаконичный язык!
          Ответить
        • mapM_ print $ take 10 [(x, y, z) | z <- [1..], x <- [1..z+1], y <- [x..z+1], x^2 + y^2 == z^2]
          Ответить
          • Силы сторона темная поглотила тебя
            Ответить
          • Собственно, авторы вышеприведённого крестового кода, похоже, вдохновлялись подобными божественными Хаскеллевскими конструкциями. Но «C++», поглотив крутую фичу другого языка, как всегда выдал вербозное, максимально запутанное говно с максимально неочевидным использованием спецсимволов.
            Ответить
        • >itertools.islice(triples(), 10):
          Это такой тонкий range?
          Ответить
          • Это слайс для богатых для генераторов. «take», короче говоря.
            Ответить
    • Ясно. Тебя не возьмут дрочиться с этим в гуголе.
      Ответить
    • На самом деле код - параша ебучая для утырков, которые дрочатся с конструкциями, а не решают бизнес-проблемы.
      Ответить
    • maybe_yes, maybe_no, maybe_sex, i don't know!
      Ответить
    • Смотрите, что нашёл:
      http://php.net/manual/ru/book.ds.php

      Такими темпами в "PHP" скоро будет аналог "STL" и на нём можно будет писать, почти как на "C++".
      Ответить
      • Хочу поправить, си плас плас будет корректнее.
        Ответить
        • Один раз - не си плас плас.
          Ответить
          • Хоть си-плюс-плюс,
            Хоть си-плас-плас,
            Всё равно
            You shall not pass.
            Ответить
    • * g o a t s e x * g o a t s e x * g o a t s e x *  
       g                                               g  
       o /     \             \            /    \       o  
       a|       |             \          |      |      a  
       t|       `.             |         |       :     t  
       s`        |             |        \|       |     s  
       e \       | /       /  \\\   --__ \\       :    e  
       x  \      \/   _--~~          ~--__| \     |    x  
       *   \      \_-~                    ~-_\    |    *  
       g    \_     \        _.--------.______\|   |    g  
       o      \     \______// _ ___ _ (_(__>  \   |    o  
       a       \   .  C ___)  ______ (_(____>  |  /    a  
       t       /\ |   C ____)/      \ (_____>  |_/     t  
       s      / /\|   C_____)       |  (___>   /  \    s  
       e     |   (   _C_____)\______/  // _/ /     \   e  
       x     |    \  |__   \\_________// (__/       |  x  
       *    | \    \____)   `----   --'             |  *  
       g    |  \_          ___\       /_          _/ | g  
       o   |              /    |     |  \            | o  
       a   |             |    /       \  \           | a  
       t   |          / /    |         |  \           |t  
       s   |         / /      \__/\___/    |          |s  
       e  |         / /        |    |       |         |e  
       x  |          |         |    |       |         |x  
       * g o a t s e x * g o a t s e x * g o a t s e x *
      Ответить
    • * g o a t s e x * g o a t s e x * g o a t s e x *  
       g                                               g  
       o /     \             \            /    \       o  
       a|       |             \          |      |      a  
       t|       `.             |         |       :     t  
       s`        |             |        \|       |     s  
       e \       | /       /  \\\   --__ \\       :    e  
       x  \      \/   _--~~          ~--__| \     |    x  
       *   \      \_-~                    ~-_\    |    *  
       g    \_     \        _.--------.______\|   |    g  
       o      \     \______// _ ___ _ (_(__>  \   |    o  
       a       \   .  C ___)  ______ (_(____>  |  /    a  
       t       /\ |   C ____)/      \ (_____>  |_/     t  
       s      / /\|   C_____)       |  (___>   /  \    s  
       e     |   (   _C_____)\______/  // _/ /     \   e  
       x     |    \  |__   \\_________// (__/       |  x  
       *    | \    \____)   `----   --'             |  *  
       g    |  \_          ___\       /_          _/ | g  
       o   |              /    |     |  \            | o  
       a   |             |    /       \  \           | a  
       t   |          / /    |         |  \           |t  
       s   |         / /      \__/\___/    |          |s  
       e  |         / /        |    |       |         |e  
       x  |          |         |    |       |         |x  
       * g o a t s e x * g o a t s e x * g o a t s e x *
      Ответить
    • * g o a t s e x * g o a t s e x * g o a t s e x *  
       g                                               g  
       o /     \             \            /    \       o  
       a|       |             \          |      |      a  
       t|       `.             |         |       :     t  
       s`        |             |        \|       |     s  
       e \       | /       /  \\\   --__ \\       :    e  
       x  \      \/   _--~~          ~--__| \     |    x  
       *   \      \_-~                    ~-_\    |    *  
       g    \_     \        _.--------.______\|   |    g  
       o      \     \______// _ ___ _ (_(__>  \   |    o  
       a       \   .  C ___)  ______ (_(____>  |  /    a  
       t       /\ |   C ____)/      \ (_____>  |_/     t  
       s      / /\|   C_____)       |  (___>   /  \    s  
       e     |   (   _C_____)\______/  // _/ /     \   e  
       x     |    \  |__   \\_________// (__/       |  x  
       *    | \    \____)   `----   --'             |  *  
       g    |  \_          ___\       /_          _/ | g  
       o   |              /    |     |  \            | o  
       a   |             |    /       \  \           | a  
       t   |          / /    |         |  \           |t  
       s   |         / /      \__/\___/    |          |s  
       e  |         / /        |    |       |         |e  
       x  |          |         |    |       |         |x  
       * g o a t s e x * g o a t s e x * g o a t s e x *
      Ответить

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