1. JavaScript / Говнокод #25131

    0

    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
    // https://dev.to/saigowthamr/how-to-reverse-a-string-in-javascript-3i9c
    
    // In this tutorial, we are going to learn three different ways to reverse a string
    // in JavaScript by using the reverse method, reduce method.
    
    // First way
    
    const str = "hello"
    
    str.split('').reverse().join('')
    
    //"olleh"
    
    
    // We used split method to split the string into an array of individual strings then chain it to reverse method.
    // Second way
    
    const str = "hello"
    
    [...str].reduce((prev,next)=>next+prev)
    
    //"olleh"
    
    // First, we spread the string using spread operator and reverse the string using the reduce method
    // Third way
    
    
    function reverseString(str){
    
      const arr = [...str]
      let reverse= "";
    
      while(arr.length){
         reverse = reverse + arr.pop()
      }
    
      return reverse
    }
    
    // I mostly like the Second way to reverse a string using reduce method.
    
    // Happy coding...

    Это видимо такой вид соревнований, типа как вкрутить лампочку в патрон наиболее упоротым и неочевидным способом. Нахрена это нужно обычному программисту? Может это такой способ ручной обфускации? Тогда понятно

    Запостил: j123123, 29 Ноября 2018

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

    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
    • Ебёна мать!.. Как можно писать на языке без стандартной библиотеки?


      То ли дело «C++»:
      #include <algorithm>
      #include <iostream>
      #include <tuple>
      #include <string>
      
      int main()
      {
          std::string str = "hello";
          for (std::tuple<std::string::iterator, std::string::reverse_iterator> iters
                   = { str.begin(), str.rbegin() };
               std::distance(std::get<0>(iters), std::get<1>(iters).base()) > 0;
               ++std::get<0>(iters), ++std::get<1>(iters)) {
              std::swap(*std::get<0>(iters), *std::get<1>(iters));
          }
          std::cout << str << std::endl;  // olleh
          return EXIT_SUCCESS;
      }

      https://ideone.com/NQUHrN
      Ответить
      • > for (std::tuple<std::string::iterator, std::string::reverse_iterator> iters

        for (std::kudah<std::kokoko::kukareku, std::kokoko::kukarek_kukareku> kokok
        Ответить
        • Ненавижу говноплюсы за эти пидорские говноконструкции с мешаниной из двоеточий и угловых скобок
          Ответить
          • показать все, что скрытоvanished
            Ответить
          • Там же сделали поиск (имени кого-то) каких-то там функций или операторов в глубоких неймспейсах, чтобы без пердолинга работало.

            То есть можно было сделать и какой-нибудь умный поиск классов по типу. Как минимум, можно было бы приблизить к естественной речи.
            Заезжал к нам Иванов Иван Иванович. Был Иван Иванович мужиком крепким. Как-то раз Иваныч напился и колдоныхнул по столу, да так, что искры полетели.
            Достаточно в пределах файла (класса или папки - это я точно не знаю) один раз полностью написать имя KOKOKO::BEKTOP и KOKOKO::COCAYT, а во всех остальных случаях - BEKTOP и COCAYT. Требуется только лишь джвухпроходный компилятор. Чуть менее, чем никто, создаёт свой отдельный BEKTOP, свои COCbIH, COCAYT и COCEPP и использует вместе со стандартными в одном файле. Конфликты, возникающие раз в 100500 проектов решаются явным заданием псевдонима, а в остальных 100499 случаев люди вздохнут свободно. При изменении стандартной библиотеки тоже ничего не произойдёт: для импорта необходимо упомянуть Иваныча с нейм-пейсом минимум один раз.

            Можно уже было "using namespace ..." прокачать так, чтобы, если он был один, эта питушня подставляла имена сначала из текущего нейм-пейса, затем - из нейм-пейса, про который написали using namespace ... Никаких конфликтов, пока в исходниках автор явно не вставит второй нейм-пейс.
            Ответить
            • Ничего не понял ... S" нейм-пейс" это что ? Это типа как ' WORDGLIST в S" Forth" ?
              Ответить
            • Строго говоря, никто не мешает сделать using std::vector; в любом месте — от заголовочного файла до блока конкретной функции. Мои примеры специально написаны так, чтобы в них было как можно больше :: и <>.
              Ответить
              • Лучше, но всё равно какая-то питушня. Чтобы что-то использовать, надо сначала include, потом using. Очевидно, что тут что-то не так.
                Аналогично - со стандартной библиотекой Python/Node. Вроде она есть и уже установлена, но без дебильных импортов ничего не работает.
                Ответить
                • Ну так модулей не подвезли и в ближайшие лет десять в прод не подвезут. Были б модули — можно было бы делать по-человечески, using std::vector без инклудов. Наверное. Хотя что-то мне подсказывает, что Комитет опять ебанётся на отличненько, и мы ещё охуеем от нового синтаксиса…
                  Ответить
            • строго говоря, никто не мешает вызвать std::reverse().
              Ответить
              • Строго говоря, никто не мешает сделать using std::reverse; и вызвать reverse().
                Композиция комментариев!
                Ответить
      • Хорошо что в ассемблере нет никакой стандартной библиотеки
        Ответить
      • показать все, что скрытоvanished
        Ответить
        • Я не 80 level, я только учусь. 80 уровень тут у товарищей снизу, это они AES на шаблонах писали!
          Ответить
      • std::seduce
        Ответить
      • Не страшно юзать std::distance для a>b? Для не RandomAccessIterator это UB. До с++11 это UB.
        Ответить
        • std::string::begin() выдаёт RandomAccessIterator, так шо нама-альна!
          Я пишу на Modern C++ по самому последнему стандарту, мне ваше старьё не нужно!
          Ответить
      • А ещё ты свапаешь последний элемент сам с собой. Вроде безопасно, но неэффективненько.
        Ответить
        • Ну и кто тут "крэйзи"?
          Ответить
        • Вот тут да, но как от этого избавиться на строках нечётного размера — хз. Вставлять в условие проверку iters.first != iters.last — так это ещё непирфоманснее, один swap против проверки на каждом шаге.
          Ответить
          • А нельзя просто заменить distance > 0 на distance > 1?
            Я разобрал код крестобляди! Я идиот, убейте меня кто-нибудь!
            Ответить
            • Устами файки глаголит Истина.
              Почему-то подумал, что тогда сломаются чётные строки, лол.
              Ответить
      • Эти ваши итереторы лишь говно-надстройка над укозателами.

        То ли дело "Си":
        #include <stdio.h>
        #include <string.h>
        
        #define DEF_REVERSE(T) \
        T *reverse_##T(T *a, size_t size) { \
           for (T *l = a, *r = a + size - 1; (long)r - (long)l > sizeof(T); ++l, --r) \
               swap_##T(l, r); \
           return a; \
        }
        
        #define DEF_SWAP(T) T swap_##T(T *a, T *b) {T t = *a; *a = *b; *b = t;}
        
        DEF_SWAP(char)
        DEF_REVERSE(char)
        
        #undef DEF_SWAP
        #undef DEF_REVERSE
        
        int main(void) {
            char s[] = "?rof gnikool er'uoy em ti si ,olleH";
        https://ideone.com/nYSV4y
            puts(reverse_char(s, sizeof(s) - 1));
            return 0;
        }
        Ответить
        • показать все, что скрытоvanished
          Ответить
        • Слишком мало битоёбства и царского анролла.
          #include <stdio.h>
          #include <string.h>
           
          char *reverse(char *str, unsigned int len)
          {
              unsigned int modlen = len % 8;
              unsigned int *sbeg4 = (unsigned int*)str,
                           *send4 = (unsigned int*)(str + len - 4);
              unsigned char *sbeg1 = (unsigned char *)str + (len / 8) * 4,
                            *send1 = (unsigned char *)sbeg1 + modlen - 1;
           
              while (send4 - sbeg4 > 0) {
                  *sbeg4 ^= *send4 << 24 | *send4 << 16 >> 24 << 16 | *send4 >> 16 << 24 >> 16 | *send4 >> 24;
                  *send4 ^= *sbeg4 << 24 | *sbeg4 << 16 >> 24 << 16 | *sbeg4 >> 16 << 24 >> 16 | *sbeg4 >> 24;
                  *sbeg4 ^= *send4 << 24 | *send4 << 16 >> 24 << 16 | *send4 >> 16 << 24 >> 16 | *send4 >> 24;
                  sbeg4++;
                  send4--;
              }
           
              switch (modlen) {
              case 7:
              case 6: *sbeg1 ^= *send1; *send1 ^= *sbeg1; *sbeg1 ^= *send1; ++sbeg1; --send1;
              case 5:
              case 4: *sbeg1 ^= *send1; *send1 ^= *sbeg1; *sbeg1 ^= *send1; ++sbeg1; --send1;
              case 3:
              case 2: *sbeg1 ^= *send1; *send1 ^= *sbeg1; *sbeg1 ^= *send1; ++sbeg1; --send1;
              }
           
              return str;
          }
           
          int main(void) {
              char s[] = "?rof gnikool er'uoy em ti si ,olleH";
              puts(reverse(s, sizeof(s) - 1));
              return 0;
          }

          https://ideone.com/HQUiOo
          Ответить
          • Задание для j123123: сделать версию reverse(), которая бы правильно проходила по целым двух- и восьмибайтным (для x64) чанкам; при этом если указатель str не выровнен по границе в 4 (или 8 для x64) байта — первые его байты должны быть свапнуты обычным методом, а свап многобайтных кусков должен идти только по выровненным адресам.
            Ответить
          • Что самое смешное, эти царские оптимизации таки работают (x3.3 прироста скорости по сравнению с наивным вореантом): http://quick-bench.com/qaWU4sfloMK8ZNLHEzFeG7lBTLk
            Ответить
          • https://gcc.gnu.org/onlinedocs/gcc/Other-Builtins.html

            Built-in Function: uint16_t __builtin_bswap16 (uint16_t x)

            Returns x with the order of the bytes reversed; for example, 0xaabb becomes 0xbbaa. Byte here always means exactly 8 bits.

            Built-in Function: uint32_t __builtin_bswap32 (uint32_t x)

            Similar to __builtin_bswap16, except the argument and return types are 32 bit.

            Built-in Function: uint64_t __builtin_bswap64 (uint64_t x)

            Similar to __builtin_bswap32, except the argument and return types are 64 bit.
            Ответить
    • reverse = foldl (flip (:)) []
      Ответить
    • npm install string-reverse
      
      var sr = require('string-reverse')
      sr.reverse(str);
      Ответить
      • https://www.reddit.com/r/ProgrammerHumor/comments/6s0wov/heaviest_objects_in_the_universe/
        Ответить
      • бгг, а есть ли язык программирования, где б надо было через какой-нибудь пакетный менеджер доустанавливать себе циклы for и while, а если без стандартной библиотеки то там только goto и метки?
        Ответить
        • Ассемблер:
          ; example of simplified Windows programming using complex macro features
          
          include 'win32ax.inc' ; you can simply switch between win32ax, win32wx, win64ax and win64wx here
          
          .code
          
            start:
          
          	invoke	MessageBox,HWND_DESKTOP,"May I introduce myself?",invoke GetCommandLine,MB_YESNO
          
          	.if eax = IDYES
          		invoke	MessageBox,HWND_DESKTOP,"Hi! I'm the example program!","Hello!",MB_OK
          	.endif
          
          	invoke	ExitProcess,0
          
          .end start
          Ответить
        • Common Lisp?

          Там циклы — библиотечные конструкции поверх BLOCK, RETURN-FROM, TAGBODY, GO. Только их устанавливать не надо, они уже в стандарте есть. Зато новые можно установить через ql:quickload.
          Ответить
      • https://i.redd.it/5jqmtq3o51121.jpg
        Ответить
    • показать все, что скрытоvanished
      Ответить
    • А как надо-то?
      Ответить
      • |. 'Hello'

        или
        'Hello'[::-1]
        или
        : CXCHG ( c-addr1 c-addr2 -- )  2DUP C@ SWAP C@ ROT C! SWAP C! ;
        : REVERSE  ( c-addr u -- c-addr u )
           2DUP 1- CHARS + SWAP 
           2/ 0 ?DO
                2DUP CXCHG
                1 CHARS - SWAP CHAR+ SWAP
           LOOP
           2DROP
        ;
        
        S" ?rof gnikool er'uoy em ti si ,olleH" 2DUP REVERSE TYPE
        Ответить
        • > |.

          Фи, это же целых джва символа. То ли дело «APL»
                ⌽ 'Hello'
          
          olleH
          Ответить
        • : CXCHG ( c-addr1 c-addr2 -- )  2DUP C@ SWAP C@ ROT C! SWAP C! ;
          : REVERSE  ( c-addr u -- c-addr u )
             2DUP 1- CHARS + SWAP 
             2/ 0 ?DO
                  2DUP CXCHG
                  1 CHARS - SWAP CHAR+ SWAP
             LOOP
             2DROP
          ;
          
          :NONAME  BEGIN REFILL WHILE SOURCE REVERSE  SOURCE EVALUATE  REPEAT ; EXECUTE
          
          EPYT ESREVER PUD2 "Hello, is it me you're looking for? "S
          https://ideone.com/xiw5XXКукареку!
          Ответить
          • показать все, что скрытоvanished
            Ответить
          • Чем ответит LISP? (а в каких ещё языках есть ГОМОИКОНЫ?)
            Ответить
          • Эх, у REVERSE коменнтарий со стековой нотацией забыл поправить, сперва хотел возвращать саму строку, но потом передумал, оно ничего не возвращает, должно быть ( c-addr u -- ) в обоих программах.
            Ответить
            • Какие ещё есть страшные непонятные языки? Буду ими вас пугать.
              Ответить
              • Malbolge
                Ответить
              • показать все, что скрытоvanished
                Ответить
              • Будеш писать програмы вчесть бормондяше?
                Ответить
              • РЕФАЛ (уже где-то обсуждали и, кажется, он тебе понравился больше, чем Снобол).

                RIGAL:
                Programming  language  RIGAL  as  a  compiler  writing  tool
                
                                          M. I. AUGUSTON
                          Computing Center of the Latvia State University
                                226250,  Riga, Rainis boulevard 29,
                                           Latvia, USSR
                
                     Abstract. A new programming language for compiler writing  is
                     described briefly in this paper. The main data structures are
                     atoms, lists and trees. The control structures are based on a
                     advanced  pattern  matching.  All  phases  of   compilation,
                     including parsing, optimization and code generation,  can  be
                     programmed in this language in short and readable form.


                Elan (Informatics Department, University of Nijmegen).

                TeX, METAFONT.
                Ответить
              • FORTRAN

                Куча программ для решения уравнений механики деформируемого твёрдого тела (методом граничных элементов) на Фортране, даже с номерами строк:
                http://www.boundary-element-method.com/helmholtz/manual/bemhelm.htm

                Это не музей. Тут все программы из XXI века. Треть программ написана в 2015 году.
                Ответить
                • C Carry out an LU factorisation and solve the system
                  C  Check for special case that 'a' is diagonal
                  C   Check to see if 'a' is diagonal
                         A_DIAGONAL=.TRUE.
                         DO 700 I=1,N
                           DO 710 J=1,N
                             IF(I.NE.J) THEN
                               IF (ABS(A(I,J)).GT.EPS*ANORM) THEN 
                                 A_DIAGONAL=.FALSE.
                               END IF
                             END IF
                  710      CONTINUE
                  700    CONTINUE
                  Ответить
              • Если хочется необычного, то тебе лучше всего по нику подойдёт Coq.
                Из занятного, но малопопулярного, есть ещё Prolog и ATS*.

                * Недавно кто-то со своеобразным чувством юмора постил в r/ats фотки крыс.
                Ответить
                • Я люблю крыс, из них суп вкусный, да и жареные тоже норм.
                  Ответить
              • https://ru.wikipedia.org/wiki/Lisaac

                Оригинальный сайт куд-куд-куда-то исчез. К счастью, сохранились пакеты для Debian и Ubuntu, в том числе и с исходниками. Например, mmnt.ru нашёл такую ссылку:
                ftp://ftp.uni-klu.ac.at/linux/ubuntu/pool/universe/l/lisaac/lisaac_0.39~rc1.orig.tar.gz
                Ответить
                • Пример:
                  Section Header
                    
                    + name        := TEST_GCD;
                    
                    - author      :="Boutet Jerome ([email protected])";
                    
                    - comment     := "Find the great common divisor between 2 values";
                    
                  Section Inherit
                    
                    - parent_object:OBJECT := OBJECT;
                  
                  Section Private
                    
                    - gcd (value_1,value_2:INTEGER) :INTEGER <-
                    // Great Common Divisor of `value_1' and `value_2'.
                    ( + value,result:INTEGER;
                      ? { value_1 > 0};
                      ? { value_2 > 0};
                      result := value_1;
                      value := value_2;
                      {result = value}.until_do {
                        (result > value).if {
                          result := result - value;
                        } else {
                          value := value - result;
                        };
                      };
                      result
                    );
                  	 
                  Section Public
                  
                    - main <-
                    ( + v1,v2:INTEGER;
                      "Enter the first number: ".print;
                      IO.read_integer;
                      v1 := IO.last_integer;
                      "\nEnter the second number: ".print;
                      IO.read_integer;
                      v2 := IO.last_integer;
                      "\nThe Great Common Divisor is: ".print;
                      gcd (v1,v2).print;
                      '\n'.print;
                    );
                  Ответить
                  • А примерно так выглядят сишные исходники самого кокококонпелятора:
                    if (((*(li__ZDXG)).li__TXWG ==  0)) {
                            li__VEXG=li__JLEH( 2);
                            (*(li__ZDXG)).li__L2VG=li__VEXG;
                            (*(li__ZDXG)).li__TXWG= 2;
                            (*(li__ZDXG)).li__J5OE= 0;
                          } else /* FALSE */ {
                            li__2EXG=(__li__K)((*(li__ZDXG)).li__TXWG <<  1);
                            li__VEXG=((void **)(*(li__ZDXG)).li__L2VG);
                            li__QTTH=(*(li__ZDXG)).li__TXWG;
                            li__UUTH=li__CUY(((__li__CB )li__VEXG),((__li__JJG )(__li__K)(li__QTTH * ((__li__K )(sizeof(void *))))),((__li__JJG )(__li__K)(li__2EXG * ((__li__K )(sizeof(void *))))));
                            li__VEXG=((void **)li__UUTH);
                            li__0UTH=(__li__K)(li__2EXG -  1);
                            li__0LRI=li__QTTH;
                            while ((li__0LRI <= li__0UTH)) {
                              li__VEXG[li__0LRI]=NULL;
                              li__0LRI=(__li__K)(li__0LRI +  1);
                            };
                            (*(li__ZDXG)).li__L2VG=li__VEXG;
                            (*(li__ZDXG)).li__TXWG=li__2EXG;
                            (*(li__ZDXG)).li__J5OE=(__li__K)((*(li__ZDXG)).li__J5OE +  1);
                          };
                        };
                        ((void **)(*(li__ZDXG)).li__L2VG)[(*(li__ZDXG)).li__J5OE]=li__1NVE;
                        li__MTG=(__li__K)(li__MTG +  1);
                      };
                    Ответить
                    • P.S. Если я правильно понял, там используется раскрутка кокококонпелятора. В архиве есть исходники lisaac на lisaac, а это уже скокококонпелированная в Си версия (bootstrap), чтобы можно было перекококонпелировать под любую платформу.
                      Ответить
                    • показать все, что скрытоvanished
                      Ответить
                  • Фу-фу-фу! Закопайте этот Онально-Ориентированный язык обратно!
                    Такое чувство что создатели языков соревнуются кто придумает наиболее непохожий на другие уёбищный синтаксис для одних и тех же коньструкций.
                    Ответить
              • Вот ещё интересный ресурс:
                http://concatenative.org/wiki/view/Factor/Examples
                Ответить
                • А вот это уже иньтересно. Я смотрел как-то примеры на Joy, Cat, Factor, Опух, особенно мне понравился Joy. Но из примеров было видно только что это стековые язычки, насколько они расширяемые не понятно. А учить мне лень. Они все хай-левел, типиздированные, бизапасные... Буэээ
                  Ответить
              • SPARK.

                https://en.wikipedia.org/wiki/SPARK_(programming_language)
                Ответить
          • показать все, что скрытоvanished
            Ответить
            • Да, все последняя строка интреплетируется за дом наперде, и все последующие будут интреплетироваться также.
              Ответить
    • «Python» победил:
      str = "hello"[::-1]   # olleh
      Ответить
      • показать все, что скрытоПобеда моего питона над твоим хрупким телом.
        Ответить
      • Вообще-то "J".
        Ответить
        • Проблемы синхронизации. Когда я писал комментарий о победившем коммунизме «Питоне», читера-«Джея» ещё не было!
          Ответить
        • Победил тот язык, в котором есть str.reverse() или reverse(str) или str:reverse() или reverse str или str >> reverse но никак не говно, где разворот -- &(&(#3 str

          P.S. или победил тот, у кого ( ╯°□°)╯(str) -- специальный оператор разворота.
          Ответить
          • Не обижай «J»! В нём есть «|.».
            http://govnokod.ru/25131#comment442965
            Ответить
          • Почему это говно - 1с-не сделают пересахаренным? Пусть абсолютно все типы станут обЪектами, даже методы.

            Процедура.Выполнить()
            Ответить
            • Тогда можно будет писать:
              Процедура.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить.Выполнить
              .Выполнить()
              больше строк → больше денек → айфон и золотой толчок с распознавателем ануса
              Ответить
    • показать все, что скрыто
      * 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 *
      Ответить

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