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

    +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
    #include <iostream>
    #include <iomanip>
    #include <sstream>
     
    int main()
    {
        std::stringstream ss;
        std::string in = "String with spaces, and embedded \"quotes\" too";
        std::string out;
     
        ss << std::quoted(in);
        std::cout << "read in     [" << in << "]\n"
                  << "stored as   [" << ss.str() << "]\n";
     
        ss >> std::quoted(out);
        std::cout << "written out [" << out << "]\n";
    
    // read in     [String with spaces, and embedded "quotes" too]
    // stored as   ["String with spaces, and embedded \"quotes\" too"]
    // written out [String with spaces, and embedded "quotes" too]
    }

    Блядь! В крестостандарте есть стандартная функция для экранирования кавычек!
    Интересно, когда нам ждать std::mysql_real_escape_string()?

    https://en.cppreference.com/w/cpp/io/manip/quoted

    Запостил: gost, 07 Марта 2020

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

    • А дядя ПИ точно не скрытый крестостандартизатор?
      Ответить
      • Уже поздно, плохо соображаю. Причём тут я?
        Ответить
        • Ой, прости, я перепутал. Это j123123 крестостандартизатор: https://govnokod.ru/26455#comment529866.
          Ответить
          • Ахаха, не зря же он постоянно и весьма изощрённо обсирает С++.

            Кто лучше стандартизатора знает почему кресты какаша, и как их улучшить.
            Ответить
            • Перефразируя классика - "Если тебе нужно крестоговно, ты знаешь, где его взять"

              > Кто лучше стандартизатора знает почему кресты какаша, и как их улучшить.

              На мой взгляд, с крестами все настолько печально, что поможет только эвтаназия
              Ответить
    • показать все, что скрытоvanished
      Ответить
      • Это не мусор, далеко не мусор.

        Если язык использует какую-то нетривиальную логику кодирования ("\" для экранирования, """ и "'" для ограничения и т.п. вплоть до кобенаций "\\" для вставки "\"), должны быть интерфейсы для работы с ней, иначе будет много бойлерплейтных наивных костылей.
        Ответить
        • Так оно никак не поможет языку. Экранирование строковых литералов никто не отменял.

          Хуйня — в неконсистентности. У нас нет строк, нет сети, нет ФС (std::filesystem — это такая же ФС, как и std::string — строка), нет модулей, нет никакой прикладухи (XML/JSON/CSV/…), нет БД, даже сраных бигинтов для математиков нет… Зато есть, блядь, функция для экранирования кавычек! Охуенно, можно её код распечатать и поставить на полочку.
          Ответить
          • > для экранирования кавычек

            Ждём пока сделают real_quote с фиксом для ебанутых кодировок, как в пхп.
            Ответить
          • Вы не видите идеологии за мелкой твёрдой психозой особенностей реализации.
            std::quoted - один шаг в сторону ГОМОИКОННОСТИ.

            Теперь можно чуть проще генерировать код на C++ кодом на C++. И библиотеки для "XML" или "CSV" тут бы не помогли.
            Ответить
        • показать все, что скрытоvanished
          Ответить
          • Реальный пример - ГОМОИКОННОСТЬ. Или кодогенерация. Сишка++ знает, как работать с кодом на сишке++.
            Ответить
    • https://i.imgur.com/KYO5mdP.png
      Wtf?
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
      • А вдруг строка настолько большая, что в памяти не помещается, а стрим её может обработать по частям? Вдруг ты хочешь фильм перевести в base64, чтобы передать его по семибитному каналу?
        Ответить
      • Когда-то давно я считал перегрузочки операторов от Сиплюструпа крестушачьей ересью.

        Но когда узнал про инкременты по размеру массивов (https://govnokod.ru/26472#comment531948), то понял, что перегрузки на стандартных итераторах и контейнерах arr[i], ++, -- вполне в сишном духе.

        А вот зашквар оператора побитового сдвига, не просится им никогда.

        >почему бы просто не сделать std::quote и std::unquote, а не выносить мозг с перегрузкой со стримами?

        Мало того. Это же неочевидное сайд-эффектное мутабельное говнище.
        Ответить
        • > зашквар оператора побитового сдвига
          И к тому же, ещё бесполезная питушня.

          Вот как мне прикажете разделить
          1. ввод из файла и ввод от человека с консоли
          2. вывод в файл для скрипта и красивый вывод для человека
          3. вывод в расширенном формате и краткую сводку
          4. преобразование из текста/в текст для Фомы и преобразование для Ерёмы

          В итоге в лог пишу методом log(stream), в файл - to_file(stream), для человека - for_meat(stream). И где красивая концепция универсальных <<, >> для всего? Или для этого надо изучать паттерны-хуяттерны от банды сообразивших на троих? Почему бы это не встроить сразу по умолчанию, как это вышло с std::cout, std::cerr или console.log, console.warn, console.error?

          Кроме того, зашкварные операторы располагаются вне класса и не имеют доступа к приватным членам. Для их адекватной реализации надо городить костыли. Зачем они добавили функции Бесселя, когда простой человек без степени магистра ввода-вывода не может нормально реализовать то, что идеологически должно было быть удобным и универсальным?
          Ответить
          • Я ради теста просто поменял их местами, и повернул стрелочки в другую строну.
            Так кресты мне немедленно насрали жутких порятнок с ошибками.
            https://ideone.com/s0bqaK
            Ответить
          • Подтверждаю, IO через побитовый сдвиг — это питушня из раздела «смотрите, какую мы крутую фичу добавили!!!11». В этом же разделе, например, лежит богомерзкий vector<bool>.

            Вывод любых более-менее сложных значений через сдвиги превращается в ёбанное дерьмище.
            std::cout << "[" << a << ", " << b << ", " << c << "]" << std::endl;

            Говно!!!!
            То ли дело «Python»:
            print(f'[{a}, {b}, {c}]')
            Ответить
            • > богомерзкий vector<bool>
              Стоп. А что не так с vector<bool>? Классная же штука.

              Это ж фактически аналог java.util.BitSet
              Ответить
              • То, что эта тупая хуйня
                1) Совершенно неявно сливает пирфоманс в угоду памяти;
                2) Не является STL-контейнером, поскольку не удовлетворяет требованиям к таковому.
                См., напр., https://alenacpp.blogspot.com/2005/06/vector.html.
                Ответить
                • >Совершенно неявно сливает пирфоманс в угоду памяти
                  Это не баг, а фича.
                  Можно хранить биты в uint8_t или другом пирфоманс-френдли инте.

                  >Не является STL-контейнером
                  Ну то есть если бы вместо std::vector<bool> сделали растягивающийся std::bitset претензий бы не было?

                  А хотя векторы я не очень люблю. Там же батчем нельзя 8 или 32 бита добавить?
                  Наверное да, std::bitset хватит всем.
                  Ответить
                  • > Можно хранить биты в uint8_t или другом пирфоманс-френдли инте.
                    А можно char'ы в интах хранить. Но это не значит, что нужно.

                    > Ну то есть если бы вместо std::vector<bool> сделали растягивающийся std::bitset претензий бы не было?
                    Разумеется, к какому-нибудь std::dynamic_bitset претензий не было бы.

                    > Там же батчем нельзя 8 или 32 бита добавить?
                    Нельзя. Только flip() для всего контейнера сделать можно, лол.

                    И да, вот старое обсуждание этого вопроса:
                    https://govnokod.ru/25684#comment486004
                    https://ideone.com/4ypkGG
                    Ответить
                    • >Нельзя. Только flip() для всего контейнера сделать можно

                      Тогда это говно сраное.
                      Не такое сраное как перегруженный для интов оператор сдвига.
                      Но там даже метода для количества взведённых битов нет.
                      На такое ни один уважающий себя битоёб не подпишется.
                      Ответить
                      • > для интов

                        Самая жопа в том, что оператор сдвига в стрим перегружен для чаров. И если попытаться вывести какое-нибудь поле с uint8_t, то получается хуйня а не число. Приходится перед выводом кастовать в 16 или 32.
                        Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Насколько я понял дядю ПИ, изначально он предложил хранить не битовые флаги, а отдельные флаги в отдельных интах, а vector<bool> оставить как специализацию царского битсета.

                        Ну а битовые флаги это круто, да.
                        Ответить
              • bitset там и так есть. А вот нормальный вектор булов создать невозможно из-за этих любителей повыёбываться.
                Ответить
                • Да. Я вспомнил что писал в крестах именно bitset.
                  А пакетное добавление булов в vector<bool> есть?
                  Ответить
                  • Нет конечно. Только уебанская попытка натянуть сову на глобус - прокси-класс для "ссылки на бит". Из-за которой любые алгоритмы над вектором булов превращаются в бесполезную тормозную хуйню.
                    Ответить
            • Ну std::format уже как питоний, может быть и f-литералы подвезут.
              Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • XO4Y TPAHCJIuT.
          Ответить
          • и штоб пользователе магли в поиске пичатать на английском а выводилась рускае
            Ответить
          • показать все, что скрытоvanished
            Ответить
            • Решение знатное, такое в духе старой школы.
              Но блять, ДЖАВИСТСКОЕ насквозь. Фуу.
              >    override fun flush() {
              >        writer.flush()
              >    }
              
              >    override fun close() {
              >        writer.close()
              >    }


              Мил человек, наследуй java.io.FilterWriter, например.

              http://hg.openjdk.java.net/jdk8/jdk8/jdk/file/687fd7c7986d/src/share/classes/java/io/FilterWriter.java
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • >развел бойлерплейта
                  Перевёл обратно на «javascript».
                  var dec = new TextDecoder('KOI8-R');
                  var enc = new TextEncoder('ASCII');
                  console.log(dec.decode(enc.encode('WORETSII I KOBENACII').map(x=>(x|128|32)))); 
                  //ВОРЕТСИИ═И═КОБЕНАЦИИ

                  * C битоёбством придётся немного подрочиться или писать скучные условия x>='A' && x<='Z'
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Наименьшая из проблем этого кода.
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • >в эксплорере не работает
                          Спасибо за добрые слова.
                          Полезный сайд-эффект.

                          С помощью небольшого битоёбства я починил регистр и диапазоны.
                          var dec = new TextDecoder('KOI8-R');
                          var enc = new TextEncoder('ASCII');
                          
                          dec.decode(enc.encode('WORECYI I kobENACYI !"№;%:?*()#$%^&*()-=[]{}`|')
                          .map(x=> (x&~0x20^0x40)<=26 ? (0x20^x|0x80) :x ))
                          
                          >ВОРЕЦЫИ И кобЕНАЦЫИ !\"Б└√;%:?*()#$%^&*()-=[]{}ю|


                          26 идиоматичнее было бы записать как ('Z'-'A'+1).
                          Но в js нет царской работы с чарами.
                          Ответить
                    • Кстати, есть где-нибудь нормальные стримы, в которых можно заглядывать в будущее (и, может быть, в прошлое)?

                      В случае с UTF-8 одна питушня может прийти в двух соседних чанках. Самое простое решение - Buffer.concat на 800 гигабайт и конвертирование бинитуха в UTF-8. По-хорошему, надо заглянуть в будущее. Если там есть чанк, то питушить его. Если нет (кончился), конвертировать в квадратик или выбросить питушечение.

                      В случае с парсингом надо заглядывать в будущее и откатываться, если будущее туманно. (Например, LL(2) заглядывает на два лексических питуха в будущее)
                      Ответить
                      • >в которых можно заглядывать в будущее (и, может быть, в прошлое

                        Не нужно.
                        Просто сохраняем N предыдущих значений в массив/переменные.

                        >Например, LL(2) заглядывает на два лексических питуха в будущее
                        Оно просто логически работает с задержкой.
                        Отдаёт результат на N символов позже чтения.
                        А стрим читает последовательно. Никто не мешает хранить небольшой прочитанный, но ещё неразобранный кусок.
                        Ответить
                        • > логически работает с задержкой
                          > хранить небольшой прочитанный
                          Это всё - неинтересные детали реализации. Я хочу стрим, который просто работает.
                          Вроде что-то такое было в сишке, где есть unget для stdin. А где ещё?

                          Ещё хочу хвостатые массивы, у которых по бокам лежит то, что делает их обработку гладкой. Такая питушня более полезна, чем ненужные функции Бесселя в C++.
                          Ответить
                          • LL(2) не заглядывает в будущее.
                            Он может, но по сути
                            2 — это алгоритмическая задержка в 2 лексемы.
                            Ответить
                            • Это детали реализации.

                              С точки зрения текущей распарсенной психозы как настоящего это заглядывание в будущее и прикидывание там вариантов развития событий.
                              Ответить
                              • Никакого будущего быть не может.

                                Заглянул в будущее, а его нет. EOFException.
                                Ответить
                                • Помните классический говнокод для определения завтрашней даты? sleep(24*60*60);
                                  Ответить
                                • Если нет будущего, рекомендую выпилить все инкременты из программы.

                                  Питушня, детали реализации, граничные случаи.
                                  Ответить
                          • Потоковая обработка ёрзающими автоматами должна быть прозрачной:
                            for (x in xs) {
                              if (x == ',' && prev(x) == ' ') {
                                delete(prev(x));
                                continue with x;
                              }
                              if (x == '!' && isAlpha(next(x))) {
                                xs.insert(x, ' ');
                                continue with next(x);
                              }
                            }
                            Ответить
                          • >Ещё хочу хвостатые массивы, у которых по бокам лежит то, что делает их обработку гладкой

                            Господи ты боже мой. И это слова человека, презирающего Царей. Восхваляющего хачкели, итд.

                            Так нет никаких хвостатых массивов, буферов это всё низкоуровневая хуйня. Должен быть просто итератор/ленивый список.
                            Ответить
                            • Да. Посмотрите код в комментарии выше.

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

                              Даже конструкция "continue with" может быть избыточной.
                              Ответить
                              • >Царю пришлось бы добавить проверки на границы массива

                                Не пришлось. В Сишке есть getc.
                                Только анскильные скриптухи пишут руками массивную срань и херят чанки.
                                А посоны читают сколько им нужно из буферизированных стримов.
                                Ответить
                                • Питушня. Как бы он сходил в прошлое и будущее данной итерации без проверок или преломления смысла?
                                  Ответить
                                  • Ещё раз говорю: Нет будущего. И не факт что будет.

                                    Мы храним N прочитанных ранее символов и по ним строим парсер.
                                    Ответить
                                    • Ещё раз говорю: Это детали реализации. И детали реализации.

                                      Детали реализации хранят N прочитанных символов, парсер получает будущее.

                                      То, что парсер относительно объективного настоящего иногда находится в прошлом, чтобы достигать субъективного будущего, никого не волнует, поскольку повышаются выразительность и простота кода.
                                      Ответить
                                      • >[1,2,3,4,5].forEach(x=>console.log(x))
                                        У нас здесь нет никакого next. Единственное что мы можем — хранить prev.

                                        >for (x in xs) {
                                        И здесь нет.
                                        Может кому-то хотелось бы. Но next тут НЕТ. И уж тем более next2(), next3()
                                        Ответить
                                        • В хаскеле в map нет никакого индекса, хотя в жс в map он есть.
                                          Зависит от желания реализовать.

                                          [1,2,3,4,5].forEach((x, i, xs)=>console.log(xs[i+1])) // next
                                          Ответить
                                          • >console.log(xs[i+1])) // next
                                            Царское МассивоПитушение.
                                            А завтра там вместо массива будет список. Ленивый.

                                            > хаскеле в map нет никакого индекса
                                            Хвала богам.
                                            Именно поэтому...
                                            https://govnokod.ru/26469#comment532063
                                            Ответить
                                            • https://github.com/1024--/peetooshnya/blob/master/time-machined-loop.js

                                              Для демон-страции напитушил асинхронную питушню, с помощью которой можно обходить последовательность так:
                                              asyncForEach(sequence, 1, function(x, next, done) {
                                                  next(-1, function(prev) {
                                                    next(1, function(next) {
                                                      console.log('iteration: x=' + x + ' prev=' + prev + ' next=' + next);
                                                      done();
                                                  });
                                                  });
                                                }, function(){
                                                  console.log('end of loop');
                                                });


                                              Разумеется, можно написать для неё интерфейс для async/await или написать синхронную версию для массивов. Очевидно, что эти версии будут выразительнее, а вариант с массивом - проще в реализации и чуть менее спортивный, т.к. у массива в настоящем есть будущее, а у последовательности оно будет сгенерировано позже. А я рассмотрел самый неудобный случай.

                                              Вишенкой на торте будет тот факт, что мне пришлось специально передавать количество элементов из прошлого, которые нужно помнить. Если это число будет больше нужного, в памяти будут храниться лишние элементы, а если меньше - нужные элементы не вовремя забудутся.
                                              Для элементов из будущего таких проблем нет. Их без костылей всегда в памяти ровно столько, сколько нужно!
                                              Ответить
                                              • Имеет право на жизнь. Но оверхедненько из-за асинков.
                                                Был задан вопрос.

                                                >Кстати, есть где-нибудь нормальные стримы, в которых можно заглядывать в будущее (и, может быть, в прошлое)?

                                                Я высказал своё мнение. Что возможно стоит логически сдвинуть алгоритм и смотреть только в прошлое. Которое гарантированно есть.
                                                Чем закладываться на next, который чреват сетевыми ошибками, EOFами, buffer overflow и прочими гадостями.

                                                Возможно я неправ, но мне кажется
                                                >[1,2,3,4,5].forEach((x, i, xs)=>console.log(xs[i+2]))

                                                что возврат в чистеньких функциональных for~each к ручной индексации — это фортранизация.
                                                То есть прямой путь к переполнению буфера и выскакиванию за пределы массива.

                                                С с чем боролись уходя от старых-добрых
                                                for (var i=0;i<len;++i){
                                                На то и напарываемся.
                                                Ответить
                                                • > Чем закладываться на next, который чреват сетевыми ошибками, EOFами, buffer overflow и прочими гадостями.

                                                  И всё же, это детали реализации. Поскольку можно
                                                  > логически сдвинуть алгоритм
                                                  , эта питушня математически эквивалентна. Алгоритму что так, что так, требуется одновременно смотреть на N элементов. И если он не сможет забить буфер под N старых элементов во время итерации по последнему, это всё равно, что не смочь забить под N новых во время итерации по первому.

                                                  Порядок операций определяет математика. Не важно, я беру элементы из прошлого или из будущего, я сначала получаю некоторое количество элементов, затем их анализирую и выдаю какой-то результат. И это будет одинаково, логически ли мы рассматриваем наш элемент и набор прошлых, либо наш элемент или набор будущих. Раньше получить результат не даст математика (причинность нельзя нарушить), позже его получить можно, но это уже кривой алгоритм (если мы в каком-то из вариантов зачем-то будем считывать лишние элементы), а не кривая абстракция потока (хотя, можно создать поток, который будет безусловно хранить лишние, скажем, 5 элементов, и тогда он в некоторых ситуациях будет зависать навечно - например, если это интерактивная программа, и пользователь не может ввести следующие данные без запроса программы, а программа ждёт элементы из будущего, чтобы выдать ответ и задать следующий вопрос; но это питушня, и я предлагаю смотреть в будущее только настолько, насколько этого требует математика). Сетевые ошибки будут так же влиять в обоих подходах.

                                                  Но заглядывание в будущее может оказаться более удобным для нашего алгоритма. А если он выражается проще с такой точки зрения, то может лучше его так и реализовать, чтобы избежать ошибок и т.д. А дальше пусть компилятор его компилирует как надо. У него что там, что там будет чтение в буфер и обработка, когда в буфер начитано достаточно.
                                                  Ответить
                                              • Потому я думаю всё закончится или откатом к простой переменной prev в случае LL(1) единичного lookahead.

                                                >Их без костылей всегда в памяти ровно столько, сколько нужно!

                                                В общем случае для произвольных N, будет переизобретено колесо.
                                                А именно старый-добрый circular buffer c джвумя указателями.

                                                > или написать синхронную версию для массивов
                                                Называется ArrayBlockingQueue
                                                Ответить
                                    • Попробуйте регулярные выражения. Там местами есть хвосты и предсказывание будущего:
                                      /cat\b/.test('cat')         // true
                                      /cat\b/.test('cat ')        // true
                                      /cat\b/.test('cat is here') // true
                                      /cat\b/.test('cats')        // false
                                      
                                      /cat(?= is here)/.exec('cat is here') // ["cat", index: 0, input: "cat is here", groups: undefined]
                                      /cat(?= is here)/.exec('cat') // null
                                      /cat(?! is here)/.exec('cat is here') // null
                                      /cat(?! is here)/.exec('cat') // ["cat", index: 0, input: "cat", groups: undefined]

                                      В итоге код получается красивый и более простой, а деталями реализации заведует конпелятор регулярок.
                                      Ответить
            • импорт йажа.ио.СтрингВритер
              импорт йажа.ио.Вритер
              импорт йажа.нио.БытеБуффер
              импорт йажа.нио.ЦхарБуффер
              импорт йажа.нио.цхарсет.Цхарсет
              импорт котлин.еьпериментал.анд
              /**
              * п■п╟я─я▌ я┌п╣п╠п╣ я█я┌п╬я┌ п╨п╩п╟я│я│. п÷я─п╬я│я┌п╬ п╬п╠п╣я─п╫п╦ п╦п╪ п╩я▌п╠п╬п╧ я─п╟п╧я┌п╣я─, п╦ п©п╦я┬п╦
              **/
              цласс ТранслитВритер(прижате жал вритер:Вритер) : Вритер()  {
                  прижате жал цхарсет = Цхарсет.форНаме(\"КОИ8-Р\")
                  прижате жал енц = цхарсет.невЕнцодер()
                  прижате жал дец = цхарсет.невДецодер()
                  прижате жал петуз:Быте = 0ь7Ф
              
                  ожерриде фун врите(цбуф: ЦхарАрраы, офф: Инт, лен: Инт) {
                      жал бытес = енц.енцоде(ЦхарБуффер.врап(цбуф)).арраы().мап { (ит.анд(петуз)) }.тоБытеАрраы()
                      жал стр = дец.децоде(БытеБуффер.врап(бытес)).тоСтринг()
                      вритер.врите(стр, офф, лен)
                  }
              
                  ожерриде фун флусх() {
                      вритер.флусх()
                  }
              
                  ожерриде фун цлосе() {
                      вритер.цлосе()
                  }
              }
              фун маин() {
                  жал вритер = СтрингВритер()
                  ТранслитВритер(вритер).апплы {
                      аппенд(\"п■п╬п╠я─я▀п╧ п╡п╣я┤п╣я─п╬я┤п╣п╨ п╡ я┘п╟я┌я┐\")
                     //// дОБРЫЙ ВЕ^ЕРО^ЕК В ХАТУ
                      флусх()
                  }
                  принт(вритер.буффер)
              }
              Ответить
          • ЬО4Ы ТПАХЦЙИуТ.
            Ответить
    • #инцлуде <иостреам>
      #инцлуде <иоманип>
      #инцлуде <сстреам>
       
      инт маин()
      {
          стд::стрингстреам сс;
          стд::стринг ин = \"Стринг витх спацес, анд ембеддед \"яуотес\" тоо\";
          стд::стринг оут;
       
          сс << стд::яуотед(ин);
          стд::цоут << \"реад ин     [\" << ин << \"]
      \"
                    << \"сторед ас   [\" << сс.стр() << \"]
      \";
       
          сс >> стд::яуотед(оут);
          стд::цоут << \"вриттен оут [\" << оут << \"]
      \";
      
      // реад ин     [Стринг витх спацес, анд ембеддед \"яуотес\" тоо]
      // сторед ас   [\"Стринг витх спацес, анд ембеддед \"яуотес\" тоо\"]
      // вриттен оут [Стринг витх спацес, анд ембеддед \"яуотес\" тоо]
      }
      Ответить
    • ПХП (5571)
      Ц++ (2478)
      Ц# (1862)
      ЙажаСцрипт (1816)
      Йажа (1433)
      Пасцал (625)
      1Ц (491)
      Пытхон (452)
      СЯЛ (410)
      АцтионСцрипт (292)
      Обйецтиже Ц (202)
      Перл (189)
      басх (171)
      Рубы (137)
      ЖисуалБасиц (133)
      Ответить
    • фунцтион сигССХТоАСН1(сиг, тыпе, селф, цаллбацк) {
        жар аснВритер;
        свитцх (тыпе) {
          цасе 'ссх-дсс':
            иф (сиг.ленгтх > 40)
              ретурн сиг;
            // Цханге баре сигнатуре р анд с жалуес то АСН.1 БЕР жалуес фор ОпенССЛ
            аснВритер = нев Бер.Вритер();
            аснВритер.стартСеяуенце();
            жар р = сиг.слице(0, 20);
            жар с = сиг.слице(20);
            иф (р[0] & 0ь80) {
              жар рНев = Буффер.аллоцУнсафе(21);
              рНев[0] = 0ь00;
              р.цопы(рНев, 1);
              р = рНев;
            } елсе иф (р[0] === 0ь00 && !(р[1] & 0ь80)) {
              р = р.слице(1);
            }
            иф (с[0] & 0ь80) {
              жар сНев = Буффер.аллоцУнсафе(21);
              сНев[0] = 0ь00;
              с.цопы(сНев, 1);
              с = сНев;
            } елсе иф (с[0] === 0ь00 && !(с[1] & 0ь80)) {
              с = с.слице(1);
            }
            аснВритер.вритеБуффер(р, Бер.Интегер);
            аснВритер.вритеБуффер(с, Бер.Интегер);
            аснВритер.ендСеяуенце();
      
      
      арцфоур': макеЦипхерИнфо(8, 16, 0, 0, 1536, труе),
        'арцфоур128': макеЦипхерИнфо(8, 16, 0, 0, 1536, труе),
        'арцфоур256': макеЦипхерИнфо(8, 32, 0, 0, 1536, труе),
        'арцфоур512': макеЦипхерИнфо(8, 64, 0, 0, 1536, труе),
      // ...
        'хмац-мд5': макеХМАЦИнфо(16, 16),
        'хмац-мд5-96': макеХМАЦИнфо(16, 12),
        'хмац-рипемд160': макеХМАЦИнфо(20, 20),
        'хмац-сха1': макеХМАЦИнфо(20, 20),
        'хмац-сха1-96': макеХМАЦИнфо(20, 12),
        'хмац-сха2-256': макеХМАЦИнфо(32, 32),
        'хмац-сха2-256-96': макеХМАЦИнфо(32, 12),
        'хмац-сха2-512': макеХМАЦИнфо(64, 64),
        'хмац-сха2-512-96': макеХМАЦИнфо(64, 12),"
      Ответить
    • Обйецтиже Ц
      - (жоид)инжокеМетход:(НССтринг *)метход
            витхПараметерс:(ид)параметерс
                   суццесс:(жоид (^)(АФХТТПРеяуестОператион *оператион, ид респонсеОбйецт))суццесс
                   фаилуре:(жоид (^)(АФХТТПРеяуестОператион *оператион, НСЕррор *еррор))фаилуре;
      
      Жисуал Басиц
         Пицтуре.Цирцле (Ь + 0.15 * Сиде, Ы + 0.35 * Сиде), 0.08 * Сиде, Бордер
         Пицтуре.Лине (Ь + 0.27 * Сиде, Ы + 0.65 * Сиде)-(Ь + 0.27 * Сиде, Ы + 0.8 * Сиде), Бордер
         Пицтуре.Лине (Ь + 0.73 * Сиде, Ы + 0.65 * Сиде)-(Ь + 0.73 * Сиде, Ы + 0.8 * Сиде), Бордер
         Пицтуре.Цирцле (Ь + 0.5 * Сиде, Ы + 0.35 * Сиде), 0.5 * Сиде, Бордер, 1.35 * Пи, 1.65 * Пи
         Цалл ФлоодФилл(Пицтуре.хдц, Ь + 0.5 * Сиде, Ы + 0.5 * Сиде, Бордер)
      Ответить
    • Хаскелл
      мап_оф_енемы :: [[Инт]] -> [[Инт]]
      мап_оф_енемы лист = (инициар (0) (0) (лист))
      
      инициар :: Инт -> Инт -> [[Инт]] -> [[Инт]]
      инициар а б лист = иф(а == (ленгтх лист)-1) тхен [ранго а 0 лист]
                     елсе [ранго а 0 лист]++[(инициар (а+1) 0 лист)]
      
      ранго :: Инт -> Инт -> [[Инт]] -> [Инт]
      ранго а б лист = иф (б==(ленгтх лист)-1 && (((лист!!а!!0)==(лист!!б!!0)) &&     ((лист!!а!!1)==(лист!!б!!1)) && ((лист!!а!!2)==(лист!!б!!2))))
      
      воркерТхреад :: [Хандлер] -> Цхан Мессаге -> МЖар () -> ИО ()
      воркерТхреад хандлерс цхан финисх = лооп вхере
          лооп = до
              мессаге <- реадЦхан цхан
              цасе мессаге оф
                  СтопМессаге -> путМЖар финисх ()
                  Мессаге жал -> до
                      фолдр (трыХандлер жал) (путСтрЛн \"Унхандлед мессаге\") хандлерс
                      лооп
          трыХандлер жал (Хандлер х) рест = маыбе рест х (цаст жал)
      
      стартВоркер :: [Хандлер] -> ИО Воркер
      стартВоркер хандлерс = до
          цхан <- невЦхан
          финисх <- невЕмптыМЖар
          форкИО (воркерТхреад хандлерс цхан финисх)
          ретурн $ Воркер цхан финисх
      
      сенд :: Тыпеабле м => Воркер -> м -> ИО ()
      сенд (Воркер цхан _) мессаге = до
          вритеЦхан цхан $ Мессаге мессаге
      
      стопВоркер :: Воркер -> ИО ()
      стопВоркер (Воркер цхан финисх) = до
          вритеЦхан цхан $ СтопМессаге
          такеМЖар финисх
      
      
      -- Соме тестс
      
      дата Тест = Тест Боол Стринг дерижинг Тыпеабле
      Ответить
    • Йажа
      
      финал Оптионал<Цустомер> цустомер = Оптионал.офНуллабле(цустомерИд)
          .мап(цустИд -> цустомерСержице.гетБыИд(цустИд)
                  .мап(цуст -> Оптионал.оф(цуст))
                  .орЕлсеТхров(() -> нев НоСуцхЦустомерЕьцептион(цустИд)))
          .орЕлсе(Оптионал.емпты());
      
      пацкаге цлойуре.ланг;
      
      импорт йажа.ио.Сериализабле;
      импорт йажа.утил.*;
      
      публиц абстрацт цласс АПерсистентЖецтор еьтендс АФн имплементс ИПерсистентЖецтор, Итерабле,
                                                                     Лист,
                                                                     РандомАццесс, Цомпарабле,
                                                                     Сериализабле, ИХасхЕя {
      инт _хасх;
      инт _хасхея;
      
      публиц Стринг тоСтринг(){
      	ретурн РТ.принтСтринг(тхис);
      }
      
      публиц ИСея сея(){
      	иф(цоунт() > 0)
      		ретурн нев Сея(тхис, 0);
      	ретурн нулл;
      }
      
      публиц ИСея рсея(){
      	иф(цоунт() > 0)
      		ретурн нев РСея(тхис, цоунт() - 1);
      	ретурн нулл;
      }
      
      статиц боолеан доЕяуалс(ИПерсистентЖецтор ж, Обйецт обй){
          иф(обй инстанцеоф ИПерсистентЖецтор)
              {
              ИПерсистентЖецтор ож = (ИПерсистентЖецтор) обй;
              иф(ож.цоунт() != ж.цоунт())
                  ретурн фалсе;
              фор(инт и = 0;и< ж.цоунт();и++)
                  {
                  иф(!Утил.еяуалс(ж.нтх(и), ож.нтх(и)))
                      ретурн фалсе;
                  }
              ретурн труе;
              }
      	елсе иф(обй инстанцеоф Лист)
              {
      		Цоллецтион ма = (Цоллецтион) обй;
      		иф(ма.сизе() != ж.цоунт() || ма.хасхЦоде() != ж.хасхЦоде())
      			ретурн фалсе;
      		фор(Итератор и1 = ((Лист) ж).итератор(), и2 = ма.итератор();
      		    и1.хасНеьт();)
      			{
      			иф(!Утил.еяуалс(и1.неьт(), и2.неьт()))
      				ретурн фалсе;
      			}
      		ретурн труе;
      		}
      	елсе
              {
      		иф(!(обй инстанцеоф Сеяуентиал))
      			ретурн фалсе;
      		ИСея мс = РТ.сея(обй);
      		фор(инт и = 0; и < ж.цоунт(); и++, мс = мс.неьт())
      			{
      			иф(мс == нулл || !Утил.еяуалс(ж.нтх(и), мс.фирст()))
      				ретурн фалсе;
      			}
      		иф(мс != нулл)
      			ретурн фалсе;
      		}
      
      	ретурн труе;
      
      }
      Ответить
    • #инцлуде <стдио.х>
      #инцлуде <стдлиб.х>
      #инцлуде <стдинт.х>
      
      инт маин(жоид)
      {
        уинт32_т а = 24804541;
        фор(сизе_т и = 0; и < 5; и++)
        {
          фор(сизе_т й = 0; й < 5; й++)
          {
            путцхар( \"01\"[(а >> (и*5 + й)) & 1]);
          }
          путцхар('
      ');
        }
        ретурн ЕЬИТ_СУЦЦЕСС;
      }
      
      СЕТ(п, &путс);
      струцт поинт_т { доубле ь, ы; };
      СЕТ(поинт, (струцт поинт_т){0.0, 1.0});
      СЕТ(анонымоус, (струцт{цхар *с;}){\"хуи\"});
      
      цхар *а_рет (сизе_т лен)
      {
        цхар *рет = маллоц(лен);
        иф (рет == НУЛЛ)
        {
          еьит(ЕНОМЕМ);
        }
        мемсет(рет, 'а', лен);
        ретурн рет;
      }
      Ответить
    • #дефине ФУНЦ(а, ...) тыпеоф( а (*) (__ЖА_АРГС__) )
      
      уинт64_т мул2(уинт64_т а)
      {
        ретурн а*2;
      }
      
      уинт64_т адд2(уинт64_т а)
      {
        ретурн а+2;
      }
      
      уинт64_т цхаинцаллер(уинт64_т а, тыпеоф(уинт64_т (*)(уинт64_т)) *цхаин)
      {
        вхиле(*цхаин != НУЛЛ)
        {
          а = (*цхаин)(а);
          цхаин++;
        }
        ретурн а;
      }
      
      ФУНЦ(уинт64_т, уинт64_т) *цомбине_фн (ФУНЦ(уинт64_т, уинт64_т) а, ФУНЦ(уинт64_т, уинт64_т) б)
      {
        ФУНЦ(уинт64_т, уинт64_т) *фунцхаин = (ФУНЦ(уинт64_т, уинт64_т) *)маллоц(сизеоф( ФУНЦ(уинт64_т, уинт64_т) [3]) );
        иф (фунцхаин == НУЛЛ)
        {
          еьит(ЕНОМЕМ);
        }
        фунцхаин[0] = а;
        фунцхаин[1] = б;
        фунцхаин[2] = НУЛЛ;
        ретурн фунцхаин;
      }
      Ответить

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