На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Правила раздела:
1. Название темы - краткое описание кто/что против кого/чего
2. В первом сообщении - список параметров, по которым идет сравнение.
3. Старайтесь аргументировать свои высказывания. Фразы типа "Венда/Слюникс - ацтой" считаются флудом.
4. Давайте жить дружно и не доводить обсуждение до маразма и личных оскорблений.
Модераторы: Модераторы, Комодераторы
  
> Простая задача
    Архипростая задача - http://codeforces.ru/contest/538/problem/B
    но короткое и красивое решение требует сил.

    Мое решение, правда на D:
    Скрытый текст
    ExpandedWrap disabled
      import std.stdio;
      import std.range;
      import std.string;
      import std.algorithm;
       
      void main() {
        string s = readln.chomp;
        int n = s.reduce!max - '0';
        n.writeln;
        n.iota.map!(i => s.map!(c => c > i + '0' ? "1" : "0").join.find!(c => c != '0')).join(" ").writeln;
      }
      Цитата OpenGL @
      Тоже участвуешь в соревнованиях там? :)
      Это моя первая задача там :)

      Добавлено
      Вот тут нашел вырвиглазное перловое решение. Ничего не понимаю :)
      ExpandedWrap disabled
        $_ = <>;
            $w = $_,
            y/1-9/0-8/,
            push @a, $w - $_
            while - $_;
        print 0 + @a, "$/@a"
        Моё на плюсах. Думаю, при наличии чего-либо а-ля linq можно короче :)
        ExpandedWrap disabled
          #include <iostream>
          #include <algorithm>
          #include <string>
          using namespace std;
           
          int main()
          {
              std::string str;
              cin >> str;
              cout << *std::max_element(str.begin(), str.end()) - '0' << std::endl;
              while(!str.empty())
              {
                  int i = 0;
                  while(i < str.size() && str[i] == '0') ++i;
                  int j = i;
                  while(j < str.size())
                  {
                      if(str[j] == '0') cout << '0';
                      else
                      {
                          cout << '1';
                          --str[j];
                      }
                      ++j;
                  }
                  cout << " ";
                  str = str.substr(i);
              }
          }
          Вот аналог моего дешного решения на плюсах:
          ExpandedWrap disabled
            #include <iostream>
            #include <algorithm>
            #include <string>
            using namespace std;
             
            int main() {
                string str;
                cin >> str;
                char n = *std::max_element(str.begin(), str.end());
                cout << n << endl;
                for(char i = '0'; i < n ; ++i) {
                    auto zero = "";
                    for(int j = 0; j < str.length(); ++j) {
                        if(str[j] > i) {
                            cout << "1";
                            zero = "0";
                        } else {
                            cout << zero;
                        }
                    }
                    cout << " ";
                }
            }


          Добавлено
          Еще слегка упростил:
          ExpandedWrap disabled
            #include <iostream>
            #include <algorithm>
            #include <string>
            using namespace std;
             
            int main() {
                string str;
                cin >> str;
                char n = *std::max_element(str.begin(), str.end());
                cout << n << endl;
                for(char i = '0'; i < n ; ++i) {
                    auto d = "";
                    for(int j = 0; j < str.length(); ++j)
                        cout << (d = str[j] > i ? d = "1" : d[0] == 0 ? "" : "0");
                    cout << " ";
                }
            }
          Сообщение отредактировано: applegame -
            Собственно идея простая, и думается везде вше именно она и реализована
            Пара утверждений:
            1. Любую десятичную цифру можно получить, просуммировав не более 9 раз в соответствующем разряде цифру "1". Суммирование "0" не оказывает влияния на результат.
            2. Хотя цифру можно получить суммируя "1" в младшем разряде, это приводит к увеличению числа слагаемых сверх 9.

            Поэтому получаем алгоритм

            выписываем десятичную запись числа
            заменяем все цифры не являющиеся нулями на "1"
            выводим получившийся результат, как очередное слагаемое
            вычитаем значение слагаемого из числа
            если результат не ноль возвращаемся к началу алгоритма

            в результате получаем не более 9 слагаемых
            о первой цифре заботиться не надо, в десятичной записи она всегда ненулевая, кроме случая, когда число равно нулю
              Цитата applegame @
              Вот тут нашел вырвиглазное перловое решение. Ничего не понимаю

              Автор Перловского исходника - обычный понторез. Дело в том, что Perl - язык достаточно свободного синтаксиса, чем и воспользовался автор, дабы затуманить мозги Цэ++ тру-кодерам :lol: Привожу более удобоваримый вариант на Перле:
              ExpandedWrap disabled
                $_ = <>;              # читаем из STDIN строку в "базовый" скаляр, более наглядно: $_ = <STDIN> ;
                while (-$_) {         # проверяем "минус базовый скаляр" не равер нулю
                  $w = $_;            # в переменную $w копируем значение базового скаляра  
                  y/1-9/0-8/;         # в базовом скаляре транслируем цифры по правилу 9->8, 8->7 ... 1->0
                  push @a, $w - $_;   # в массив @a заносим значение ($w -$_)
                }
                print 0 + @a, "$/@a"  # распечатываем длину массива и его содержимое

              Небольшие разъяснения:

              1) был использован "постфиксный" вариант while
              вместо "while($A==1) { $B=2 }" использовали аналог "$B=2 while $A==1", при этом опустив скобки в проверяемом выражении
              2) вместо группировки наборов операторов в блок "{...}" - применили "операцию запятая"
              3) использовав "стандартный скаляр" - избавились в строчке трансляции "y/1-9/0-8/" указания что именно транслируем

              Вот и вся кухня. Алгоритм виден по комментариям. Обожаю Перл, но осуждаю понторезов :lol:
              Сообщение отредактировано: JoeUser -
                Цитата JoeUser @
                Привожу более удобоваримый вариант на Перле

                :lool:
                  А что не так? :-?
                    Ну я особой разницы между

                    ExpandedWrap disabled
                      $_ = <>;
                          $w = $_,
                          y/1-9/0-8/,
                          push @a, $w - $_
                          while - $_;
                      print 0 + @a, "$/@a"


                    и

                    ExpandedWrap disabled
                      $_ = <>;
                      while (-$_) {
                        $w = $_;
                        y/1-9/0-8/;
                        push @a, $w - $_;
                      }
                      print 0 + @a, "$/@a"


                    Не вижу. В плане понятности.

                    А вот за разъяснения и комментарии спасибо :)
                      Ну ... я хрен его знает чего сказать :-? По мне второй вариант - конфетка в плане "понятности".
                      Щя сек ... поищу на форуме давнишнюю свою тему по поводу Перла ...

                      Добавлено
                      Вот, прочитай тему. Вот тут эталонный туман.

                      Добавлено
                      Я об этом. Под рутом не запускать!!!!
                      ExpandedWrap disabled
                        $??s:;s:s;;$?::s;;=]=>%-{<-|}<&|`{;;y; -/:-@[-`{-};`-{/" -;;s;;$_;see
                        JoeUser, ты ж понимаешь, что кто-нибудь да запустит. Заикаешь если вдруг, будешь знать, из-за чего.
                          Скрытый текст
                          Цитата Qraizer @
                          JoeUser, ты ж понимаешь, что кто-нибудь да запустит. Заикаешь если вдруг, будешь знать, из-за чего.

                          Ну я ж спецом предупредил, вменяемым людям, ИМХО, этого достаточно.
                            Цитата applegame @
                            короткое и красивое решение на D

                            Пфф… =)
                            ExpandedWrap disabled
                              import Data.Char
                               
                              toBinList [] = []
                              toBinList s  = let (hd, tl) = part s in hd : toBinList (dropWhile (== '0') tl)
                               
                              part = unzip . map choose
                               
                              choose '0' = ('0','0')
                              choose  c  = ('1', chr $ ord c - 1)
                               
                              main = do
                                  s <- getLine
                                  let l = toBinList s
                                  print $ length l
                                  putStrLn $ unwords l
                              Приводить код на неведомом ЯП без комментов - моветон! Ящетаю.
                                Цитата JoeUser @
                                Приводить код на неведомом ЯП без комментов - моветон! Ящетаю.

                                Скрытый текст
                                Для applegame'а, на чей пост я отвечал, как и для большинства здесь отписавшихся, он вполне ведом, насколько я знаю. =)
                                  Сиравно - комменты рулят! >:(

                                  Добавлено
                                  Скрытый текст
                                  По поводу языка D - прямо щяз бы убежал и предал бы всех вас :lol: - одна засада, кроме как x32 - "D" ни где толком не работает. Не говоря уж о ARM. Он и интеловскую x64 тенет с багами.
                                    Цитата OpenGL @
                                    Моё на плюсах. Думаю, при наличии чего-либо а-ля linq можно короче :)

                                    Интересный подход. Но, если ввести например число 100, то на экран выдаст 100. Хотя на сколько я понял из задания нужна именно сумма чисел.
                                    А как на счет еще проще задачи? Мне задача из первого поста, навеяла другую, более простую:
                                    Есть строка:
                                    "мама мыла раму"
                                    Необходимо перевернуть задом на перед, чтобы получилось:
                                    "раму мыла мама"

                                    Если использовать вектора и какие нибудь потоки, то задача решается в 4-5 строчек(возможно кто то придумает и того меньше). Это не интересно. Интересно другое, во сколько минимум строчек кода можно оформить эту задачу стандартными средствами языка(С/С++) безо всяких STL контейнеров и Сишных функций типа strtok, strstr, strcmp, strlen ит.п.
                                      Цитата KILLER @
                                      во сколько минимум строчек кода можно оформить эту задачу стандартными средствами языка(С/С++) безо всяких STL контейнеров и Сишных функций типа strtok, strstr, strcmp, strlen ит.п.
                                      :) Очевидно, в одну. Как-то так:
                                      ExpandedWrap disabled
                                        char s[]="маман мыла краму"; // интереса и дебага ради
                                        for(int t=-1,l=0;t>-2;l++)if(s[l]==' '&&t<0)t=l;else if(!s[l]){for(--t,--l;t>=0;t--,l--)s[l]^=s[t],s[t]^=s[l],s[l]^=s[t];t--;}
                                        Это не в одну. Ты и программы так пишешь? Оформи пожалуйста нормально. Я ничего не понял. ';' - означает конец строки, условие - означает - конец строки, цикл - означает конец строки. Не мне тебя учить, надеюсь. Оформи нормально. Цель не написать все в одну строчку, цель - добиться минимального количества кода.
                                          Цитата KILLER @
                                          Оформи пожалуйста нормально.
                                          Не,лучше сдаться.Считайте,что я слил,если хочется. ;)
                                            Цитата Славян @
                                            Не,лучше сдаться.Считайте,что я слил,если хочется. ;)

                                            Почему? Твое решение по сути правильное, но так как ты его оформил - никуда не годится. Выводы на экран или объявления переменных - к алгоритму не имеют никакого отношения. Поэтому оформи все нормально плз.
                                            Сообщение отредактировано: KILLER -
                                              Цитата KILLER @
                                              Поэтому оформи все нормально плз.
                                              :blush: Не обижайтесь, KILLER, но я всё же пасану. Задачка скучная, а потому вся прелесть и могла бы быть коли в одну строку написать. А наводить марафет - выход за эту глупую 1-строчную белиберду - неинтересно. Да вы и сами можете нужных TAB'ов да ENTER'ов с пробелами куда хочется натыкать. :rolleyes:
                                                Цитата Славян @
                                                :blush: Не обижайтесь, KILLER, но я всё же пасану. Задачка скучная, а потому вся прелесть и могла бы быть коли в одну строку написать. А наводить марафет - выход за эту глупую 1-строчную белиберду - неинтересно. Да вы и сами можете нужных TAB'ов да ENTER'ов с пробелами куда хочется натыкать. :rolleyes:

                                                Просто вся фишка в том, чтобы прийти к наименьшему количеству буков в решении этой задачи. То что ты написал в одну строку - несколько строк, потому что так разрешает компилятор - никуда не годится.

                                                Добавлено
                                                Цитата Славян @
                                                а потому вся прелесть и могла бы быть коли в одну строку написать.

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

                                                Добавлено
                                                Хотя с другой стороны, зачем кого то уламывать? Пусть все так и остается. Темболее у меня нет времени кого то уламывать или с кем то спорить. Как хотите так и оформляйте хоть в бинарном коде, хоть в брейнфаке...
                                                  Цитата korvin @
                                                  Цитата applegame @
                                                  короткое и красивое решение на D

                                                  Я такого не писал. :angry:

                                                  Добавлено
                                                  Цитата JoeUser @
                                                  По поводу языка D - прямо щяз бы убежал и предал бы всех вас :lol: - одна засада, кроме как x32 - "D" ни где толком не работает. Не говоря уж о ARM. Он и интеловскую x64 тенет с багами.
                                                  Твои данные устарели. Под линупсом я давно и успешно кодю под x64. Под виндой с линкером MSVC тоже отлично компиляет под x64. C ARM не так хорошо, но таки работает http://wiki.dlang.org/LDC#ARM.

                                                  Добавлено
                                                  Цитата KILLER @
                                                  Просто вся фишка в том, чтобы прийти к наименьшему количеству буков в решении этой задачи. То что ты написал в одну строку - несколько строк, потому что так разрешает компилятор - никуда не годится.
                                                  Так пойдет? Опять на D.
                                                  ExpandedWrap disabled
                                                    import std.stdio;
                                                     
                                                    void main() {
                                                        "мама мыла раму".dup.reverse.writeln;
                                                    }
                                                  :D
                                                  Сообщение отредактировано: applegame -
                                                    Цитата applegame @
                                                    Так пойдет? Опять на D.

                                                    Читер :ph34r:
                                                      На питоне
                                                      ExpandedWrap disabled
                                                        print("мама мыла раму"[::-1])
                                                      компактнее
                                                        Цитата applegame @
                                                        Твои данные устарели. Под линупсом я давно и успешно кодю под x64

                                                        Возможно. Тогда еще вопросик. Какие либы используешь для GUI? Нашел подборочку, интересуют естественно нативные и работающие.

                                                        Добавлено
                                                        Что скажешь по поводу dlangui?
                                                          Цитата applegame @
                                                          Так пойдет? Опять на D.

                                                          Добавлю немножко Перла :lool:
                                                          ExpandedWrap disabled
                                                            map {print "$_ "} reverse split " ", "мама мыла раму";


                                                          Добавлено
                                                          или вот так:
                                                          ExpandedWrap disabled
                                                            print join " ", reverse split " ", "мама мыла раму";
                                                          Сообщение отредактировано: JoeUser -
                                                            Цитата JoeUser @
                                                            Возможно. Тогда еще вопросик. Какие либы используешь для GUI? Нашел подборочку, интересуют естественно нативные и работающие.

                                                            Добавлено Сегодня, 07:28
                                                            Что скажешь по поводу dlangui?
                                                            Я не использую либы для GUI. Я в основном пишу серверы/клиенты (в основном web/rest-серверы и клиенты) и скрипты (вместо bash-скриптов). Но я пробовал пару недель назад любопытства ради DlanGUI и оно завелось под Win7 из коробки (использовал dub для сборки). Остальные я не пробовал. Но судя по датам обновлений большинство еще не заброшены.
                                                            Сообщение отредактировано: applegame -
                                                              Вобщем, я в теме :P, нароешь чего путного по "GUI + D" - маякни плс. Очень понравился язык! Почитал доки бегло - то, что доктор прописал! :lol:
                                                                Цитата JoeUser @
                                                                Вобщем, я в теме :P, нароешь чего путного по "GUI + D" - маякни плс. Очень понравился язык! Почитал доки бегло - то, что доктор прописал! :lol:

                                                                Есть мысль, что он уже умирает.

                                                                А Rust видел? :D
                                                                  Цитата JoeUser @
                                                                  нароешь чего путного по "GUI + D" - маякни плс.
                                                                  Маякнул, для гуи DlangUI работает. И демка с тетрисом заработала и DlangIDE написанная тем же автором на тойже либе тоже заработала. Этого недостаточно?

                                                                  Добавлено
                                                                  Цитата D_KEY @
                                                                  Есть мысль, что он уже умирает.
                                                                  Заблуждаешься. Посмотри на активность коммьюнити, разработчиков библиотек, развития альтернативных компиляторов - LDC, GDC и SDC.
                                                                  Нет, о D можно многое сказать, но только не то что он умирает. Скорее наоборот.
                                                                  Сообщение отредактировано: applegame -
                                                                    Цитата D_KEY @
                                                                    А Rust видел?

                                                                    Слышал, но не читал. Гляну на досуге.
                                                                      Цитата D_KEY @
                                                                      А Rust видел? :D
                                                                      Видел, интересно, но отсутствие серьезного метапрограммирования отбивает охоту.
                                                                        Цитата D_KEY @
                                                                        А Rust видел?

                                                                        Кстати, как там с поддержкой Android & iOS, ну и процов отличных от ia32?
                                                                          Цитата applegame @
                                                                          Нет, о D можно многое сказать, но только не то что он умирает. Скорее наоборот.

                                                                          Хорошо, скажем иначе. Он все никак не может родиться. Уже 14 лет как.

                                                                          Добавлено
                                                                          Цитата applegame @
                                                                          Цитата D_KEY @
                                                                          А Rust видел? :D
                                                                          Видел, интересно, но отсутствие серьезного метапрограммирования отбивает охоту.

                                                                          У них там полноценные макросы вообще-то. Чего тебе еще нужно? Меня, например, отсутствие исключений напрягает больше.
                                                                            Цитата D_KEY @
                                                                            Хорошо, скажем иначе. Он все никак не может родиться. Уже 14 лет как.
                                                                            Не знаю, что по твоему пониманию - родиться. По мне так оно уже взрослое.
                                                                              Цитата D_KEY @
                                                                              Меня, например, отсутствие исключений напрягает больше.

                                                                              Меня тоже, но панику можно перехватывать на границе потоков - для некоторых случаев как замена сгодится.

                                                                              Цитата applegame @
                                                                              "мама мыла раму".dup.reverse.writeln;

                                                                              В условии требовалось получить "раму мыла мама", а не "умар алым амам". :D

                                                                              Вариант на расте:
                                                                              ExpandedWrap disabled
                                                                                println!("{}", "мама мыла раму".split_whitespace().rev().collect::<Vec<_>>().connect(" "));

                                                                              Немного коряво, знаю. Эффективнее было бы через fold, а не collect + connect, но так ещё многословнее. Вроде, connect для итераторов хотят сделать.

                                                                              Ну и оригинальная задача на расте:
                                                                              ExpandedWrap disabled
                                                                                use std::io::BufRead;
                                                                                 
                                                                                fn main() {
                                                                                    let stdin = std::io::stdin();
                                                                                    let str: String = stdin.lock().lines().next().unwrap().ok().unwrap().to_string();
                                                                                    
                                                                                    println!("{}", str.chars().max().unwrap().to_string().parse::<i32>().unwrap());
                                                                                    
                                                                                    let mut num: i32 = str.parse().unwrap();
                                                                                    let summand: i32 = str.chars().map(|c| if c == '0' { '0' } else { '1' }).collect::<String>().parse().unwrap();
                                                                                    
                                                                                    while num > summand {
                                                                                        print!("{} ", summand);
                                                                                        num -= summand;
                                                                                    }
                                                                                    
                                                                                    while num > 0
                                                                                    {
                                                                                        print!("1 ");
                                                                                        num -= 1;
                                                                                    }
                                                                                }
                                                                              Сообщение отредактировано: DarkEld3r -
                                                                                Цитата DarkEld3r @
                                                                                В условии требовалось получить "раму мыла мама", а не "умар алым амам". :D
                                                                                Косяк, да. :)
                                                                                Вот исправлено:
                                                                                http://dpaste.dzfl.pl/637bd988dc88
                                                                                ExpandedWrap disabled
                                                                                  import std.stdio;
                                                                                  import std.string;
                                                                                   
                                                                                  void main() {
                                                                                      "мама мыла раму".split(" ").reverse.join(" ").writeln;
                                                                                  }


                                                                                Добавлено
                                                                                Цитата DarkEld3r @
                                                                                Немного коряво, знаю. Эффективнее было бы через fold, а не collect + connect, но так ещё многословнее. Вроде, connect для итераторов хотят сделать.
                                                                                Ну вот как-то многословно, по сравнению с тем же D, перлом или питоном. А если сделают connect для итераторов (или таки пары итераторов, ака range?), то вот этого collect() в вектор не будет?
                                                                                Сообщение отредактировано: applegame -
                                                                                  Цитата applegame @
                                                                                  Ну вот как-то многословно, по сравнению с тем же D, перлом или питоном. А если сделают connect для итераторов (или таки пары итераторов, ака range?), то вот этого collect() в вектор не будет?

                                                                                  Да, collect пропадёт - он ещё многословно выглядит из-за необходимости указывать в какой контейнер собираем. Ну а без него будет практически как в D.
                                                                                  Ну и нашёл уже стороннюю библиотеку с реализацией connect для итераторов, но решил, что "нечестно" использовать.

                                                                                  В расте итераторы не плюсовые, то есть это не начало/конец, а начало + размер. Наверное, больше на range из D похожи.

                                                                                  Если не в этом примере, а вообще, то немало многословности добавляют все эти unwrap. В такие моменты исключений особенно не хватает - даже если есть очень маленький шанс, что "что-то пойдёт не так" - в апи появляются Option/Result, чтобы дать обработать ошибку. Но имхо, это не всегда так страшно.
                                                                                  Сообщение отредактировано: DarkEld3r -
                                                                                    Если так уж сильно хочется в одну строку...
                                                                                    ExpandedWrap disabled
                                                                                      for (auto s : [](std::deque<std::string>&& d) { std::copy(std::istream_iterator<std::string>(std::istringstream("мама мыла раму") >> std::hex), std::istream_iterator<std::string>(), std::front_inserter(d)); return d; }(std::deque<std::string>())) std::cout << s << ' ';
                                                                                    Мрак.

                                                                                    Добавлено
                                                                                    То же самое, только не в одну строку.
                                                                                    ExpandedWrap disabled
                                                                                      for (auto s : [](std::deque<std::string>&& d)
                                                                                                    {
                                                                                                       std::copy(std::istream_iterator<std::string>(std::istringstream("мама мыла раму") >> std::hex), // ввод фиктивный, чтобы кастануть r-value в l-value ссылку
                                                                                                                 std::istream_iterator<std::string>(),
                                                                                                                 std::front_inserter(d)
                                                                                                                );
                                                                                                       return d;
                                                                                                    }(std::deque<std::string>())
                                                                                          )
                                                                                        std::cout << s << ' ';
                                                                                      Блин, задача проста аки пять копеек, а кракозябров - в лучших традициях буста.
                                                                                        Цитата applegame @
                                                                                        Блин, задача проста аки пять копеек, а кракозябров - в лучших традициях буста.

                                                                                        Не, на бусте будет как-то так(примерно)
                                                                                        ExpandedWrap disabled
                                                                                          boost::copy("мама мыла раму" | boost::adaptors::tokenized(boost::regex("\\w+")) | boost::adaptors::reversed, std::ostream_itertor<std::string>(std::cout, " "));
                                                                                        Сообщение отредактировано: D_KEY -
                                                                                          На бусте неитересно. Эдак я и spirit подключу.
                                                                                            Да я в качестве защиты буста код привел :)
                                                                                              Цитата applegame @
                                                                                              Блин, задача проста аки пять копеек, а кракозябров - в лучших традициях буста.

                                                                                              И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда…

                                                                                              ExpandedWrap disabled
                                                                                                main = putStrLn $ unwords $ reverse $ words "мама мыла раму"
                                                                                                Цитата korvin @
                                                                                                И не говори, во всех адекватных языках выглядит примерно одинаково приемлемо, а плюсы как всегда…
                                                                                                Да ты просто не осилил плюсы! :sarcasm:

                                                                                                Ана жабе кто-нибудь пример приведет? Там по-моему будет еще страшнее, чем в плюсах, или я не прав?
                                                                                                Сообщение отредактировано: applegame -
                                                                                                  Не, korvin, это как всегда захотелось выпендриться. Нормально если
                                                                                                  ExpandedWrap disabled
                                                                                                    std::istringstream       str("мама мыла раму");
                                                                                                    std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>());
                                                                                                     
                                                                                                    for (auto i = buf.rbegin(); i != buf.rend(); ++i)
                                                                                                      std::cout << *i << ' ';


                                                                                                  К тому же это почти C++98, только auto заменить на какой-нибудь std::vector<std::string>::const_reverse_iterator
                                                                                                  Сообщение отредактировано: Qraizer -
                                                                                                    Цитата Qraizer @
                                                                                                    Не, korvin, это как всегда захотелось выпендриться. Нормально если
                                                                                                    ExpandedWrap disabled
                                                                                                      std::istringstream       str("мама мыла раму");
                                                                                                      std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>());
                                                                                                       
                                                                                                      for (auto i = buf.rbegin(); i != buf.rend(); ++i)
                                                                                                        std::cout << *i << ' ';

                                                                                                    Да все равно же вырвиглазно. Самое красявое плюсовое решение привел, ИМХО, D_KEY на бусте.
                                                                                                    Сообщение отредактировано: applegame -
                                                                                                      Вообще вы сравниваете скорее стандартные библиотеки(или встроенные в язык сложные типы), чем сами языки. На бусте примерно так же все выглядит.
                                                                                                      Можем еще скорости посравнивать и посмотреть, победит ли C и насколько.
                                                                                                        Цитата D_KEY @
                                                                                                        Можем еще скорости посравнивать и посмотреть, победит ли C и насколько.
                                                                                                        Ну с регекспами ты точно далеко не уйдешь :)

                                                                                                        Добавлено
                                                                                                        Цитата Qraizer @
                                                                                                        ExpandedWrap disabled
                                                                                                          std::istringstream       str("мама мыла раму");
                                                                                                          std::vector<std::string> buf(std::istream_iterator<std::string>(str), std::istream_iterator<std::string>());
                                                                                                           
                                                                                                          for (auto i = buf.rbegin(); i != buf.rend(); ++i)
                                                                                                            std::cout << *i << ' ';

                                                                                                        Не компиляеццо, и я туплю не могу понять почему. Забыл уже плюсы. Поправьте кто-нибудь - http://ideone.com/ljftIF
                                                                                                          Цитата applegame @
                                                                                                          Цитата D_KEY @
                                                                                                          Можем еще скорости посравнивать и посмотреть, победит ли C и насколько.
                                                                                                          Ну с регекспами ты точно далеко не уйдешь :)

                                                                                                          Наверное. Но я про Си говорил, т.е. что-нить в духе:
                                                                                                          ExpandedWrap disabled
                                                                                                                char str[] = "мама мыла раму";
                                                                                                                char *p = str;
                                                                                                                while (*p) {
                                                                                                                    if (*p == ' ')
                                                                                                                        *p = '\0';
                                                                                                                    ++p;
                                                                                                                }
                                                                                                                --p;
                                                                                                                while (p != str) {
                                                                                                                    if (*p == '\0')
                                                                                                                        printf("%s ", (p + 1));
                                                                                                                    --p;
                                                                                                                }
                                                                                                                printf("%s\n", p);

                                                                                                          Я не проверял, мог ошибиться :)
                                                                                                            Цитата D_KEY @
                                                                                                            Наверное. Но я про Си говорил, т.е. что-нить в духе:
                                                                                                            Ну на таком низком уровне сяшка, полагаю, побьет по скорости всех.
                                                                                                              Цитата applegame @
                                                                                                              Поправьте кто-нибудь - http://ideone.com/ljftIF

                                                                                                              Классическая ошибка
                                                                                                              http://ideone.com/y8CGcR

                                                                                                              Добавлено
                                                                                                              Кстати, это тоже не в пользу плюсов говорит.

                                                                                                              Добавлено
                                                                                                              И лучше так поправить, да
                                                                                                              http://ideone.com/99nicx

                                                                                                              Добавлено
                                                                                                              Заодно сишный вариант(надо же, сразу заработало, подозрительно)
                                                                                                              http://ideone.com/3K1ST6
                                                                                                                Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель?

                                                                                                                Добавлено
                                                                                                                Цитата D_KEY @
                                                                                                                Заодно сишный вариант(надо же, сразу заработало, подозрительно)
                                                                                                                :D если программа заработала с первого раза - жди подвоха :lol:
                                                                                                                Сообщение отредактировано: applegame -
                                                                                                                  Цитата applegame @
                                                                                                                  Частное решение на самом деле. Заменяем пробелы например на точку с запятой - "мама;мыла;раму" и капец, так просто уже не получится. Или там где-то можно указать разделитель?

                                                                                                                  Ты про какой из вариантов?
                                                                                                                    Цитата D_KEY @
                                                                                                                    Ты про какой из вариантов?
                                                                                                                    Про Qraizer'овский.
                                                                                                                      Цитата applegame @
                                                                                                                      Цитата D_KEY @
                                                                                                                      Ты про какой из вариантов?
                                                                                                                      Про Qraizer'овский.

                                                                                                                      Да, вроде там просто так сепаратор не задашь в таком варианте. Но можно через std::getline сделать, например.
                                                                                                                        Цитата applegame @
                                                                                                                        Не компиляеццо, и я туплю не могу понять почему. Забыл уже плюсы.
                                                                                                                        А я и не компилял. :wub: Первый параметр нужно в скобочки взять.
                                                                                                                        ExpandedWrap disabled
                                                                                                                          std::vector<std::string> buf((std::istream_iterator<std::string>(str)), std::istream_iterator<std::string>());
                                                                                                                        Сообщение отредактировано: Qraizer -
                                                                                                                          Ну, как-то так:
                                                                                                                          ExpandedWrap disabled
                                                                                                                            #include "stdafx.h"
                                                                                                                            #include <stdio.h>
                                                                                                                            #include <iostream>
                                                                                                                            #include <vector>
                                                                                                                            #include <algorithm>
                                                                                                                             
                                                                                                                            typedef std::vector<int> Digits;
                                                                                                                            Digits split_to_digits(int input)
                                                                                                                            {
                                                                                                                                std::vector<int> digits;
                                                                                                                                while (0 < input)
                                                                                                                                {
                                                                                                                                    int next = input / 10;
                                                                                                                                    digits.push_back(input - next*10);
                                                                                                                                    input = next;
                                                                                                                                }
                                                                                                                                return digits;
                                                                                                                            }
                                                                                                                             
                                                                                                                            int calc_closest_quasibin(int input)
                                                                                                                            {
                                                                                                                                int result = 0;
                                                                                                                                Digits digits = split_to_digits(input);
                                                                                                                                for(Digits::reverse_iterator it = digits.rbegin(); it != digits.rend(); ++it)
                                                                                                                                {
                                                                                                                                    int D = *it;
                                                                                                                                    result *= 10;
                                                                                                                                    if (0 < D)
                                                                                                                                        ++result;
                                                                                                                                }
                                                                                                                                return result;
                                                                                                                            }
                                                                                                                             
                                                                                                                            void print_int(int sum)
                                                                                                                            {
                                                                                                                                std::cout << sum << " ";
                                                                                                                            }
                                                                                                                             
                                                                                                                            int _tmain(int argc, _TCHAR* argv[])
                                                                                                                            {
                                                                                                                                int X;
                                                                                                                                std::cin >> X;
                                                                                                                                std::vector<int> summands;
                                                                                                                                int B;
                                                                                                                                do
                                                                                                                                {
                                                                                                                                    B = calc_closest_quasibin(X);
                                                                                                                                    X -= B;
                                                                                                                                    summands.push_back(B);
                                                                                                                                } while (0 < X);
                                                                                                                             
                                                                                                                                std::cout << summands.size() << std::endl;
                                                                                                                                std::for_each(summands.begin(), summands.end(), print_int);
                                                                                                                                return 0;
                                                                                                                            }
                                                                                                                            Mr.Delphist
                                                                                                                            Цитата
                                                                                                                            fatal error: stdafx.h: No such file or directory

                                                                                                                            Цитата
                                                                                                                            error: '_TCHAR' has not been declared

                                                                                                                            Цитата
                                                                                                                            undefined reference to `main'
                                                                                                                              Ну и мой вариант на Цэ++, не оригинально ... но как-то так :-?
                                                                                                                              ExpandedWrap disabled
                                                                                                                                #include <iostream>
                                                                                                                                #include <sstream>
                                                                                                                                #include <deque>
                                                                                                                                 
                                                                                                                                using namespace std;
                                                                                                                                 
                                                                                                                                int main() {
                                                                                                                                    string s;
                                                                                                                                    deque<string> deq;
                                                                                                                                    for(stringstream ss("мама мыла раму"); ss>>ws>>s; deq.push_front(s));
                                                                                                                                    for(auto i:deq) cout << i << " ";
                                                                                                                                }
                                                                                                                                Цитата D_KEY @
                                                                                                                                fatal error: stdafx.h: No such file or directory

                                                                                                                                Ну, это дефолтная строчка от Студии, ожидается для precompiled headers - можно снести смело

                                                                                                                                Цитата D_KEY @
                                                                                                                                error: '_TCHAR' has not been declared

                                                                                                                                Цитата D_KEY @
                                                                                                                                undefined reference to `main'


                                                                                                                                А эта парочка - из студийного же шаблона в ожидании простой/юникодной командной строки. Меняем
                                                                                                                                ExpandedWrap disabled
                                                                                                                                  int _tmain(int argc, _TCHAR* argv[])

                                                                                                                                на каноничный
                                                                                                                                ExpandedWrap disabled
                                                                                                                                  int main()


                                                                                                                                Должно заработать. Сорри, особо не заморачивался с кросс-компиляторностью ввиду позднего времени поста.
                                                                                                                                1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                                                                                                                0 пользователей:


                                                                                                                                Рейтинг@Mail.ru
                                                                                                                                [ Script execution time: 0.2071 ]   [ 14 queries used ]   [ Generated: 8.07.26, 04:03 GMT ]