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

    +1

    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
    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, 30 Декабря 2022

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

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

      Программист не обязан знать структуры данных, он не математик
      Ответить
      • Но с другой стороны, зачем тебе человек, который двух нод связать не может?
        Ответить
        • Мне больше всего понравилась доебка "это не связанный список, а какая-то нода"
          Ответить
        • > двух нод связать

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

      uintptr_t же...

      Ну и раз уж запятую и локалки можно абузить...
      ListNode* mergeTwoLists(ListNode* list1, ListNode* list2) {
          bool f;
          ListNode* t;
          return
              list1 && list2 && (
                  t = list2 - (f = (list1->val <= list2->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 <= list2->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://govnokod.ru/26958#comment576829 .
            Ответить
          • кресты смешные, конечно)

            но можно понять логику (чтобы не отвалилось дохя написанного кода_
            Ответить
          • Пиздец конечно.

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

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

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

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

                Вывод: используйте статические анализаторы и глаза когда пишете на сишке
                Ответить
                • > ядродевелопер блядь!!!

                  Ядро уже ничего не спасёт. Линус там уже rustухов запустил.

                  А этот Хуй досихпор комитит:
                  https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/log/?qt=author&q=Herbert+Xu
                  Ответить
                  • Вот кстати в рустне это не скомпилировалось бы*, но к сожаоению полвину ядра придется делать unsafe, и он будет ничем не лучше си


                    *g: rust Result, pattern matching
                    Ответить
                    • > но к сожаоению полвину ядра придется делать unsafe

                      Оно уже и так...
                      https://github.com/torvalds/linux/blob/d0989d01c66fed6a741820a96b8cca6688f183ff/rust/kernel/allocator.rs
                      Ответить
                      • какой багор ))
                        какой багор ))

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


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

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

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

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

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

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

                                Рекомендую!
                                Ответить
                                • Saying that Java is good because it works on all platforms is like saying anal sex is good because it works on all genders
                                  Ответить
                                • >а в языках с ГЦ про память можно не думать

                                  ХА-ХА-ХА!

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

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

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

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




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

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

                                  Остаются си-подобные языки, где король C++. Он бюрократизирован, но среди сиподобных он, имхо, лучший.
                                  Ответить
                                  • Далее мы рассмотрим:
                                    Языки низкого уровня (машинные коды и ассемблер)
                                    Средний уровень ( C, Фортран …. )
                                    Высокий уровень (C++, Java, Python, Ruby, JavaScript ...)

                                    Уровень также характеризует насколько подробно нужно детализировать листинг будущей программы для воплощения реализации. Насколько этот процесс прост для человека.
                                    Ответить
                                    • А на каком уровне лежат FPGA или тупо хардварная логика?
                                      Ответить
                                      • Ты еще микрокод пропустил, не?

                                        Я не знаю, это паста

                                        Я бы точно не стал класть С и джаваскрипт на один уровне
                                        Ответить
                                    • Высокие языки
                                      Языки средние
                                      Языки мелкие ваще жесть
                                      Ответить
                                      • Куплю, если бы фергана
                                        Ответить
                                        • А если бы из Осетии, купил бы?
                                          Ответить
                                          • О, уасæг, уасæг,
                                            Сызгъæрин къоппа!
                                            О, уасæг, уасæг,
                                            Сырхзæлдаг боцъо!

                                            Куыд раджы фестыс,
                                            Куыд хъæрæй зарыс?
                                            Нæ буц лæппуйы
                                            Хуыссын нæ уадзыс!

                                            http://hetagurov.ru/po_kosta/perevody/if/ir_ru/uasaeg.htm
                                            Ответить
                                            • > http://hetagurov.ru
                                              hentaiguro
                                              Ответить
                                              • аниме для больных ублюдков. Факт.
                                                Ответить
                                                • а что не для больных ублюдков? друг интересуется
                                                  Ответить
                                                  • Другу нужно что-то для небольных ублюдков, для больных неублюдков или для небольных неублюдков?
                                                    Ответить
                                            • > куыд

                                              Это же буквально копия слова «quid» из латыни.
                                              Ответить
                                            • > къоппа

                                              А это от того же корня, от которого caput в латыни.
                                              Ответить
                                            • Кстати, на каком языке вот тут подписала свой профиль тян?

                                              https://mobile.twitter.com/tsiplenak/status/1612723413944078336
                                              Ответить
                                      • Какой язык самый высокий? Пролог?
                                        Ответить
                                      • Fike, а я верно понял, что we gebruiken geen artikel voor beroep?

                                        Ну типа ik ben bewaker, werk jij als ober и пр?
                                        Ответить
                                  • хабром завоняло
                                    Ответить
                              • > глобальные переменные и статические переменные в функции лучше не использовать, а все хранить в передаваемой структуре, потому что могут быть проблемы с реентерабельностью и многопоточностью

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

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

                              Поставил плюс знатному боярину.
                              Ответить
    • 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...
      Ответить
      • Мой unsigned тебе в рот не влезет
        Ответить
        • Я бы не советовал никакие свои отростки птице в клюв сувать...
          Ответить
    • Хороший кот. Въебал плюс.
      Ответить
      • как может быть хороший код в 2022-м году с "unsigned long long"?
        Ответить
        • Хороший по меркам ГК. Автор проявил достаточный градус упоротости.

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

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

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

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

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

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

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