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

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
ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        bool f;
        ListNode* t;
        return (ListNode*)
            ( 
                (!list1 * (unsigned long long)list2) + 
                (!list2 * (unsigned long long)list1) +
                ((!!list1 && !!list2 && 
                    (
                        ((f = (list1 -> val <= list2 -> val)) && (t = list1, list1->next = mergeTwoLists(list1 -> next, list2)))||
                        ((!f) && (t = list2, list2->next = mergeTwoLists(list1, list2->next)))
                    )
                ) * (unsigned long long)t)
            ); 
    }

2022. Хабр. Итоги.

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

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

  • Вот такие люди могут сидеть с вами в одном опенспейсе!
    Ответить
  • Блядь, сначала подумал это lisp. ((( Какой багор )))
    Ответить
    • Мне ещё восклицательные знаки понравились, как в jsfuck. А ещё нагромождение -> и <= в одной строке.
      Ответить
  • Мерзкие собеседователи заставляют человека написать связанный список! Из головы!
    Совсем охуели!

    Программист не обязан знать структуры данных, он не математик
    Ответить
  • Блин, я походу ещё слишком трезвая чтобы это распарсить...
    Ответить
  • > unsigned long long

    uintptr_t же...

    Ну и раз уж запятую и локалки можно абузить...
    ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        bool f;
        ListNode* t;
        return
            list1 && list2 && (
                t = list2 - (f = (list1->val val)) * (list2 - list1),
                t->next = mergeTwoLists(list1 - (list1 - list1->next) * f, list2 - (list2 - list2->next) * !f))
            ) || (t = (list1 - (!list1) * (list1 - list2))), t;
    }
    Ответить
  • ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        return list1 +
            (list1 - list1) * (list1 && (!list2 || (list1->val val) && (list1->next = mergeTwoLists(list1->next, list2)))) +
            (list2 - list1) * (list2 && (!list1 || (list1->val > list2->val) && (list2->next = mergeTwoLists(list1, list2->next))));
    }
    Во! Хабролалки как всегда соснули.
    Ответить
    • А ноль разве можно кастить в указатель в C++? Вроде бы nullptr не обязан быть нулем?
      Ответить
      • Не обязан, но ноль можно кастить в указатель для получения пустого указателя.

        З.Ы. Всё, там больше нету явных нуллов.
        Ответить
        • а, то есть это такой костыль-спешл-кейс для обратной совместимости с сишкой?
          Ответить
      • Не обязан; литеральный ноль (и только его!) — можно.
        void *govnoa = 0;  // OK; govno == nullptr
        void *govnob = (1 - 1);  // UB
        Ответить
        • кресты смешные, конечно)

          но можно понять логику (чтобы не отвалилось дохя написанного кода_
          Ответить
          • Ну это же для обратной совместимости. Когда пилили си, было очевидно, что адреса "ноль" не бывает. а потом случился бугор
            https://lwn.net/Articles/342558/
            Ответить
            • ps: вот тут смешно, конечно
              https://lwn.net/Articles/342330/

              Долбоёб (ядродевелопер блядь!!!!) разыменовал хуиту перед тем, как проверил ее нанул
              Мало того, что проверку теперь можно выкинуть, так еще и убэ

              Разыменовка нуля в общем случсае приведет к обращению к несуществующей пмамяти и будет oops, и всё пизданеца (плохо, стыдно, но ок)

              Но питузик может замапить нулевую страничку и зставить ядро сделать чоугодно. Dus, эксплоит.

              Вывод: используйте статические анализаторы и глаза когда пишете на сишке
              Ответить
                • Вот кстати в рустне это не скомпилировалось бы*, но к сожаоению полвину ядра придется делать unsafe, и он будет ничем не лучше си


                  *g: rust Result, pattern matching
                  Ответить
                    • какой багор ))
                      какой багор ))

                      а какой смысл в рустне если она unsafe? Ну то есть у ней семантика почище конечно, но это же просто отключает все проваерки гнахцуй
                      Ответить
                      • unsafe fn dealloc(&self, ptr: *mut u8, _layout: Layout) {
                                unsafe {
                                    bindings::kfree(ptr as *const core::ffi::c_void);
                                }
                            }


                        блядь ну и хуйня. реално напомнило как питух внутри XMLя для декларативной разметни бизнес-логику императивно написал

                        лучше бы и дальше на сишке писали.
                        Ответить
                        • Я недавно открыл для себя удивительный мир сишки: оказывается, там есть всё, что нужно, а то, чего не нужно, того и нет.

                          Например, можно с помощью static делать приватные функции и глобальные переменные на уровне единицы компиляции, а наследование нахуй не нужно, от него одни проблемы.

                          Таким образом, кресты отсасывают у сишки со своими блядоклассами, которые в силу возможностей сишки там просто не нужны, да ещё и ведут к более структурированному коду.
                          Ответить
                          • Лолечку покусал Царь. Срочно отобрать массивы и ввести 5 MB скриптушни интрацеребрально.
                            Ответить
                            • Нужно прнимать лекарество "завершенные коровьи какашки" (это дословный перевод с английского)
                              например:

                              * в вашей сишке надо внучрую пиродлица с памятью а в языках с ГЦ про память можно не думать
                              * в сишке надо портироваться под любую платформу, а в ЯВУ один раз написал и везде работает
                              * JIT в современных языках сделает код даже быстрее чем тот, что вы напишете на сишке вручную
                              * сишка устарела и в современных проектах не используется
                              * нет смысла знать сишку в 2022, работадателю в основном сейсас нужны другие языки

                              "Завершенные коровьи какашки" лучше всего делают провизоры, никогда в жизни сишку не видевшие, но читавшие про нее на сайте "ответы@mail.ru".

                              Рекомендую!
                              Ответить
                              • >а в языках с ГЦ про память можно не думать

                                ХА-ХА-ХА!

                                > а в ЯВУ один раз написал и везде работает
                                Write once — debug everywhere.

                                Какая жирнота )))
                                Ответить
                          • – Вы на сишке пишете?
                            – Нет, только показываю
                            – Красивое
                            Ответить
                          • глобальные переменные и статические переменные в функции лучше не использовать, а все хранить в передаваемой структуре, потому что могут быть проблемы с реентерабельностью и многопоточностью (но если тебе пофиг на нее то и пусть)

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

                            В плюсах можно делать невиртуальные классы без потомков и получать удобный RAII и вызов десктрутора, и это будет хорошо, а вот полиморфизм на динамическом диспатче да особенно наследование реализации это и правда опасная дорожка.
                            Ответить
                              • C++ действительно сделан через жопу, но лучше его нет.




                                Все языки, которые мы сейчас имеем делятся на три вида:
                                Функциональщина
                                Скриптовые
                                C/C++/C#/Java etc

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

                                Остаются си-подобные языки, где король C++. Он бюрократизирован, но среди сиподобных он, имхо, лучший.
                                Ответить
                            • > глобальные переменные и статические переменные в функции лучше не использовать, а все хранить в передаваемой структуре, потому что могут быть проблемы с реентерабельностью и многопоточностью

                              Так он даже тут прав.
                              Сишнику-униксоиду не особо нужны питушарские потоки.
                              Нужно эсспараллелить? Он форкнет и в разных процессах пощитает.

                              Соответственно проблемы от глобалкок и статиков внутри функции снимаются.
                              Ответить
                          • > Я недавно открыл для себя удивительный мир сишки: оказывается, там есть всё, что нужно, а то, чего не нужно, того и нет.

                            Поставил плюс знатному боярину.
                            Ответить
  • ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
        return list1 + (list2 - list1) * (list2 && (
            (!list1 || (list1->val > list2->val)) && (list2->next = mergeTwoLists(list1, list2->next)) ||
            (list1->next = mergeTwoLists(list1->next, list2)) && 0
        ));
    }
    Ответить
    • Блин, закосячила скобочки, сегфолтится 🙁

      Вот так надо:
      ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
          return list1 + (list2 - list1) * (list2 && (!list1 ||
              (list1->val > list2->val) && (list2->next = mergeTwoLists(list1, list2->next)) ||
              (list1->next = mergeTwoLists(list1->next, list2)) && 0));
      }
      Ответить
            • Да

              и только толпы стерторов бегают по говнокоду и дают друг другу на клык
              Ответить
              • Я думаю, это пётор скряпкер нагнетает активность, чтобы больше денег получать с рекламы
                Ответить
                • За вату у нас играли Дефекейт (но его он, он занят передачей данных о своих сотрудниках в военкомат) и Стертор (но он приходит раз в год, как рождественская какашка)
                  Ответить
                    • А как на гк?

                      У меня в реале почти все знакомые боль-мень ватные, но конечно с налётом культурности. Типа война это ужасно, людей жалко, то-се, но наши геополитические интересы, нельзя же допустить, чтобы нато, итд
                      Ответить
                  • А как же Броманд, тоскующий по уволившимся нашим поцанам?
                    Или Чернильный Анус, который знает, что лавров, что сирия и очень переживает за дамбасс?
                    Или Инхо, подгорающий от слова «хуйло» и клей-мящий русофобов?
                    Ответить
                    • Вопрос. Он весь тоскует, или только отдельными частями тела?
                      Ответить
                • > тупая вата

                  Вата -- это престижно и экологично. Не то что эта ваша сраная синтетика.
                  Ответить
    • броманд напиши на расте связанный список чтобы без лишнего RC, проверки говна в рантайме а-ля RefCell и без ансейфа
      Ответить
  • Сначала зомбируемого просят представить себя ListNode*, потом говорят, что он unsigned long long...
    Ответить
      • Я бы не советовал никакие свои отростки птице в клюв сувать...
        Ответить
    • как может быть хороший код в 2022-м году с "unsigned long long"?
      Ответить
      • Хороший по меркам ГК. Автор проявил достаточный градус упоротости.

        Вон бормандоняша выше сделала как надо.
        Ответить
  • Крейсер "Адмирал Горшков" (ночных)
    Ответить
    • Здесь вулн замедленного действия.

      Когда пройдёт достаточно времени, то

      > unsigned long long
      > unsigned long long
      > unsigned long long

      Превратится в

      > unsigned long long long
      > unsigned long long long
      > unsigned long long

      И произойдёт страшная ошибка...
      Ответить

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

Семь раз отмерь — один отрежь, guest!

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


    8