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

    −11

    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
    std::string reverseWords(const std::string &input) {   
        std::list<char> result{};
        
        auto insertIt = result.end();
        for (auto i = input.size() ; i > 0; --i) {
            const char c = input[i - 1];
            if (c != ' ') {
                insertIt = result.insert(insertIt, c);
            } else {
                result.push_back(c);
                insertIt = result.end();
            }
        }
    
        return std::string(result.begin(), result.end());
    }

    Реверснуть слова в строке за один проход цикла
    https://www.linux.org.ru/forum/development/13379833

    Специальную олимпиаду оглашаю открытой!

    Запостил: Elvenfighter, 26 Апреля 2017

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

    • >std::list<char> result
      Ну и что что через весь город тащиться? Зато картоха на 50 копеек дешевле! Ну и что, что гнилая вся, варенье сделаем.
      Ответить
      • показать все, что скрытоВот ты додик
        Ответить
      • А рандомный доступ и не требуется.
        Ответить
        • ... конечно есть подозрение что у deque с кучностью будет лучше. Или какой там контейнер предлагает (semi-)continious storage и O(1) вставку?
          Ответить
          • ... или даже vector + reserve(input.size());
            Ответить
            • Ебать ты даунито, только с третьего раза догадался про vector.
              Про рандомный доступ тоже не догадался - начнёшь ты по своей говностроке итерироваться и на каждый символ у тебя будет кеш мис ещё и засрёшь его.
              Ответить
              • Кеш-хуеш. Ты видишь, там вставка в середину?
                Ответить
                • Твоя вставка в середину поможет тебе только глубже заглатывать у стандартного метода в два реверса.
                  Ответить
                  • >Ну так я потому и взял в кавычки, не? И тем не менее O(n) отличают от O(Xn), потому что для одного и того же n первое примерно в X раз лучше второго.
                    Блядь, что за пидорасы там сидят. Пиздец, говно, дали вам обозначение - O(f(n)) - класс функций с четким определением, нет, блядь, прилепим сверху O(2n) чтобы самим потом путаться. Спорят, блядь, два прохода это O(2n) или O(n), сука, говноеды.
                    Ответить
                    • >Отличают O(n) и k*O(n), конечно - 1 вычисление O(n) и k вычислений O(n).
                      Охуенно, просто, блядь, охуенно, O(kn) нотационных залуп этому господину.
                      Ответить
                      • Тсарь, ты?
                        Ответить
                      • показать все, что скрытоОк, а как правильно?
                        Ответить
                        • >>Отличают O(n) и k*O(n), конечно - 1 вычисление O(n) и k вычислений O(n).
                          > Охуенно, просто, блядь, охуенно, O(kn) нотационных залуп этому господину.

                          Тут ещё надо спросить, о чём говорил автор.
                          Он за k O(f(n)) = O(k f(n)) и выступает против предыдущего оратора?
                          Он за математический смысл О, но не понял, что предыдущий оратор тоже за математический смысл?
                          Как мне кажется, русский язык позволяет и то, и другое.
                          Ответить
                    • показать все, что скрытоДа пиздец, понабрали школьников по объявлениям. Регулярно кто-нибудь сравнивает О(N/2) с О(N) или еще какое говно. И эти питухи еще пиздят, что математика программистам не нужна. Окропил дебилов струей мочи.
                      Ответить
                      • показать все, что скрытомой алгоритм O(2) а твой O(3), стало быть мой быстрее
                        Ответить
                      • показать все, что скрытоN/2 с N ещё ладно
                        Бывает сравнивают (N-1)*N с N*N 😂
                        Ответить
                      • > Да пиздец, понабрали школьников по объявлениям. Регулярно кто-нибудь сравнивает О(N/2) с О(N) или еще какое говно. И эти питухи еще пиздят, что математика программистам не нужна. Окропил дебилов струей мочи.

                        Ололо как пригорело.
                        А что, у нас алгоритмы только поведением на бесконечных данных характеризуются?
                        И что, нет разницы, если программа считает один час или один день?
                        Ответить
                        • Новосельцев, не желаете заглянуть ко мне?
                          Вегето-сосудистая дистония (от сидения за ЭВМ), сколиозик не беспокоят?
                          Ответить
                        • показать все, что скрытоТы тоже не знаешь, что такое о большое? Смысл не в константе, а в том, что O(N) и O(N/2) - это в точности одно и то же множество функций. А константу нынче вообще нет смысла считать на бумажке, потому что компилятору и процессору бумажка - не указ.
                          Ответить
                          • показать все, что скрыто))да конечно же он этого не знает. Он вообще о Big O Notation узнал пять минут назад благодаря тебе
                            Ответить
                            • Не стоит судить о других по себе, бароп.
                              Ответить
                          • Я знаю, что такое о большое, знаю про существование оптимизаций.
                            Хорошая оптимизация может и на константу, и на асимптотику повлиять, нет никаких математических запретов на то, чтобы, скажем, с пьяну написанный квадратичный минимум в массиве оптимизировать до O(N) или до O(1), если известно, что массив отсортирован. С этой точки зрения на бумажке даже асимптотические оценки иногда бессмысленны.
                            Ответить
                            • показать все, что скрытоЯ ничего не понял, извени.
                              Ответить
                              • Советую погуглить: "алгоритмы", "трудоёмкость", "асимптотическая оценка", "компилятор", "оптимизация".
                                Ответить
                                • Ты сейчас пытаешься все вывернуть задом наперед, типа это не ты не знаешь о символику, а я? Нет, этот фокус у тебя не пройдет.
                                  Ответить
                                  • Я знаю О большое, это можно по моим комментариям понять.
                                    И разъясняю незнающим, что это асимптотическая оценка, которая работает корректно только при стремлении к некоторому значению (в случае теории алгоритмов - к бесконечности).
                                    Ответить
                                • О, макака подключила плюсомёт)))
                                  Ответить
                                  • Запустил бинарные ракеты в макаку.
                                    Ответить
                                    • Яке прикре самогубство!
                                      Ответить
                                    • А ведь плюсов-минусов больше в треде не было.
                                      Бинарные ракеты уничтожили макаку.
                                      Ответить
    • reverseWords = reverse . words
      Какого цикла?
      Ответить
    • (defun reverse-words (str)
        (let ((n (length str)) lst)
          (loop for i = 0 then (1+ j)
                as  j = (position #\Space str :start i)
                if (< i (or j n))
                do (push (subseq str i j) lst)
                while j)
          (format nil "~{~a~^ ~}" lst)))
      Ответить
    • in-place ну плюсцах, один проход цикла
      void reverse_words(std::string& str) {
          size_t word_start = 0;
          for (size_t i = 0, n = str.size(); i < n; i++) {
              if (std::isspace(str[i])) {
                  std::reverse(str.begin() + word_start, str.begin() + i);
                  word_start = i + 1;
              }
          }
          std::reverse(str.begin() + word_start, str.end());
          std::reverse(str.begin(), str.end());
      }
      http://ideone.com/5ssX2W
      Ответить
      • Теперь понятно почему яндекс почта глючит. Я тебя просил слова развернуть, нахер ты мне "\r\n" на "\n\r" поменял?
        Ответить
        • показать все, что скрытоРоман отвечает за поддержку символа новой строки в Яндекс Почте?
          Ответить
        • И в начало строки переставил, походу.
          Ответить
        • не грози яндекс почте, поедая фондю в женеве
          Ответить
        • > Теперь понятно почему яндекс почта глючит

          Класс! Расскажешь?

          > нахер ты мне "\r\n" на "\n\r" поменял?

          Я тебя слова просил передать, нахер ты мне команды для печатной машинки суёшь?

          Если заменить хитроумный std::isspace(str[i]) на незамысловатый str[i] != ' ', то \r с \n местами меняться не будут, но этот функционал (а также расширенная поддержка пунктуации) доступен только в платной версии.
          Ответить
    • > return std::string(result.begin(), result.end());

      это второй цикл :(
      но с одним я тоже не умею
      Ответить

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